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#
(从头开始)构建的应用程序的通用内部化方法?答案 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文本(因此不要隐藏在您需要命名的标识符后面),如果删除代码,它也会自动从已翻译的资源中删除。