Несколько языков в приложении ASP.NET MVC? - PullRequest
66 голосов
/ 07 августа 2008

Каков наилучший способ поддержки нескольких языков интерфейса в приложении ASP.NET MVC? Я видел, как люди используют файлы ресурсов для других приложений. Это все еще лучший способ?

Ответы [ 6 ]

40 голосов
/ 07 августа 2008

Если вы используете механизмы представления по умолчанию, то локальные ресурсы работают в представлениях. Однако, если вам нужно получить строки ресурсов внутри действия контроллера, вы не можете получить локальные ресурсы и должны использовать глобальные ресурсы.

Это имеет смысл, когда вы думаете об этом, потому что локальные ресурсы являются локальными для страницы aspx и в контроллере, вы даже не выбрали свой вид.

21 голосов
/ 16 сентября 2008

Я нашел этот ресурс очень полезным

Это оболочка вокруг 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")

Единственная проблема, которую я обнаружил, заключается в том, что контроллеры не имеют доступа к локальным строкам ресурсов.

3 голосов
/ 07 августа 2008

Да, ресурсы по-прежнему являются лучшим способом поддержки нескольких языков в среде .NET. Потому что на них легко ссылаться и еще проще добавлять новые языки.

Site.resx
Site.en.resx
Site.en-US.resx
Site.fr.resx
etc...

То есть вы правы, все еще пользуйтесь файлами ресурсов.

2 голосов
/ 13 апреля 2011

В проекте Orchard используется сокращенный метод, называемый «T», для выполнения всех переводов строк внутри страницы. Таким образом, вы увидите теги с @T («Строка для перевода»).

Я намерен посмотреть, как это реализовано за кулисами, и потенциально использовать его в будущих проектах. Короткое имя обеспечивает чистоту кода, поскольку оно будет использоваться много .

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

Подробнее см. http://orchardproject.net.

1 голос
/ 09 октября 2009

Некоторые другие решения, упомянутые в качестве ответа, не работают для выпущенной версии MVC (они работали с предыдущими версиями альфа / бета).

Вот хорошая статья, описывающая способ реализации локализации, который будет строго типизирован и не нарушит модульное тестирование контроллеров и представлений: Руководство по локализации для MVC v1

0 голосов
/ 14 июля 2012

Это еще один вариант, и вы получите доступ к CurrentUICulture в контроллере:

Проверка MVC3-мультиязычность

...