2009-10-31 43 views

回答

5

在Windows上的多語言應用程序的基礎是使用「資源」。資源是在可執行文件末尾附加的一個塊,它只包含數據,並以非常特定的方式進行格式化,以便Windows能夠解釋這些數據。在你的資源中,你可以找到對話框,字符串表,還有版本信息(在資源管理器中的文件的屬性對話框中顯示的那些信息)。您可以通過在Visual C++中打開exe或dll來觀看任何dll或exe的資源。在開發應用程序時,您可以創建資源(文件/新建),將其添加到項目中(與添加文件時相同)並編輯資源(使用資源編輯器,通常是文件視圖旁邊的選項卡在項目瀏覽器中)。

每個資源(對話框,對話框,模板,版本信息,字符串表,...)都包含您可以更改的語言標識符。您可以使用不同的語言標識符多次創建相同的資源。一旦編譯完成,當應用程序被Windows加載時,它將嘗試打開哪些語言更接近Windows UI語言的資源。

在Windows SDK中定義了一組函數,以便充分利用這些資源:LoadString,LoadCursor,LoadBitmap以及resources chapter中的所有內容。

現在,每次在代碼中使用字符串時,都要將其放入String Table資源中,並使用LoadString函數來檢索它。只要您在資源中設置了正確的語言標識符,窗口和對話框通常以正確的語言加載,而不需要任何特定的函數調用。

瞧,這是我可以做的Windows下多語言開發的最短介紹。我相信你可以在網上找到很多關於Windows下資源或多語言開發的文章。

+0

感謝您的多語種書面方式這樣的elobrate文本 – 2009-11-03 13:21:35

0

對所有字符串使用gettext。

+0

的OP表示,Windows:Windows已經這樣做不是來自聯合國* X僅翻譯串... – 2009-10-31 16:03:42

+0

gettext的有很多更提供比Windows的差字符串資源移植庫中的很多本地工具。就像管理原始翻譯改變的情況一樣。 gettext的會說清楚,讓所有的翻譯需要更新自己的翻譯,而翻譯人員將提供與以前翻譯的一個很好的提示。 – 2009-11-02 12:36:45

0

可以是一個大問題,或一個小問題,這取決於你的程序做什麼。

觀光考慮:

  1. 字符串和字符編碼。將字符串放入資源(或使用gettext)是一個開始,但您可能需要考慮如何在內部存儲字符串;例如。如果您尚未使用這種編碼,請查看UTF-16等Unicode編碼。

  2. 考慮如何處理和存儲字符串數據,因爲它很重要:您是否需要排序或進行大小寫比較? ASCII順序(例如比較'char'中的簡單值)可能不正確。其中一些問題概述如下here

  3. 日期和時間輸出格式,貨幣輸出格式和其他內容也取決於文化。

  4. 最後,您可能需要根據您使用的接口技術重新佈置UI元素。在不同系統字體的不同語言中字符串越來越短。在極端情況下,您可能需要考慮從右到左閱讀器的佈局。

2

有幾個側面,你不必擔心:

  1. 編譯應用程序爲Unicode
  2. 本地化(翻譯)的應用,使得它「說話」另一種語言
  3. 使用的語言環境必須按照用戶的預期進行排序或格式化日期/時間/數字

本地化目前最好的做法是在你的代碼沒有用字符串,但它們存儲在純資源的DLL(或「衛星DLL」) 可能最好從這裏開始:http://msdn.microsoft.com/en-us/goglobal/bb978454.aspx,特別是右邊的教程和演示。

對於本地化工作到細節,你可以檢查此:http://mihai-nita.net/2007/05/03/how-to-localize-an-rc-file/

對於語言環境的自覺行爲,你必須使用特殊的API,如GetNumberFormat或GetDateFormat。 你可以從這裏開始http://msdn.microsoft.com/en-us/library/dd319078%28VS.85%29.aspx或這裏http://msdn.microsoft.com/en-us/goglobal/dd565826.aspx

但是,當然這裏沒有答案是不夠的,因爲有關於該主題的完整書籍。 所以單純從MS全球化門戶(http://msdn.microsoft.com/en-us/goglobal/),尤其是「學習」選項卡,以及o從那裏開始。當你遇到一些麻煩時(你很可能會這樣做),在microsoft.public.win32.programmer.international新聞組上停下來(我知道,把某人從計算器中移走可能不是「好形式」,但有一個專門的地方,所以你可能會得到更好的答案)。