i18n 來自於 internationalization,字母 i 與 n 中間共有18的字母,也就是國際化的意思。
底下列舉幾個程式語言在多國語言處理的原理,
基本上就是要將原始程式碼需要翻譯的字串改成轉換為各國語言的程式碼,
這部份各程式語言大同小異,之前也有介紹過 Django 的i18n處理,
底下就來看看
淺談幾種程式語言的 I18N處理
JAVA部分 (參照原始網址)
尚未有語系相關設定的文字訊息
程式改寫多國語言後為下圖,原始碼分成三部分,最上部根據執行的參數選定要使用的屬性檔,中間部分決定選用的語言,最底下則分別印出該語言的訊息Python部分 (參照原始網址)
自行加入語言檔案於
locale/zh_Hant/LC_MESSAGES/demo.po,
msgid “這是程式字串的id (多半都以英文為基礎)”
msgstr “翻譯的文字放此”
修改此 po檔案中的字串資料,再用命令
build成.mo檔:
python msgfmt.py -o locale/zh_Hant
/LC_MESSAGES/ i18n_demo.mo demo.po
原始碼:
最後使用命令
export LANG=cn && python
i18n_demo.py
就可輸出相應語言的文字
C#部分 (參照原始網址)
要將屬性欄的 Localizable 打開,
為各個語言新增資源檔案,例如德文使用' MainForm.de-DE.resx '
需要有 resource manager 來轉換資源檔中的字串:
public class ResourceManager
{
public static string GetString(string data, CultureInfo cultureInfo)
{
return CommonResource.ResourceManager.GetString(data, cultureInfo);
}
}
再透過 resource manager 提供的方法將
Label的顯示文字改為目前的語言:
myDisplayLabel.Text = string.Format("{0}",
ResourceManager.GetString(FIXED_TEXT, CultureInfo.CurrentUICulture));
沒有留言:
張貼留言