在运行时设置文化时,资源文件无法正常工作

时间:2014-09-10 16:24:02

标签: c# asp.net localization

我正在运行时在代码隐藏中设置页面文化,如下所示:

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
Page.Culture = "fr-FR";

资源文件位于GlobalResource文件夹中,我有2个文件:SomeFile.resxSomeFile.fr.resx

在标记页面中,我有一个看起来像这样的文字:

<asp:Literal runat="server" ID="test" Text="<%$ Resources:SomeFile, SomeKey%>" />

如果设置文化的代码被注释掉,那么文字将采用SomeFile.resx中的值,但如果我运行设置文化的代码,那么我也得到{{1}中的值文件而不是SomeFile.resx文件中的值。我也尝试将文化信息设置为“fr”,看看是否有任何区别,但事实并非如此。

我需要改变什么?

感谢。

2 个答案:

答案 0 :(得分:3)

用于查找本地化资源的Microsoft article提供了如何执行此操作的良好示例。根据您的编写,您似乎没有创建新的ResourceManager对象来使用该文化:

private ResourceManager rm { get; set; }

protected void Page_Load()
{
  var newCulture = new CultureInfo("fr-FR");
  Thread.CurrentThread.CurrentCulture = newCulture;
  Thread.CurrentThread.CurrentUICulture = newCulture;
  Page.Culture = "fr-FR";
  this.rm = new ResourceManager("SomeFile", typeof(Program).Assembly);

  this.test.Text = rm.GetString("SomeKey");
}

答案 1 :(得分:0)

好的,对于那些来到这里的人,我已经明白了。

1)将资源文件放在App_GlobalResources文件夹中。例如,您可能有SomeFile.resxSomeFile.fr.resx

2)在你的代码背后,设置文化如下:

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
Page.Culture = "fr-FR";

3)然后,要访问这些值,请写下:

string SomeValue = GetGlobalResourceObject("SomeFile", "SomeKey").ToString();

我认为这是最简单的方法。