【发布时间】:2018-11-21 04:48:47
【问题描述】:
我是 c# mvc 的新手,我正在尝试制作一个多语言网站,到目前为止,我一直在阅读最佳实践是使用资源或文件 resx 并在 cookie 中设置语言或文化变量,但我的问题是如何自动将文化设置为 cookie?我是说
如果一个人第一次访问该网站;我如何全局检测 pc 或浏览器语言并将文化设置为该人将在网站上执行的每个未来操作检测到的语言,还将其存储在 cookie 变量中,因为如果该人更改语言并再次访问该网站,网站使用用户选择的语言进行初始化。
到目前为止,我已经得到了这个:
global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpCookie language = HttpContext.Current.Request.Cookies["CultureInfo"];
if (language != null && language.Value != null)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language.Value);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language.Value);
}
else
{
Thread.CurrentThread.CurrentCulture = someWayToDetectThePcOrBrowserLanguage;
Thread.CurrentThread.CurrentUICulture = someWayToDetectThePcOrBrowserLanguage;
}
}
someWayToDetectThePcOrBrowserLanguage 方法我没有,我正在寻找一种方法来做到这一点。一旦完成,如果该人来自英国国家,则网址如下所示:
www.website.com/en/
如果此人来自西班牙国家,则如下所示:
www.website.com/es/
对于更多的语言等等。
现在更改我为 html 设置的语言:
<form id="languages" method="get">
<select name="selectLanguages" id="selectLanguages>
<option value="en">English</option>
<option value="es">Español</option>
<option value="fr">Français</option>
</select>
</form>
我的 jquery 是这个:
$('#selectLanguages').on('change', function () {
var id = $(this).val();
$.ajax({
type: 'GET',
url: '/Language/ChangeCulture',
data: { lang: id },
success: function (e) {
}
})
})
最后的功能是这个:
public void ChangeCulture(string lang)
{
Response.Cookies.Remove("CultureInfo");
HttpCookie languageCookie = System.Web.HttpContext.Current.Request.Cookies["CultureInfo"];
if (languageCookie == null) languageCookie = new HttpCookie("CultureInfo");
languageCookie.Value = lang;
languageCookie.Expires = DateTime.Now.AddDays(10);
Response.SetCookie(languageCookie);
Response.Redirect(Request.UrlReferrer.ToString());
}
从现在开始,我完全迷路了,如果你能帮助我,这打算将这个 www.website.com/AutoDetectedLanguage/ 的 url 更改为这个 www。 website.com/anotherLanguage/
而且对于每一个未来的行动都停留在选定或检测到的文化中,例如
www.website.com/en/controller/action
或
www.website.com/en/anotherController/anotherAction
如果语言改变
www.website.com/es/sameController/sameAction
【问题讨论】:
-
@HereticMonkey 这解决了一个检测浏览器语言的问题,但是关于如何使用检测到的语言初始化网站的任何想法?例如 www.website.com/en/
-
@HereticMonkey 我确实有这种方式的 routeConfig.cs 但我无法让它以这种方式初始化 www.example.com/en/ 而不是 www.example.com
标签: c# asp.net-mvc asp.net-mvc-4