Несколько языков в приложении ASP.NET MVC?

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

6.08.2008 21:43:33
Marijn 8.02.2012 11:09:33
мультиязычный веб-сайт без параметра передачи, проверьте этот мультиязычный веб- сайт в MVC 4 C #
Sender 27.03.2013 06:07:01
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

42
7.08.2008 03:04:04
Да, это имеет смысл для контроллеров. Но как насчет View Models? Они (часто) специфичны для представления, и имеет смысл ссылаться на конкретные ресурсы представления в коде модели представления. Интересно, существует ли механизм, чтобы сделать файл ресурсов локальным для представления и его модели представления ...
Andy McCluggage 21.12.2010 10:35:48
@ Заболел, привет, у нас есть веб-сайт для покупок в asp mvc, поэтому, когда пользователь выбирает арабский язык, мы хотим сделать весь сайт арабским, можем ли мы использовать Microsoft Bing Translator или Microsoft Microsoft Translator API или я должен купить localize.js для достижения этой цели быстрый ?
shaijut 6.10.2015 22:42:00

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

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

Таким образом, вы правы по-прежнему использовать файлы ресурсов.

3
6.08.2008 21:48:20

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

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

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

22
18.04.2017 12:17:17

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

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

1
9.10.2009 14:24:50

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

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

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

Смотрите http://orchardproject.net для получения дополнительной информации.

2
13.04.2011 18:44:31
Есть случаи, когда точно идентичная исходная строка «Строка для перевода» должна переводиться по-разному в зависимости от окружающего контекста. Особенно это происходит со строками из одного слова.
springy76 16.02.2012 09:33:28

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

Проверьте MVC3-многоязычный

0
29.04.2014 05:59:27