最近发现 WinForm 的官方国际化是这样的:
每设置一个语言后,设计器会自动生成对应的 resx 文件,如:Form1.resx (Default), Form1.zh-Hans.resx , Form1.en-US.resx 等等。
这样简单的设置的确很6,除了在资源文件里面会生成一些奇怪的名称,例如由 >> 开头的资源名,还有一些 resource.Name34, resource.Name.35 等等这些由数字组成的资源名,这对程序员不大友好。
还有一个问题是,当你设置完了所有的语言,未来的某个时刻想更改一下某个控件的名称(Name),设计器只会去修改当前语言下的 resx 文件,其他 resx 文件并不会同步到这个 Name。所以一旦有控件改了名称,还需要选一遍语言,然后设置一遍 Text。这比较不方便,因为我可能已经忘掉了之前这个控件上的字符串是什么了。
我有旧代码,想要改控件名,所以我还是用回非官方的国际化方法吧。链接:http://www.cnblogs.com/codefish/p/4778269.html 。这样也会有重构Name时不同步问题,只能手动改 resx 文件了。
不过如果重新写 WinForm 工程的话,可能这种方法还行,除了会生成一些程序员看不懂的资源。
相比之下还是 WPF 好,WPF 是 Text 中有资源的链接, {DynamicResource xxx} 这个样子,字符串资源是不知道控件的名称是什么。WinFrom 是反过来,字符串资源知道控件的名称,即字符串资源是紧耦合于控件名称的。这种依赖关系影响代码修改。
Reference:
1. https://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.71).aspx
2. http://www.dotnetcurry.com/showarticle.aspx?ID=174