обнаружение и настройка культуры автоматически c # mvc - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в 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 метод у меня его нет, я ищу способ сделать это.И после того, как это сделано, если человек из английской страны, URL выглядит следующим образом:

www.website.com / ru /

, если человек изИспанская страна выглядит следующим образом:

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 / ru / controller / action

или

www.website.com / ru / anotherController / anotherAction

при изменении языка

www.website.com/ ES / sameController / саmeAction

1 Ответ

0 голосов
/ 20 ноября 2018

По моему мнению, я бы не стал искать файлы cookie и сохранять там информацию или читать культуру компьютера (файлы cookie могут быть отключены в пользовательской системе), не забывайте давать пользователям возможность выбрать язык - это лучший вариант.Чтобы решить эту проблему, нужно использовать глобализацию и локализацию, потому что именно для этого они и предназначены.

Вот ссылка, которая поможет вам начать в этом:

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

Надеюсь, это поможет, если в Google можно найти не так много других ссылок.Удачного кодирования дальше.

...