如何使我的.NET应用程序支持不同的语言
我正在编写的应用程序即将完成,我希望会说不同语言的人使用它。
我不确定从哪里开始,就编程而言,全球化和文化之间有什么区别?
如何用不常见的短语(例如"此应用程序是为了完成此操作而构建的")代替File(文件),Open(打开),Save(保存)等...并将其变成西班牙语?
非常感谢 :-)
解决方案
微软已经有一个很好的教程
对于非常简单的系统,请创建一个接口,该接口定义诸如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=...
所有疑问将在下面的书中回答。最初的章节介绍了所有主要概念和术语以及花式缩写,例如i18n。直到最后没有时间阅读..但是直到我读完为止。如果我们正在认真考虑正确的做法并且有时间的话,建议我们使用它:)
http://www.amazon.com/NET-Internationalization-Developers-Applications-Development/dp/0321341384
图片http://ecx.images-amazon.com/images/I/51WEMCH8TRL.SL500_AA240.jpg
要拥有"全球化"的应用程序,我们需要做的事情有所不同。
1)翻译表单和应用程序中控件的每个标签
我们需要在每个表单和控件上将属性" Localizable"设置为true。使用此属性可以创建每种语言和地区的资源文件。现在,通过"语言"属性,我们可以选择要支持的语言。当我们在组合框列表中选择一种语言时,表单(或者控件)将自动切换为该语言。现在,翻译控件中的每个单词是工作。进行修改后,Visual Studio将立即为特定语言创建资源文件。 (例如,对于France-France,为MyForm.fr-FR.resx)。
2)将代码中的每个硬编码字符串导入到resx文件中
创建一个资源文件(个人而言,我使用StringTable.resx)并添加每个字符串以在此文件中进行翻译。之后,为我们要支持的每种语言创建一个资源文件,并翻译每个文件中的字符串。例如,如果要支持法语,则可以为法语-法国创建StringTable.fr.resx或者StringTable.fr-FR.resx。使用ResourceManager类,我们可以加载每个字符串。
注意:如果使用的是Visual Studio 2005或者2008,则默认情况下已经创建了一个资源文件。
3)我们需要明智地制定表格和控件
Microsoft指南:Microsoft指南
4)处理日期和数字
如果应用程序创建了可以发送给其他地区的其他用户的数据文件,则在将数据保存到文件中时需要考虑一下。因此,始终将日期时间存储在UTC中,并且仅在加载信息时才在本地进行转换。这同样适用于十进制数字,尤其是如果它们存储在文本中。
当我们编译应用程序时,Visual Studion将在子文件夹fr中创建卫星文件,例如MyApplication.fr.dll。要加载此dll,我们需要在应用程序启动时切换当前线程的语言。
这里的代码:
CultureInfo ci = new CultureInfo("fr"); Thread.CurrentThread.CurrentUICulture = ci;