如何最好地将整个应用本地化到多种不同的语言?

6
我正在使用Visual Studio(2005及以上版本)。我正在考虑尝试制作一个应用程序,让用户可以更改所有菜单、输入格式等语言。由于我认为在 .Net 中有一些完整的功能可以帮助我完成这个功能,请问我该如何做?
我需要考虑以下几点(如果我漏掉了一些显而易见的东西,请告诉我):
  • 字符串(菜单、文本)
  • 输入数据(解析浮点数、日期等)
  • 应该很容易地添加对另一种语言的支持
5个回答

3
我并不是.NET方面的专家,但本地化绝不仅仅是“交换字符串值”或“更改日期格式”那么简单。还需要考虑到布局、正确的文本位置等其他因素。
以中文为例,阅读方式是从上到下而不是从左到右。如果应用程序进行了适当的本地化,应该考虑到这一点。
如果你正在处理Windows Forms,则http://msdn.microsoft.com/en-us/library/y99d1cd3(VS.80).aspx似乎是一个很好的开始。

3
经典的做法是:设计应用程序时不使用任何本地语言,而是使用本地化功能,并将其初始化为一种语言(例如英语)。这样,您就可以每晚构建应用程序并将其本地化为英语;如果没有本地化步骤,它将无法使用。做好这一点后,初始示例本地化的资源可以被替换为任何其他语言的资源。从一开始就考虑非罗马脚本。拥有始终需要本地化的无语言应用程序比需要减去其本地语言并添加替换的特定语言应用程序更加清洁。

1

对于字符串,你应该将字符串与代码分开(使用一个XML/DLL文件来将字符串ID转换为实际字符串是一种方法)。但是,你需要确保支持某些语言的双字节字符(如果你使用C/C++的话,这很重要)。

对于输入数据,你需要有不同的区域设置。在Java中,这相对容易,如果你使用C#,那么也可能很容易。在C/C++中,我不太清楚。基本思想是根据当前选择的区域设置,输入解析器应该是不同的。因此,每个字段(文本字段、文本框等)必须有一个抽象解析器,然后根据区域设置(从右到左、双字节等)由不同的类来实现。

查看Java实现的详细信息。它非常实用。


1

你绝对需要使用.NET ResourceManager和resx文件xml格式,但是有许多方法可以使用它。

这实际上取决于你想要实现什么。对我来说,我想要一个单一的xml资源文件(每种支持的语言一个),任何人都可以修改它。我创建了一个帮助类,将全局资源文件加载到ResourceManager中(仅一次),并且我有一个帮助函数,为给定名称提供所需的资源。这种方法的唯一缺点是我无法利用资源对属性的动态绑定。

我发现这比为每个表单使用多个或嵌入式资源文件更好、更容易管理。此外,完全相同的方法也可以在ASP.NET应用程序中使用。我还发现这种方法意味着外包资源翻译和向客户提供语言包更加可管理。


1

微软推荐使用卫星程序集来处理资源,如打包和部署资源所述。如果您正在使用ResourceManager来加载资源,则.NET将为CurrentUICulture加载正确的资源。这默认为Windows中用户当前的UI语言设置。

可以通过Visual Studio或外部工具WinRes.exe本地化Windows表单。 本文介绍了WinRes以及如何使用Visual Studio本地化表单。


非常有趣。一旦我有时间脱离工作,就会查看这些链接。 - Statement

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接