2010-01-25 92 views
1

我開始改變我的應用程序,它使用的錯誤,GUI等我考慮這兩種方法都硬編碼字符串,但讓我知道是否有更好的方法:本地化最佳實踐

- 將所有字符串放在源文件(.rc)文件中。

- 定義文件中的所有字符串,每種語言一次。使用預處理器定義來決定編譯哪些字符串。

這兩種方法中的哪一種通常是首選的?

回答

6

將所有的字符串放在資源文件中。一旦你完成了,有幾個很好的翻譯軟件包可用。這些軟件包所做的一件有用的事情是允許您通過不編程的人完成翻譯。

還要記住,國際化(i18n)是一個很大的課題,需要考慮很多事情。這不僅僅是翻譯字符串的問題。做一個網絡搜索,至少。你可能想讀一本書:我使用國際編程爲Windows施密特作爲指導。這是微軟出版社出版的一本舊書,我必須通過舊書服務才能獲得它;大多數更現代的東西似乎是在國際化.NET應用程序。不知道更多關於你的項目(什麼樣的軟件,誰是目標受衆,你有什麼樣的組織,什麼樣的預算,爲什麼你有興趣國際化等),這是關於大部分我都可以告訴你。

+1

+1不僅僅是文本:圖像需要文化上正確,表單可能需要重新設計,貨幣/日期格式需要由代碼正確處理等。另外,不要連接字符串 - 使用String.Format,以便翻譯人員可以在輸出中的正確位置插入變量值。另外:儘可能避免國際化的需要(例如,不要在通用圖像可能適用於全球範圍的圖標上使用「停止」一詞) – 2010-01-25 22:43:27

+0

並且不要忘記從右向左的語言 - 從右向左閱讀時需要反轉一些圖像,特別是當它們與文本內聯時 – 2010-01-26 02:46:54

0

通常您會看到特定於語言環境的資源文件,其中包含由鍵引用的字符串。針對不同的語言環境編譯不同版本是一個非常嚴格的解決方案,將成爲維護的噩夢。使用資源文件還允許用戶擁有備用語言環境。

0

還有另一種方法就是將字符串放入源代碼中,並使用諸如tr(「」)之類的字符,並使用其中一個工具將它們除去並轉換它們。

它適用於任何工具包/ GUI庫。
您可以標記要轉換的文本和文本不可更改(如協議字符串或數據庫鍵)。
它使源代碼更易於閱讀和搜索,而不必查找IDS_MESSAGE34的含義。

資源文件的一個問題,至少在Windows/MFC中是,你不能在對話框中使用字符串表。所以你在stringtabel中有一些文本,而在對話框部分有一些你必須分別進行說明。