Я пытаюсь добиться глобализации/локализации в моем приложении MVC 3. Мне не нужны разные Представления для каждого языка. Пожалуйста, предложите, как я могу продолжить. Любые поддерживаемые ссылки/URL-адреса будут очень полезны.
Глобализация в ASP.Net MVC 3
Ответ 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
.
Ответ 2
Вот подробное сообщение о MVC 3 Глобализация/интернационализация http://afana.me/post/aspnet-mvc-internationalization-part-2.aspx
Ответ 3
Чтобы добавить некоторые детали в Мартин Бут отличный ответ (в случае, если его ссылка MediaFire может исчезнуть), вот как я это делаю:
Я использовал два файла, так как мне нужен только английский и немецкий ( "de" ):
Для свойств каждого файла мне пришлось вручную вводить пользовательский инструмент, а также значения пространства имен пользовательского инструмента для каждого файла:
И, наконец, я ввел следующее внутри корневого файла 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.
Ответ 4
Следующий шаг, который вам нужен, - это локализовать вашу библиотеку Javascript. Посмотрите здесь: MVC-JavaScript-localization-of-external-js-files