【问题标题】:Using the correct ".resx" file according to the culture info根据文化信息使用正确的“.resx”文件
【发布时间】:2013-08-21 07:47:38
【问题描述】:

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

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

但是当我这样做时:

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

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

Console.WriteLine(StringRes.FirstName);

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

两者都在同一个命名空间中。

感谢您的帮助。

【问题讨论】:

  • 无论窗口的文化是什么,resx 文件都可以工作,我认为某处有一种应用程序文化 See this

标签: c# resx


【解决方案1】:

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

完美运行。

简而言之:

我将项目属性中的文化设置为 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 确实有一个文化文件,那么您做错了,最好删除该资源文件并重新创建它,这样它就会丢失它的代码隐藏。

【讨论】:

  • 我已经按照你的建议做了,看看你的样本,它可以工作!我的 Resource.fr-FR.resx 有一个代码隐藏文件,所以我按照你说的重新创建了,我不再有问题了。非常感谢。
  • 那么,恭喜您回答了第一个问题!请接受答案,让其他人知道此答案对您有所帮助。接受答案后,您还将获得 +2 声望。有关声誉的更多信息:stackoverflow.com/help/whats-reputation
  • 感谢您提供有关添加资源文件的顺序的详细信息。弄清楚为什么我的不工作 2 小时后,我找到了这篇文章,它也解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多