Empyrion galactic survival как изменить язык

Translated into Russian. Contribute to Grayzer/Empyrion development by creating an account on GitHub.

Руссификация игры Empyrion — Galactic Survival

Порядок установки:

  1. Просто поместите папку Content с заменой в:
    …SteamsteamappscommonEmpyrion — Galactic Survival
  2. В игре: OPTIONS —> Misc —> Language

Для использования перевода сценариев в сохраненной игре:

Если вы хотите использовать перевод cценария в своей старой сохраненной игре — вам потребуется дополнительно скопировать переведенные файлы PDA(csv, yaml, cs) сценария, который используется в вашем сохранении, в папку с используемым сохранением.
как пример:
…SteamSteamAppscommonEmpyrion — Galactic SurvivalSavesGamesИмя сохраненияPDA

При начале новой игры — дополнительных действий не требуется!

Перевод является обновляемым.
Перевод включает в себя перевод Сценариев, включенных в игру по умолчанию.

Перевод осуществляется только для официального релиза игры. Эксперементальные версии переводиться не будут, т.к. в них очень часто все меняется и далеко не всегда правильно.

Вы можете использовать этот перевод как угодно, если это не будет нарушать права разработчиков игры.

Index: GameAPI

Localizting content[]

Accomplish[]

The basic concept of localization is to provide strings of text, in the users language.
The game already supports several languages ‘natively’, so opening your mod up for being localized is potentially also opening it up for a broader audience.
Furthermore, it allows you to ‘outsource’ finding spelling mistakes and/or improving formulations.
It also allows the users of the mod, to customize messages, if they for whatever reason wants to, although this isn’t the goal.

Pre-requisites[]

This is optional, but if you don’t, you will need to tweak the provided code to support this.

Dictionary<int, Int64> entityToSteam = new Dictionary<int, Int64>();

It is recommended to add to this list, as soon as a new client connects.

(You can for instance opt to chain a Event_Player_Connected into Event_Player_Info, where you add to the ‘entityToSteam’ dictionary)

entityToSteam.Add(int.Parse(ply.entityId.ToString()), Int64.Parse(ply.steamId.ToString()));

Once supported, you could also add to the ‘locauser’ dictionary from here. (assuming that will be the implementation of providing that information)

Optionally a function, ‘getSource’, returning the absolute path to a file, relative to the mod.

Global variables[]

Locauser[]

As of A8.1, the API _DOES NOT_ support getting the local language of the client. Assumingly, this will eventually be provided through the Event_Player_Info.
You need a global Dictionary

Dictionary<Int64, string> locauser = new Dictionary<long, string>();

This will eventually contain a list of the relationsship between a steamid and a language. (Once supported by the API)

You will additionally need to keep another dictionary, relating entityID’s to steamID’s.

LocalizationIndex[]

Object containing the information of supported languages (index populated from provided file)

Object[] localizationindex;

Localization[]

Dictionary used to keep the extracted information from the file.

Dictionary<String, Object[]> Localization = new Dictionary<string, object[]>();

File[]

In the example, the file is called ‘Localization.csv’, but any file, and any extension should be fine.

The essence is that the file contains the following format:

First line[]

The first line of the file must contain

KEY

At the very least.

You can additionally supply 0-inf languages after this. The text specified for the language, must match what we know from the player (What was used to populate ‘locauser’. More documentation will follow on this, once the game implements it.

For instance:

KEY,English,Deutsch

If you want to support the languages ‘English’ and ‘Deutsch’

Subsequentiel lines[]

After the first line, each line must start with an UNIQUE! key.

This key isused to later refer to the entry.

For instance:

KickLowRep,"You were kicked, as your reputation got too low."

Here, the key ‘KickLowRep’ would resolve to ‘You were kicked, as your reputation got too low.’, for English users.

No other languages were supported for this string, but could easily be done so, by specifying additional commas after, matching the index set in the first line.

(For instance, if first line was ‘KEY,English,Deutsch’, you could do the following)

KickLowRep,"You were kicked, as your reputation got too low.","Du wurdest getreten, als dein Ruf zu niedrig wurde."

(Sorry for google translate)

NOTE![]

You do not have to encase each sentence in «», but you MUST do so, if the translation contains a comma (,)

(As shown in the translation above, both languages had a comma in the string, and hence, the translation had to be encased in quotes)

An example not needing quotes:

Expires,Expires,verfallen

The file (for just these two entries) would look like:

KEY,English,Deutsch
KickLowRep,"You were kicked, as your reputation got too low.","Du wurdest getreten, als dein Ruf zu niedrig wurde."
Expires,Expires,verfallen

Code[]

There’s three functions needed to make this work:

-Loading

-Get

-Helper for get

Load files[]

In order to populate the localization, you must reference to a file.

This file MUST be in the format specified above.

This function should be called at

public void Game_Start(ModGameAPI dediAPI)

But can be called at any point. It just needs to exist, before you try to refer to the localization, if you want any viable returns.

public void loadLocalization()
        {
           //If already loaded, reset currently loaded.
           localizationindex = null;
           if (Localization != null)
           {
               Localization.Clear();
           } 
            //Open file
            using (var input = File.OpenText(getSource("Localization.csv"))) //Note that you must createa 'getSource' function, or specify an absolute path to the file.
            {
                string s = "";
                s = input.ReadToEnd();
                s = s.Replace("""", ""); //To be compatible with official loca, if they use "", it means a " inline. Remove it entirely, to not mess with any code, where it is used
                string[] st = s.Split('n'); //Split into segments, for each newline
                int line = 0;
                string pat = @",(?=(?:[^""]*""[^""]*"")*[^""]*$)"; //Split by commas, not encased in quotes. (Original regex: ,(?=(?:[^"]*"[^"]*")*[^"]*$) )
                foreach (string ss in st)
                {
                    if (ss==null||ss == "n" || ss == "" || ss == " ")
                    { //If the line is 'bad', do nothing
                    }
                    else
                    { 
                        string[] mv = Regex.Split(ss, pat);
                        Object[] topush = null;
                        if (mv != null && mv.Length > 0)
                        {
                            int sc = 0;
                            int finallength = mv.Length; //Determine the length of THIS object (to be efficient), depending on how much data was availible.
                            if (line > 0)
                            {
                                if (mv.Length < localizationindex.Length)
                                {
                                    finallength = localizationindex.Length;
                                }
                                topush = new object[finallength - 1]; //Push the object to the main localization array
                            }
                            if (line == 0)
                            {
                                localizationindex = new object[mv.Length]; //If we're doing the index
                            }
                            string thisindex = ""; 
                            foreach (var f in mv)
                            { 
                                if (f == null || f == "n" || f == "" || f == " ")
                                { //Again, check for bad data
                                }
                                else
                                {
                                    string off = f.TrimEnd();  //Remove bad endings (newlines for instance)
                                    if (line == 0)
                                    { 
                                        localizationindex[sc] = off; //Set the data for the index.
                                    }
                                    else
                                    { //If we aren't looking at the first line, do:
                                        if (sc == 0)
                                        {
                                            thisindex = off;
                                        }
                                        else
                                        {
                                            if (topush != null)
                                            {
                                                string of = off;
                                               if (of.Length > 0) //make sure there's an index
                                               {
                                                if (of.IndexOf(""") == 0)
                                                {
                                                    of=of.Remove(0, 1); //Remove quotes from start, if they exist
                                                }
                                               }
                                               if (of.Length > 0) //make sure there's an index
                                               {
                                                if (of.IndexOf(""") == of.Length-1)
                                                {
                                                    of=of.Remove(of.Length-1, 1); //Remove quotes from end, if they exist
                                                }
                                               }
                                                topush[sc - 1] = of;  //edit the temporary object (Add this entry)
                                            }
                                        }
                                    }
                                    sc++;
                                }
                            }
                            if (topush != null)
                            {
                                Localization.Add(thisindex, topush); //If the push Object was good, add it as a viable Localization (Push KEY + each lang into the dictionary)
                                if (Localizationstd.ContainsKey(thisindex))
                                {
                                    //In case we have a poorly formatted string, that doesn't respect the newline, it might intersect with one already existing.
                                       Localizationstd.Remove(thisindex);
                                }
                            } 
                            line++;
                        }
                    } 
                } 
            }  
        }

Note that you must create a ‘getSource’ function, or specify an absolute path to the file.

GetLocalization[]

This is the function, referenced in your code. This requires either the steamid, or the entityid of a player, and resolves to the language of that player, and asks the helper function for the relevant string.

public string getLocalization(string key, Int64 steamid = -1,int entityid = -1)
        {
            string outstr = "MISSING. " + key; //Incase something went wrong OR the key wasn't found, default to this
            try
            { //If entityid was specified, resolve it to a steamID
                if (entityid > -1)
                {
                    if (entityToSteam.ContainsKey(entityid))
                    {
                        steamid = entityToSteam[entityid];
                    }
                }
            }
            catch { }
            string seeklang = "English"; //Default to 'English'
            try
            {
                if (locauser.ContainsKey(steamid))
                { //If locauser contains this user, find the desired language, based on users entry.
                    seeklang = locauser[steamid];
                }
            }
            catch { }
            outstr = getLocalizationHelper(key, seeklang); //Call helper function, to resolve the key to the desired language
            return outstr;
        }

Localization helper[]

This function resolves the given language to a string if possible.

If not, it will default to ‘English’ (If no language was provided, or the language provided is not supported for the specific string.

public string getLocalizationHelper(string key,string language = "English") //Default lang: 'English', if nothing was specified
        {
            string outstr = "MISSING "+key; //If nothing was found for the key OR something went wrong, fallback to this.
            try
            {
                int outi = -1;
                if (Localization.ContainsKey(key))
                { //If key was found in the Localization
                    int ix = -1;
                    foreach (var f in localizationindex)
                    { 
                        if (f != null && (string)f == language)
                        { //Check if the entry is good, and the desired language
                            outi = ix; 
                        }
                        ix++;
                    }
                    if (outi == -1)
                    { //None found, take the first
                        outi = 0;
                    }
                    if (Localization[key].Length >= outi)
                    {
                    }
                    else
                    { //The desired index for the language didn't exist on the object (For instance if we are looking for 'Deutsch', and only 'English' was supplied to the element
                        outi = 0;
                    }
                    if (Localization[key].Length >= outi)
                    {
                        if (Localization[key][outi] != null)
                        {
                        }
                        else
                        { //If the entry was bad, default to the first.
                            outi = 0;
                        }
                        if (Localization[key][outi] != null)
                        { //Resolve to the entry finally.
                            outstr = (string)Localization[key][outi];
                        }
                        else
                        { //If it doesn't even have a valid 0 index, return this error'
                            return "KEY " + key + " DOESNT CONTAIN 1 VALID ROW B:" + outi;
                        }
                    }
                    else
                    { //If it didn't even have one viable entry, return this error
                        return "KEY " + key + " DOESNT CONTAIN 1 VALID ROW A";
                    }
                }
            }
            catch { }
            return outstr; //Else return the resolved string
        }

Usuage[]

For both usecases count, that you refer to a key specified in the Localization.csv file.

Basic[]

Nothing fancy. Simply just the localized string.

With users steamid[]
getLocalization("KickLowRep", steamid)

You want the KEY for ‘KickLowRep’, and have the users steamid.

With users entityid[]
getLocalization("KickLowRep", -1, entityid)

You want the KEY for ‘KickLowRep’, and does not have the steamid handy, so you pass ‘-1’ (unknown), and then the users entityid.

You could for instance do it in this context:

GameAPI.Console_Write("The local key for 'KickLowRep' is for user '"+steamid+"':"+getLocalization("KickLowRep", steamid));

Advanced[]

Given the nature of C#, you can fairly easily include VARIABLES in translations, by using {0}, {1} (…).

The easiest way of going about this is:

string.Format(getLocalization("AfkKick", steamid), config.AFKKick);

Here referencing the KEY in localization.csv:

AfkKick,"You were kicked for being AFK for {0} minutes."

(This would resolve to for instance «You were kicked for being AFK for 10 minutes.», if the variable config.AFKKick was 10 (etc))

If you have multiple variables, you simply append them, and refer to them by a higher number in brackets; ie.

string.Format(getLocalization("AfkKickRepChange", steamid), config.AFKKick, config.AFKKickRepChange);

Would reference this KEY:

AfkKickRepChange,"You were kicked for being AFK for {0} minutes. Your reputation changed with {1}"

(This would resolve to: «You were kicked for being AFK for 10 minutes. Your reputation changed with -1», given config.AFKKick was 10, and config.AFKKickRepChange was -1)

Index: GameAPI

Localizting content[]

Accomplish[]

The basic concept of localization is to provide strings of text, in the users language.
The game already supports several languages ‘natively’, so opening your mod up for being localized is potentially also opening it up for a broader audience.
Furthermore, it allows you to ‘outsource’ finding spelling mistakes and/or improving formulations.
It also allows the users of the mod, to customize messages, if they for whatever reason wants to, although this isn’t the goal.

Pre-requisites[]

This is optional, but if you don’t, you will need to tweak the provided code to support this.

Dictionary<int, Int64> entityToSteam = new Dictionary<int, Int64>();

It is recommended to add to this list, as soon as a new client connects.

(You can for instance opt to chain a Event_Player_Connected into Event_Player_Info, where you add to the ‘entityToSteam’ dictionary)

entityToSteam.Add(int.Parse(ply.entityId.ToString()), Int64.Parse(ply.steamId.ToString()));

Once supported, you could also add to the ‘locauser’ dictionary from here. (assuming that will be the implementation of providing that information)

Optionally a function, ‘getSource’, returning the absolute path to a file, relative to the mod.

Global variables[]

Locauser[]

As of A8.1, the API _DOES NOT_ support getting the local language of the client. Assumingly, this will eventually be provided through the Event_Player_Info.
You need a global Dictionary

Dictionary<Int64, string> locauser = new Dictionary<long, string>();

This will eventually contain a list of the relationsship between a steamid and a language. (Once supported by the API)

You will additionally need to keep another dictionary, relating entityID’s to steamID’s.

LocalizationIndex[]

Object containing the information of supported languages (index populated from provided file)

Object[] localizationindex;

Localization[]

Dictionary used to keep the extracted information from the file.

Dictionary<String, Object[]> Localization = new Dictionary<string, object[]>();

File[]

In the example, the file is called ‘Localization.csv’, but any file, and any extension should be fine.

The essence is that the file contains the following format:

First line[]

The first line of the file must contain

KEY

At the very least.

You can additionally supply 0-inf languages after this. The text specified for the language, must match what we know from the player (What was used to populate ‘locauser’. More documentation will follow on this, once the game implements it.

For instance:

KEY,English,Deutsch

If you want to support the languages ‘English’ and ‘Deutsch’

Subsequentiel lines[]

After the first line, each line must start with an UNIQUE! key.

This key isused to later refer to the entry.

For instance:

KickLowRep,"You were kicked, as your reputation got too low."

Here, the key ‘KickLowRep’ would resolve to ‘You were kicked, as your reputation got too low.’, for English users.

No other languages were supported for this string, but could easily be done so, by specifying additional commas after, matching the index set in the first line.

(For instance, if first line was ‘KEY,English,Deutsch’, you could do the following)

KickLowRep,"You were kicked, as your reputation got too low.","Du wurdest getreten, als dein Ruf zu niedrig wurde."

(Sorry for google translate)

NOTE![]

You do not have to encase each sentence in «», but you MUST do so, if the translation contains a comma (,)

(As shown in the translation above, both languages had a comma in the string, and hence, the translation had to be encased in quotes)

An example not needing quotes:

Expires,Expires,verfallen

The file (for just these two entries) would look like:

KEY,English,Deutsch
KickLowRep,"You were kicked, as your reputation got too low.","Du wurdest getreten, als dein Ruf zu niedrig wurde."
Expires,Expires,verfallen

Code[]

There’s three functions needed to make this work:

-Loading

-Get

-Helper for get

Load files[]

In order to populate the localization, you must reference to a file.

This file MUST be in the format specified above.

This function should be called at

public void Game_Start(ModGameAPI dediAPI)

But can be called at any point. It just needs to exist, before you try to refer to the localization, if you want any viable returns.

public void loadLocalization()
        {
           //If already loaded, reset currently loaded.
           localizationindex = null;
           if (Localization != null)
           {
               Localization.Clear();
           } 
            //Open file
            using (var input = File.OpenText(getSource("Localization.csv"))) //Note that you must createa 'getSource' function, or specify an absolute path to the file.
            {
                string s = "";
                s = input.ReadToEnd();
                s = s.Replace("""", ""); //To be compatible with official loca, if they use "", it means a " inline. Remove it entirely, to not mess with any code, where it is used
                string[] st = s.Split('n'); //Split into segments, for each newline
                int line = 0;
                string pat = @",(?=(?:[^""]*""[^""]*"")*[^""]*$)"; //Split by commas, not encased in quotes. (Original regex: ,(?=(?:[^"]*"[^"]*")*[^"]*$) )
                foreach (string ss in st)
                {
                    if (ss==null||ss == "n" || ss == "" || ss == " ")
                    { //If the line is 'bad', do nothing
                    }
                    else
                    { 
                        string[] mv = Regex.Split(ss, pat);
                        Object[] topush = null;
                        if (mv != null && mv.Length > 0)
                        {
                            int sc = 0;
                            int finallength = mv.Length; //Determine the length of THIS object (to be efficient), depending on how much data was availible.
                            if (line > 0)
                            {
                                if (mv.Length < localizationindex.Length)
                                {
                                    finallength = localizationindex.Length;
                                }
                                topush = new object[finallength - 1]; //Push the object to the main localization array
                            }
                            if (line == 0)
                            {
                                localizationindex = new object[mv.Length]; //If we're doing the index
                            }
                            string thisindex = ""; 
                            foreach (var f in mv)
                            { 
                                if (f == null || f == "n" || f == "" || f == " ")
                                { //Again, check for bad data
                                }
                                else
                                {
                                    string off = f.TrimEnd();  //Remove bad endings (newlines for instance)
                                    if (line == 0)
                                    { 
                                        localizationindex[sc] = off; //Set the data for the index.
                                    }
                                    else
                                    { //If we aren't looking at the first line, do:
                                        if (sc == 0)
                                        {
                                            thisindex = off;
                                        }
                                        else
                                        {
                                            if (topush != null)
                                            {
                                                string of = off;
                                               if (of.Length > 0) //make sure there's an index
                                               {
                                                if (of.IndexOf(""") == 0)
                                                {
                                                    of=of.Remove(0, 1); //Remove quotes from start, if they exist
                                                }
                                               }
                                               if (of.Length > 0) //make sure there's an index
                                               {
                                                if (of.IndexOf(""") == of.Length-1)
                                                {
                                                    of=of.Remove(of.Length-1, 1); //Remove quotes from end, if they exist
                                                }
                                               }
                                                topush[sc - 1] = of;  //edit the temporary object (Add this entry)
                                            }
                                        }
                                    }
                                    sc++;
                                }
                            }
                            if (topush != null)
                            {
                                Localization.Add(thisindex, topush); //If the push Object was good, add it as a viable Localization (Push KEY + each lang into the dictionary)
                                if (Localizationstd.ContainsKey(thisindex))
                                {
                                    //In case we have a poorly formatted string, that doesn't respect the newline, it might intersect with one already existing.
                                       Localizationstd.Remove(thisindex);
                                }
                            } 
                            line++;
                        }
                    } 
                } 
            }  
        }

Note that you must create a ‘getSource’ function, or specify an absolute path to the file.

GetLocalization[]

This is the function, referenced in your code. This requires either the steamid, or the entityid of a player, and resolves to the language of that player, and asks the helper function for the relevant string.

public string getLocalization(string key, Int64 steamid = -1,int entityid = -1)
        {
            string outstr = "MISSING. " + key; //Incase something went wrong OR the key wasn't found, default to this
            try
            { //If entityid was specified, resolve it to a steamID
                if (entityid > -1)
                {
                    if (entityToSteam.ContainsKey(entityid))
                    {
                        steamid = entityToSteam[entityid];
                    }
                }
            }
            catch { }
            string seeklang = "English"; //Default to 'English'
            try
            {
                if (locauser.ContainsKey(steamid))
                { //If locauser contains this user, find the desired language, based on users entry.
                    seeklang = locauser[steamid];
                }
            }
            catch { }
            outstr = getLocalizationHelper(key, seeklang); //Call helper function, to resolve the key to the desired language
            return outstr;
        }

Localization helper[]

This function resolves the given language to a string if possible.

If not, it will default to ‘English’ (If no language was provided, or the language provided is not supported for the specific string.

public string getLocalizationHelper(string key,string language = "English") //Default lang: 'English', if nothing was specified
        {
            string outstr = "MISSING "+key; //If nothing was found for the key OR something went wrong, fallback to this.
            try
            {
                int outi = -1;
                if (Localization.ContainsKey(key))
                { //If key was found in the Localization
                    int ix = -1;
                    foreach (var f in localizationindex)
                    { 
                        if (f != null && (string)f == language)
                        { //Check if the entry is good, and the desired language
                            outi = ix; 
                        }
                        ix++;
                    }
                    if (outi == -1)
                    { //None found, take the first
                        outi = 0;
                    }
                    if (Localization[key].Length >= outi)
                    {
                    }
                    else
                    { //The desired index for the language didn't exist on the object (For instance if we are looking for 'Deutsch', and only 'English' was supplied to the element
                        outi = 0;
                    }
                    if (Localization[key].Length >= outi)
                    {
                        if (Localization[key][outi] != null)
                        {
                        }
                        else
                        { //If the entry was bad, default to the first.
                            outi = 0;
                        }
                        if (Localization[key][outi] != null)
                        { //Resolve to the entry finally.
                            outstr = (string)Localization[key][outi];
                        }
                        else
                        { //If it doesn't even have a valid 0 index, return this error'
                            return "KEY " + key + " DOESNT CONTAIN 1 VALID ROW B:" + outi;
                        }
                    }
                    else
                    { //If it didn't even have one viable entry, return this error
                        return "KEY " + key + " DOESNT CONTAIN 1 VALID ROW A";
                    }
                }
            }
            catch { }
            return outstr; //Else return the resolved string
        }

Usuage[]

For both usecases count, that you refer to a key specified in the Localization.csv file.

Basic[]

Nothing fancy. Simply just the localized string.

With users steamid[]
getLocalization("KickLowRep", steamid)

You want the KEY for ‘KickLowRep’, and have the users steamid.

With users entityid[]
getLocalization("KickLowRep", -1, entityid)

You want the KEY for ‘KickLowRep’, and does not have the steamid handy, so you pass ‘-1’ (unknown), and then the users entityid.

You could for instance do it in this context:

GameAPI.Console_Write("The local key for 'KickLowRep' is for user '"+steamid+"':"+getLocalization("KickLowRep", steamid));

Advanced[]

Given the nature of C#, you can fairly easily include VARIABLES in translations, by using {0}, {1} (…).

The easiest way of going about this is:

string.Format(getLocalization("AfkKick", steamid), config.AFKKick);

Here referencing the KEY in localization.csv:

AfkKick,"You were kicked for being AFK for {0} minutes."

(This would resolve to for instance «You were kicked for being AFK for 10 minutes.», if the variable config.AFKKick was 10 (etc))

If you have multiple variables, you simply append them, and refer to them by a higher number in brackets; ie.

string.Format(getLocalization("AfkKickRepChange", steamid), config.AFKKick, config.AFKKickRepChange);

Would reference this KEY:

AfkKickRepChange,"You were kicked for being AFK for {0} minutes. Your reputation changed with {1}"

(This would resolve to: «You were kicked for being AFK for 10 minutes. Your reputation changed with -1», given config.AFKKick was 10, and config.AFKKickRepChange was -1)

Перевод к игре вот человек занимается, перевод качественный, выходит часто.

empyriononline.com/threads/russian-discussion.2210/page-11

Если CatSam не успел сделать, а вам надо ну очень срочно, переводим сами,

Открываем файл
SteamsteamappscommonEmpyrion — Galactic SurvivalContentExtras
Localization.csv

Можно открыть блокнотом но тогда редактировать не удобно.

Открываем файл OpenOffice Calc/ Excel и доредактируем его под себя.
Сравнивая его файл и оригинальный, там примитивная табличка.
Ключь Описание на разных языках.
в OpenOffice Calc открываем 2 файла и сравниваем
для удобства применяем эту формулу по совпадению значений
Там Ключь и Описание на каком либо языке.
=IF(Ключь1=Ключь2;1;0)
=IF(Описание1=Описание2;1;0)
растягиваем вниз и смотрим совпадения значений, что не совпало т.е. 0 это редактируем.
что совпало 1 то пропускаем.

Оригинал CATSAM
кей англ русский кей англ русский сравнение по KEY (1/0) сравнение по описанию.(1/0)
HullSmallBlocks,Steel Blocks S,Стальной блок HullSmallBlocks,Steel Blocks S,Стальной блок 1* 1*

* Здесь наши формулы сравнения.

Не нужный язык можно удалить, так же можно добавить еще какой нибудь.

Если мы хотим русифицировать сами
помощь F1 тогда нам сюда
SteamsteamappscommonEmpyrion — Galactic SurvivalContentExtrasPDA
PDA.csv


Empyrion – Galactic Survival - Community Forums

Thread Status:

Not open for further replies.

  1. Hummel-o-War

    Hummel-o-War
    Administrator
    Staff Member
    Community Manager

    • Developer

    Joined:
    Jun 15, 2015
    Messages:
    7,657
    Likes Received:
    11,918

    Hi everyone,
    we have updated our localization.csv for 6.4 — those strings are missing a translation (because they were not done or newly added).

    Any help is much appreciated! :)

    ========= Each line is one string ========

    Cannot place a block in a regenerateable Base
    Configuration of Local Coop Game
    Local Coop
    Stone Statues (Deco)
    Hunt wild animals to fill your food storage
    Be well equipped before you venture into space with your spacesuit
    Be well prepared when you build your base on a hostile alien planet
    Thrusters
    O2 Capacity
    Fuel Capacity
    Automatic Armored Door 2 (vert)
    Automatic Armored Door 2
    Automatic Armored Door 3
    This savegame has not been created as Local Multiplayer game
    Empyrion Dedicated Server is not installed. Install now?
    (Please note this downloads approx. 2 GB)
    Version conflict: Game: ‘{0}’, Server: ‘{1}’
    Please update within the Steam software.

    #1


  2. foxes

    foxes
    Lieutenant

    Joined:
    Mar 25, 2017
    Messages:
    40
    Likes Received:
    30

    1. Не возможно поставить блок в самовосстанавливающейся Базе
    2. «Настройка Локальной Кооперативной Игры» or «Настройка Локальной Кооп. Игры»
    3. «Локальный Кооператив» or «Локальный Кооп.»
    4. Каменная Статуя (Деко)
    5. Отправляйтесь на охоту на диких животных, чтобы пополнить запасы питания
    6. Позаботьтесь о своем снаряжении, прежде чем отправиться в космос в скафандре
    7. Вы должны быть хорошо подготовлены, когда соберетесь построить свою базу на враждебной чужой планете
    8. Двигатели
    9. «О2 Бак»(object) or «О2 Хранилище»(object) or «Вместимость О2 баков»(volume/size) or «Вместимость О2″(volume/size)
    10. «Топливный Бак»(object) or «Хранилище Топлива»(object) or «Вместимость Топливных Баков»(volume/size) or «Вместимость Топлива»(volume/size)
    11. Автоматические Бронированные Двери 2 (верт)
    12. Автоматические Бронированные Двери 2
    13. Автоматические Бронированные Двери 3
    14. Это сохранение не для Локальной Многопользовательской Игры
    15. «Выделенный Сервер Empyrion не установлен. Установить сейчас?» or «Empyrion Dedicated Server не установлен. Установить сейчас?»
    16. (Пожалуйста, обратите внимание, эта загрузка потребует около 2 ГБ)
    17. Конфликт версий: Игра: ‘{0}’, Сервер: ‘{1}’
    18. «Пожалуйста, выполните обновление игры при помощи программного обеспечения Steam.» or «Пожалуйста, обновите при помощи программного обеспечения Steam.»

    #2

    Last edited: Jul 11, 2017


  3. Lisandr

    Lisandr
    Ensign

    Joined:
    Jul 11, 2017
    Messages:
    1
    Likes Received:
    0

    1. Нельзя разместить блок на Базе, пока производится ее ремонт
    2. Настройка кооперативной локальной игры
    3. Локальный кооператив
    4. Каменная статуя (декор)
    5. Охотьтесь на диких животных, чтобы пополнить запасы провизии.
    6. Прежде, чем выйти в космос в скафандре, убедитесь, что у вас подходящая экипировка.
    7. Перед размещением базы на недружелюбной чужой планете необходимо хорошо подготовиться.
    8. Приводы
    9. Конденсатор кислорода
    10. Топливный бак
    11. Автоматическая Бронированная Дверь 2 (верт)
    12. Автоматическая Бронированная Дверь 2
    13. Автоматическая Бронированная Дверь 3
    14. Это сохранение не предназначено для локальной кооперативной игры.
    15. Empyrion Dedicated Server не установлен. Установить сейчас?
    16. (Обратите внимание, что размер загружаемых файлов составляет около 2 ГБ)
    17. Несоответствие версий: Клиент: ‘{0}’, Сервер: ‘{1}’
    18. Пожалуйста, обновите приложение в Steam

    P.S. Знать бы в каком контексте используются определенные фразы, вроде 5-7 пунктов, было бы проще.

    #3

  4. Похоже, что это подсказки, которые отображаются на экране загрузки.

    8 — переключатель на вкладке «Main» контрольной панели.

    9 и 10 характеристики топливного и кислородного бака на вкладке «Devices»

    #4

    Last edited: Jul 11, 2017

  5. В контексте, наиболее подходящими будут выделенные варианты:
    (т.к. отображается характеристика конкретного устройства)

    #5


  6. Hummel-o-War

    Hummel-o-War
    Administrator
    Staff Member
    Community Manager

    • Developer

    Joined:
    Jun 15, 2015
    Messages:
    7,657
    Likes Received:
    11,918

    PS: If someone could check these (naming was changed recently) this would be awesome

    B. New namings:

    1. Fire Palm Tree
    2. Tentacle Tree
    3. Ball Flower
    4. Ball Tree
    5. Lava Plant
    6. Glow Tube Flower
    7. Mega Onion Flower

    8. You can choose your start location. It will have an impact on the difficulty of the game (e.g. planet with/without oxygen, temperature, radiation, type of resources etc) and how the game starts (Escape Pod, Base).

    9. Oxygen Tank Boost
    10. Oxygen Tank Boost
    11. Radiation Protection Boost
    12. Epic Radiation Protection Boost

    #6

  7. I’d like to clarify what degree of deviation is allowed in translation. Because some lines translated straight forward will look somehow inappropriate in Russian language. (IMO)
    For example:

    Oxygen Tank Boost ==> «Бустер кислородного баллона» ==>:confused:

    Oxygen Tank Boost ==> Expanded Oxygen Tank ==> «Расширенный кислородный баллон» ==>:)
    ______________==> Additional oxygen tank ==> «Дополнительный кислородный баллон» ==>:)

    #7


  8. Hummel-o-War

    Hummel-o-War
    Administrator
    Staff Member
    Community Manager

    • Developer

    Joined:
    Jun 15, 2015
    Messages:
    7,657
    Likes Received:
    11,918

    Just keep the meaning, no 1:1 translation needed. It should sound «correct», not «translated». So pick the localization that fits the best — i am doing the same for German as you can not translate all of the EN stuff 1:1 in most languages (and it often makes no sense)

    For example Oxygen Tank Boost increases the suit tank size and does not reduce the usage per time, so «Expanded» or «Additional» would be appropriate if it sounds better when translated!

    #8


  9. foxes

    foxes
    Lieutenant

    Joined:
    Mar 25, 2017
    Messages:
    40
    Likes Received:
    30

    1. Огненная Пальма
    2. Щупальцевое Дерево
    3. «Шариковый Цветок» or «Цветок Шар»(original)
    4. «Перекати Поле»(Tumbleweed) or «Шаровое Дерево»(original)
    5. «Огненное Растение» or «Растение Лавы» (original)
    6. Цветок Светящейся Трубки
    7. «Цветок Огромной Луковицы» or «Цветок Мега Луковицы» (original)

    8. Вы можете выбрать начальное местоположение. Это повлияет на сложность игры (например, планета с / без кислорода, температуры, излучения, типа ресурсов и т. д.) и вид старта игры (Спасательная Капсула, База).

    9. «Повышение Запаса Кислорода»(effect/influence/action) or «Дополнение Кислородного Запаса»(object/name)
    10. !Repeate!
    11. «Повышение Зашиты от Радиации»(effect/influence/action) or «Дополнение Зашиты от Радиации»(object/name)
    12. «Сильное Дополнение Зашиты от Радиации»(object/name) or «Эпическое Дополнение Зашиты от Радиации» (original)

    I think you need to refine the names of the items if these phrases belong to them. Since this is more suitable for describing the subject but not its name. The actual property of an object used as a name is the very silly. As a result of these names leads to confusion when translating several texts with references to the same object. Because he has two different names.
    There are many synonyms — «The Flower of Horror» or «The Filling Flower». In the end, simply not translatable names «Foreelya Flower» (Цветок Форелии).
    The word «Boost» for the name also badly suits, rather «Chip», «Devices», «Equipment» … You can also try to use something fictitious and not translatable «Oxygen Retryplizer» (Кислородный Ретраплизер), «Oxygen S-Box» (Кислородный С-Пакет). In the end, Boost is only Boots and Retryplizer or S-Box can do anything (Boost, Improve, Protect, Save, Increase).

    #9

    Last edited: Jul 12, 2017


  10. Hummel-o-War

    Hummel-o-War
    Administrator
    Staff Member
    Community Manager

    • Developer

    Joined:
    Jun 15, 2015
    Messages:
    7,657
    Likes Received:
    11,918

    thanks a lot!

    I think we will iterate on this a few more times — now as we have all major strings localized thanks to everyones help here :)

    #10

Thread Status:

Not open for further replies.

Share This Page

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Epc vag ошибка
  • Empyrion galactic survival как изменить имя игрока
  • Entext dll ошибка
  • Epc mercedes ошибка w210
  • Enterprise pki error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии