Мультиязычность ASP.NET MVC

228
30 сентября 2017, 19:42

Как лучше сделать многоязычность в приложении? На данный момент использую файлы ресурсов и там перевожу нужные мне слова на разные языки, но для длинного текста делать это неудобно. Я прочитал, что есть несколько способов реализации многоязычности:

  1. С помощью файлов ресурсов.
  2. Использование разных View.
  3. Смешанный (1 и 2 сразу).

Я хочу использовать 3 вариант.

Вопрос: Как правильно выводить нужный View, если выбранный язык хранится в Cookies? И как быть с новостями, они у меня хранятся в БД на английском. Надо делать другую таблицу для новостей на русском?

Answer 1

В asp.net mvc 5 настроить зависимость view от контекста запроса (в том числе и от cookie) можно через DisplayModeProvider в файле Global.asax

    protected void Application_Start()
    {
        RegisterLanguageDisplayModeProvider("Ru");
        RegisterLanguageDisplayModeProvider("En");
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
    protected void RegisterLanguageDisplayModeProvider(string languageName)
    {
        DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode(languageName)
        {
            ContextCondition = context => context.Request.Cookies["Language"] != null && context.Request.Cookies["Language"].Value.ToString() == languageName
        });
    }

Теперь в названиях разных версий view можно указывать Ru.ViewName.cshtml En.ViewName.cshtml. Это же работает и для layout-ов

По поводу дизайна базы данных есть хорошая статья. Там используется MySql, но подходы спокойно применяются и для MsSql

READ ALSO
Как подключиться к api telegram на C#?

Как подключиться к api telegram на C#?

Как подключиться, читать и писать сообщения в телеграме, но через свою программу, только используя телеграм api?

216
Как не забыть js? [требует правки]

Как не забыть js? [требует правки]

Я вот недавно учил js и различные его проявления ,и вот теперь решил усиленно учить c# , вопрос, как не забывать при этом уже выученное по js, не путаться...

211
Java методы, сокращенные до выражений

Java методы, сокращенные до выражений

В C#, начиная с версии 60, метод, который только возвращает значение:

261
Не сохраняются изменения в базе данных

Не сохраняются изменения в базе данных

Организовал связь один к одному между двумя таблицами базы данных, одна таблица Users, вторая UserProfilesМодели следущие:

215