Difference between revisions of "Translating Shield Cat"

From Shield Cat Wiki
Jump to navigation Jump to search
 
(18 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
[[Shield Cat]] supports the ability for translations, including custom translations that aren't part of the original package.
 
[[Shield Cat]] supports the ability for translations, including custom translations that aren't part of the original package.
 
== Translation Details ==
 
== Translation Details ==
 +
In the installation folder for the game, you will find a folder called <code>translations</code>. All of the official translations for the game are stored here. <b>Generally, you should not modify these files, as they will be replaced between releases of the game.</b> For this reason, the game supports the ability to use <b>user-made translations.</b>
 +
 +
=== Official Translations ===
 +
In the game's install folder, you'll find a file <code>translations/supported_languages.csv</code>. This file contains a list of all the official languages that this version of the game supports. You'll also see sub-folders here. They contain the language strings for the different areas of the game in different languages. Do <b>not</b> modify <code>supported_languages.csv</code> as this file will be replaced whenever the game updates. Please do <b>not</b> modify any of the files in the install directory to add languages to the game!
 +
 +
=== User-Made Translations ===
 +
It is possible to load and create user-made translations for the game (also known as "fan translations.") These translations are <b>not official</b> and may not always be up to date with the game itself.
 +
 +
{| class="wikitable"
 +
!Important
 +
|<b>Please be sure that any CSV file that you create is in UTF-8 format!</b> Otherwise certain characters and symbols will be lost.
 +
|}
 +
 +
<b>Please note that custom translations are only officially supported on desktop versions of the game!</b> It is generally not possible to access the data folders necessary to add new languages to the game on mobile platforms or consoles. The game can still look for custom translation files, but adding them is not officially supported and you will get no support from the dev on how to do this.
 +
 +
The custom language files will not be replaced when you update the game, but they are specific to the user account you're playing on. So, if you're using Windows and you have more than one user account on the computer, you will have to install the custom translations to each account.
 +
 +
==== <code>custom_languages.csv</code> ====
 +
To start using custom languages in the game, navigate to the save location of the game (please see the [[Installation Instructions]] for information on where game data is saved for each platform.) In the save directory, create a folder called <code>translations</code> and then inside this new folder, add a file called <code>custom_languages.csv</code>.
 +
 +
The format is as follows:
 +
"English","en"
 +
The first value <code>"English"</code> will be shown to the player when they select what language to play the game in. The second value specifies which subfolder the language files are located in.
 +
 +
Let's say you wanted to add a translation that made everyone talk like Pirates, a Spanish (Latin America) translation, a Spanish (Spain) translation, and a German translation. The file would look like this:
 +
"Pirate","pir"
 +
"Español (Latinoamerica)","espltn"
 +
"Español (España)","espspn"
 +
"Deutsch","deutsch"
 +
The game will now look in the save directory, in the <code>translations</code> folder there for the folders <code>pir</code>, <code>espltn</code>, <code>espspn</code>, and <code>deutsch</code>.
 +
 +
==== Language Files ====
 +
A translation of the game will consist of several <b>language files</b>. The most important of these is <code>lang_general.csv</code> which contains general purpose dialogue like character and item names, location names, etc. There are also other language files that are loaded in for specific areas in the game.
 +
 +
During runtime, the <code>lang_general.csv</code> is loaded at the startup of the game, but the area-specific language strings are swapped out when you go to specific areas. Keep this in mind if you are creating your own translation.
 +
 +
<b>If a language string isn't present in the translation file,</b> its English language fallback will be used. If no fallback is found, the string will be displayed in the dialogue instead.
 +
 +
<b>If a translation file isn't found,<b/> its English language fallback will be used instead.</b>
 +
 +
== Fonts ==
 
{{Stub}}
 
{{Stub}}
  
Line 16: Line 57:
 
=== <code>[eol]</code> ===
 
=== <code>[eol]</code> ===
 
<b>End of line.</b> Use <code>[eol]</code> to signify the end of a line. This allows multiple paragraphs of dialogue from the same character. The game will stop writing text to the screen and wait for the player to press the button.
 
<b>End of line.</b> Use <code>[eol]</code> to signify the end of a line. This allows multiple paragraphs of dialogue from the same character. The game will stop writing text to the screen and wait for the player to press the button.
 +
 +
Please note that you do not have to end every language string with this - it is assumed to be there, unless you use <code>[autogo]</code>
 +
 +
=== <code>[autogo]</code> ===
 +
<b>Automatically go on.</b> If you end a language string with this command, the dialogue will immediately go on to the next language string without any player input.
  
 
=== <code>[nl]</code> ===
 
=== <code>[nl]</code> ===
 
<b>New line.</b> Use <code>[nl]</code> to force the text to start drawing on the next line. Please note that it is not necessary to use this for wrapping text, as the game will wrap text automatically. Instead, it should be used for emphasis in the dialogue.
 
<b>New line.</b> Use <code>[nl]</code> to force the text to start drawing on the next line. Please note that it is not necessary to use this for wrapping text, as the game will wrap text automatically. Instead, it should be used for emphasis in the dialogue.
 +
 +
=== <code>[wait:value]</code> ===
 +
Specify how many frames to wait until continuing to draw text on the screen. You can use this to create dramatic tension in a scene. Please note that the game will not wait if the player has pressed the button to skip dialogue.
 +
 +
Since the game runs at 60fps, you can use <code>[wait:60]</code> to wait 1 second, or <code>[wait:120]</code> to wait 2 seconds. The maximum value for this is <code>300</code> which is 5 seconds.
  
 
=== <code>[icon:value]</code> ===
 
=== <code>[icon:value]</code> ===
Line 45: Line 96:
 
!<code>default</code>
 
!<code>default</code>
 
|Changes the color to the default color.
 
|Changes the color to the default color.
 +
|-
 +
!<code>hint</code>
 +
|Changes the color to signify that we're talking about some kind of hint.
 +
|-
 +
!<code>important</code>
 +
|Changes the color to signify something important.
 
|-
 
|-
 
!<code>item</code>
 
!<code>item</code>
Line 73: Line 130:
 
=== <code>[emoji:value]</code> ===
 
=== <code>[emoji:value]</code> ===
 
This will display a sprite from the game's database of graphics instead of a text character. It is used for example to display a picture of a button the player can press. It can also be used to put a picture of a character from the game.
 
This will display a sprite from the game's database of graphics instead of a text character. It is used for example to display a picture of a button the player can press. It can also be used to put a picture of a character from the game.
 +
 +
{| class="wikitable"
 +
!Important
 +
|Custom colors do not apply to emojis.
 +
|}
 
{{Stub}}
 
{{Stub}}
  
Line 79: Line 141:
  
 
<small>an example of how this works will be presented when it is implemented in the game.</small>
 
<small>an example of how this works will be presented when it is implemented in the game.</small>
 +
 +
=== <code>[effect:value]</code> ===
 +
<b>Text Effects.</b> When using this command, all characters that follow will use the text effect given. <b>Please note,</b> it is <i>not</i> possible to combine text effects - specifying a new one will overwrite the previous one. Also, the text effect will be reset when the game changes to a new dialogue string, so be sure to specify the text effect at the start if it's necessary.
 +
 +
{| class="wikitable"
 +
!Value
 +
!Result
 +
|-
 +
!<code>normal</code>
 +
|Resets the text effects. New characters drawn to the screen will do nothing fancy.
 +
|-
 +
!<code>wiggle</code>
 +
|Characters will smoothly slide up and down, depending on its x position on the screen.
 +
|-
 +
!<code>shake</code>
 +
|Characters will shake, like they are scared.
 +
|}
 +
 +
=== <code>[intro:value]</code> ===
 +
<b>Text Introduction.</b> Specifies how a character will appear on the screen. These can be combined with text effects to make unique dialogue.
 +
 +
{| class="wikitable"
 +
!Value
 +
!Result
 +
|-
 +
!<code>normal</code>
 +
|Text will appear in the default manner (dropping in)
 +
|-
 +
!<code>zoom_in</code>
 +
|Text will start small and then scale up to its normal size
 +
|-
 +
!<code>zoom_out</code>
 +
|Text will start at double size, and then scale down to the correct size.
 +
|-
 +
!<code>slide_in_rand</code>
 +
|Text will slide in from a random direction.
 +
|-
 +
!<code>fade_in</code>
 +
|Text will fade in.
 +
|}
 +
 +
=== <code>[scale:value]</code> ===
 +
<b>Text Scaling</b>. This specifies what text scaling to use. <b>Please note</b> that this effect is reset when the dialogue string is changed, so be sure to use it at the start as necessary.
 +
 +
{| class="wikitable"
 +
!Value
 +
!Result
 +
|-
 +
!<code>normal</code>
 +
|Characters are drawn at their default size.
 +
|-
 +
!<code>half</code>
 +
|Characters are drawn at half of their normal size.
 +
|-
 +
!<code>double</code>
 +
|Characters are drawn at double their normal size. Please note that some blurriness of text will occur with this.
 +
|-
 +
!<code>halfwidth</code>
 +
|Characters are drawn skinny.
 +
|-
 +
!<code>doublewidth</code>
 +
|Characters are drawn very wide.
 +
|-
 +
!<code>halfheight</code>
 +
|Characters are drawn at half their height.
 +
|-
 +
!<code>doubleheight</code>
 +
|Characters are drawn at double their height.
 +
|}
 +
 +
=== <code>[speed:value]</code> ===
 +
<b>Text Speed</b>. The speed is relative to the text speed that the player has specified.
 +
 +
{| class="wikitable"
 +
!value
 +
!result
 +
|-
 +
!<code>slow</code>
 +
|Text draws slowly on the screen.
 +
|-
 +
!<code>normal</code>
 +
|Text draws at the regular speed.
 +
|-
 +
!<code>fast</code>
 +
|Text draws at a quick rate.
 +
|}
 +
 +
=== <code>[bs:value]</code> ===
 +
<b>Back Space.</b> Removes the previous character from being drawn on the screen, up to <code>value</code> amount in a single frame. Note that you can only erase letters from the current string. Also note that any colors or formatting will <i>not</i> be changed by going back. For example, if you've set white text that's small, and you go back to blue text that's big, any future text drawn will still be white text that's small.
 +
 +
=== <code>[voice:value]</code> ===
 +
<b>Text Voice</b>. The text being drawn will have a unique sound to it depending on who's speaking. This is usually initialized by the game itself, but it may sometimes be necessary to change voices during a dialogue involving a single character.
 +
 +
{| class="wikitable"
 +
!Value
 +
!Result
 +
|-
 +
!<code>none</code>
 +
|No sound will play when text is being drawn.
 +
|-
 +
!<code>normal</code>
 +
|Default text sound, used for reading signs or investigating objects.
 +
|}
 +
 +
In addition to these, the following characters have unique dialogue sounds that can be used by putting their name:
 +
* <code>lance</code>
 +
* <code>parker</code>
 +
* <code>suzette</code>
 +
* <code>ruby</code>
 +
* <code>trent</code>
 +
* <code>olivia</code>
 +
* <code>claire</code>
 +
* <code>daniel</code>
 +
* <code>roxy</code>
 +
 +
=== <code>[lang:value]</code> ===
 +
<b>Language string.</b> Use this to display another language string inside the current one. For instance, if you wanted to put "Lance is going to throw his Shield." You would put this:
 +
[col:name][lang:lang_names_lance][col:default] is going to throw his [col:ability][lang:lang_ability_shield]
 +
Please note that you can <b>only use language strings that are in the general set of strings, or the strings that are loaded in for the area you're in.</b> Otherwise stated, you can either call in strings from <code>lang_general.csv</code> or whatever area-specific language file you're using.
 +
 +
Also note that at the end of the string, there is no <code>[col:default][eol]</code> This is because the game assumes these values, so you don't have to put them.
 +
 +
Also note, you would not have to specify the color commands if you put the color commands in the referenced language string itself, rather than each individual dialogue string.
  
 
[[Category:Technical Info]]
 
[[Category:Technical Info]]

Latest revision as of 21:28, 26 March 2020

Warning! The information detailed on this page may not be in the present available build, and may only be available in an upcoming build! Therefore, all information here is to be considered volatile and could change or be removed without notice.

Shield Cat supports the ability for translations, including custom translations that aren't part of the original package.

Translation Details

In the installation folder for the game, you will find a folder called translations. All of the official translations for the game are stored here. Generally, you should not modify these files, as they will be replaced between releases of the game. For this reason, the game supports the ability to use user-made translations.

Official Translations

In the game's install folder, you'll find a file translations/supported_languages.csv. This file contains a list of all the official languages that this version of the game supports. You'll also see sub-folders here. They contain the language strings for the different areas of the game in different languages. Do not modify supported_languages.csv as this file will be replaced whenever the game updates. Please do not modify any of the files in the install directory to add languages to the game!

User-Made Translations

It is possible to load and create user-made translations for the game (also known as "fan translations.") These translations are not official and may not always be up to date with the game itself.

Important Please be sure that any CSV file that you create is in UTF-8 format! Otherwise certain characters and symbols will be lost.

Please note that custom translations are only officially supported on desktop versions of the game! It is generally not possible to access the data folders necessary to add new languages to the game on mobile platforms or consoles. The game can still look for custom translation files, but adding them is not officially supported and you will get no support from the dev on how to do this.

The custom language files will not be replaced when you update the game, but they are specific to the user account you're playing on. So, if you're using Windows and you have more than one user account on the computer, you will have to install the custom translations to each account.

custom_languages.csv

To start using custom languages in the game, navigate to the save location of the game (please see the Installation Instructions for information on where game data is saved for each platform.) In the save directory, create a folder called translations and then inside this new folder, add a file called custom_languages.csv.

The format is as follows:

"English","en"

The first value "English" will be shown to the player when they select what language to play the game in. The second value specifies which subfolder the language files are located in.

Let's say you wanted to add a translation that made everyone talk like Pirates, a Spanish (Latin America) translation, a Spanish (Spain) translation, and a German translation. The file would look like this:

"Pirate","pir"
"Español (Latinoamerica)","espltn"
"Español (España)","espspn"
"Deutsch","deutsch"

The game will now look in the save directory, in the translations folder there for the folders pir, espltn, espspn, and deutsch.

Language Files

A translation of the game will consist of several language files. The most important of these is lang_general.csv which contains general purpose dialogue like character and item names, location names, etc. There are also other language files that are loaded in for specific areas in the game.

During runtime, the lang_general.csv is loaded at the startup of the game, but the area-specific language strings are swapped out when you go to specific areas. Keep this in mind if you are creating your own translation.

If a language string isn't present in the translation file, its English language fallback will be used. If no fallback is found, the string will be displayed in the dialogue instead.

If a translation file isn't found, its English language fallback will be used instead.

Fonts

This page is a stub. Roxy will probably come along later and add more to it.

Text Commands

The game uses the format [key:value] for text based commands in most cases. However, some keys do not have a value, and as such those will use [key].

All of the text commands are detailed below.

Special Note Most of the instructions regarding dialogue trees, message box styles, who's talking etc. is handled by the game itself, so you only need to worry about translating the presented text and keeping the text instructions that are present intact.

[eol]

End of line. Use [eol] to signify the end of a line. This allows multiple paragraphs of dialogue from the same character. The game will stop writing text to the screen and wait for the player to press the button.

Please note that you do not have to end every language string with this - it is assumed to be there, unless you use [autogo]

[autogo]

Automatically go on. If you end a language string with this command, the dialogue will immediately go on to the next language string without any player input.

[nl]

New line. Use [nl] to force the text to start drawing on the next line. Please note that it is not necessary to use this for wrapping text, as the game will wrap text automatically. Instead, it should be used for emphasis in the dialogue.

[wait:value]

Specify how many frames to wait until continuing to draw text on the screen. You can use this to create dramatic tension in a scene. Please note that the game will not wait if the player has pressed the button to skip dialogue.

Since the game runs at 60fps, you can use [wait:60] to wait 1 second, or [wait:120] to wait 2 seconds. The maximum value for this is 300 which is 5 seconds.

[icon:value]

Controls the character graphic that is used in this dialogue. Often this is specified by the game itself, so it is not necessary to start dialogue with this. However, you can use it in the middle of dialogue to change expressions.

Value Results
none Changes to not having any avatar on the screen.
lance_xx Uses one of Lance's expressions. Replace xx with the following:
  • 00: Default neutral
  • 01: Smile

Please note that this table will be filled out with graphics as the game is developed.

[col:value]

Color. Use this to specify the color that text will be drawn with from now on. Important note: the game will swap back to the default color when it changes language strings, but not when you use [eol] to move to a new paragraph. Be sure to specify the color at the start of the language string, even on sequential language strings.

Value Results
default Changes the color to the default color.
hint Changes the color to signify that we're talking about some kind of hint.
important Changes the color to signify something important.
item Changes the color to signify that we're talking about an item that is found in the game.
ability Changes the color to signify that we're talking about one of Lance's abilities, such as the Shield, Air Dash, etc.
location Changes the color to signify that we're talking about a location in the game that the player can visit.
name Changes the color to signify that we're talking about the name of a character in the game.
action Changes the color to signify that we're talking about one of the actions that Lance can take. This differs from his abilities and it used to describe actions like swimming, spinning, or for instance if we're telling the player they can press the "Ok" button then this is the color to use.
button Changes the color to signify that we're talking about a button or key that the player can press on the keyboard. For instance, if we told the player that they can press the "B Button" to spin, "B Button" would use this color, and "spin" would use the Action color.
rainbow All text drawn from now on will use a rainbow color, which will be continually cycled through until the text is removed from the screen.
cc_rrggbb Specify a Custom Color to be used. Replace rrggbb with an HTML hexcode color. It is not advised to use this though, as it may not show up against certain message boxes, so please use with caution.

[emoji:value]

This will display a sprite from the game's database of graphics instead of a text character. It is used for example to display a picture of a button the player can press. It can also be used to put a picture of a character from the game.

Important Custom colors do not apply to emojis.
This page is a stub. Roxy will probably come along later and add more to it.

[ruby:value]glyph

When using complex glyphs in languages such as Japanese, you can use this to display the simplified form above the complex glyph. This will help younger players who are not familiar with more complex glyphs to be able to read the dialogue. Here, value is where you put the simplified text, and it will be displayed over the next character in the text string.

an example of how this works will be presented when it is implemented in the game.

[effect:value]

Text Effects. When using this command, all characters that follow will use the text effect given. Please note, it is not possible to combine text effects - specifying a new one will overwrite the previous one. Also, the text effect will be reset when the game changes to a new dialogue string, so be sure to specify the text effect at the start if it's necessary.

Value Result
normal Resets the text effects. New characters drawn to the screen will do nothing fancy.
wiggle Characters will smoothly slide up and down, depending on its x position on the screen.
shake Characters will shake, like they are scared.

[intro:value]

Text Introduction. Specifies how a character will appear on the screen. These can be combined with text effects to make unique dialogue.

Value Result
normal Text will appear in the default manner (dropping in)
zoom_in Text will start small and then scale up to its normal size
zoom_out Text will start at double size, and then scale down to the correct size.
slide_in_rand Text will slide in from a random direction.
fade_in Text will fade in.

[scale:value]

Text Scaling. This specifies what text scaling to use. Please note that this effect is reset when the dialogue string is changed, so be sure to use it at the start as necessary.

Value Result
normal Characters are drawn at their default size.
half Characters are drawn at half of their normal size.
double Characters are drawn at double their normal size. Please note that some blurriness of text will occur with this.
halfwidth Characters are drawn skinny.
doublewidth Characters are drawn very wide.
halfheight Characters are drawn at half their height.
doubleheight Characters are drawn at double their height.

[speed:value]

Text Speed. The speed is relative to the text speed that the player has specified.

value result
slow Text draws slowly on the screen.
normal Text draws at the regular speed.
fast Text draws at a quick rate.

[bs:value]

Back Space. Removes the previous character from being drawn on the screen, up to value amount in a single frame. Note that you can only erase letters from the current string. Also note that any colors or formatting will not be changed by going back. For example, if you've set white text that's small, and you go back to blue text that's big, any future text drawn will still be white text that's small.

[voice:value]

Text Voice. The text being drawn will have a unique sound to it depending on who's speaking. This is usually initialized by the game itself, but it may sometimes be necessary to change voices during a dialogue involving a single character.

Value Result
none No sound will play when text is being drawn.
normal Default text sound, used for reading signs or investigating objects.

In addition to these, the following characters have unique dialogue sounds that can be used by putting their name:

  • lance
  • parker
  • suzette
  • ruby
  • trent
  • olivia
  • claire
  • daniel
  • roxy

[lang:value]

Language string. Use this to display another language string inside the current one. For instance, if you wanted to put "Lance is going to throw his Shield." You would put this:

[col:name][lang:lang_names_lance][col:default] is going to throw his [col:ability][lang:lang_ability_shield]

Please note that you can only use language strings that are in the general set of strings, or the strings that are loaded in for the area you're in. Otherwise stated, you can either call in strings from lang_general.csv or whatever area-specific language file you're using.

Also note that at the end of the string, there is no [col:default][eol] This is because the game assumes these values, so you don't have to put them.

Also note, you would not have to specify the color commands if you put the color commands in the referenced language string itself, rather than each individual dialogue string.