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

我正在使用Visual Studio(2005及以上版本)。 我正在尝试制作一个应用程序,用户可以在其中更改所有菜单,输入格式等语言。 我将如何继续这样做,因为我认为.Net中有一些完整的function可以帮助我解决这个问题?

我需要考虑以下因素(如果我错过了一些明显的东西,请填写我)

  • 字符串(菜单,文本)
  • 输入数据(解析浮点数,日期等)
  • 应该很容易添加对另一种语言的支持

我无论如何都不是.NET的专家,但本地化绝不像“交换字符串值”或“更改日期格式”那么简单。 还有更多需要考虑的因素,例如布局,正确的文字放置。

以中文为例。 你读的方式是从上到下而不是从左到右。 如果正确本地化,应用程序应考虑到这一点。

如果您正在处理Windows窗体,那么http://msdn.microsoft.com/en-us/library/y99d1cd3(VS.80).aspx似乎是一个良好的开端。

经典的方法是:设计没有母语但是本地化设施的应用程序,并将初始化开发成一种语言(例如,英语)。 因此,您每晚构建应用程序并将其本地化为英语; 没有本地化步骤它将无法使用。 做得好,初始样本本地化的资源可以替换为任何其他语言的资源。 从一开始就考虑非罗马脚本。 拥有一个始终需要本地化的无语言应用程序,而不是需要减去其本地语言并添加替换语言的特定于语言的应用程序,这样更清晰。

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

对于输入数据,您想要的是具有不同的区域设置。 在Java中,这是相对容易的,如果你使用C#,它也可能很容易。 在C / C ++中,我真的不知道。 基本思想是输入解析器应该根据当时选择的语言环境而有所不同。 因此,每个字段(文本字段,文本框等)必须具有抽象解析器,然后根据区域设置(从右到左,双字节等)由不同的类实现。

检查Java实现以获取有关它们如何执行的详细信息。 它非常实用。

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

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

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

Microsoft建议的方法是使用附属程序集,如打包和部署资源中所述 。 如果您使用ResourceManager加载资源,.NET将为CurrentUICulture加载正确的资源。 这默认为Windows中用户当前的UI语言设置。

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