Open main menu

Supporting GUI Translation/Translations DAT Format

< Supporting GUI Translation
Revision as of 14:37, 11 March 2012 by Criezy (talk | contribs) (Update description to cover version 3)


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

  1. a header
  2. a block with the list of languages
  3. a block with the list of codepages
  4. a block with the the english messages
  5. a block with the translated messages for language 1
  6. a block with the translated messages for language 2
  7. ...
  8. a block with the translated messages for language n
  9. a block with the mapping for codepage 1
  10. a block with the mapping for codepage 2
  11. ...
  12. 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).

The header

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