我正在通过母版页中的“更改语言”控件对网站进行本地化。我需要使用您在每种不同语言中使用的当前URL来呈现控件。
因此,如果你在http://site.com/ en /主页/关于并且您将语言更改为法语,我需要引导您http://site.com/ fr < / STRONG> /首页/关于
本地化代码适用于路由数据语言属性,因此我一直在努力弄清楚如何:
有人能指出我正确的方向吗?
我已尝试将ViewContext从父级传递到UserControl,这使我可以访问路径数据,但我无法弄清楚如何从中获取语言路由URL。
答案 0 :(得分:0)
我在我正在本地工作的网站上运行它,它似乎工作。可能有一种更清洁的方式。
HttpRequestBase hrb = HttpContext.Request;
System.Uri url = hrb.Url;
string[] test = url.AbsoluteUri.Split('/');
int nIndex = 0, nCounter = 0;
foreach(string str in test)
{
if (str.Contains("site.com"))
{
nIndex = nCounter;
break;
}
nCounter++;
}
string strLanguage = test[nIndex + 1];
显然,+1甚至可以进入IF声明,但我认为它看起来并不好看。希望这会有所帮助。
答案 1 :(得分:0)
我对此并不是百分之百满意,我还没有达到可以充分测试其影响的阶段,但这是我到目前为止的目标。如果你有更好的解决方案,请回答。
我从主页面传递了ViewContext,因此我从您当前所在的任何网址获取了路径数据的ViewContext。
private string GetLocalisedUrl(ViewContext viewContext, string language)
{
viewContext.RouteData.DataTokens[LANGUAGE_ROUTEDATA_KEY] = language;
UrlHelper helper = new UrlHelper(viewContext.RequestContext);
return helper.Action(viewContext.RouteData.Values["action"].ToString(), viewContext.RouteData.Values["controller"].ToString(), viewContext.RouteData.DataTokens);
}