2015-04-15 17 views
17

Attualmente sto utilizzando con diverso Main Menus su Culture Layers (en/de). Per il contenuto normale (tradotto) sta funzionando.Menu su livello di traduzione che scompare nei siti modulo personalizzati

Ma per i moduli/pagine personalizzati come utente/account o MyModule/elenco il menu non viene visualizzato.

Come posso risolvere questo problema?

+0

Avete un esempio di il codice per il menu, o forse un URL per la pagina interessata? – JDandChips

+0

Mi spiace che l'URL non sia ancora pubblico. Non esiste un codice speciale per il menu, solo un menu "tedesco" e un menu "inglese" a seconda della cultura corrente. sembra proprio che i controllori non "pubblichino" la cultura, quindi non esiste una cultura impostata per la vista restituita dal controller. Forse c'è un attributo come '[Themed]' ma per cultura ... –

+0

Come viene risolta la cultura nella tua applicazione? È impostato tramite la tabella di routing e risolto dall'indirizzo? –

risposta

2

Non sono a conoscenza di alcun filtro che imposta l'attributo, ma puoi sicuramente scrivere un filtro di azione per fare lo stesso.

Se la cultura è stato risolto attraverso il routing, utilizzare il seguente codice:

using System.Globalization; 
using System.Threading; 
using System.Web.Mvc; 

public class CultureAttribute : ActionFilterAttribute { 

public override void OnActionExecuting(ActionExecutingContext filterContext) { 

    string language = (string)filterContext.RouteData.Values["language"] ?? "en"; 
    string culture = (string)filterContext.RouteData.Values["culture"] ?? "US"; 

    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 

} 
} 

Se avete informazioni cultura impostato nelle variabili di sessione di questo codice:

using System.Globalization; 
using System.Threading; 
using System.Web.Mvc; 

public class CultureAttribute : ActionFilterAttribute { 

public override void OnActionExecuting(ActionExecutingContext filterContext) { 

    string language = (string)filterContext.HttpContext.Session.Contents["language"] ?? "en"; 
    string culture = (string)filterContext.HttpContext.Session.Contents["culture"] ?? "US"; 

    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 

} 
} 
+0

Non so come la traduzione di handle frutteto, ma non ho impostato la lingua nell'URL. Ho appena aggiunto una traduzione per le nuove pagine e i livelli per la lingua. Quando l'utente fa clic su "Traduzioni: de" viene caricata la pagina tedesca. Quindi nessun percorso qui. –