国际化
我之前 WinForm 国际化都是凑一些代码搞起(请看文后 Reference)。
最近发现还有个官方国际化方法:
- 首先设置 Form 的 Localizable 属性为 true
- 选择 Form 的 Language 为 "(Default)",然后给页面中每个控件设置一遍 Text
- 选择 Form 的 Language 为 "中文(简体)",然后给页面的每个控件设置一遍 中文 Text
- 对所需要支持的语言,先设置 Form 的 Language 为所要支持的语言,然后给页面的每个控件设置一遍 Text
每设置一个语言后,设计器会自动生成对应的 resx 文件,如:Form1.resx (Default), Form1.zh-Hans.resx , Form1.en-US.resx 等等。
问题
用了一下官方方法后,我发现了以下问题:
- 设计器生成的 resx 文件里面会有一些奇怪的名称,例如:由 >> 开头的资源名、 resource.Name34、resource.Name35 等等。这些名称对程序员不友好。
- 重构控件名称的时候,设计器只会去修改当前语言下的 resx 文件,其他 resx 文件中的相应控件名称不会改变。所以还需手工重设其他语言环境下这个控件的Text。这比较不方便,因为我可能已经忘掉了之前这个控件上的字符串是什么了。(非官方的国际化也有这个问题,而且稍微大一点,设计器不会修改任何一个 resx 文件,所以都要自己改)
- 如果之前 Form 的 Localilzable 是 false,而且手动设置了一些字符串,然后设置 Form 的 Localizable 为 true,则之前手动设置的字符串会被设计器删除。这个问题比较严重。唯一想到的方法是,在界面的 resx 文件中不手动添加东西,另建一个 resx 文件存放手动设置的字符串。这样同样不大易用。
选择
在开始工程之前要选择好非官方还是官方的国际化方法,在项目中切换可能会丢失掉之前的字符串资源。
目前我有旧代码,还是使用非官方的方法吧,毕竟 resx 可控,设计器不会自己加东西进去。只是重构控件名称时候,手工的工作量大了。(官方重构时的工作量也大)
以后如果新建工程,官方的方法或许还行,只要把自己手工写的资源分文件来搞。
Reference:
1. 手动的国际化:http://www.cnblogs.com/codefish/p/4778269.html
2. 官方的WinForm国际化:https://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.71).aspx
3. 代码切换官方国际化:http://www.dotnetcurry.com/showarticle.aspx?ID=174