【发布时间】:2008-09-18 04:37:52
【问题描述】:
我正在编写的应用程序即将完成,我希望说不同语言的人使用它。
我不知道从哪里开始,就编程而言,全球化和文化有什么区别?
如何将不常见的短语(例如“此应用程序旨在执行此操作”而不是 File、Open、Save 等)转换为西班牙语?
非常感谢:-)
【问题讨论】:
标签: .net globalization culture
我正在编写的应用程序即将完成,我希望说不同语言的人使用它。
我不知道从哪里开始,就编程而言,全球化和文化有什么区别?
如何将不常见的短语(例如“此应用程序旨在执行此操作”而不是 File、Open、Save 等)转换为西班牙语?
非常感谢:-)
【问题讨论】:
标签: .net globalization culture
微软已经有了很好的tutorial
【讨论】:
要拥有一个“全球化”的应用程序,您有很多不同的事情要做。
1) 翻译应用程序中表单和控件中的每个标签
您需要在每个窗体和控件上将属性“Localizable”设置为 true。此属性允许创建每种语言和地区的资源文件。现在,使用“语言”属性,您可以选择要支持的语言。当您在组合框列表中选择一种语言时,您的表单(或控件)将自动切换到该语言。现在,翻译控件中的每个单词是您的工作。进行修改后,Visual Studio 将为特定语言创建一个资源文件。 (例如,MyForm.fr-FR.resx 代表 French-France)。
2) 将代码中的每个硬编码字符串导入 resx 文件
创建一个资源文件(我个人使用 StringTable.resx)并将每个要翻译的字符串添加到该文件中。之后,为您想要支持的每种语言创建一个资源文件,并翻译每个文件中的字符串。例如,如果您想支持法语,您可以为 French-France 创建 StringTable.fr.resx 或 StringTable.fr-FR.resx。使用 ResourceManager 类,您可以加载每个字符串。
注意:如果您使用的是 Visual Studio 2005 或 2008,您已经默认创建了一个资源文件。
3) 您需要明智地设计表单和控件
微软指南:Microsoft Guidelines
4) 处理日期和数字
如果您的应用程序创建了可以发送给其他地区的其他用户的数据文件,则在将数据保存在文件中时需要考虑一下。因此,始终以 UTC 存储您的日期时间,并仅在您加载信息时在本地进行转换。同样的事情也适用于十进制数,尤其是当它们以文本形式存储时。
当您编译应用程序时,Visual Studion 将在子文件夹 fr 中创建类似 MyApplication.fr.dll 的附属文件。要加载此 dll,您需要在应用程序启动时切换当前线程的语言。
代码如下:
CultureInfo ci = new CultureInfo("fr");
Thread.CurrentThread.CurrentUICulture = ci;
【讨论】:
您的所有疑问都将在下面的书中得到解答。最初的章节解释了所有主要概念和术语以及像 i18n 这样的花哨的缩写。直到最后都没有时间阅读它。但是直到我读到为止都很好。如果您认真对待正确的方式并有时间,建议您这样做:)
http://www.amazon.com/NET-Internationalization-Developers-Applications-Development/dp/0321341384
【讨论】:
对于一个非常简单的系统,创建一个定义 GetSaveText() 等方法的接口,并允许将这样的程序集插入到您的应用程序中。
【讨论】:
对于 10-1000 个字符串,这应该是一个非常好的解决方案:
每个语言环境都有一个资源文件。我不知道.NET,但我确信有一些常见的方法可以做到这一点。然后,在您的资源获取代码中,根据您的用户的浏览器区域设置加载适当的代码。要求此代码为您获取某个键的正确字符串。
示例文件内容,如果我要从头开始实现它:
resources.en:
save=Save
close=Close
ok=OK
areYouSure=Are you sure?
resources.es:
save=I don't know how to say anything in Spanish, oops
close=...
ok=...
areYouSure=...
【讨论】: