2022年8月16日 星期二

淺談幾種程式語言的 I18N處理

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));

結論

以上就是幾個程式語言關於 I18N的處理方式,

基本上大家的方式都差不多相對的只是做法上些許的差異,

當然這些例子僅是淺談下原理而已,

實作部分得看各個專案的情況不同複雜度也相對不同,

此處僅是讓大家對多國語言的處理有個基礎認識

沒有留言: