多國語言解決方案gnu.gettext + poedit


 

1.工具簡介

1.1.關於i18n

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

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

 

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

 

 

1.2.關於gnu.gettext

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

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

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

 

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

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

 

 

1.3.關於POEdit

poedit依賴gnu.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文件

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

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

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

 

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

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

 

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

 

把po文件放入該目錄,填入參數運行批處理Execute.bat后會生成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:gnu.getText對wpf的xaml文件支持不是很好,谷歌了很多資料,都無法從xaml中提取字符,只能通過wpf動態鏈接到cs文件中,執行替換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM