MHServerEmu/docs/GameData/Locale.md
2023-11-20 11:10:21 +03:00

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).