资源文件的本地化不起作用
Posted
技术标签:
【中文标题】资源文件的本地化不起作用【英文标题】:Localization with resource files not working 【发布时间】:2016-01-04 16:54:19 【问题描述】:我有 2 个资源文件:
Resource.resx,它是公开的,并且 Resource.en-GB.resx,在“资源”文件夹中设置为“无代码生成”。它们都包含键“BtnConnecter”,Resource.resx 中的法语值和 Resource.en-GB.resx 中的英语值。在我看来,我使用@Resource.BtnConnecter。
我的 Chrome 设置为法语,我的 IE 设置为英语,但我总是看到法语值。
(请注意,我有另一个本地化的 C# 项目。我在 IE 中有英文值,在 Chrome 中有法文值。问题不在导航器配置中。)
我错过了什么?
【问题讨论】:
我知道这很明显,但是您确定要像这样为当前线程设置文化吗?Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
和 cultureName
是否正确?
实际上这对我来说并不明显,因为我是初学者,这就是我错过的,thx :)
【参考方案1】:
您是否修改了 Web.config 以支持全球化?具体来说,culture
、uiCulture
和 enableClientBasedCulture
属性。
<configuration>
<system.web>
<globalization fileEncoding="utf-8" requestEncoding="utf-8" culture="auto" uiCulture="auto" enableClientBasedCulture="true" />
有关此属性的更多信息,请参阅MSDN documentation。
【讨论】:
【参考方案2】:有几件事需要检查:首先,您的 IE 设置为 en-GB 还是 en-US(或只是 en)?您可以尝试将您的英语 resx 重命名为“.en.resx”。这会有所帮助,因为 resx 文件是级联的。如果在该语言中找不到“en-US”的 resx 文件,它将在使用默认值之前查找“en”。因此,您最好使用特定于语言的 resx 文件而不是特定于文化的文件。
其次,您可能需要在 resx 文件中指定“BtnConnecter.Text”,而不仅仅是“Btn.Connecter”。这是因为一个控件经常有多个部分需要全球化,所以使用“control.property”格式作为键,而不仅仅是“控制”。
最后,如果您有一个正在运行的功能性项目,我会比较两者。它们之间可能存在需要修复的差异。我会仔细检查您的 resx 文件的 build-action 属性和“复制到输出目录”属性。
【讨论】:
我已将英文文件重命名为 Resource.en.resx,VS 说我不能使用 BtnConnecter.Text(资源名称 'BtnConnecter.Text' 不是有效标识符',我已经与其他项目相比,设置相同的构建操作并复制到输出目录属性但没有任何改变:/ @Lempkin:您可能需要将资源名称设置为“PageName”.en.resx,其中“PageName”是页面的名称(因此,“Index.aspx.en. resx',是吗?另外,请参阅 Will 的回答和 Orif 的评论。如果您没有启用本地化和文化设置,您将看不到任何更改。以上是关于资源文件的本地化不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用本地资产/HTML/资源时,jQuery getScript 在 Android WebView 中不起作用