Подтвердить что ты не робот

Глобализация в ASP.Net MVC 3

Я пытаюсь добиться глобализации/локализации в моем приложении MVC 3. Мне не нужны разные Представления для каждого языка. Пожалуйста, предложите, как я могу продолжить. Любые поддерживаемые ссылки/URL-адреса будут очень полезны.

4b9b3361

Ответ 1

Вы локализуете его так же, как любое другое приложение, подобное этому:

  • Создайте папку, назовите ее, например. Ресурсы
  • Щелкните правой кнопкой мыши папку и добавьте класс... выберите файл ресурсов. Назовите это всем, что вам нравится, например. Strings.resx
  • В свойствах файла измените Custom Tool на PublicResXFileCodeGenerator
  • Заполните файл ресурсов с помощью пар ключей и значений перевода (это будет перевод по умолчанию)
  • Создайте другие ресурсы с именем культуры, для которой они предназначены в этом формате: {name}.de.resx, например. Strings.de.resx
  • (Это для Razor), откройте файл web.config в папке Views и добавьте его в /configuration/system.web.webPages.razor/pages/namespaces: < add namespace = "Resources" / > (предполагается, что ресурсы - это имя папки, в которой были созданы ресурсы, и вы не изменили пространство имен по умолчанию на самих файлах resouce). Этот шаг означает, что вам не нужно полностью квалифицировать классы ресурсов в своих представлениях каждый раз, когда вы хотите ссылаться на перевод.
  • Используйте переводы вместо текста в своих представлениях, например, со следующим кодом:

    @Strings.MyString
    

Строки будут автоматически переведены в представление в зависимости от CultureInfo.CurrentCulture, но это автоматически не устанавливается для вас.

Вам нужно будет изменить CurrentCulture (возможно, в Application_BeginRequest). Как вы это делаете, зависит от вас, это может быть значение маршрута, которое задает его, или вы можете прочитать язык браузера пользователя.

Вы можете найти список предпочтительных для пользователя языков (по порядку) в HttpContext.Current.Request.UserLanguages.

Ответ 3

Чтобы добавить некоторые детали в Мартин Бут отличный ответ (в случае, если его ссылка MediaFire может исчезнуть), вот как я это делаю:

Я использовал два файла, так как мне нужен только английский и немецкий ( "de" ):

enter image description here

Для свойств каждого файла мне пришлось вручную вводить пользовательский инструмент, а также значения пространства имен пользовательского инструмента для каждого файла:

enter image description here

enter image description here

И, наконец, я ввел следующее внутри корневого файла Web.Config ниже раздела <system.web>:

<globalization uiCulture="auto" culture="auto" />

Конечно, я также добавил директиву namespace в файле Web.Config под папкой Views (т.е. не корневой), как описывает Мартин:

<add namespace="ViewResources" />

И тогда я смог бы, наконец, получить доступ к ресурсам, которые были сильно набраны в моем (частичном) представлении Razor:

<h2>@ViewResources.Test1</h2>

Кстати: это также работало с MVC 4, а не только MVC 3.