Каков наилучший способ поддержки нескольких языков для интерфейса в приложении ASP.NET MVC? Я видел, как люди используют файлы ресурсов для других приложений. Это лучший способ?
Несколько языков в приложении ASP.NET MVC?
Ответ 1
Если вы используете механизмы просмотра по умолчанию, локальные ресурсы работают в представлениях. Однако, если вам нужно захватить строки ресурсов в рамках действия контроллера, вы не сможете получить локальные ресурсы и должны использовать глобальные ресурсы.
Это имеет смысл, если вы думаете об этом, потому что локальные ресурсы локальны на странице aspx и в контроллере, вы даже не выбрали свой вид.
Ответ 2
Я нашел этот ресурс, чтобы быть очень полезным
Это оболочка вокруг HttpContext.Current.GetGlobalResourceString и HttpContext.Current.GetLocalResourceString, которая позволяет вам вызывать ресурсы, подобные этому...
// default global resource
Html.Resource("GlobalResource, ResourceName")
// global resource with optional arguments for formatting
Html.Resource("GlobalResource, ResourceName", "foo", "bar")
// default local resource
Html.Resource("ResourceName")
// local resource with optional arguments for formatting
Html.Resource("ResourceName", "foo", "bar")
Единственная проблема, с которой я столкнулся, заключается в том, что контроллеры не имеют доступа к локальным строкам resouce.
Ответ 3
Да, ресурсы по-прежнему являются лучшим способом поддержки нескольких языков в среде .NET. Потому что они легко ссылаются и даже проще добавлять новые языки.
Site.resx
Site.en.resx
Site.en-US.resx
Site.fr.resx
etc...
Итак, вы все еще используете файлы ресурсов.
Ответ 4
В проекте Orchard используется метод быстрого вызова под названием "T" для выполнения всех трансляций строк на странице. Таким образом, вы увидите теги с @T ( "A String to Translate" ).
Я намерен посмотреть, как это реализовано за кулисами и потенциально использовать его в будущих проектах. Сокращенное имя сохраняет код чище, так как он будет использоваться много.
То, что мне нравится в этом подходе, - это оригинальная строка (на английском языке в этом случае) по-прежнему легко видна в коде и не требует поиска в инструменте ресурсов или в другом месте для декодирования того, что должно быть здесь,
Подробнее см. http://orchardproject.net.
Ответ 5
Некоторые из других решений, упомянутых в качестве ответа, не работают для выпущенной версии MVC (они работали с предыдущими версиями alpha/beta).
Вот хорошая статья, описывающая способ реализации локализации, которая будет строго типизирована и не будет прерывать модульное тестирование контроллеров и представлений: руководство по локализации для MVC v1
Ответ 6
Это еще один вариант, и у вас будет доступ к CurrentUICulture в контроллере:
Отметьте MVC3-multi-language