我的Kentico 11网站的“默认内容”文化和“访客”文化都设置为德语。当我检查页面的设置选项卡下时,我可以看到它们的区域性也设置为德语。当我在调试器中放置一个断点并检查LocalizationContext.CurrentCulture
的值时,它也会返回德语。
我在web.config中也有以下设置:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="de-DE" uiCulture="en-US" />
但是,ResHelper.GetString
仅返回英语翻译。
如果这是问题,我该如何更改?
更新:我认为可能与this问题有关,但是Thread.CurrentThread.CurrentCulture
也返回了De-De
另一个更新:
ResHelper.GetString("Key", CMS.Localization.LocalizationContext.CurrentCulture.CultureCode);
返回德语翻译
非常好的更新:
感谢Brenden Kehren,我将其范围缩小了。当我像这样在Webpart中调用该函数时,没有问题:
<%# CMS.Helpers.ResHelper.GetString("key") %>
但是当我在Web服务中调用它时,这就是问题所在!
答案 0 :(得分:1)
它返回英文文本,因为德语字段中有英文文本。您的设置听起来正确,根据您的屏幕截图看来是数据输入问题。
更新
基于新的屏幕截图和更新的问题,您是否正在新的私有窗口中测试访问者网站?如果您在Pages应用程序中将区域性设置为英语进行编辑,并在同一浏览器/新标签页中查看该网站,它将显示英语。如果您在实时站点上的该浏览器中更改语言,则下次刷新整个页面时,它还将更新CMS。因此,请始终在专用浏览器窗口中进行测试,以消除缓存或旧Cookie的可能性。
更新2
为了使其正常工作,您需要在用户上下文中访问Web服务。这意味着,如果用户在网站上并加载了页面,系统将知道用户所处的文化。而如果您是在计划任务中使用它,则该操作不会在用户浏览网站的上下文中运行,因此您需要指定获取价值的文化。
答案 1 :(得分:1)
ResHelper.GetString
如果无法确定首选的区域性,则可以使用默认的UI区域性。我不确定您的网络服务是什么样的,并且根据您在请求中向其发送的内容,您很可能会丢失设置文化的cookie。
除了自己提供文化代码外:
GetString(string stringName, string culture = null, bool useDefaultCulture = true)
您可能想看看setting the default UI culture in the web.config。
默认的UI文化是en-us。如果您将系统配置为允许使用更多的UI文化,则可以通过向站点的web.config文件的
<appSettings>
部分添加以下密钥,来为用户更改默认的UI文化:
<add key="CMSDefaultUICulture" value="en-nz" />