我正在使用 Visual Studio(2005 及更高版本)。我正在尝试制作一个应用程序,用户可以在其中更改所有菜单、输入格式等的语言。我将如何继续这样做,因为我认为 .Net 中有一些完整的功能可以帮助我解决这个问题?
我需要考虑以下几点(如果我错过了一些明显的东西,请填写我)
- 字符串(菜单、文本)
- 输入数据(解析浮点数、日期等)
- 应该很容易添加对另一种语言的支持
我正在使用 Visual Studio(2005 及更高版本)。我正在尝试制作一个应用程序,用户可以在其中更改所有菜单、输入格式等的语言。我将如何继续这样做,因为我认为 .Net 中有一些完整的功能可以帮助我解决这个问题?
我需要考虑以下几点(如果我错过了一些明显的东西,请填写我)
无论如何,我都不是 .NET 方面的专家,但本地化绝不像“交换字符串值”或“更改日期格式”那么简单。还有更多需要考虑的因素,例如布局、正确的文本放置。
以中文为例。您阅读的方式是从上到下而不是从左到右。如果正确本地化,应用程序应该考虑到这一点。
http://msdn.microsoft.com/en-us/library/y99d1cd3(VS.80).aspx似乎是一个好的开始,但如果您正在处理 Windows 窗体。
经典的秘诀是:设计没有母语但有本地化功能的应用程序,并将初始化开发成一种语言(例如,英语)。因此,您每天晚上构建应用程序并将其本地化为英语;如果没有本地化步骤,它将无法使用。做得好,初始样本本地化的资源可以替换为任何其他语言的资源。从一开始就考虑非罗马文字。拥有一个始终需要本地化的无语言应用程序,而不是需要减去其母语并添加替代语言的特定语言应用程序要干净得多。
对于字符串,您应该将字符串与代码分开(使用 XML/DLL 将字符串 ID 转换为真实字符串是一种方法)。但是,您确实需要确保您支持某些语言的双字节字符(如果您使用 C/C++,这是相关的)。
对于输入数据,您想要的是具有不同的语言环境。在 Java 中,这相对容易,如果您使用 C#,它可能也很容易。在 C/C++ 中我真的不知道。基本思想是输入解析器应该根据当时选择的语言环境而有所不同。因此,每个字段(文本字段、文本框等)都必须有一个抽象解析器,然后根据区域设置(从右到左、双字节等)由不同的类实现。
检查 Java 实现以获取有关他们如何做到这一点的详细信息。它非常实用。
您肯定需要使用 .NET ResourceManager 和 resx 文件 xml 格式,但是有很多方法可以使用它。
这实际上取决于您想要实现的目标。对我来说,我想要一个任何人都可以修改的单个 xml 资源文件(针对每种支持的语言)。我创建了一个帮助类,将全局资源文件加载到 ResourceManager(仅一次)中,并且我有一个帮助函数,它为我提供了给定名称所需的资源。这种方法的唯一缺点是我无法利用资源与属性的动态绑定。
我发现这比每个表单的多个或嵌入式资源文件更好、更容易管理。此外,完全相同的方法可以在 ASP.NET 应用程序中使用。我还发现这种方法意味着将资源翻译和向客户提供语言包的外包更易于管理。