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.
Otrzymujesz całą listę i ładujesz ją do pamięci podręcznej? Dla każdego języka? O czym mówi funkcja umbraco? –