我正在用 C# 为 Windows CE 设备编写程序,并希望根据应用程序本身的语言设置来翻译应用程序。
我已经阅读了一些关于使用资源文件进行本地化和使用“可本地化”和“语言”属性翻译表单的文章。根据我的阅读,我了解到这种类型的表单翻译适用于操作系统语言设置(如果我错了,请纠正我)。
现在我正在寻找一种方法来根据我自己的程序内语言设置进行表单翻译,最好使用资源文件。
我已经考虑过在每个表单的 Load 事件中进行此翻译,但也许还有其他解决方案或最佳实践。任何帮助表示赞赏。
我正在用 C# 为 Windows CE 设备编写程序,并希望根据应用程序本身的语言设置来翻译应用程序。
我已经阅读了一些关于使用资源文件进行本地化和使用“可本地化”和“语言”属性翻译表单的文章。根据我的阅读,我了解到这种类型的表单翻译适用于操作系统语言设置(如果我错了,请纠正我)。
现在我正在寻找一种方法来根据我自己的程序内语言设置进行表单翻译,最好使用资源文件。
我已经考虑过在每个表单的 Load 事件中进行此翻译,但也许还有其他解决方案或最佳实践。任何帮助表示赞赏。
如果您要将其放入 Load 事件中,请考虑制作模板表单。在模板表单的某处,添加您的本地化检查。然后,让您的其他表单继承模板,它们将默认获取 Load 事件。
如果使用 Language.resx、Language.[language]-[country].resx 的本地化方式,生成的类 Language 将具有一个名为 Culture 的属性,可以设置该属性以覆盖当前的系统文化。
Language.Culture = new CultureInfo("sv-SE");
label1.Text = Language.my_language_string;
如果你想使用 ResourceManager 类,它有一个成员 GetResourceSet(),它接受一个参数 CultureInfo。我自己没有尝试过使用 GetResourceSet,但听起来你可以使用它。
ResourceManager CultureResourceManager = new ResourceManager("My.Language.Assembly", System.Reflection.Assembly.GetExecutingAssembly());
ResourceSet resourceSet = CultureResourceManager.GetResourceSet("sv-SE", true, true);
resourceSet.GetString("my_language_resource");
MSDN 链接: http: //msdn.microsoft.com/en-us/library/system.resources.resourcemanager.getresourceset (v=vs.80).aspxo