Windows Phone 7的About模板——Your Last About Dialog(2)支持多语言
上次说到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,则可以根据需要设置不同的配置文件。这样就比较灵活了。

浙公网安备 33010602011771号