2 Supporting a new Locale
Azrapse edited this page 2026-10-07 13:14:59 +00:00

Are you fluent in a language that XWVM currently doesn't support and are willing to help adding support for it? In that case, you can help us by providing a translation to that language by following these instructions. If your translation reaches far enough, we might add it to our official repo, where other people can contribute, revise, and expand it. If it reaches completion and verification, there is a high chance we will bundle it with XWVM Core!

How XWVM localization works

XWVM supports multiple "locales". A locale represents a language or a dialect of a language. For example, en represents general English language, and en-US represents specifically American English.

(At the moment, we include only general language translations, but there is support for dialects already in XWVM. So if anyone wants to create es-AR for Argentinian Spanish, for example)

XWVM makes use of two file types for providing translations.

  • .XLIFF files: These are XML files that contain both the original source text in English for each text string, and a target text for the intended language. XLIFF files are usually edited with specialist tools, such as POEdit (which is a freemium tool) or others. Although, since they are regular XML files, they can be edited with any text editor.

  • .CSV files: Certain texts in the game are organized in tabular form (in tables such as a spreadsheet) where the game relates certain internal identifier with localized strings. For maximum compatibility, we provide this tabular information in .CSV files that can be opened on any text editor, or more advanced spreadsheet software. XWVM is pretty good at telling which separator has been used to tell apart the column (comma, semicolon, tab, etc). But the reference .CSV files we provide all use semicolon (;) as separator.

Reference Translations

It is easiest to start working on a translation to a new language by taking one of the reference translations and renaming the files and folders to match the new language locale code. Then edit the files to change the texts to the new language.

You can find all the currently supported translation files and folder in your local installation of XWVM, at <XwvmInstallDir>\xwvm_Data\StreamingAssets\Localization.

There, you can find a CSV folder and a XLIFF folder. The CSV folder contains the CSV files for all locales. The XLIFF folder contains subfolders for each locale.

Use the Spanish (es) or Italian (it) translations as starting point for your translation. For this example, we are going to use the Spanish translation as reference, and create a new Portuguese translation. In the following steps, change those details to match your choice of reference and target language. (Note: Do not use English or German as reference translations, because these are incomplete, since they read most of their texts from the official game files)

Step 1: Copy the CSV files

Since in this example we are creating a new translation for Portuguese, the Locale code for Portuguese is pt. (You can use Google to find the locale code of your target language.)

So, we start by making a copy of the two .csv files for Spanish in the CSV folder. They are the ones that end with the _es suffix before the .csv extension.

XWVM.tf.Species_es.csv
XWVM.xwing.Species_es.csv

Copy them and rename the copy so that the ending of the name is _pt instead of _es.

XWVM.tf.Species_pt.csv
XWVM.xwing.Species_pt.csv

Step 2: Copy the XLIFF folder

Now we go to the XLIFF folder and copy the entire es folder, and rename the copy to pt.

By doing this, XWVM will already offer "Portuguese" in the list of languages to select from.

But before we are done with this, we need to actually rename the the individual files inside this new folder. Rename them to replace the _escode with the _pt code.

Step 3: Translate all the new files

Now it is time to go thru all the new files we have created (that we have copied and renamed, that is), and edit them to replace the Spanish with Portuguese.

That will be explained on these sections: