Kentico ResHelper.GetString 返回错误的翻译
Kentico ResHelper.GetString returning wrong translation
我的 Kentico 11 网站的默认内容文化和访问者文化都设置为德语。当我检查页面的设置选项卡时,我可以看到他们的文化也设置为德语。当我在调试器中放置一个断点并检查 LocalizationContext.CurrentCulture
的值时,它也是 returns 德语。
我在 web.config 中还有以下设置:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="de-DE" uiCulture="en-US" />
但是,ResHelper.GetString
只有returns英文翻译。
如果这是问题所在,我该如何更改?
更新:我认为这可能与 this 问题有关,但 Thread.CurrentThread.CurrentCulture
也返回 de-De
另一个更新:
ResHelper.GetString("Key", CMS.Localization.LocalizationContext.CurrentCulture.CultureCode);
returns 德语翻译
更新真不错:
感谢 Brenden Kehren,我缩小了范围。当我像这样在 webpart 中调用该函数时,没有问题:
<%# CMS.Helpers.ResHelper.GetString("key") %>
但是当我在网络服务中调用它时,这就是问题的来源!
它正在返回英文文本,因为您在德语字段中有英文文本。您的设置听起来正确,根据您的屏幕截图,似乎是数据输入问题。
更新
根据新的屏幕截图和更新的问题,您是否在新的私人 window 中测试您的访问者网站?如果您将 Pages 应用程序中的文化设置为英语以进行编辑,并在同一 browser/new 选项卡中查看网站,它将显示英语。如果您在实时站点上更改该浏览器的语言,它也会在下次刷新整个页面时更新 CMS。因此,始终在私人浏览器中进行测试 window 以消除缓存或旧 cookie 的可能性。
更新 2
为了使其正常工作,您需要在用户上下文中访问 Web 服务。这意味着如果用户在网站上并加载页面,系统将知道用户所处的文化。而如果您在计划任务中使用它,则不会 运行 在用户的上下文中浏览网站,因此您需要指定获取价值的文化。
ResHelper.GetString
如果无法确定首选文化,则使用默认的 UI 文化。我不确定您的网络服务是什么样的,并且根据您在请求中发送给它的内容,您很可能缺少设置文化的 cookie。
除了自己提供文化代码之外:
GetString(string stringName, string culture = null, bool useDefaultCulture = true)
您可能想看看 setting the default UI culture in the web.config。
The default UI culture is en-us. If you configure the system to allow more UI cultures to be used, you can change the default UI culture for users by adding the following key to the <appSettings>
section of your site's web.config file:
<add key="CMSDefaultUICulture" value="en-nz" />
我的 Kentico 11 网站的默认内容文化和访问者文化都设置为德语。当我检查页面的设置选项卡时,我可以看到他们的文化也设置为德语。当我在调试器中放置一个断点并检查 LocalizationContext.CurrentCulture
的值时,它也是 returns 德语。
我在 web.config 中还有以下设置:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="de-DE" uiCulture="en-US" />
但是,ResHelper.GetString
只有returns英文翻译。
如果这是问题所在,我该如何更改?
更新:我认为这可能与 this 问题有关,但 Thread.CurrentThread.CurrentCulture
也返回 de-De
另一个更新:
ResHelper.GetString("Key", CMS.Localization.LocalizationContext.CurrentCulture.CultureCode);
returns 德语翻译
更新真不错:
感谢 Brenden Kehren,我缩小了范围。当我像这样在 webpart 中调用该函数时,没有问题:
<%# CMS.Helpers.ResHelper.GetString("key") %>
但是当我在网络服务中调用它时,这就是问题的来源!
它正在返回英文文本,因为您在德语字段中有英文文本。您的设置听起来正确,根据您的屏幕截图,似乎是数据输入问题。
更新
根据新的屏幕截图和更新的问题,您是否在新的私人 window 中测试您的访问者网站?如果您将 Pages 应用程序中的文化设置为英语以进行编辑,并在同一 browser/new 选项卡中查看网站,它将显示英语。如果您在实时站点上更改该浏览器的语言,它也会在下次刷新整个页面时更新 CMS。因此,始终在私人浏览器中进行测试 window 以消除缓存或旧 cookie 的可能性。
更新 2
为了使其正常工作,您需要在用户上下文中访问 Web 服务。这意味着如果用户在网站上并加载页面,系统将知道用户所处的文化。而如果您在计划任务中使用它,则不会 运行 在用户的上下文中浏览网站,因此您需要指定获取价值的文化。
ResHelper.GetString
如果无法确定首选文化,则使用默认的 UI 文化。我不确定您的网络服务是什么样的,并且根据您在请求中发送给它的内容,您很可能缺少设置文化的 cookie。
除了自己提供文化代码之外:
GetString(string stringName, string culture = null, bool useDefaultCulture = true)
您可能想看看 setting the default UI culture in the web.config。
The default UI culture is en-us. If you configure the system to allow more UI cultures to be used, you can change the default UI culture for users by adding the following key to the
<appSettings>
section of your site's web.config file:
<add key="CMSDefaultUICulture" value="en-nz" />