在一把umbraco V6很可能得到一个dictionaryitem使用下面的命令:Umbraco通过语言获得词典项目,怎么样?
umbraco.library.GetDictionaryItem("EmailSubject");
这检索,这取决于文化的用户访问该网站的一把umbraco“Emailsubject的”的正确价值。
现在我正在写一个简单的电子邮件类库,我不关心System.Threading.Thread.CurrentThread.CurrentCulture,我不想在获取值之前始终设置CurrentCulture。它有效,但我不喜欢这种方法。我在写一个简单的邮件库。对于每个邮件收件人,我认为设置这样的文化并不是很有效。
我找到了解决方案(网上搜索,我失去了源抱歉)是下面的例子:
//2 = the 2nd language installed under Settings > Languages, which is German in my case
var sometext = new umbraco.cms.businesslogic.Dictionary.DictionaryItem("SomeText").Value(2);
我创造了一些辅助方法,使它更容易:
private string GetDictionaryText(string dictionaryItem, string language)
{
//try to retrieve from the cache
string dictionaryText = (string)HttpContext.Current.Cache.Get(dictionaryItem + language);
if (dictionaryText == null)
{
dictionaryText = new umbraco.cms.businesslogic.Dictionary.DictionaryItem(dictionaryItem).Value(GetLanguageId(language));
//add to cache
HttpContext.Current.Cache.Insert(dictionaryItem + language, dictionaryText, null, DateTime.Now.AddMinutes(10), TimeSpan.Zero);
}
return dictionaryText;
}
private int GetLanguageId(string language)
{
int languageId = 1; //1 = english, 2 = german, 3 = french, 4 = italian
switch (language)
{
case "de":
languageId = 2;
break;
case "fr":
languageId = 3;
break;
case "it":
languageId = 4;
break;
}
return languageId;
}
例获得德国的“EmailSubject”,使用我的帮助者:
string emailSubject = GetDictionaryText("EmailSubject", "de");
This works(使用umbraco 6.2.x进行了测试),但正如您可以注意到的,每当您想要这样的文本时,都必须创建一个umbraco.cms.businesslogic.Dictionary.DictionaryItem类的新实例...这是不必要的不好,但我想知道是否有一个静态方法可用于此,也许允许指定语言或文化(作为字符串),而不是语言或文化身份证,这可能会在不同的环境中有所不同...
由于umbraco API是巨大的(有时一些很酷的功能没有记录),我找不到更好的解决方案,我想知道是否有更好的umbraco“本地”方式来实现这一点,而不需要像上面列出的那样的辅助方法。
在你的回答中,请列出你正在使用的umbraco版本。
那么你得到整个列表并将其加载到缓存中?对于每种语言?什么umbraco功能指的是? – 2016-01-13 16:46:43