【问题标题】:C# string translationC# 字符串翻译
【发布时间】:2011-07-06 20:56:41
【问题描述】:

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

【问题讨论】:

    标签: c# string internationalization translation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      在运行时,在字典中查找英文文本,并用翻译文本替换。 我们的 winforms 对话框资源也发生了类似的情况:它们是用英语构建的,然后使用同一个字典进行翻译。

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

      【讨论】:

      • 哦,i18n 代表 i-nternationalization-n。
      猜你喜欢
      • 1970-01-01
      • 2018-05-09
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2014-06-08
      相关资源
      最近更新 更多