NML:Language files
Vehicles, Stations, Canals, Bridges, Towns, Houses, Industries (Tiles), Cargos, Airports+Tiles, Objects, Railtypes, Roadtypes, Tramtypes, Terrain
No subpages in this chapter.
Introduction
Language files are usually found in the lang
sub-folder of the project, but the place NML looks for the language files can be changed via command line parameter to any directory desired:
nmlc -l path/to/lang-dir path/to/nml-source-file.nml nmlc --lang-dir=path/to/lang-dir path/to/nml-source-file.nml
Language files MUST have the extension .lng
The language files themselves follow a certain structure:
##grflangid <number> <string-name> :<text> <string-name> :<text> ...
where the first line must give the language code for the language this file describes (see below). The following lines each describe a string. The translated string follows immediately the colon. An NML project has exactly one fallback language, by default this is english.lng. You can change this with the command line parameter --default-lang. Example for a valid language file:
##grflangid 0x01 STR_GRF_NAME :{TITLE} 0.1.0 - {VERSION} STR_GRF_DESCRIPTION :{TITLE} contains pimped ground tiles. STR_NAME_MYVEHICLE :General Robotics Anti-Grav UFO Mark X
String codes
Strings may contain a number of special string codes which control how the string is being printed or which values to insert into the string. Custom replacements can be stored in the plain text file custom_tags.txt
(for example a newgrf version which is written by your build script). In the case above the custom_tags.txt
could, for example read
VERSION :alpha-r88 TITLE :Example NewGRF
Additionally to custom-defined tags, NML comes with a number of default tags:
Tag | Meaning | Example |
---|---|---|
NBSP | non-breaking space | |
COPYRIGHT | copyright symbol | |
TINYFONT | switch to small font | |
BIGFONT | switch to big font | |
DWORD_S | display variable (4 bytes): signed double word | |
PARAM | display parameter (4 bytes): unsigned double word | |
WORD_S | display variable (2 bytes): signed word | |
BYTE_S | display variable (1 byte): signed byte | |
WORD_U | display variable (2 bytes): unsigned word | |
CURRENCY | display variable (2 bytes): money in proper currency units | 24,492 € |
STRING | include other string | |
DATE1920_LONG | display variable (2 bytes): days since 1920 as long date | 12 August 1935 |
DATE1920_SHORT | display variable (2 bytes): days since 1920 as short date | 12 Aug 1935 |
VELOCITY | display variable (2 bytes): velocity in proper units | 35 km/h |
POP_WORD | ||
ROTATE | ||
VOLUME | display variable (2 bytes): volume in proper units | 29,000 l |
CURRENCY_QWORD | display variable (8 bytes): money in proper currency units | 4,402,204,201€ |
PUSH_WORD | ||
UNPRINT | ||
BYTE_HEX | display variable (1 byte): hexadecimal presentation | F0 |
WORD_HEX | display variable (2 bytes): hexadecimal presentation | F0 3D |
DWORD_HEX | display variable (4 bytes): hexadecimal presentation | F0 3D D4 33 |
QWORD_HEX | display variable (8 bytes): hexadecimal presentation | 4F 4D 4D 33 49 32 FF A3 |
WORD_S_TONNES | display variable (2 bytes): weight in tons | 42t |
DATE_LONG | display variable (2 bytes): days since 0 as long date | 12 August 1610 |
DATE_SHORT | display variable (2 bytes): days since 0 as short date | 12 Aug 3049 |
POWER | display variable (2 bytes): power in proper units | 2,030 kW |
BLUE | switch to blue text | |
SILVER | switch to silver text | |
GOLD | switch to golden text | |
RED | switch to red text | |
PURPLE | switch to purple text | |
LTBROWN | switch to light brown text | |
ORANGE | switch to orange text | |
GREEN | switch to green text | |
YELLOW | switch to yellow text | |
DKGREEN | switch to dark green text | |
CREAM | switch to cream-coloured text | |
BROWN | switch to brown text | |
WHITE | switch to white text | |
LTBLUE | switch to light blue text | |
GRAY | switch to gray text | |
DKBLUE | switch to dark blue text | |
BLACK | switch to black text | |
TRAIN | display train symbol | |
LORRY | display lorry symbol | |
BUS | display bus symbol | |
PLANE | display plane symbol | |
SHIP | display ship symbol |
Defining cases
Similar to OpenTTD's language files, NML can also make use of cases, genders and plural forms. In order to utilize them, they have to be defined in the language file's header and have to match the definition as used in OpenTTD's language files:
##case pragma STR_NAME :Utas STR_NAME.pragma :utast
e.g. for Hungarian you'd have
##case t ba STR_CARGO_PLURAL_PASSENGERS :Utas STR_CARGO_PLURAL_PASSENGERS.t :utast
Defining genders
Genders just like cases are defined in the header of the language file and have to match the definition as found within OpenTTD's language files. The gender of a word or expression is declared within the string's text itself by a tag of the form {G=gendername}
:
##gender pragma STR_NAME :{G=gendername}String which requires gender 'gendername'
where the string with the defined gender then will trigger the correct usage in a string which includes it and which has to take provisions to show the proper gender:
STR_OTHER :Some text {G gender1 gender2 ...} {STRING}
for example in German
##gender m w n p STR_CARGO_NAME_BAUXITE :{G=n}Bauxit
which then will be used with the correct gender by a string which includes it:
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} akzeptiert kein{G "en" "e" "" "e"} {STRING} mehr.
LanguageIDs
Valid language IDs are listed in the table below. The cases, genders and number of plural forms is only given as reference. Authorative are the definitions in OpenTTD's language file for each language.
ID | language | cases | genders | plurals |
---|---|---|---|---|
00 | American | |||
01 | English | |||
02 | German | m w n p | ||
03 | French | m m2 f | 2 | |
04 | Spanish | m f | ||
05 | Esperanto | n | ||
06 | Ido | |||
07 | Russian | m f n p nom gen dat acc abl pre | m f n p | 6 |
08 | Irish | 4 | ||
09 | Maltese | 12 | ||
0A | Tamil | |||
0B | Chuvash | |||
0C | Chinese (Traditional) | 1 | ||
0D | Serbian | nom big gen dat aku vok lok ins | muški ženski srednji | 6 |
0E | Norwegian (Nynorsk) | small | masculine feminine neuter | |
0F | Welsh | |||
10 | Belarusian | m f n p nom gen dat acc abl pre | m f n p | 6 |
11 | Marathi | |||
12 | Faroese | m f n | ||
14 | Arabic (Egypt) | 1 | ||
15 | Czech | nom gen dat acc voc loc ins big small | m f n map mnp fp np | 10 |
16 | Slovak | g | m z s | 10 |
18 | Bulgarian | m f n p | m f n p | |
1B | Afrikaans | male | ||
1E | Greek | subs date geniki | m f n | 2 |
1F | Dutch | |||
21 | Basque | |||
22 | Catalan | Masculin Femenin | ||
23 | Luxembourgish | |||
24 | Hungarian | t ba | 2 | |
26 | Macedonian | |||
27 | Italian | ms mp fs fp | m ma f | |
28 | Romanian | |||
29 | Icelandic | karlkyn kvenkyn hvorugkyn | ||
2A | Latvian | kas | m f | 3 |
2B | Lithuanian | kas ko kam ka kuo kur kreip | vyr mot | 5 |
2C | Slovenian | r d t | 8 | |
2D | Danish | |||
2E | Swedish | |||
2F | Norwegian (Bokmal) | small | masculine feminine neuter | |
30 | Polish | d c b n m w | m f n | 7 |
31 | Galician | m f n | ||
32 | Frisian | |||
33 | Ukrainian | r d z | m f s mn | 6 |
34 | Estonian | g in sü | ||
35 | Finnish | |||
36 | Portuguese | n m f mp fp | ||
37 | Brazilian Portuguese | m f | 2 | |
38 | Croatian | nom gen dat aku vok lok ins | male female middle | 6 |
39 | Japanese | 1 | ||
3A | Korean | m f | 11 | |
3C | Malay | |||
3E | Turkish | tamlanan | 1 | |
42 | Thai | 1 | ||
54 | Vietnamese | 1 | ||
56 | Chinese (Simplified) | 1 | ||
5A | Indonesian | 1 | ||
5C | Urdu | m f | ||
61 | Hebrew | singular plural gen | m f | |
62 | Persian |
In case a language is not in this list, check the master language list (for GRFv7) in the NewGRF Specs. This master list is always leading. NFO language ID 7F has no meaning in NML (set --default-lang instead) and setting bit 16 will break your language file.