Umbraco按语言获取字典项目,怎么样?

时间:2015-03-02 13:53:16

标签: c# umbraco

在Umbraco v6中,可以使用以下命令获取字典项目:

umbraco.library.GetDictionaryItem("EmailSubject");

这将检索" EmailSubject"的正确值。取决于用户访问umbraco网站的文化。

现在我正在编写一个简单的电子邮件类库,我不关心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");

这是有效的(使用umbraco 6.2.x测试)但是你可以注意到,每次你想要这样的文本时,umbraco.cms.businesslogic.Dictionary.DictionaryItem类的新实例必须被创建...这不是必要的坏但我想知道是否有一个静态方法可用于此,也许允许指定语言或文化(作为字符串)而不是语言或文化ID可以有所不同环境...

由于umbraco API很大(有时很酷的功能没有记录),我找不到更好的解决方案,我想知道是否有更好的umbraco" native"实现这一目标的方法,没有我上面列出的额外帮助方法。

在您的回答中,请列出您正在使用的umbraco版本。

2 个答案:

答案 0 :(得分:7)

使用LocalizationService按语言获取字典项。我创建了一个执行此操作的静态方法:

validates :product_id, uniqueness: { scope: :user_id }

答案 1 :(得分:1)

据我所知,Umbraco目前没有静态方法通过特定语言获取字典项。我必须做同样的事情来按语言获取字典项目(我使用的是Umbraco版本7.2.8)。但是,我按照Umbraco提供的功能获得了语言列表。

我希望Umbraco将在未来版本中添加此功能。我认为这是必要的,如你所说。