In Umbraco V6 è possibile ottenere un dictionaryitem con il seguente comando:Umbraco ottiene voce del dizionario per lingua, come?
umbraco.library.GetDictionaryItem("EmailSubject");
Questo recupera il valore corretto di "EmailSubject" a seconda di quale cultura l'utente sta visitando il sito Umbraco.
Ora sto scrivendo una semplice libreria di classi di posta elettronica in cui non mi interessa System.Threading.Thread.CurrentThread.CurrentCulture e non voglio impostare il CurrentCulture tutto il tempo, prima di ottenere il valore. Funziona, ma non mi piace l'approccio. Sto scrivendo una semplice libreria di mailing. Per ogni destinatario della posta penso che non sia davvero efficace impostare la cultura in questo modo.
La soluzione che ho trovato (ricerca online, ho perso la fonte sorry) è il seguente esempio:
//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);
ho creato un po 'di metodo di supporto per rendere più facile:
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;
}
Esempio per ottenere il "EmailSubject" in tedesco, usando i miei aiutanti:
string emailSubject = GetDictionaryText("EmailSubject", "de");
questo funziona (testato con umbraco 6.2.x) ma come si può notare, ogni volta che si desidera un testo come questo, deve essere creata una nuova istanza della classe umbraco.cms.businesslogic.Dictionary.DictionaryItem ... che non è necessaria male ma mi stavo chiedendo se fosse disponibile un metodo statico per questo, forse permettendomi di specificare la lingua o cultura (come stringa) invece della lingua o id cultura che può differire in ambienti diversi ...
Dal momento che il L'API di umbraco è enorme (ea volte alcune funzionalità interessanti sono prive di documenti) e non sono riuscito a trovare una soluzione migliore per questo, mi chiedevo se esiste un modo migliore "nativo" di umbraco per ottenere questo, senza metodi di supporto extra come ho elencato sopra.
Nella risposta, indicare la versione di umbraco che si sta utilizzando.
Quindi si ottiene l'intero elenco e lo si carica nella cache? Per ogni lingua? A quale funzione di umbraco ci si riferisce? –