95 lines
4 KiB
Markdown
95 lines
4 KiB
Markdown
# Locale
|
|
|
|
The game supports multiple locales. Locales and all localized strings for them are loaded from `%GameDirectory%\Data\Loco`.
|
|
|
|
Locales can be referred to using various identifiers. See the table below for a list of them.
|
|
|
|
| Enum Value | Display Name | Directory Name | Region Code | Language Code 2 | Language Code 3 | Language Code PSN | Website Code |
|
|
| ---------- | ------------- | -------------- | ----------- | --------------- | --------------- | ----------------- | ------------ |
|
|
| 0 | | chi | CN | zh | chi | zh-TW | zh_tw |
|
|
| 1 | English | eng | US | en | eng | en | en_us |
|
|
| 2 | français | fra | FR | fr | fra | fr | fr_fr |
|
|
| 3 | Deutsch | deu | DE | de | deu | de | de_de |
|
|
| 4 | Greek Cypher | sg2 | US | el | | | en_us |
|
|
| 5 | | jpn | JP | jp | jpn | ja | ja_jp |
|
|
| 6 | | kor | KR | ko | kor | ko | ko_kr |
|
|
| 7 | Pig Latin | sg1 | US | | | | en_us |
|
|
| 8 | [Placeholder] | sg3 | US | en | eng | en | en_us |
|
|
| 9 | português | por | PT | pt | por | pt | pt_br |
|
|
| 10 | Русский | rus | RU | ru | rus | ru | ru_ru |
|
|
| 11 | español | spa | MX | es | spa | es | es_mx |
|
|
|
|
## Locale File
|
|
|
|
Locale (`.locale`, signature `LOC`) files contain metadata for a given localization. They use the same header and string formats as [Calligraphy](./Calligraphy.md).
|
|
|
|
Locale files have the following structure:
|
|
|
|
```csharp
|
|
struct LocaleFile
|
|
{
|
|
CalligraphyHeader Header;
|
|
FixedString16 Name;
|
|
FixedString16 LanguageDisplayName;
|
|
FixedString16 RegionDisplayName;
|
|
string Directory;
|
|
ushort NumFlags;
|
|
LocaleFlag[NumFlags] Flags;
|
|
}
|
|
```
|
|
|
|
Locale flags have the following structure:
|
|
|
|
```csharp
|
|
struct LocaleFlag
|
|
{
|
|
ushort BitValue;
|
|
ushort BitMask;
|
|
string FlagText;
|
|
}
|
|
```
|
|
|
|
Localized strings for the given locale are stored in a subdirectory specified in the `Directory` field. Generally there are four files named `locale.all_3FFFFFFFFFFFFFFF.string`, `locale.all_7FFFFFFFFFFFFFFF.string`, `locale.all_BFFFFFFFFFFFFFFF.string`, `locale.all_FFFFFFFFFFFFFFFF.string`, with an appropriate language code instead of `locale` (see the table above for reference).
|
|
|
|
## String File
|
|
|
|
String (`.string`, signature `STR`) files contain a map of localized string ids. This format is also used in the achievement database dump sent to the client on login.
|
|
|
|
String files have the following structure:
|
|
|
|
```csharp
|
|
struct StringFile
|
|
{
|
|
CalligraphyHeader Header;
|
|
ushort NumEntries;
|
|
StringMapEntry[NumEntries] StringMap;
|
|
}
|
|
```
|
|
|
|
Each string map entry has the following structure:
|
|
|
|
```csharp
|
|
struct StringMapEntry
|
|
{
|
|
ulong LocaleStringId;
|
|
ushort NumVariants;
|
|
ushort FlagsProduced;
|
|
uint Offset;
|
|
|
|
if (NumVariants > 0)
|
|
StringVariation[NumVariants - 1] Variants;
|
|
}
|
|
```
|
|
|
|
Variations are alternate versions of strings used in some languages (e.g. for grammatical cases in Russian). They have the following structure:
|
|
|
|
```csharp
|
|
struct StringVariation
|
|
{
|
|
ulong FlagsConsumed;
|
|
ulong FlagsProduced;
|
|
uint Offset;
|
|
}
|
|
```
|
|
|
|
The actual strings are null-terminated UTF-8 encoded strings stored at offsets specified in the map. The offset is relative to the beginning of the file (0).
|