首页 文章

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

提问于
浏览
3

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

我有两个文件“StringRes.resx”和“StringRes.fr.resx” . 你可以猜到,我希望我的应用程序的所有消息都根据用户的CultureInfo进行更改 .

但是当我这样做时:

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

当我这样做时,它不会改变任何东西:

Console.WriteLine(StringRes.FirstName);

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

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

感谢您的任何帮助 .

2 回答

  • 9

    我创建了自己的测试投影,我使用 "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确实有一个文化文件,那么您做错了什么,最好删除该资源文件并重新创建它,这样就会丢失它的代码隐藏 .

  • 0

    或者你可以简单地替换

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

    通过

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

相关问题