2015-07-06 54 views
0

我在Sitecore 8.0 Update 2中构建了一项自动化任务,以自动发送一些电子邮件。这些电子邮件需要使用不同的语言。Sitecore:通过语言获取翻译

我一直使用这种方法:

Sitecore.Globalization.Translate.TextByDomain("General Dictionary", "some-key"); 

然而,当我尝试使用此代码:

Sitecore.Globalization.Translate.TextByLanguage("some-key", Sitecore.Context.Language); 

它不工作(即使我简单地使用当前上下文语言)。 我可以找到几乎没有关于这个文件。我需要做些什么来实现这个目标?

+0

这是Sitecore中的计划任务。如果是这样,我认为那里没有合适的'Sitecore.Context'(或'Sitecore.Context.Language')。您应该先编写一些代码以获取该邮件的正确语言,然后使用它代替调用“Sitecore.Context.Language”。尝试调试您的代码并查看使用的语言。 –

+0

我也试过这个,但它有相同的效果。它总是只返回键值(检查翻译字典,我正在寻找的键) – Timon

+0

这个翻译是否存在于'core'或'master'数据库中?在任务执行期间,什么是“Sitecore.Context.ContentDatabase”和“Sitecore.Context.Database”?在traslation中使用的数据库是'database = Sitecore.Context.ContentDatabase? Sitecore.Context.Database? Factory.GetDatabase(“核心”)' –

回答

3

由于@jammykam建议,也许你需要用与SiteContextSwitcher类代码,因为Sitecore.Context.Database可能任务代理执行过程中引用核心数据库,因为上下文网站是“调度” 所以,你的代码应该是:

using (var switcher = new SiteContextSwitcher((SiteContextFactory.GetSiteContext("website")))) 
{ 
    //Rest of your code 
} 
+0

这是否可行?你没有包含对'SiteContextSwitcher'的调用 – jammykam

+1

@jammykam我现在加了它,错过了它 –

0

我检查了Sitecore.Globalization.Translate.TextByLanguage方法,它的工作原理。

您能否请检查翻译是否存在于'核心'数据库中。 Sitecore用于在“主”数据库中存储字典项目,但现在它将翻译存储在“核心”数据库中。

  1. 将shell切换到'core'数据库。
  2. 转到词典:/ sitecore/system/Dictionary
  3. 通过字符串中的第一个字母:“some-key” - >“S”查找您的密钥。
  4. 检查是否存在此密钥的翻译。
    • 请选择DictionaryKey项目>“some-key”
    • 切换语言并检查翻译是否存在。
+0

这是不正确的。字典翻译使用回退,首先查找已定义的DictionaryDomain,然后在主数据库'/ sitecore/system/Dictionary'中最终回退到核心数据库。请注意,他正在讨论自定义字典项目,而不是默认的sitecore用户界面标签。 – jammykam