上次说到YLAD支持多语言。昨天配置了一下。方法很简单,默认的配置文件是Data.xml,如果要支持多语言,则加上语言的代码后缀即可,如中文为zh,则添加一个Data.zh.xml即可。
显示多语言的流程如下图:
YLAD会读取当前设置的语言代码,这个ISO 2 Letter Language Codes是 ISO 639-1标准制定的,用两个字符表示一种语言。完整的代码列表如下:
Language | Code |
---|---|
Abkhazian | AB |
Afar | AA |
Afrikaans | AF |
Albanian | SQ |
Amharic | AM |
Arabic | AR |
Armenian | HY |
Assamese | AS |
Aymara | AY |
Azerbaijani | AZ |
Bashkir | BA |
Basque | EU |
Bengali, Bangla | BN |
Bhutani | DZ |
Bihari | BH |
Bislama | BI |
Breton | BR |
Bulgarian | BG |
Burmese | MY |
Byelorussian | BE |
Cambodian | KM |
Catalan | CA |
Chinese | ZH |
Corsican | CO |
Croatian | HR |
Czech | CS |
Danish | DA |
Dutch | NL |
English, American | EN |
Esperanto | EO |
Estonian | ET |
Faeroese | FO |
Fiji | FJ |
Finnish | FI |
French | FR |
Frisian | FY |
Gaelic (Scots Gaelic) | GD |
Galician | GL |
Georgian | KA |
German | DE |
Greek | EL |
Greenlandic | KL |
Guarani | GN |
Gujarati | GU |
Hausa | HA |
Hebrew | IW |
Hindi | HI |
Hungarian | HU |
Icelandic | IS |
Indonesian | IN |
Interlingua | IA |
Interlingue | IE |
Inupiak | IK |
Irish | GA |
Italian | IT |
Japanese | JA |
Javanese | JW |
Kannada | KN |
Kashmiri | KS |
Kazakh | KK |
Kinyarwanda | RW |
Kirghiz | KY |
Kirundi | RN |
Korean | KO |
Kurdish | KU |
Laothian | LO |
Latin | LA |
Latvian, Lettish | LV |
Lingala | LN |
Lithuanian | LT |
Macedonian | MK |
Malagasy | MG |
Malay | MS |
Malayalam | ML |
Maltese | MT |
Maori | MI |
Marathi | MR |
Moldavian | MO |
Mongolian | MN |
Nauru | NA |
Nepali | NE |
Norwegian | NO |
Occitan | OC |
Oriya | OR |
Oromo, Afan | OM |
Pashto, Pushto | PS |
Persian | FA |
Polish | PL |
Portuguese | PT |
Punjabi | PA |
Quechua | QU |
Rhaeto-Romance | RM |
Romanian | RO |
Russian | RU |
Samoan | SM |
Sangro | SG |
Sanskrit | SA |
Serbian | SR |
Serbo-Croatian | SH |
Sesotho | ST |
Setswana | TN |
Shona | SN |
Sindhi | SD |
Singhalese | SI |
Siswati | SS |
Slovak | SK |
Slovenian | SL |
Somali | SO |
Spanish | ES |
Sudanese | SU |
Swahili | SW |
Swedish | SV |
Tagalog | TL |
Tajik | TG |
Tamil | TA |
Tatar | TT |
Tegulu | TE |
Thai | TH |
Tibetan | BO |
Tigrinya | TI |
Tonga | TO |
Tsonga | TS |
Turkish | TR |
Turkmen | TK |
Twi | TW |
Ukrainian | UK |
Urdu | UR |
Uzbek | UZ |
Vietnamese | VI |
Volapuk | VO |
Welsh | CY |
Wolof | WO |
Xhosa | XH |
Yiddish | JI |
Yoruba | YO |
Zulu | ZU |
但在实际应用中,完整的country/region code和CultureInfo类里是这样表示的:zh-CN、zh-TW……等,中文就有好几种,如何区分简体中文和繁体中文呢?
下载了YLAD的源代码看,找到了读取语言设置的代码,在LocalizationHelper.cs里:
var language = culture.TwoLetterISOLanguageName;
是在这里读取的,既然我们想要完整的CultureInfo代码,可作如下修改:
var language = culture.Name;
重新编译,更新引用,就可以区分zh-CN和zh-TW了。相应的配置文件要改为Data.zh-CN.xml和Data.zh-TW.xml。
我在codeplex的项目讨论中提到了这个问题,作者说会做如下修改:
首先读取当前country/region设置,即我修改的方式;如果没有本地化的country/region代码,则读取当然的语言代码,即YLAD目前的方式,如果没有找到本地化的语言代码,则使用默认设置。
他提到这样做的原因是某些country/region的区别可能很小或几乎没有,比如de-AT和de-DE,这样设置一个Data.de.xml即可,如果某些country/region的区别较大,如zh-CN和zh-TW,则可以根据需要设置不同的配置文件。这样就比较灵活了。