2015-03-02 15 views
5

W Umbraco V6 to jest możliwe, aby uzyskać dictionaryitem za pomocą następującego polecenia:Umbraco uzyskać pozycję słownika według języka, jak?

umbraco.library.GetDictionaryItem("EmailSubject"); 

ten pobiera właściwą wartość „Emailsubject” w zależności od kultury, które użytkownik odwiedza stronę internetową imbusowego.

Teraz piszę prostą bibliotekę klasy e-mail, w której nie dbam o System.Threading.Thread.CurrentThread.CurrentCulture i nie chcę ustawiać CurrentCulture przez cały czas, zanim otrzymam wartość. Działa, ale nie podoba mi się podejście. Piszę prostą bibliotekę pocztową. Dla każdego odbiorcy poczty uważam, że ustalenie takiej kultury nie jest zbyt skuteczne.

Rozwiązanie znalazłem (szukają w internecie, straciłem źródło przepraszam) jest następujący przykład:

//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); 

stworzyłem niektóre metody pomocnika, aby ułatwić:

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; 
} 

przykład dostać "EmailSubject" w języku niemieckim, używając moich pomocników:

string emailSubject = GetDictionaryText("EmailSubject", "de"); 

To działa (przetestowany z umbraco 6.2.x), ale jak można zauważyć, za każdym razem, gdy potrzebujesz takiego tekstu, należy utworzyć nową instancję klasy umbraco.cms.businesslogic.Dictionary.DictionaryItem ... która nie jest konieczna źle, ale zastanawiałem się, czy jest dostępna statyczna metoda, może pozwolić na określenie języka lub kultury (jako ciąg) zamiast identyfikatora języka lub kultury, który może się różnić w różnych środowiskach ...

Od czasu Umbraco API jest ogromne (i czasami niektóre fajne funkcje są nieudokumentowane) i nie mogłem znaleźć lepszego rozwiązania, zastanawiałem się, czy istnieje lepszy "natywny" sposób umbraco do osiągnięcia tego, bez dodatkowych metod pomocniczych, jak wymienione powyżej.

W odpowiedzi podaj listę wersji umbraco, której używasz.

Odpowiedz

1

O ile mi wiadomo, Umbraco nie ma statycznej metody, aby uzyskać słownika w określonym języku. Muszę zrobić to samo, co ty, aby uzyskać słownik według języka (użyłem Umbraco w wersji 7.2.8). Jednakże otrzymuję listę języków według funkcji dostarczanej przez Umbraco.

Mam nadzieję, że Umbraco doda tę funkcję w przyszłych wersjach. Myślę, że jest to konieczne, jak powiedziałeś.

+0

Otrzymujesz całą listę i ładujesz ją do pamięci podręcznej? Dla każdego języka? O czym mówi funkcja umbraco? –

7

Użyj parametru LocalizationService, aby uzyskać pozycję słownika według języka. Stworzyłem statyczną metodę, która to robi:

public static string GetDictionaryValue(string key, CultureInfo culture, UmbracoContext context) 
{ 
    var dictionaryItem = context.Application.Services.LocalizationService.GetDictionaryItemByKey(key); 
    if (dictionaryItem != null) 
    { 
     var translation = dictionaryItem.Translations.SingleOrDefault(x => x.Language.CultureInfo.Equals(culture)); 
     if (translation != null) 
      return translation.Value; 
    } 
    return key; // if not found, return key 
} 
+1

Dodałem tę samą metodę rozszerzenia do klasy UmbracoHelper ... – Yoeri

Powiązane problemy