我在Visual C++中開發了一個窗口應用程序(Win32 API)。我必須在此應用程序中添加多語言功能。任何人都可以指導我如何推進這項任務。在win32 API應用程序中實現全球化/多語言功能
回答
在Windows上的多語言應用程序的基礎是使用「資源」。資源是在可執行文件末尾附加的一個塊,它只包含數據,並以非常特定的方式進行格式化,以便Windows能夠解釋這些數據。在你的資源中,你可以找到對話框,字符串表,還有版本信息(在資源管理器中的文件的屬性對話框中顯示的那些信息)。您可以通過在Visual C++中打開exe或dll來觀看任何dll或exe的資源。在開發應用程序時,您可以創建資源(文件/新建),將其添加到項目中(與添加文件時相同)並編輯資源(使用資源編輯器,通常是文件視圖旁邊的選項卡在項目瀏覽器中)。
每個資源(對話框,對話框,模板,版本信息,字符串表,...)都包含您可以更改的語言標識符。您可以使用不同的語言標識符多次創建相同的資源。一旦編譯完成,當應用程序被Windows加載時,它將嘗試打開哪些語言更接近Windows UI語言的資源。
在Windows SDK中定義了一組函數,以便充分利用這些資源:LoadString,LoadCursor,LoadBitmap以及resources chapter中的所有內容。
現在,每次在代碼中使用字符串時,都要將其放入String Table資源中,並使用LoadString函數來檢索它。只要您在資源中設置了正確的語言標識符,窗口和對話框通常以正確的語言加載,而不需要任何特定的函數調用。
瞧,這是我可以做的Windows下多語言開發的最短介紹。我相信你可以在網上找到很多關於Windows下資源或多語言開發的文章。
對所有字符串使用gettext。
的OP表示,Windows:Windows已經這樣做不是來自聯合國* X僅翻譯串... – 2009-10-31 16:03:42
gettext的有很多更提供比Windows的差字符串資源移植庫中的很多本地工具。就像管理原始翻譯改變的情況一樣。 gettext的會說清楚,讓所有的翻譯需要更新自己的翻譯,而翻譯人員將提供與以前翻譯的一個很好的提示。 – 2009-11-02 12:36:45
這可以是一個大問題,或一個小問題,這取決於你的程序做什麼。
觀光考慮:
字符串和字符編碼。將字符串放入資源(或使用gettext)是一個開始,但您可能需要考慮如何在內部存儲字符串;例如。如果您尚未使用這種編碼,請查看UTF-16等Unicode編碼。
考慮如何處理和存儲字符串數據,因爲它很重要:您是否需要排序或進行大小寫比較? ASCII順序(例如比較'char'中的簡單值)可能不正確。其中一些問題概述如下here。
日期和時間輸出格式,貨幣輸出格式和其他內容也取決於文化。
最後,您可能需要根據您使用的接口技術重新佈置UI元素。在不同系統字體的不同語言中字符串越來越短。在極端情況下,您可能需要考慮從右到左閱讀器的佈局。
有幾個側面,你不必擔心:
- 編譯應用程序爲Unicode
- 本地化(翻譯)的應用,使得它「說話」另一種語言
- 使用的語言環境必須按照用戶的預期進行排序或格式化日期/時間/數字
本地化目前最好的做法是在你的代碼沒有用字符串,但它們存儲在純資源的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新聞組上停下來(我知道,把某人從計算器中移走可能不是「好形式」,但有一個專門的地方,所以你可能會得到更好的答案)。
- 1. 全球化:直接在程序中更改語言
- 2. 如何在iphone中實現應用程序多語言選擇?
- 3. 在Rails中實現全球化
- 4. 實現全球化ü
- 5. WPF - 實現多語言應用程序 - 綁定問題
- 6. 全球化我的rails應用程序
- 7. Azure Web應用程序全球化
- 8. 如何在iPhone應用程序中實現語言翻譯?
- 9. 功能測試多語言Symfony2應用
- 10. 如何實現一種功能語言
- 11. Kendo UI全球化/語言包
- 12. 用Umbraco實現多語言功能的幾個問題?
- 13. 在多語言ios應用程序中分配特定語言
- 14. 優化多語言支持功能
- 15. WP7中的多語言應用程序
- 16. Iphone中的多語言應用程序
- 17. 在ASP.NET應用程序中實現多語言的最佳方式
- 18. 在Silverlight和WPF中實現多語言應用程序的最佳方式
- 19. 多語言網站與全球資源
- 20. 在應用程序中實現(安全)Api密鑰
- 21. UWP應用程序在多種語言
- 22. 斯卡拉。語言平坦化功能的實現
- 23. 多語言全文:應該使用哪種詞幹[雪球]語言?
- 24. 全球化現有的Windows窗體應用程序?
- 25. 全球功能
- 26. 從應用程序全球功能鈦退出
- 27. MFC/C#.NET混合模式本地化(多語言/多語言應用程序)
- 28. 任何用於在我的應用程序中實現Facebook「Like」功能的API?
- 29. 在NodeJS應用程序中的全球
- 30. 如何安全地在Android應用程序中實現登錄功能?
感謝您的多語種書面方式這樣的elobrate文本 – 2009-11-03 13:21:35