【问题标题】: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 :)

标签: c# globalization


【解决方案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 的评论。如果您没有启用本地化和文化设置,您将看不到任何更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多