我正在运行时在代码隐藏中设置页面文化,如下所示:
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.resx
和SomeFile.fr.resx
在标记页面中,我有一个看起来像这样的文字:
<asp:Literal runat="server" ID="test" Text="<%$ Resources:SomeFile, SomeKey%>" />
如果设置文化的代码被注释掉,那么文字将采用SomeFile.resx
中的值,但如果我运行设置文化的代码,那么我也得到{{1}中的值文件而不是SomeFile.resx
文件中的值。我也尝试将文化信息设置为“fr”,看看是否有任何区别,但事实并非如此。
我需要改变什么?
感谢。
答案 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.resx
和SomeFile.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();
我认为这是最简单的方法。