Salve a tutti, sto realizzando un sito che abbia la possibilità di essere visualizzato in diverse lingue a seconda della scelta da parte dell'utente.
Inoltre ho voluto separare la parte desktop da quella mobile e per far ciò ho aggiunto al progetto in VisualStudio 2012 una nuova Areas chiamandola Mobile.
Allo stato attuale delle cose, seguendo varie guide ho ottenuto la traduzione del sito, lato desktop, tramite file di GlobalResources e programmando ad hoc il RouteConfig.
Nello specifico il RouteConfig è il seguente
namespace FlipBoard
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
const string defautlRouteUrl = "{controller}/{action}/{id}";
var dataTokensDefault = new RouteValueDictionary();
var ns = new string[] { "FlipBoard.Controllers" };
dataTokensDefault["namespaces"] = ns;
var dataTokensGlobal = new RouteValueDictionary();
var nsg = new string[] {"FlipBoard.Areas.Mobile.Controllers" };
dataTokensGlobal["namespaces"] = nsg;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteValueDictionary defaultRouteValueDictionary = new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Route defaultRoute = new Route(defautlRouteUrl,
defaultRouteValueDictionary, new MvcRouteHandler());
routes.Add("DefaultGlobalised",
new GlobalisedRoute(defaultRoute.Url, defaultRoute.Defaults, dataTokensDefault));
routes.Add("Default", new Route(defautlRouteUrl,
defaultRouteValueDictionary, null, dataTokensDefault, new MvcRouteHandler()));
}
}
public class GlobalisedRoute : Route
{
public const string CultureKey =
"culture";
static string CreateCultureRoute(string unGlobalisedUrl)
{ return string.Format("{{" + CultureKey + "}}/{0}", unGlobalisedUrl); }
public GlobalisedRoute(string unGlobalisedUrl, RouteValueDictionary defaults, RouteValueDictionary tokens) :
base(CreateCultureRoute(unGlobalisedUrl),
defaults,
new RouteValueDictionary(new { culture = new CultureRouteConstraint() }),tokens,
new GlobalisationRouteHandler()) { }
}
public class GlobalisationRouteHandler : MvcRouteHandler
{
string CultureValue
{
get
{
return (string)RouteDataValues[GlobalisedRoute.CultureKey];
}
}
RouteValueDictionary RouteDataValues { get; set; }
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
RouteDataValues = requestContext.RouteData.Values;
CultureManager.SetCulture(CultureValue);
return base.GetHttpHandler(requestContext);
}
}
public class CultureRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
if (!values.ContainsKey(parameterName))
return false;
string potentialCultureName = (string)values[parameterName];
return CultureFormatChecker.FormattedAsCulture(potentialCultureName);
}
}
}
e la calsse CultureManager è una calsse statica che contiene la lista delle lingue supportate e cambia la cultureInfo del CurrentThread.
Ora dovrei fare la stessa cosa anche per la parte Mobile, ma non riesco. Ho provato ad aggiungere al RouteConfig una nuova route mappata con il percorso dell'area Mobile ma senza ottenere alcuna traduzione.
Visualizzo correttamente la pagina mobile, ma resta sempre in italiano, effettuando il debug non passo per la calsse CultureManager.
Qualcuno sa come posso ottenere la traduzione delle pagina di un Area?