2011-11-23 71 views
2

我即将为我的雇主启动一个本地化项目。它涉及一个预先存在的项目,它具有许多Windows窗体和一个已建立的代码库,用C#和ASP.NET编程。我已经研究了如何在Visual Studio中本地化应用程序并找到资源。用扩展方法替代本地化

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

于是我想出了一个替代解决方案:

建立一个静态的本地化工具类的扩展方法对字符串:

public static String Localize(this String s) 

从文件的实用程序类加载的本地化字符串上启动。当程序需要某个字符串时,它被称为

"foo".Localize(); 

而程序将使用字符串本身作为表中的键来查找翻译。 这似乎是一个安全和有效的解决方案,我很满意它留在现有代码库上的小脚印。

基本上我要问:

  • 是否有不足之处,以我的解决方案,我已经错过了吗?
  • 我应该查看哪些文件格式的本地化数据(我已经遇到.po文件格式)?
  • 是否有足够的理由偏离资源文件解决方案?

任何建议和/或您可能有的考虑将不胜感激。

+1

我认为对现有代码库的影响是一样的。您必须将该方法添加到所有当前文字。你打算使用文字“选择三个选项之一香蕉,猕猴桃还是橙色”作为关键?听起来很棘手。我不会偏离完美理智的默认解决方案。如果添加了不同的语言,您总是可以重新部署应用程序。 – Bas

回答

0

我的解决方案有缺点,我错过了吗?

我可以指出一些,aspx文件中的文本怎么样。你打算让你的扩展方法也可以使用吗?我想这会很难。

例如<asp:Label Text="Title"> - 你将如何翻译?

此外,您的某些说法并不完全正确。

资源文件是在Visual Studio中唯一可编辑的

它们是XML文件,所以你可以使用任何编辑器来编辑或编写自定义工具来做到这一点。

+0

实际上,这也是表单设计器生成的文件中的问题。我以为我会在主控制器上运行一个递归函数,它会遍历所有的控件并本地化它们的Text属性。 –

+0

您认为资源为xml文件的观点在技术上是正确的。但是xml根本不可读,为它们编写自定义实用程序并不是完全可取的:) –

0

是否有不足之处,以我的解决方案,我已经错过了吗?

标准资源文件不仅仅是改变文本。

您可能需要调整特定元素的大小以适应新文本(如果您不使用现有布局管理机制)。对于某些语言,您需要更改字体/字体大小(例如中文,日文,韩文)或对齐方式(请考虑从阿拉伯语和希伯来语等右向左语言)。

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