【问题标题】:detect and set culture automatically c# mvc自动检测和设置文化 c# mvc
【发布时间】: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

【问题讨论】:

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


【解决方案1】:

在我看来,我不会去寻找 cookie 并在那里保存信息或阅读电脑的文化(cookie 可以在用户系统中禁用)记住让用户选择他们的语言是最好的选择。 现在解决这个问题的方法是使用全球化和本地化,因为这就是它们的设计目的。

这里有一个链接可以帮助您开始:

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

如果在 Google 上找不到很多其他链接,我希望能有所帮助。快乐编码进一步。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2010-10-10
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多