C#字符串翻译

时间:2011-07-06 20:56:41

标签: c# string internationalization translation

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# (从头开始)构建的应用程序的通用内部化方法?

2 个答案:

答案 0 :(得分:6)

  

是否存在使用C#(从头开始)构建的应用程序的通用内部化方法?

是的,使用resource files。这是MSDN上的another article

答案 1 :(得分:1)

在我目前工作的C#项目中,我们编写了一个如下工作的辅助函数:

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

在构建时,脚本会搜索所有I18n.Translate调用以及所有UI控件,并使用所有英语短语填充表格。这被翻译了。

在运行时,英语文本在字典中查找,并替换为翻译后的文本。 类似于我们的winforms Dialog资源:它们是用英语构造的,然后使用相同的字典翻译。

这个方案的最大优势也是最大的弱点:如果你在两个地方使用相同的字符串,它的翻译方式是相同的。这会缩短您发送给翻译的文件,这有助于降低成本。如果您需要强制使用相同英语单词的不同翻译,则需要解决此问题。只要我们拥有该系统(4年左右),我们就没有必要。还有一些好处:您可以阅读与源内联的英文UI文本(因此不要隐藏在您需要命名的标识符后面),如果删除代码,它也会自动从已翻译的资源中删除。