C# 基于扩展方法的替代定位

C# 基于扩展方法的替代定位,c#,resources,localization,extension-methods,C#,Resources,Localization,Extension Methods,我即将为我的雇主启动一个本地化项目。它涉及一个预先存在的项目,其中包含许多windows窗体和一个已建立的代码库,用C和ASP.NET编程。我研究了如何在VisualStudio中本地化应用程序,并找到了相关资源 虽然这些都是解决问题的适当办法,但我对使用资源的不利方面并不完全满意。也就是说,它占用了相当大的空间,需要对每个表单文件进行更改。此外,资源文件只能在VisualStudio中编辑。我更愿意让没有编程知识的外部翻译人员进行翻译 所以我想出了另一个解决方案: 使用字符串上的扩展方法构建静

我即将为我的雇主启动一个本地化项目。它涉及一个预先存在的项目,其中包含许多windows窗体和一个已建立的代码库,用C和ASP.NET编程。我研究了如何在VisualStudio中本地化应用程序,并找到了相关资源

虽然这些都是解决问题的适当办法,但我对使用资源的不利方面并不完全满意。也就是说,它占用了相当大的空间,需要对每个表单文件进行更改。此外,资源文件只能在VisualStudio中编辑。我更愿意让没有编程知识的外部翻译人员进行翻译

所以我想出了另一个解决方案:

使用字符串上的扩展方法构建静态本地化实用程序类:

public static String Localize(this String s)
实用程序类在启动时从文件加载本地化字符串。当程序需要某个字符串时,称为

"foo".Localize();
程序将使用字符串本身作为表中的键来查找翻译。 这似乎是一个安全有效的解决方案,我对它在现有代码库上留下的小足迹感到满意

基本上,我想问:

我的解决方案是否有我错过的缺点? 我应该研究哪些本地化数据的文件格式我已经遇到了.po文件格式? 这是否是偏离资源文件解决方案的充分理由? 如果您有任何建议和/或考虑,我们将不胜感激

我的解决方案是否有我错过的缺点

我可以指出一些,关于aspx文件中的文本。您是否也要让他们可以使用您的扩展方法?我想那会很难

e、 -你打算怎么翻译

此外,你的一些说法并不完全正确

资源文件只能在Visual Studio中编辑


它们是xml文件,因此您可以使用任何编辑器对其进行编辑,或编写自定义实用程序进行编辑

你正试图重新发明微软很久以前发明的轮子。您可以使用大量可用于资源的工具,甚至可以编写自己的资源提供者

一些可用工具:

如果要为翻译人员使用数据库,请执行以下操作:

我的解决方案是否有我错过的缺点

标准资源文件不仅仅是更改文本

如果不使用现有布局管理机制,可能需要调整某些元素的大小以适应新文本。对于某些语言,您需要更改字体/字体大小,如汉语、日语、韩语或从右向左的语言,如阿拉伯语和希伯来语


此外,翻译标准文件意味着使用了解格式的编辑器可以看到对话框,因此它提供了比独立字符串更多的上下文,从而提高了翻译质量。

我认为对现有代码库的影响是相同的。必须将该方法添加到所有当前文本中。您是否要使用文本选择三个选项之一香蕉、猕猴桃或橙色作为键?听起来很棘手。我不会偏离完美理智的默认解决方案。如果添加了不同的语言,则始终可以重新部署应用程序。实际上,这在forms designer生成的文件中也是一个问题。我想在主控件上运行一个递归函数,它将遍历所有控件并本地化它们的文本属性。但是xml的可读性不是很好,为它们编写自定义实用程序也不是很理想:那里有一些非常有用的信息,特别是第一个链接。非常感谢。