changeset 11346:1b8ff09217a8 draft

(svn r15696) -Codechange: move the NewGRF language ID into the language file instead of maintaining a table in the code.
author rubidium <rubidium@openttd.org>
date Fri, 13 Mar 2009 00:30:26 +0000
parents c78d659d5029
children 8656dc2695e9
files src/lang/afrikaans.txt src/lang/arabic_egypt.txt src/lang/brazilian_portuguese.txt src/lang/bulgarian.txt src/lang/catalan.txt src/lang/croatian.txt src/lang/czech.txt src/lang/danish.txt src/lang/dutch.txt src/lang/english.txt src/lang/english_US.txt src/lang/esperanto.txt src/lang/estonian.txt src/lang/finnish.txt src/lang/french.txt src/lang/galician.txt src/lang/german.txt src/lang/hebrew.txt src/lang/hungarian.txt src/lang/icelandic.txt src/lang/indonesian.txt src/lang/italian.txt src/lang/japanese.txt src/lang/korean.txt src/lang/latvian.txt src/lang/lithuanian.txt src/lang/luxembourgish.txt src/lang/norwegian_bokmal.txt src/lang/norwegian_nynorsk.txt src/lang/origveh.txt src/lang/piglatin.txt src/lang/polish.txt src/lang/portuguese.txt src/lang/romanian.txt src/lang/russian.txt src/lang/simplified_chinese.txt src/lang/slovak.txt src/lang/slovenian.txt src/lang/spanish.txt src/lang/swedish.txt src/lang/traditional_chinese.txt src/lang/turkish.txt src/lang/ukrainian.txt src/lang/unfinished/frisian.txt src/lang/unfinished/greek.txt src/lang/unfinished/ido.txt src/lang/unfinished/macedonian.txt src/lang/unfinished/malay.txt src/lang/unfinished/persian.txt src/lang/unfinished/serbian.txt src/lang/unfinished/thai.txt src/lang/unfinished/urdu.txt src/lang/welsh.txt src/newgrf_text.cpp src/newgrf_text.h src/strgen/strgen.cpp src/strgen/strgen.h src/strings.cpp
diffstat 58 files changed, 75 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- a/src/lang/afrikaans.txt
+++ b/src/lang/afrikaans.txt
@@ -2,6 +2,7 @@
 ##ownname Jaybee
 ##isocode af_ZA
 ##winlangid 0x0436
+##grflangid 0x1b
 ##plural 0
 ##gender male
 
--- a/src/lang/arabic_egypt.txt
+++ b/src/lang/arabic_egypt.txt
@@ -2,6 +2,7 @@
 ##ownname Arabic (Egypt)
 ##isocode ar_EG
 ##winlangid 0x0c01
+##grflangid 0x14
 ##plural 1
 ##textdir rtl
 
--- a/src/lang/brazilian_portuguese.txt
+++ b/src/lang/brazilian_portuguese.txt
@@ -2,6 +2,7 @@
 ##ownname Português (BR)
 ##isocode pt_BR
 ##winlangid 0x0416
+##grflangid 0x37
 ##plural 2
 ##gender m f
 
--- a/src/lang/bulgarian.txt
+++ b/src/lang/bulgarian.txt
@@ -2,6 +2,7 @@
 ##ownname Български
 ##isocode bg_BG
 ##winlangid 0x0402
+##grflangid 0x18
 ##plural 0
 ##case m f n p
 ##gender m f n p
--- a/src/lang/catalan.txt
+++ b/src/lang/catalan.txt
@@ -2,6 +2,7 @@
 ##ownname Català
 ##isocode ca_ES
 ##winlangid 0x0403
+##grflangid 0x22
 ##plural 0
 
 #
--- a/src/lang/croatian.txt
+++ b/src/lang/croatian.txt
@@ -2,6 +2,7 @@
 ##ownname Hrvatski
 ##isocode hr_HR
 ##winlangid 0x041a
+##grflangid 0x38
 ##plural 6
 ##case nom gen dat aku vok lok ins
 ##gender male female middle
--- a/src/lang/czech.txt
+++ b/src/lang/czech.txt
@@ -2,6 +2,7 @@
 ##ownname Čeština
 ##isocode cs_CZ
 ##winlangid 0x0405
+##grflangid 0x15
 ##plural 6
 ##case nom gen dat acc voc loc ins big small
 ##gender m f n
--- a/src/lang/danish.txt
+++ b/src/lang/danish.txt
@@ -2,6 +2,7 @@
 ##ownname Dansk
 ##isocode da_DA
 ##winlangid 0x0406
+##grflangid 0x2d
 ##plural 0
 
 #
--- a/src/lang/dutch.txt
+++ b/src/lang/dutch.txt
@@ -2,6 +2,7 @@
 ##ownname Nederlands
 ##isocode nl_NL
 ##winlangid 0x0413
+##grflangid 0x1f
 ##plural 0
 
 #
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2,6 +2,7 @@
 ##ownname English (UK)
 ##isocode en_GB
 ##winlangid 0x0809
+##grflangid 0x01
 ##plural 0
 
 #
--- a/src/lang/english_US.txt
+++ b/src/lang/english_US.txt
@@ -2,6 +2,7 @@
 ##ownname English (US)
 ##isocode en_US
 ##winlangid 0x0409
+##grflangid 0x00
 ##plural 0
 
 #
--- a/src/lang/esperanto.txt
+++ b/src/lang/esperanto.txt
@@ -2,6 +2,7 @@
 ##ownname Esperanto
 ##isocode eo_EO
 ##winlangid 0x0000
+##grflangid 0x05
 ##plural 0
 ##case n
 
--- a/src/lang/estonian.txt
+++ b/src/lang/estonian.txt
@@ -2,6 +2,7 @@
 ##ownname Eesti keel
 ##isocode et_ET
 ##winlangid 0x0425
+##grflangid 0x34
 ##plural 0
 ##case g in
 
--- a/src/lang/finnish.txt
+++ b/src/lang/finnish.txt
@@ -2,6 +2,7 @@
 ##ownname Suomi
 ##isocode fi_FI
 ##winlangid 0x040b
+##grflangid 0x35
 ##plural 0
 
 #
--- a/src/lang/french.txt
+++ b/src/lang/french.txt
@@ -2,6 +2,7 @@
 ##ownname Français
 ##isocode fr_FR
 ##winlangid 0x040c
+##grflangid 0x03
 ##plural 2
 ##gender m m2 f
 
--- a/src/lang/galician.txt
+++ b/src/lang/galician.txt
@@ -2,6 +2,7 @@
 ##ownname Galego
 ##isocode gl_ES
 ##winlangid 0x0456
+##grflangid 0x31
 ##plural 0
 ##gender m f n
 
--- a/src/lang/german.txt
+++ b/src/lang/german.txt
@@ -2,6 +2,7 @@
 ##ownname Deutsch
 ##isocode de_DE
 ##winlangid 0x0407
+##grflangid 0x02
 ##plural 0
 ##gender m w n p
 
--- a/src/lang/hebrew.txt
+++ b/src/lang/hebrew.txt
@@ -2,6 +2,7 @@
 ##ownname עברית
 ##isocode he_IL
 ##winlangid 0x040d
+##grflangid 0x61
 ##plural 0
 ##gender m f
 ##textdir rtl
--- a/src/lang/hungarian.txt
+++ b/src/lang/hungarian.txt
@@ -2,6 +2,7 @@
 ##ownname Magyar
 ##isocode hu_HU
 ##winlangid 0x040e
+##grflangid 0x24
 ##plural 2
 ##case t ba
 
--- a/src/lang/icelandic.txt
+++ b/src/lang/icelandic.txt
@@ -2,6 +2,7 @@
 ##ownname Íslenska
 ##isocode is_IS
 ##winlangid 0x040f
+##grflangid 0x29
 ##plural 0
 ##gender karlkyn kvenkyn hvorugkyn
 
--- a/src/lang/indonesian.txt
+++ b/src/lang/indonesian.txt
@@ -2,6 +2,7 @@
 ##ownname Bahasa Indonesia
 ##isocode id_ID
 ##winlangid 0x0421
+##grflangid 0x5a
 ##plural 1
 
 #
--- a/src/lang/italian.txt
+++ b/src/lang/italian.txt
@@ -2,6 +2,7 @@
 ##ownname Italiano
 ##isocode it_IT
 ##winlangid 0x0410
+##grflangid 0x27
 ##plural 0
 ##case ms mp fs fp
 ##gender m f
--- a/src/lang/japanese.txt
+++ b/src/lang/japanese.txt
@@ -2,6 +2,7 @@
 ##ownname 日本語
 ##isocode ja_JP
 ##winlangid 0x0411
+##grflangid 0x39
 ##plural 1
 
 #
--- a/src/lang/korean.txt
+++ b/src/lang/korean.txt
@@ -2,6 +2,7 @@
 ##ownname 한국어
 ##isocode ko_KR
 ##winlangid 0x0412
+##grflangid 0x3a
 ##plural 1
 ##gender m f
 
--- a/src/lang/latvian.txt
+++ b/src/lang/latvian.txt
@@ -2,6 +2,7 @@
 ##ownname Latviešu
 ##isocode lv_LV
 ##winlangid 0x0426
+##grflangid 0x2a
 ##plural 3
 ##case kas
 ##gender m f
--- a/src/lang/lithuanian.txt
+++ b/src/lang/lithuanian.txt
@@ -2,6 +2,7 @@
 ##ownname Lietuvių
 ##isocode lt_LT
 ##winlangid 0x0427
+##grflangid 0x2b
 ##plural 5
 ##case kas ko kam ka kuo kur kreip
 ##gender vyr mot
--- a/src/lang/luxembourgish.txt
+++ b/src/lang/luxembourgish.txt
@@ -2,6 +2,7 @@
 ##ownname Luxembourgish
 ##isocode lb_LU
 ##winlangid 0x046e
+##grflangid 0x23
 ##plural 0
 
 #
--- a/src/lang/norwegian_bokmal.txt
+++ b/src/lang/norwegian_bokmal.txt
@@ -2,6 +2,7 @@
 ##ownname Norsk (bokmål)
 ##isocode nb_NO
 ##winlangid 0x0414
+##grflangid 0x2f
 ##plural 0
 
 #
--- a/src/lang/norwegian_nynorsk.txt
+++ b/src/lang/norwegian_nynorsk.txt
@@ -2,6 +2,7 @@
 ##ownname Norsk, Nynorsk
 ##isocode nn_NO
 ##winlangid 0x0814
+##grflangid 0x0e
 ##plural 0
 ##gender masculine feminine neuter
 
--- a/src/lang/origveh.txt
+++ b/src/lang/origveh.txt
@@ -2,6 +2,7 @@
 ##ownname Original vehicle names (ENG)
 ##isocode xx_OV
 ##winlangid 0x0000
+##grflangid 0x01
 
 ##id 0x8000
 STR_8000_KIRBY_PAUL_TANK_STEAM                                  :Collett Pannier Tank (Steam)
--- a/src/lang/piglatin.txt
+++ b/src/lang/piglatin.txt
@@ -2,6 +2,7 @@
 ##ownname Igpay atinlay
 ##isocode xx_PL
 ##winlangid 0x0000
+##grflangid 0x01
 ##plural 0
 
 #
--- a/src/lang/polish.txt
+++ b/src/lang/polish.txt
@@ -2,6 +2,7 @@
 ##ownname Polski
 ##isocode pl_PL
 ##winlangid 0x0415
+##grflangid 0x30
 ##plural 7
 ##case d c b n m w
 ##gender m f n
--- a/src/lang/portuguese.txt
+++ b/src/lang/portuguese.txt
@@ -2,6 +2,7 @@
 ##ownname Português
 ##isocode pt_PT
 ##winlangid 0x0816
+##grflangid 0x36
 ##plural 0
 
 #
--- a/src/lang/romanian.txt
+++ b/src/lang/romanian.txt
@@ -2,6 +2,7 @@
 ##ownname Românã
 ##isocode ro_RO
 ##winlangid 0x0418
+##grflangid 0x28
 ##plural 0
 
 #
--- a/src/lang/russian.txt
+++ b/src/lang/russian.txt
@@ -2,6 +2,7 @@
 ##ownname Русский
 ##isocode ru_RU
 ##winlangid 0x0419
+##grflangid 0x07
 ##plural 6
 ##case m f n p
 ##gender m f n p
--- a/src/lang/simplified_chinese.txt
+++ b/src/lang/simplified_chinese.txt
@@ -2,6 +2,7 @@
 ##ownname 简体中文
 ##isocode zh_CN
 ##winlangid 0x0804
+##grflangid 0x56
 ##plural 1
 
 #
--- a/src/lang/slovak.txt
+++ b/src/lang/slovak.txt
@@ -2,6 +2,7 @@
 ##ownname Slovensky
 ##isocode sk_SK
 ##winlangid 0x041b
+##grflangid 0x16
 ##plural 6
 ##case g
 ##gender m z s
--- a/src/lang/slovenian.txt
+++ b/src/lang/slovenian.txt
@@ -2,6 +2,7 @@
 ##ownname Slovenščina
 ##isocode sl_SL
 ##winlangid 0x0424
+##grflangid 0x2c
 ##plural 8
 ##case r d t
 
--- a/src/lang/spanish.txt
+++ b/src/lang/spanish.txt
@@ -2,6 +2,7 @@
 ##ownname Español (ES)
 ##isocode es_ES
 ##winlangid 0x0c0a
+##grflangid 0x04
 ##plural 0
 ##gender masculino femenino
 
--- a/src/lang/swedish.txt
+++ b/src/lang/swedish.txt
@@ -2,6 +2,7 @@
 ##ownname Svenska
 ##isocode sv_SE
 ##winlangid 0x081d
+##grflangid 0x2e
 ##plural 0
 
 #
--- a/src/lang/traditional_chinese.txt
+++ b/src/lang/traditional_chinese.txt
@@ -2,6 +2,7 @@
 ##ownname 繁體中文
 ##isocode zh_TW
 ##winlangid 0x0404
+##grflangid 0x0c
 ##plural 1
 
 #
--- a/src/lang/turkish.txt
+++ b/src/lang/turkish.txt
@@ -2,6 +2,7 @@
 ##ownname Türkçe
 ##isocode tr_TR
 ##winlangid 0x041f
+##grflangid 0x3e
 ##plural 1
 
 #
--- a/src/lang/ukrainian.txt
+++ b/src/lang/ukrainian.txt
@@ -2,6 +2,7 @@
 ##ownname Українська
 ##isocode uk_UA
 ##winlangid 0x0422
+##grflangid 0x33
 ##plural 6
 ##gender m f s mn
 ##case r d z
--- a/src/lang/unfinished/frisian.txt
+++ b/src/lang/unfinished/frisian.txt
@@ -2,6 +2,7 @@
 ##ownname Frysk
 ##isocode fy_NL
 ##winlangid 0x0462
+##grflangid 0x32
 ##plural 0
 
 #
--- a/src/lang/unfinished/greek.txt
+++ b/src/lang/unfinished/greek.txt
@@ -2,6 +2,7 @@
 ##ownname Ελληνικά
 ##isocode el_GR
 ##winlangid 0x0408
+##grflangid 0x1e
 ##plural 0
 ##gender m f n
 
--- a/src/lang/unfinished/ido.txt
+++ b/src/lang/unfinished/ido.txt
@@ -1,7 +1,8 @@
 ##name Ido
 ##ownname Ido
-##isocode io_XX
+##isocode io_IO
 ##winlangid 0x0000
+##grflangid 0x06
 ##plural 0
 
 #
--- a/src/lang/unfinished/macedonian.txt
+++ b/src/lang/unfinished/macedonian.txt
@@ -2,6 +2,7 @@
 ##ownname Македонски
 ##isocode mk_MK
 ##winlangid 0x042f
+##grflangid 0x26
 ##plural 0
 
 #
--- a/src/lang/unfinished/malay.txt
+++ b/src/lang/unfinished/malay.txt
@@ -2,6 +2,7 @@
 ##ownname Melayu
 ##isocode ms_MY
 ##winlangid 0x043a
+##grflangid 0x3c
 ##plural 0
 
 #
--- a/src/lang/unfinished/persian.txt
+++ b/src/lang/unfinished/persian.txt
@@ -2,6 +2,7 @@
 ##ownname فارسی
 ##isocode fa_IR
 ##winlangid 0x0429
+##grflangid 0x62
 ##plural 0
 ##textdir rtl
 
--- a/src/lang/unfinished/serbian.txt
+++ b/src/lang/unfinished/serbian.txt
@@ -1,7 +1,8 @@
 ##name Serbian
 ##ownname Srpski
-##isocode srp
+##isocode sr_RS
 ##winlangid 0x7c1a
+##grflangid 0x0d
 ##plural 6
 ##case nom big gen dat aku vok lok ins
 ##gender muški ženski srednji
--- a/src/lang/unfinished/thai.txt
+++ b/src/lang/unfinished/thai.txt
@@ -2,6 +2,7 @@
 ##ownname Thai
 ##isocode th_TH
 ##winlangid 0x041e
+##grflangid 0x42
 ##plural 1
 ##textdir ltr
 
--- a/src/lang/unfinished/urdu.txt
+++ b/src/lang/unfinished/urdu.txt
@@ -2,6 +2,7 @@
 ##ownname Urdu
 ##isocode ur_PK
 ##winlangid 0x0420
+##grflangid 0x5c
 ##plural 0
 ##textdir rtl
 ##gender m f
--- a/src/lang/welsh.txt
+++ b/src/lang/welsh.txt
@@ -2,6 +2,7 @@
 ##ownname Cymraeg
 ##isocode cy_GB
 ##winlangid 0x0452
+##grflangid 0x0f
 ##plural 0
 
 #
--- a/src/newgrf_text.cpp
+++ b/src/newgrf_text.cpp
@@ -27,7 +27,7 @@
  * the grf base will not be used in order to find the string, but rather for
  * jumping from standard langID scheme to the new one.
  */
-enum grf_base_languages {
+enum GRFBaseLanguages {
 	GRFLB_AMERICAN    = 0x01,
 	GRFLB_ENGLISH     = 0x02,
 	GRFLB_GERMAN      = 0x04,
@@ -36,101 +36,15 @@
 	GRFLB_GENERIC     = 0x80,
 };
 
-enum grf_extended_languages {
+enum GRFExtendedLanguages {
 	GRFLX_AMERICAN    = 0x00,
 	GRFLX_ENGLISH     = 0x01,
 	GRFLX_GERMAN      = 0x02,
 	GRFLX_FRENCH      = 0x03,
 	GRFLX_SPANISH     = 0x04,
-	GRFLX_ESPERANTO   = 0x05,
-	GRFLX_RUSSIAN     = 0x07,
-	GRFLX_CZECH       = 0x15,
-	GRFLX_SLOVAK      = 0x16,
-	GRFLX_BULGARIAN   = 0x18,
-	GRFLX_AFRIKAANS   = 0x1B,
-	GRFLX_GREEK       = 0x1E,
-	GRFLX_DUTCH       = 0x1F,
-	GRFLX_CATALAN     = 0x22,
-	GRFLX_HUNGARIAN   = 0x24,
-	GRFLX_ITALIAN     = 0x27,
-	GRFLX_ROMANIAN    = 0x28,
-	GRFLX_ICELANDIC   = 0x29,
-	GRFLX_LATVIAN     = 0x2A,
-	GRFLX_LITHUANIAN  = 0x2B,
-	GRFLX_SLOVENIAN   = 0x2C,
-	GRFLX_DANISH      = 0x2D,
-	GRFLX_SWEDISH     = 0x2E,
-	GRFLX_NORWEGIAN   = 0x2F,
-	GRFLX_POLISH      = 0x30,
-	GRFLX_GALICIAN    = 0x31,
-	GRFLX_FRISIAN     = 0x32,
-	GRFLX_UKRAINIAN   = 0x33,
-	GRFLX_ESTONIAN    = 0x34,
-	GRFLX_FINNISH     = 0x35,
-	GRFLX_PORTUGUESE  = 0x36,
-	GRFLX_BRAZILIAN   = 0x37,
-	GRFLX_CROATIAN    = 0x38,
-	GRFLX_JAPANESE    = 0x39,
-	GRFLX_KOREAN      = 0x3A,
-	GRFLX_TURKISH     = 0x3E,
 	GRFLX_UNSPECIFIED = 0x7F,
 };
 
-
-struct iso_grf {
-	char code[6];
-	byte grfLangID;
-};
-
-/**
- * ISO code VS NewGrf langID conversion array.
- * This array is used in two ways:
- * 1-its ISO part is matching OpenTTD dynamic language id
- *   with newgrf bit positionning language id
- * 2-its shift part is used to know what is the shift to
- *   watch for when inserting new strings, hence analysing newgrf langid
- */
-const iso_grf iso_codes[] = {
-	{"en_US", GRFLX_AMERICAN},
-	{"en_GB", GRFLX_ENGLISH},
-	{"de_DE", GRFLX_GERMAN},
-	{"fr_FR", GRFLX_FRENCH},
-	{"es_ES", GRFLX_SPANISH},
-	{"af_ZA", GRFLX_AFRIKAANS},
-	{"hr_HR", GRFLX_CROATIAN},
-	{"cs_CZ", GRFLX_CZECH},
-	{"ca_ES", GRFLX_CATALAN},
-	{"da_DA", GRFLX_DANISH},
-	{"nl_NL", GRFLX_DUTCH},
-	{"et_ET", GRFLX_ESTONIAN},
-	{"fi_FI", GRFLX_FINNISH},
-	{"fy_NL", GRFLX_FRISIAN},
-	{"gl_ES", GRFLX_GALICIAN},
-	{"el_GR", GRFLX_GREEK},
-	{"hu_HU", GRFLX_HUNGARIAN},
-	{"is_IS", GRFLX_ICELANDIC},
-	{"it_IT", GRFLX_ITALIAN},
-	{"lv_LV", GRFLX_LATVIAN},
-	{"lt_LT", GRFLX_LITHUANIAN},
-	{"nb_NO", GRFLX_NORWEGIAN},
-	{"pl_PL", GRFLX_POLISH},
-	{"pt_PT", GRFLX_PORTUGUESE},
-	{"pt_BR", GRFLX_BRAZILIAN},
-	{"ro_RO", GRFLX_ROMANIAN},
-	{"ru_RU", GRFLX_RUSSIAN},
-	{"sk_SK", GRFLX_SLOVAK},
-	{"sl_SL", GRFLX_SLOVENIAN},
-	{"sv_SE", GRFLX_SWEDISH},
-	{"tr_TR", GRFLX_TURKISH},
-	{"uk_UA", GRFLX_UKRAINIAN},
-	{"eo_EO", GRFLX_ESPERANTO},
-	{"bg_BG", GRFLX_BULGARIAN},
-	{"ja_JP", GRFLX_JAPANESE},
-	{"ko_KR", GRFLX_KOREAN},
-	{"gen",   GRFLB_GENERIC}   ///< this is not iso code, but there has to be something...
-};
-
-
 /**
  * Element of the linked list.
  * Each of those elements represent the string,
@@ -453,26 +367,13 @@
  * Equivalence Setter function between game and newgrf langID.
  * This function will adjust _currentLangID as to what is the LangID
  * of the current language set by the user.
- * The array iso_codes will be used to find that match.
- * If not found, it will have to be standard english
  * This function is called after the user changed language,
  * from strings.cpp:ReadLanguagePack
- * @param iso_name iso code of current selection
+ * @param langauge_id iso code of current selection
  */
-void SetCurrentGrfLangID(const char *iso_name)
+void SetCurrentGrfLangID(byte language_id)
 {
-	/* Use English by default, if we can't match up the iso_code. */
-	byte ret = GRFLX_ENGLISH;
-	byte i;
-
-	for (i=0; i < lengthof(iso_codes); i++) {
-		if (strncmp(iso_codes[i].code, iso_name, strlen(iso_codes[i].code)) == 0) {
-			/* We found a match, so let's use it. */
-			ret = iso_codes[i].grfLangID;
-			break;
-		}
-	}
-	_currentLangID = ret;
+	_currentLangID = language_id;
 }
 
 bool CheckGrfLangID(byte lang_id, byte grf_version)
--- a/src/newgrf_text.h
+++ b/src/newgrf_text.h
@@ -9,7 +9,7 @@
 StringID GetGRFStringID(uint32 grfid, uint16 stringid);
 const char *GetGRFStringPtr(uint16 stringid);
 void CleanUpStrings();
-void SetCurrentGrfLangID(const char *iso_name);
+void SetCurrentGrfLangID(byte language_id);
 char *TranslateTTDPatchCodes(uint32 grfid, const char *str);
 
 bool CheckGrfLangID(byte lang_id, byte grf_version);
--- a/src/strgen/strgen.cpp
+++ b/src/strgen/strgen.cpp
@@ -88,6 +88,7 @@
 static byte _lang_pluralform;
 static byte _lang_textdir;
 static uint16 _lang_winlangid;
+static uint8 _lang_newgrflangid;
 #define MAX_NUM_GENDER 8
 static char _genders[MAX_NUM_GENDER][16];
 static uint _numgenders;
@@ -663,12 +664,19 @@
 			error("Invalid textdir %s", str + 8);
 		}
 	} else if (!memcmp(str, "winlangid ", 10)) {
-		char *buf = str + 10;
+		const char *buf = str + 10;
 		long langid = strtol(buf, NULL, 16);
 		if (langid > UINT16_MAX || langid < 0) {
 			error("Invalid winlangid %s", buf);
 		}
 		_lang_winlangid = (uint16)langid;
+	} else if (!memcmp(str, "grflangid ", 10)) {
+		const char *buf = str + 10;
+		long langid = strtol(buf, NULL, 16);
+		if (langid >= 0x7F || langid < 0) {
+			error("Invalid grflangid %s", buf);
+		}
+		_lang_newgrflangid = (uint8)langid;
 	} else if (!memcmp(str, "gender ", 7)) {
 		char *buf = str + 7;
 
@@ -933,6 +941,7 @@
 	_lang_name[0] = _lang_ownname[0] = _lang_isocode[0] = '\0';
 	_lang_textdir = TD_LTR;
 	_lang_winlangid = 0x0000; // neutral language code
+	_lang_newgrflangid = 0; // standard english
 	// TODO:!! We can't reset the cases. In case the translated strings
 	// derive some strings from english....
 
@@ -1183,6 +1192,7 @@
 	hdr.plural_form = _lang_pluralform;
 	hdr.text_dir = _lang_textdir;
 	hdr.winlangid = TO_LE16(_lang_winlangid);
+	hdr.newgrflangid = _lang_newgrflangid;
 	strcpy(hdr.name, _lang_name);
 	strcpy(hdr.own_name, _lang_ownname);
 	strcpy(hdr.isocode, _lang_isocode);
--- a/src/strgen/strgen.h
+++ b/src/strgen/strgen.h
@@ -23,7 +23,8 @@
 	 *   http://msdn.microsoft.com/en-us/library/ms776294.aspx
 	 */
 	uint16 winlangid;   // windows language id
-	/* byte pad[0];        // pad header to be a multiple of 4 */
+	uint8 newgrflangid; // newgrf language id
+	byte pad[3];        // pad header to be a multiple of 4
 };
 
 assert_compile(sizeof(LanguagePackHeader) % 4 == 0);
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -1315,7 +1315,7 @@
 
 	_dynlang.curr = lang_index;
 	_dynlang.text_dir = (TextDirection)lang_pack->text_dir;
-	SetCurrentGrfLangID(_langpack->isocode);
+	SetCurrentGrfLangID(_langpack->newgrflangid);
 	SortNetworkLanguages();
 	return true;
 }