2011-07-06 438 views
5

C#是否提供了一種方法來即時翻譯字符串或類似的東西?C#字符串翻譯

我現在工作的一些遺留代碼,其中有這樣一些地方:

section.AddParagraph(String.Format("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(String.Format("Description: {0}", currentReport.Tenant.Name)); 

section.AddParagraph(); 

section.AddParagraph(String.Format("Issued: #{0:D5}", currentReport.Id)); 
section.AddParagraph(String.Format("Date: {0}", currentReport.Timestamp.ToString(
        "dd MMM yyyy", CultureInfo.InvariantCulture))); 
section.AddParagraph(String.Format("Time: {0:HH:mm}", currentReport.Timestamp)); 

所以,我想實現基於即時這些字符串的翻譯在某些替換表(例如,如Qt那樣)。

  • 這是可能的(可能是,使用的東西有什麼C#已經或使用一些後處理 - 可能與PostSharp)?
  • 是否存在用C#(從零開始)構建的應用程序的一些通用內部化方法?

回答

6

是否存在用C#(從頭開始)構建的應用程序的一些通用內部化方法?

是的,使用resource files。這裏的another article在MSDN上。

1

在C#項目,我目前的工作,我們寫了一個輔助函數是這樣的:

section.AddParagraph(I18n.Translate("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(I18n.Translate("That's all"); 

在構建時,腳本搜索所有I18n.Translate調用,以及所有的UI控件,並用所有英語短語填充表格。這被翻譯。

在運行時,英文文本在字典中查找,並替換爲翻譯文本。 類似的事情發生在我們的winforms對話框資源:它們是用英語構造的,然後使用相同的字典翻譯。

這個方案的最大優點也是最大的弱點:如果你在兩個地方使用相同的字符串,它會被翻譯成相同的。這縮短了您發送給translater的文件,這有助於降低成本。如果您需要強制使用同一個英文單詞的其他翻譯,則需要解決該問題。只要我們有這個系統(4年左右),我們從來沒有需要它。還有一些好處:您可以閱讀與源代碼內聯的英文UI文本(因此不會隱藏在您需要命名的標識符後面),並且如果刪除了代碼,它也會自動從已翻譯的資源中刪除。

+0

哦,i18n代表i-nternationalizatio-n。 – 2011-07-06 21:14:45