自动检测并设置文化C#MVC

时间:2018-11-20 19:43:26

标签: c# asp.net-mvc asp.net-mvc-4

我是c#mvc的新手,我正在尝试创建一个多语言网站,到目前为止,到目前为止,我一直在阅读最佳实践,即使用资源或文件resx并在cookie中设置语言或文化变量,但是我的问题是如何将文化自动设置为cookie?我的意思是

如果某人是第一次访问该网站;我如何全局检测个人计算机或浏览器的语言,以及如何将文化设置为该人将来在网站上进行的每个操作所检测到的语言,以及由于该人更改语言并再次访问该网站而将其存储在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/cn /

如果此人来自西班牙国家,则看起来像这样:

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());
}

从现在开始,我完全迷失了,如果您能帮助我,我打算将URL从此 www.website.com/AutoDetectedLanguage / 更改为此 www。 website.com/anotherLanguage /

对于以后的每个动作,也都停留在选定或检测到的文化中,例如

www.website.com/zh-CN/controller/action

www.website.com/en/anotherController/anotherAction

如果语言发生变化

www.website.com/es/sameController/sameAction

1 个答案:

答案 0 :(得分:0)

在我看来,我不会去那里寻找cookie和保存信息,也不会阅读个人计算机的文化(cookie可能会在用户系统中被禁用),请记住为用户提供选择其语言的选项是最好的选择。 现在,解决此问题的方法是使用全球化和本地化,因为这是它们的设计目的。

下面是一个可以帮助您开始的链接:

https://www.c-sharpcorner.com/UploadFile/4d9083/globalization-and-localization-in-Asp-Net-mvc-4/

如果在Google上找不到很多其他链接,希望对您有所帮助。祝您编码愉快。