2011-07-06 218 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