Difference between revisions of "Stringtable.xml"

From Bohemia Interactive Community
Jump to navigation Jump to search
(Key naming convention)
m (Key naming convention)
Line 216: Line 216:
  
 
* Same as [[Identifier#Recommendations|global variables]], it is recommended to use a '''{{Color|purple|TAG}}''' to prevent translation collision with mods.
 
* Same as [[Identifier#Recommendations|global variables]], it is recommended to use a '''{{Color|purple|TAG}}''' to prevent translation collision with mods.
* If the key is to be used in a [[Config|config]], it '''must''' start with <tt>$STR</tt> ('''case sensitive''').  If used in combination with [[localize]], [[isLocalized]] or [[BIS_fnc_localized]] omit the <tt>$</tt> sign.
+
* If the key is to be used in a [[Config|config]], it '''must''' start with <tt>$STR</tt> ('''case sensitive''').  If used in combination with [[localize]], [[isLocalized]] or [[BIS_fnc_localize]] omit the <tt>$</tt> sign.
 
** Example Config:<tt>displayName = $STR_ENH_ALLOWSPRINTING_DISPLAYNAME</tt>
 
** Example Config:<tt>displayName = $STR_ENH_ALLOWSPRINTING_DISPLAYNAME</tt>
 
** Example SQF: <tt>["STR_ENH_ALLOWSPRINTING_DISPLAYNAME"] call [[BIS_fnc_isLocalized]];</tt>
 
** Example SQF: <tt>["STR_ENH_ALLOWSPRINTING_DISPLAYNAME"] call [[BIS_fnc_isLocalized]];</tt>

Revision as of 19:28, 19 December 2020

SideTOC Informative String tables are used to make internationalization easier for the game. They are used in addons, missions, and scripts, and are located in the root of the mission or addon folders.

Any strings that are used in the game can be kept separate from the code, and can therefore easily be edited and expanded into different languages. Instead of using strings directly in the code, you are using a variable. This variable will then contain the actual string, read from stringtable.xml, with the language that is being read depending on the game settings.


Stringtable Editors

It is strongly recommended to use a tool to edit the XML file; a selection of Stringtable Community Tools can be found in the Community Tools - Localisation Tools page section.


Example

Show Stringtable.xml example


Informative Important


Supported languages

Arma 2 & Arma 2: Operation Arrowhead Arma 3
className In-game name Note
English English
Czech Čeština
French Français
Spanish Español
Italian Italiano
Polish Polski
Russian Русский
German Deutsch
Hungarian Magyar Partially supported
Portuguese Portuguese Not available in-game
className In-game name Note
English English
Czech Čeština
French Français
Spanish Español
Italian Italiano
Polish Polski
Portuguese Português do Brasil
Russian Русский
German Deutsch
Korean 한국어 Region exclusive (TBC)
Japanese 日本語 Region exclusive (TBC)
Chinese 繁體中文 Chinese Traditional
Chinesesimp 简体中文 Chinese Simplified
Turkish Türkçe
Swedish N/A Not available in-game
Slovak N/A Not available in-game
SerboCroatian N/A Not available in-game
Norwegian N/A Not available in-game
Icelandic N/A Not available in-game
Hungarian Magyar Not available in-game
Greek N/A Not available in-game
Finnish N/A Not available in-game
Dutch N/A Not available in-game

Key naming convention

  • Same as global variables, it is recommended to use a TAG to prevent translation collision with mods.
  • If the key is to be used in a config, it must start with $STR (case sensitive). If used in combination with localize, isLocalized or BIS_fnc_localize omit the $ sign.
    • Example Config:displayName = $STR_ENH_ALLOWSPRINTING_DISPLAYNAME
    • Example SQF: ["STR_ENH_ALLOWSPRINTING_DISPLAYNAME"] call BIS_fnc_isLocalized;

String Formats

Strings stored in the stringtable can be in the following formats:

  • Normal text, such as Hello there
  • format text, such as Hello %1
  • Structured Text, such as <t size='2'>Hello</t> there, but:
    Important<t size='2'>Hello</t> there would then become &lt;t size='2'&gt;Hello&lt;/t&gt; there.


Usage

Script

A translation can be retrieved and used in a script by using the localize command:

hint localize "str_TAG_Yes"; // returns "Yes" in English, "Oui" in French, etc.
hint format [localize "str_TAG_formatted", name player];
hint localize "str_TAG_structuredText";

Config

Whether it is in Description.ext, Campaign Description.ext, Dialogs etc., the Config syntax to refer to a Stringtable translation is as follow (here, a Description.ext example):

onLoadName = $STR_TAG_missionName;
onLoadMission = $STR_TAG_loadMissionText;
overviewText = $STR_TAG_overviewText;
overviewPicture = $STR_TAG_overviewImage;

The preprocessor will replace $STR entries with the Stringtable values.


Multiplayer

Multiplayer Scripting should consider that the translation implementation should ideally happen client-side; clients and server are likely to be configured in a different language, as a server-side call to global effect text commands (such as setMarkerText) would set the text in the server's language to everyone.

Example of client-side translation of a server message:

// Server-side
if (isServer) then
{
	[nil, nil, rHINT, localize "str_TAG_myMessage"] call RE;	// Arma 2
	["str_TAG_myMessage"] remoteExecCall ["TAG_fnc_localHint"];	// Arma 3
};

// Client-side executed function
TAG_fnc_localHint = {
	if (hasInterface) then
	{
		hintSilent parseText (localize _this);					// Arma 2
		hintSilent parseText (_this call BIS_fnc_localize);		// Arma 3
	};
};


Commands & Functions