根据文化信息使用正确的“.resx”文件

时间:2013-08-21 07:47:38

标签: c# resx

我想在我的项目中使用本地化,所以我使用“.resx”文件。

我有两个文件“StringRes.resx”和“StringRes.fr.resx”。正如你猜测的那样,我希望我的应用程序的所有消息都根据用户的CultureInfo进行更改。

但是当我这样做时:

public MainWindow()
{
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
     InitializeComponent();
}

当我这样做时,它不会改变任何事情:

Console.WriteLine(StringRes.FirstName);

实际上,它始终是StringRes中显示的字符串,而不是StringRes.fr中的字符串

两者都在同一名称空间中。

感谢您的帮助。

2 个答案:

答案 0 :(得分:10)

我创建了自己的测试投影我使用"fr-FR"作为文化标记。测试项目可以在my skydrive找到。

完美无缺。

Culture test

简而言之:

我将项目属性中的文化设置为en-US,因为这就是我希望Resource.resx成为的那样。

然后我创建了Resource.resxResource.fr-FR.resxResource.nl-NL.resx

我用TestData字符串填充它们。并创建了一个带有3个按钮的窗口,其中包含了与它们相关的事件。在我创建文本块的按钮旁边,文本块被绑定到文本字符串字段。

在按钮事件中,我更改了文化和Text字段。然后你就可以看到变化发生了。


首先,您需要在创建Resource.resx所需的同一文件夹中创建Resource.fr-FR.resx。 Resource.resx将获得一个代码隐藏文件,所有文化资源文件都不应该。如果您的Resource.fr-FR.resx确实有一个文化文件,那么您做错了什么,最好删除该资源文件并重新创建它,以免丢失它的代码隐藏。

答案 1 :(得分:0)

或者你可以简单地替换

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");

通过

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr");