String Editor – Arma Reforger
Open String Editor
- In Resource Manager, select Editors → String Editor. In the newly open window select File → Open and in the newly open dialog navigate to the wanted *.st file.
- alternatively, search for the *.st file in Resource Manager's Resource Browser tab and open it by double-clicking it.
Translation Workflow
| Status | Operation | Editable | If the string is correct | If the string is incorrect | 
|---|---|---|---|---|
| DEVELOPMENT_PENDING | Fill Target_en_us as translation reference |   | Change the status to DEVELOPMENT_DONE | Fix it directly in the Target_en_us field | 
| DEVELOPMENT_DONE | Feature development end, translation requirement confirmation |   | Change the status to PROOFREADING_PENDING | Set the status back to DEVELOPMENT_PENDING and edit the Target_en_us field | 
| PROOFREADING_PENDING | Proofreaders acknowledgement |   | Change the status to PROOFREADING_DONE | Unlock the string, set the status back to DEVELOPMENT_PENDING and edit the Target_en_us_edited field | 
| PROOFREADING_DONE | Proofreaders validation |   | Change the status to TRANSLATION_PENDING | Unlock the string, set the status back to DEVELOPMENT_PENDING and edit the Target_en_us_edited field | 
| TRANSLATION_PENDING | Translators acknowledgement |   | Change the status to TRANSLATION_DONE | Unlock the string, set the status back to DEVELOPMENT_PENDING and edit the Target_en_us_edited field | 
| TRANSLATION_DONE | Translators validation |   | Nothing | Unlock the string, set the status back to DEVELOPMENT_PENDING and edit the Target_en_us field | 
ID Convention
A translation id must follow a certain convention. Its name is constituted of specific parts in a specific order, and these parts are separated with a dash ( - ):
| Name | Description | 
|---|---|
| Game/Product | Game or Project prefix: AR for Arma Reforger, ENF for Enfusion | 
| Game Project | Optional, subsequential game project code (e.g a DLC, etc) | 
| Name | PascalCased string name - e.g MyNewWeapon, SplendidActionOnTruck Name prefixes/suffixes can exist through the usage of underscores ( _ ): 
 Iterators are part of the name section too, e.g AOSettings_1, AOSettings_2, AOSettings_3 | 
| Case | Optional, defines if the string MUST remain uppercase or lowercase. Can be one of: 
 | 
| Platform | Used to determine a string that is only present on a certain platform, as opposed to a string that is present on PC. Can be one of: 
 | 
Naming Convention
- use meta naming; the id must not be a 1:1 of the original text
- e.g: #AR-ExitConfirmation and not #AR-DoYouWantToQuit
 
- do not use any of:
- trademarks (use a generic name)
- profanities (for obvious reasons)
 
- write in English
Examples
- ENF-Settings
- AR-MainMenu
- AR-MainMenu_Options
- AR-OFP-MainMenu_Options_RefreshRate-UC-PS
Writing Convention
A translation text must follow some rules and advices to be valid:
The in-game text should always refer to a stringtable and never be written directly in UI/data.
Do not hardcode:
- text in UI
- text in data (config)
- text in code
- text in image (unless it is part of the lore)
- numeric format (e.g 1000 could be written 1,000 or 1 000 in another language)
- date format (2001-12-01, 01/12/2001, 12/01/2021 etc)
- percentage values (25%, 25 %, %25 etc)
Tips
To use arguments (formatted) text, use %1, %2, etc to include argument 1, 2, etc in the text. to display the percentage sign itself (%), use %%. Composed strings should be restricted to the bare minimum and used only when necessary for translation reasons.
Localized string
Do not assemble multiple parts to make a sentence, as such construction might be invalid in another language:
| Bad Example | Good Example | Explanation | 
|---|---|---|
| Hold Space to Take weapon 
 | Hold Space to take weapon 
 | The translator does not always know that the value is to be used in a composition The translation itself might not have been thought for this usage in the first place | 
| Remaining time: 30 seconds 
 | Remaining time: 30 seconds 
 | |
| Heavy Machinegun 
 | Heavy Machinegun 
 | Some languages place adjectives in a different order; such translation must then be done in one piece | 
Create a Stringtable File
Follow these steps to create a new *.st file:
- In Resource browser select a folder where you want to create a new *.st file
- Use right mouse button to open an option and here select GUI String table
- Set the name of the file
- Choose StringTable class and confirm
- A new *.st was created - all there is to do now is to assign this *.st file to the project
- In Workbench select Options
- In newly open window select Game project
- In the Configuration dropbox, select the desired platform (Headless, PC, PS4, Xbox, etc)
- Navigate to Widget Manager Settings → String Tables → String Table Definition and here:
- String Table Source - select the newly created file
- Languages - press the "+" button to add all desired languages.
 
Add a New Localised String
- Open String Editor
- Write an Id (stringtable entry key) into the insert section
- Press insert, the new container is created
- Select the new container in the list of containers
- In the Details section, add the original text in the Target_en_us field.
- Fall all other necessary details like Comment, Max Length of the text, all matching labels and so on. Details about those items are in this section of tutorial.
- Save changes by using File → Save (or Ctrl + S)
- Go to Table → Build Runtime Table (or Ctrl + B). Only after the following confirmation is the text ready to be used in game.
