<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 16.2 從翻譯說起 wxWidgets是通過wxLocale來提供語言翻譯支持的.而且它自己也已經被完整的支持了很多種語言.請從wxWidgets的官方網站下載最新的翻譯包. wxWidgets提供的國際化語言支持和GNU的gettext工具包非常的相似.wxWidgets使用的分類條目機制和gettext的分類條目機制是二進制兼容的,意味著你可以使用所有的gettext工具.并且在運行時不需要別的任何附加的庫支持因為wxWidgets內部實現了對條目文件的讀取. 在程序開發過程中,你需要gettext工具包來操作分類條目(或者poEdit工具,參考下面的小節).有兩種類型的消息分類條目文件,一種是源文件,它是文本格式文件,擴展名為.po,另外一種是二進制分類條目文件,它是通過分類條目源文件使用gettext工具包中的工具 msgfmt創建的,擴展名是.mo. 在程序運行過程中只需要二進制的分類條目文件.針對每一種你想要支持的語言,你都需要單獨提供種分類條目文件. poEdit 你不需要使用gettext提供的命令行工具來維護你的分類條目.Vaclav Slavik制作了一個叫做poEdit的工具,它是一個圖形化的gettext前端工具,可以從 http://www.poedit.org 下載.運行界面如下圖所示.它可以用來幫助你維護分類條目,產生.mo文件以及隨著你的代碼的更改和增加將新的需要翻譯的條目合入舊的分類條目文件. ![](img/mht3E25%281%29.tmp) 一步一步介紹創建消息翻譯分類條目 遵循下面的這些步驟來進行某個消息條目的建立: 1. 在你的代碼中,將需要翻譯的字符串常量使用wxGettranslation宏或者它的簡短替代品_()宏括起來.對于那些不需要翻譯的字符串,也請使用wxT()或者等價的_T()宏括起來,以便其可以實現Unicode兼容. 2. 將你在代碼中標識為需要翻譯的字符串整理到.po文件中.當然,這么負責的步驟你不需要使用手工去作它,你可以使用gettext工具包中的 xgettext工具,然后使用"-k"參數指定到底翻譯wxGettranslation宏還是_()宏指代的字符串. poEdit工具也可以幫你完成這個工作,和xgettext的"-k"參數等價的功能需要在配置對話框中指定. 3. 將整理好的.po文件中的字符串翻譯為你希望使用的那種語言的字符串,每種語言對應一個.po文件,并且要指定這種語言使用的編碼方式. 如果沒有使用poEdit工具,你可以使用任何你喜歡的文本編輯器來完成這個工作,對應的.po文件的文件頭如下所示: ``` # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR &lt;EMAIL@ADDRESS&gt;, YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 1999-02-19 16:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME &lt;EMAIL@ADDRESS&gt;\n" "Language-Team: LANGUAGE &lt;LL@li.org&gt;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso8859-1\n" "Content-Transfer-Encoding: 8bit\n" ``` 注意倒數第二行的charset屬性,指定了這個分類條目文件使用的編碼方式.本文件中所有的字符串都將采用這種編碼方式,這是非常重要的,因為如果你使用了非Unicode的編碼而沒有指定其編碼方式,那些GUI控件將不知道怎樣顯示你翻譯的文本. 1. 將翻譯好的.po文件編譯為二進制的.mo文件.這要用到一個工具叫做msgfmt,poEdit也可以幫你完成這個工作. 使用msgfmt的命令行如下所示: ``` msgfmt -o myapp.mo myapp.po ``` 1. 在你的代碼中設置合適的locale參數以便它使用對應的分類條目(我們將在接下來的小節,"使用wxLocale"中介紹相關內容). 在Mac OS X系統上,你還需要更改一個叫做Info.plist的文件,這個文件是用來描述你的軟件包的相關信息的.它是一個使用UTF-8編碼的Xml文件,其中包含一個叫做CFBundleDevelopmentRegion的條目用來描述軟件的開發語言(比如說:英語),而Mac OSX將會查詢軟件包中某些默認路徑來找到這個軟件支持的語言.例如,如果存在目錄German.lproj,則認為這個軟件支持德語.因為 wxWidgets并不使用這樣的目錄名稱,你需要在這個文件中顯式的指定你的應用程序支持的語言類型.這可以通過在其中增加 CFBundleLocalizations條目來實現,如下所示: ``` <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleLocalizations</key> <array> <string>en</string> <string>de</string> <string>fr</string> </array> ``` 使用wxLocale wxLocale封裝了所有和本地化相關的設置,類似于C語言中的locale的概念.通常你在你的應用程序類中定義一個wxLocale類型的成員,比如說:m_locale,然后在你的應用程序的OnInit函數中,象下面這樣初始化這個變量: ``` if (m_locale.Init(wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING)) { m_locale.AddCatalog(wxT("myapp")); } ``` 注意wxLocale::Init函數將會查找wxstd.mo文件,這個文件代表wxWidgets自己的翻譯分類條目.參數 wxLANGUAGE_DEFAULT指定使用系統默認的語言,你也可以通過使用對應的wxLANGUAGE_xxx宏來強制指定某種特定的語言. 當wxLocale加載一個翻譯條目的時候,這個條目被自動從它自己的編碼轉換成系統當前使用的編碼,這是wxLocale的默認行為,如果你不希望使用這個行為,你可以在調用wxLocale::Init時不傳遞wxLOCALE_CONV_ENCODING標記. wxWidgets在哪些目錄里尋找對應的.mo文件呢?對于任何一個待查目錄&lt;DIR&gt;,它的查找范圍包括下面的這些目錄: ``` <DIR>/<LANG>/LC_MESSAGES <DIR>/<LANG> <DIR> ``` 到底哪些目錄是待查目錄,依系統的不同各不相同: * 在所有的平臺上,LC_PATH環境變量指定的目錄將成為待查目錄. * 在Unix或Mac OS X上,wxWidgets的安裝路徑將成為待查目錄,另外還有/share/locale, /usr/share/locale, /usr/lib/locale, /usr/locale /share/locale以及當前目錄. * 在Windows平臺上,應用程序所在的目錄也將成為待查目錄. 你還可以通過函數wxLocale::AddCatalogLookupPathPrefix增加你自己的待查目錄,比如: ``` wxString resDir = GetAppDir() + wxFILE_SEP_PATH + wxT("resources"); m_locale.AddCatalogLookupPathPrefix(resDir); // 假設resDir是c:\MyApp\resources, 假設當前使用法語, // AddCatalog將查找的待查目錄除了前面介紹的所有待查目錄外, // 還將額外查找下面的路徑: // // c:\MyApp\resources\fr\LC_MESSAGES\myapp.mo // c:\MyApp\resources\fr\myapp.mo // c:\MyApp\resources\myapp.mo m_locale.AddCatalog(wxT("myapp")); ``` 通常在發行你的應用程序的時候,你應該為每個語言創建一個子目錄,目錄名稱使用代碼某種區域的標準的國際化名稱,然后在其中放置對應的 &lt;appname&gt;.mo.比如,wxWidgets自帶的internat例子程序將ISO639格式編碼的法語和德語翻譯文件分別放置在 fr和de目錄中.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看