c#開發之多國語言解決方案gun.gettext + poedit

jopen 8年前發布 | 13K 次閱讀 C# I18N .NET開發

1.工具簡介

1.1.關于i18n

i18n其來源是英文單詞 internationalization的首末字符i和n,18為中間的字符數是“國際化”的簡稱。

i10n為資源本地化,全稱為Localization,因為首字母I與末字母N之間共10個字母,又稱為I10N。資源本地化就是要讓這個軟件產品使用當地的環境,如語言、文化、使用習慣等

一般涉及到具體國家的語言文件,以i10n來表示,而多國語言相關的解決方案以i18n表示。

1.2.關于gun.gettext

gun.gettext軟件國際化的解決方案之一,類似的還有IBM的ICU4C。但ICU4C比較龐大。

gun.gettext最早被使用在linux上,現在已經支持全面

下面是列舉一些相關文檔:

關于使用,網上有很多,這里不做介紹

和普通翻譯相比,你不需要再手動輸入一次Key,它可以自動進入源文件根據一定的規則提取key

1.3.關于POEdit

poedit依賴gun.gettext,實現了圖形化的操作。分為免費版和pro版本,一般免費版功能足夠使用了

官方網站: http://poedit.net/

2.使用

下面將用僅有一個Hellow world的控制臺項目講解其用法

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hellow Wolrd");
        Console.Read();
    }
}

2.1在poedit中配置

首先運行POEdit,新建一個po翻譯文件并保存

此時是po文件打開狀態,即可設置編目(必須設置,否則會有編碼問題)

設置完成后才能保證打開cs文件時不報編碼錯誤

接下來設置配置查找路徑,它會去路徑下的目標文件中自動提取key

最后設置提取字符:

提取字符的規則非常復雜,如果需要自定義的話可以在文件-首選項-提取器中修改

但假如設定為_,那么代碼中就是

_("content")

其他以此類推

2.2轉出po文件

gun.gettext提供了一套完整的解決方案,而poedit只是一個圖形化編輯工具。

c#需要使用gun.gettext.net,下載地址: http://sourceforge.net/projects/gettextnet/

傳統的導出方法網上有很多,比較繁瑣

這里使用我寫的工具類進行導出,它使用gun.gettext內部接口。

工具類GunGetTextSeriHelper地址: http://git.oschina.net/Hont/GunGetTextSeriHelper

在Release目錄下找到編譯好的轉出工具,其中ReadMe包含使用說明

運行批處理后會生成i10n文件,這個是已序列化好的本地化翻譯文件。和I18N.cs一起放入項目文件中

這里把i10n作為外部載入來操作,也可以包含在項目資源中

此時zh_CN.po的內容還是空的,現在修改一下代碼讓其可以被識別

并且初始化一下i18n,載入本地化文件

static void Main(string[] args)
{
    I18N.DeserializeFromFile("zh_CN_i10n");
    Console.WriteLine(I18N._("Hellow Wolrd"));
    Console.Read();
}

然后回到poedit,執行更新

此時有若干種可能更新失敗,需要檢查上面所說的配置步驟,還需要把.po文件放在項目根目錄中

最好是放在i18n文件夾中,它會自動識別相對路徑

翻譯好后,不用生成mo文件,選擇保存,然后直接按照上述步驟使用我的工具再生成一次i10n文件。

ok,國際化支持成功:

Tip:gun.getText對wpf的xaml文件支持不是很好,谷歌了很多資料,都無法從xaml中提取字符,只能通過wpf動態鏈接到cs文件中,執行替換

來自: http://www.cnblogs.com/hont/p/5129806.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!