Survivalist: Invisible Strain

Survivalist: Invisible Strain

评价数不足
Translator's Guide
由 Bob 制作
Where to find the translations, how to contribute, how to test your work, and how to do complex stuff like gender or plural agreement with names and pronouns that get inserted into the text, for languages that need that.
   
奖励
收藏
已收藏
取消收藏
Where to find the translations
All the official translations are stored as Google Sheets. Whenever I release a patch for the game I (usually) run a script that downloads the latest versions of them all and includes them in the patch.

If you want to help with any of them, email me at survivalist.game@gmail.com so I can grant you access.

Here are the sheets that are being worked on right now, with their current status (April 2025):

On each spreadsheet, there are 5 tabs at the bottom for UI, BaseStory, Common, Sandbox and MainStory:


  • UI - all the text in the menus etc
  • BaseStory - dialog that is common to all stories
  • Common - dialog that is common to Sandbox mode and Story mode
  • Sandbox - dialog that is specific to Sandbox mode
  • MainStory - dialog that is specific to Story mode

When I release a new patch, I have a tool which updates these spreadsheets. New lines will be added at the bottom. Sometimes I change an existing line, in this case the tool will highlight it in orange, like this:


This orange background indicates that the line needs to be translated again. The new English phrase is in column D, where it says "Changed to: new text". If you retranslate the line, take that new text and put it in column C, and set the background to white.
Special Symbols in the text
The game has some quite deep text parsing features, hopefully this guide helps but if you aren't sure how to do something feel free to ask me on survivalist.game@gmail.com

Facial Expressions

Emoticons like :-) or }:-| in the text change the character's facial expression while they are talking (so don't change these, but you can move them around in the text of course). Here's the full list of them:
  • Neutral :-|
  • Happy :-)
  • Unhappy :-(
  • Threatening :-[
  • Suspicious }:-|
  • Aggressive }:-)
  • Resentful }:-(
  • Angry }:-[
  • Wistful {:-|
  • Moved {:-)
  • Sad {:-(
  • Hurt {:-[
  • Surprised 8-o
  • Scared 8-|
  • Delighted 8-)
  • Dismayed 8-(
  • Shocked 8-[
  • Exhausted :-p
  • Snarl }8-0

Button Prompts

Things in square brackets like [Attack] indicate button prompts, so don't try to translate them. For example:



Hold [Aim] to aim and press [Attack] to attack

Inserted Names, Pronouns, etc

When you see %1, %2 etc in the text this indicates something will be inserted, like someone's name or a pronoun or a number.

The thing that will be inserted is defined by the scripts, which you can find from the main menu of the game by going to Editor, and editing Sandbox, or clicking on the Mods tab and editing BaseStory. From there click Edit Scripts, or go to Open Folder to look at the files. The scripts are xml files, so they can be searched for a particular dialog line.

For languages with gender agreement, you may need words or word endings to change depending on the gender of a character that was inserted using %1 etc. In that case you can write stuff like:

%1 is [female(1)?a woman:a man]

and you'll get:

Sarah Slaughter is a woman
or
Butch Billington is a man

Here is a list of all the functions available:
  • male(x) - x is a male human or animal, or an object with masculine gender in French, Italian, etc
  • female(x) - x is a female human or animal, or an object with feminine gender in French, Italian, etc
  • neuter(x) - x is not set to either male or female, or neuter in languages such as Polish
  • maleCommunity(x) - x is a community with 1 or more men. (For use with romance languages where the 3rd person plural uses the masculine if it includes any men, feminine otherwise)
  • femaleCommunity(x) - x is a community consisting only of women. (For use with romance languages where the 3rd person plural uses the masculine if it includes any men, feminine otherwise)
  • speaker(x) - x is the person speaking this line of dialog
  • listener(x) - x is the person listening to this line of dialog
  • thirdperson(x) - x is neither the speaker, nor the listener, of this line of dialog
  • speakerCommunity(x) - x is the community of the person speaking this line of dialog
  • listenerCommunity(x) - x is the community of the person listening to this line of dialog
  • thirdpersonCommunity(x) - x is a community but not the community of the speaker or the listener of this line of dialog
  • alive(x) - x is alive (and not a zombie)
  • plural(x) - x is a community, or belongs to a community, with more than one living member. Or x is an equipment item that has a plural name (e.g. car parts, combat trousers). Or x a price or other quantity greater than 1.
  • zero(x) - As above, but the quantity of x is 0
  • many(x) - As above, but the quantity of x is greater than 5 (useful for Czech plurals)
  • community(x) - x is a community
  • liquid(x) - x is an item containing a liquid
  • uncountable(x) - x is an item of equipment with an "uncountable" name, e.g. Wood, Pistol Ammo, or a liquid. (In Portuguese these have a different form of plural)
  • someone(x) - detects if the word "someone" will be inserted instead of a person's name (because the speaker doesn't know their name)
  • stranger(x) - detects if the word "stranger" will be inserted instead of a person's name (because the speaker doesn't know their name). Currently this will only happen on the brain scan page.
  • possessive(x) - inserts the possessive form of x's first name
  • possessiveFull(x) - inserts the possessive form of x's full name
There are also some highly specific functions for Hungarian and Czech, which you can probably ignore unless you are translating one of those languages or similar ones that modify people's names in different ways for different cases. I may add them for more languages if requested, e.g. Polish.
  • instrumental(x) - This outputs the first name of x, in the instrumental case (e.g. in Hungarian this typically involves adding -val or -vel to the end of it). Use instrumentalFull(x) for the full name. If x is the speaker it will translate as "me", if x is the listener it will translate as "you".
  • locative(x), locativeFull(x) - As above for the Locative case.
  • vocative(x), vocativeFull(x) - As above for the Vocative case.
  • accusative(x), accusativeFull(x) - As above for the Accusative case.
  • dative(x), dativeFull(x) - As above for the Dative case.
  • causal(x), causalFull(x) - As above for the Causal case.
  • sublative(x), sublativeFull(x) - As above for the Sublative case.
  • delative(x), delativeFull(x) - As above for the Delative case.
  • ablative(x), ablativeFull(x) - As above for the Ablative case.
  • possessiveNeut(x), possessiveFem(x), possessiveMascAnim(x), possessiveMascInanim(x), possessivePluralNeut(x), possessivePluralFem(x), possessivePluralMascAnim(x), possessivePluralMascInanim(x), possessiveFullNeut(x), possessiveFullFem(x), possessiveFullMascAnim(x), possessiveFullMascInanim(x), possessiveFullPluralNeut(x), possessiveFullPluralFem(x), possessiveFullPluralMascAnim(x), possessiveFullPluralMascInanim(x) - various different forms of the possessive case in Czech

As well as saying male(1), male(2), etc, which tell you if the person referred to by %1 or %2 is male, you can also say male(speaker) or male(listener), which tell you if the person doing the speaking, or the person listening is male. In some dialog lines where two people are talking about someone else, you can say male(referringTo) which tells you if the person they are talking about is male.

Similarly you can use "speakerCommunity", "listenerCommunity" or "referringToCommunity" as parameters, e.g. you could use female(speakerCommunity) or male(listenerCommunity) if you want to detect if their community contains any males, or is all female (if you want to decide whether to use elles or ils in French, for example).

Here are some example formulas:

I am a [male(speaker)?man:woman]
You are a [female(listener)?girl:boy]
%1 is [speaker(1)?my:listener(1)?your:their] name
%1 [thirdperson(1)?is:listener(1)?are:am] angry
[plural(1)?Our:My] community is called %1


It also has basic support for & (and) and | (or) symbols. This feature was used in the Italian translation of "my/your boyfriend/girlfriend":

[speaker(1) & male(2) ?il mio ragazzo:speaker(1) & female(2)?la mia ragazza:listener(1) & male(2)?il tuo ragazzo:la tua ragazza]

Which gives the output:

my boyfriend → il mio ragazzo
my girlfriend → la mia ragazza
your boyfriend → il tuo ragazzo
your girlfriend → la tua ragazza


How to test your work
If you've updated a spreadsheet, let me know on survivalist.game@gmail.com and I'll include it in the next patch. You can also use these features to check it yourself:

Viewing it in-game

You can test a translation (even if it hasn't yet been officially added to the game) by:
  • going to File -> Download -> Tab-separated values (.tsv, current sheet). Do this for all 5 sheets (UI, BaseStory, Common, Sandbox, MainStory).
  • In your Steam library right-click Survivalist: Invisible Strain, go to Properties and select the Installed Files tab. Click Browse.
  • Open the Survivalist Invisible Strain_Data\StreamingAssets subfolder.
  • For each sheet rename it to just the language name, e.g. Italian.tsv and put it in the UI, BaseStory, Common, Sandbox or MainStory folder respectively.
  • Run the game and go to Settings -> Language and select it.

Checking for errors

There is a tool in-game for checking a translation for errors. After you have put your translation into the game using the above steps, run the game and load a Sandbox game (or start a new one). Press F8 to bring up the debug menu and go to Utils -> Check Translation -> Italian, for example. It will look for missing button prompts, emoticons etc. It will print its output to the Unity log file, which can be found in:

C:\Users\natha\AppData\LocalLow\Ginormocorp Industries\Survivalist Invisible Strain\Player.log

Checking the results of formulas

A lot of the dialog is really hard to test in-game, as it requires you to play the game for a long time and activate certain quests. And even then you might only see how it looks for one gender, depending on which characters appeared in which situations. Particularly if you've used formulas to show different text for different genders, it's very hard to tell if they're all working correctly.

To help with this, there is a tool called Print Full Speech Translation which will go through all the dialog lines and test them out with various different names and genders, so you can get an idea of how they would look with all the %1, %2, etc text filled in, without having to play through the entire game to find them. Run the game, select your language from Settings, load a Sandbox or Story game, and then run this tool, from the F8 debug menu under Utils. It will create a big text file and open it for you, with output for all the dialog lines.

Another tool in the same menu is Print Speech Graph, which prints out speeches followed by their replies, with fake NPC names and genders inserted where necessary, so you can read them in context with each other.
1 条留言
revenant01 2022 年 9 月 22 日 上午 8:47 
Hi!
I have made a translation into Russian, available at the link in the manual. I supplement it periodically. Please give me access to the table to make it easier to work.
Sorry for my poor English.