The translations.dat file is generated from the po/*.po files in the ScummVM source code repository. It contains the data needed by ScummVM to display a translated GUI.
The file is a binary file with
- a header
- a block with the list of languages
- a block with the list of codepages
- a block with the the english messages
- a block with the translated messages for language 1
- a block with the translated messages for language 2
- ...
- a block with the translated messages for language n
- a block with the mapping for codepage 1
- a block with the mapping for codepage 2
- ...
- a block with the mapping for codepage m
The latest file format version is 3. The description below is for version 3 but indicate blocks added from version 1 and 2.
- Version 2 adds context information in the translated messages.
- Version 3 adds code page descriptions (for translations not using ASCII or ISO-8859-1).
| Type |
Size |
Order |
Description
|
| String |
12 |
|
'TRANSLATIONS'
|
| Byte |
1 |
|
Version (of the file format)
|
| uint16 |
2 |
BE |
Number of translations
|
| uint16 |
2 |
BE |
Number of code pages (version 3 and above)
|
| uint16 |
2 |
BE |
Size in bytes of block 1 (list of languages)
|
| uint16 |
2 |
BE |
Size in bytes of block 2 (list of codepages - in version 3 and above)
|
| uint16 |
2 |
BE |
Size in bytes of block 3 (english messages)
|
| uint16 |
2 |
BE |
Size in bytes of block 4 (first translation)
|
| uint16 |
2 |
BE |
Size in bytes of block 5 (second translation)
|
| ... |
... |
... |
...
|
| uint16 |
2 |
BE |
Size in bytes of block n+2 (nth translation)
|
Size for the codepage mapping blocks is not written since they all are 256 * 4 bytes long.
List of Languages
For each translation there is the following entry:
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Size (in bytes) of the following string (including the terminating '\0')
|
| String |
?? |
|
Language and country code (e.g. 'de_DE'). The country code is optional (e.g. 'eu').
|
| uint16 |
2 |
BE |
Size (in bytes) of the language name string (including the terminating '\0')
|
| String |
?? |
|
Language name (e.g. 'Deutsch'). This is the name that appears in the GUI.
|
List of Codepages
For each codepage there is the following entry:
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Size (in bytes) of the following string (including the terminating '\0')
|
| String |
?? |
|
Codepage name (e.g. 'iso-8859-5')
|
English messages
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Number of messages
|
| |
|
|
First message entry (see below)
|
| |
|
|
Second message entry
|
| ... |
... |
... |
...
|
| |
|
|
Last message entry
|
Each message entry has the following format:
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Size (in bytes) of the english message string (including the terminating '\0')
|
| String |
?? |
|
English message
|
The messages are sorted in alphabetical order.
Translated messages
For each translation there is a block with the following format:
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Number of translated messages
|
| uint16 |
2 |
BE |
Size (in bytes) of the charset string (including the terminating '\0')
|
| String |
?? |
|
Charset (e.g. 'iso-8859-1')
|
| |
|
|
First translation entry (see below)
|
| ... |
... |
... |
...
|
| |
|
|
Last translation entry
|
Each translation entry has the following format:
| Type |
Size |
Order |
Description
|
| uint16 |
2 |
BE |
Index of the entry in the english message table (index starts at 0)
|
| uint16 |
2 |
BE |
Size (in bytes) of the translated message string (including the terminating '\0')
|
| String |
?? |
|
Translated message
|
| uint16 |
2 |
BE |
Size (in bytes) of the context string (including the terminating '\0'). Size is 0 when there is no context.
|
| String |
?? |
|
Context string (if a context is defined).
|
Codepage mapping
For each codepage there is a block giving the mapping from each character of the 8 bits codepage (e.g. iso-8859-5) to the equivalent unicode glyph.
| Type |
Size |
Order |
Description
|
| uint32 |
4 |
BE |
Mapping for a char value of 0
|
| uint32 |
4 |
BE |
Mapping for a char value of 1
|
| ... |
... |
... |
...
|
| uint32 |
4 |
BE |
Mapping for a char value of 255
|