Difference between revisions of "NML:Language files"

From GRFSpecs
Jump to navigationJump to search
(→‎LanguageIDs: add cases, genders and plural forms for remaining languages)
m (→‎LanguageIDs: note that cases, genders and number of plural forms could in principle change and OpenTTD's language files are authorative)
Line 181: Line 181:
 
== LanguageIDs ==
 
== LanguageIDs ==
   
Valid language IDs are listed in the table below.
+
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.
   
 
{| class="t"
 
{| class="t"

Revision as of 15:51, 30 August 2011

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.