上次說到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,則可以根據需要設定不同的設定檔。這樣就比較靈活了。