根据文化信息使用正确的“.resx”文件
我想在我的项目中使用本地化,所以我使用“.resx”文件。
我有两个文件“StringRes.resx”和“StringRes.fr.resx”。 你可以猜到,我希望我的应用程序的所有消息都根据用户的CultureInfo进行更改。
但是当我这样做时:
public MainWindow() { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr"); InitializeComponent(); }
当我这样做时,它不会改变任何东西:
Console.WriteLine(StringRes.FirstName);
实际上,它始终是StringRes中显示的字符串,而不是StringRes.fr中的字符串
两者都在同一名称空间中。
感谢您的任何帮助。
我创建了自己的测试投影,我用"fr-FR"
作为文化标签。 测试项目可以在我的skydrive上找到。
工作完美。
简而言之:
我将项目的属性中的文化设置为en-US,因为这就是我想要的Resource.resx
。
然后我创建了Resource.resx
, Resource.fr-FR.resx
和Resource.nl-NL.resx
。
我用TestData
字符串填充它们。 并创建了一个带有3个按钮的窗口,其中包含了与它们相关的事件。 在我创建文本块的按钮旁边,文本块绑定到文本字符串字段。
在按钮事件中,我更改了文化和Text
字段。 然后你就可以看到变化发生了。
首先需要在创建Resource.fr-FR.resx
所需的同一文件夹中创建Resource.fr-FR.resx
。 Resource.resx将获得一个代码隐藏文件,所有文化资源文件都不应该。 如果您的Resource.fr-FR.resx确实有一个文化文件,那么您做错了什么,最好删除该资源文件并重新创建它,这样就会丢失它的代码隐藏。
或者你可以简单地替换
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
通过
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr");
- 以编程方式在asp.net应用程序上的microsoft.identityModel中配置federatedAuthentication元素
- 如何在C#中序列化期间为数组赋予属性?
- 如何在EntityFramework中按DateTime.Date进行分组
- 如何在EntityFramework Codefirst中以编程方式使用迁移?
- 打开xml sdk excel公式重新计算缓存问题
- 如何为MongoDb命名空间中的所有类注册ClassClassMap?
- LinqToSql。 更新行时出现死锁。 的Parallel.For
- 在任务运行时以另一种forms更新进度条
- 如何设置C#winforms应用程序来托管SignalR Hubs?