Вопрос по switch-statement, asp.net-mvc, c# – Создание переключателя языков - только 2 языка - ASP.NET MVC

0

Приложение ASP.NET MVC было близко к завершению, после чего было решено, что ему нужен переключатель языка. Это будут просто два языка: английский и японский. Они должны иметь возможность переключаться между двумя, но если один не выбран, он должен выбрать тот, который является языком браузера по умолчанию.

Мне интересно, каким будет лучшее решение в этом случае.

First thought, маршруты! Поэтому я меняю маршруты, чтобы иметь/{l} в конце каждого маршрута, и по умолчаниюl = "", Затем в моем BaseController (каждый контроллер основан на нем), я проверяю переменную l в маршруте. Каждое действие возвращает представление на основе языка.

Я хотел просто иметь возможность взломать / ja-jp в конце URL, и это показало бы представление на японском языке. Похоже, что это не совсем правильно. Затем я был очень плох в своих взглядах и вручную кодировал ссылки ... Я не мог заставить помощника сначала выводить нужные ссылки ... и у меня появилась плохая привычка вручную кодировать их. Таким образом, мне придется заново перекодировать каждую ссылку - чтобы взломать языковую переменную в конце.

Second thought... хорошо, используйте jQuery, чтобы добавить языковую переменную ко всем ссылкам якоря. Это кажется чрезмерно неуклюжим и трудным в определенных ситуациях, когда ссылки скрыты до тех пор, пока они не понадобятся и т. Д.

Итак ... на данный момент я решил просто сделать все, что нужно. Какой самый элегантный способ переключения между двумя языками - без использования файлов ресурсов? Я просто хочу, чтобы действие выбирало между двумя представлениями, основанными на языке.

Переписываю ли я каждую ссылку, чтобы использовать Html-помощник, а затем заставляю работать маршруты? Тогда в BaseController просто установите язык на английский, если их значение не имеет?

Любой совет высоко ценится, спасибо.

видел это?oddiandeveloper.blogspot.com/2008/11/… grenade

Ваш Ответ

3   ответа
2

Не ставьте язык в конце вашего маршрута. Поместите это в начале. Это облегчает работу с различными маршрутами, которые могут иметь дополнительные параметры.

Настройка языка должна изменить только перевод.

Если у ваших японских пользователей есть определенные правила (цены, варианты доставки и т. Д.), Вам следует реализовать языковые и страновые особенности. Страна - это то, что вы найдете в разделе «Приложение с несколькими арендаторами». это не определяется языком браузера.

Японский пользователь может просматривать английский сайт и видеть английский контент в японском переводе.

    routes.MapRoute(
        // Route name
        "LocalizedRoute",
        // URL with parameters                              
        ("{language}/{controller}/{action}"),
        // Parameter defaults
  new
  {

          action = "Index",
          language = "de"

      },
                    //Parameter constraints
        new { language = @"en-us|ja-jp" }
хм ... моя проблема в том, что мои маршруты уже выглядят следующим образом: rout.MapRoute (& quot; BaseRoute & quot ;, (& quot; {b} / {controller} / {action} & quot;) ... что означает, что все закончится выглядит как: rout.MapRoute (& quot; BaseRoute & quot ;, (& quot; {lan} / {b} / {controller} / {action} & quot;) ... Что если lang отсутствует? Типичный URL будет выглядеть так: www. domain.com/Controller/Action/Id, маршрут будет применять контроллер к токену lang.; / Chaddeus
да, проблема в том, что я был ленивый ... не использовал помощников по URL. Сейчас я работаю над переключателем языка на основе субдомена, но, похоже, сейчас мне это тоже не стоит ... Мне нужно просто смириться с этим и вернуться через мои ссылки, чтобы правильно их настроить. Спасибо! Chaddeus
Как вы определяете типичный URL? Это должно быть определено только в MapRoute. Если вы используете Html и Url Helpers для генерации ссылок (вы действительно должны это делать), вы можете быть уверены, что все ваши ссылки имеют правильную форму после изменения MapRoute. Если язык еще не выбран, используется значение по умолчанию.
2

Я думаю, что один из самых простых и удобных методов - использовать домен (собственно субдомен), чтобы определить, на каком языке он говорит. Ему не нужно изменять что-либо в хелпере Html (HTML.ActionLink), поскольку он работает только относительно домена. Кроме того, пользователю может показаться, что при просмотре этого домена они точно знают, каким языком он должен быть, и при этом не делают URL слишком длинным. Все, что вам нужно сделать, это сделать что-то в переключателе языка для работы.

Независимо от того, какой подход, я настоятельно не рекомендую использовать вторую мысль, так как вы не можете запретить (даже 0,1%) людям, не имеющим javascript, работать на вашем японском веб-сайте, верно?

я думаю, что статья, на которую ссылается xandy, теперь такова:hanssens.org/post/ASPNET-MVC-Subdomain-Routing.aspx
Спасибо xandy, я думаю, что я собираюсь пойти с переключателем языка на основе домена. Chaddeus
О, еще одна вещь, чтобы добавить. Я только помню, что википедия использует поддомен для языков ... хотя это не просто перевод между языками.
Вот статья о маршрутизации в субдомене в MVC:blogs.securancy.com/post/ASPNET-MVC-Subdomain-Routing.aspx В основном перевод субдомена в культуру, вы можете просто поместить эти правила в файл web.config. Так, например, вы можете сопоставить en.domain.com с en-us и так далее.
Правильно ... на самом деле даже не настоящая мысль, просто идея. Я тоже люблю субдомены ... хммм. Если я создаю субдомены, я хочу что-то вроде en.domain.com || jp.domain.com. Как я могу получить языковую переменную из доменного имени? Chaddeus
1

При создании нашего сайта мы обнаружили, что это был не просто язык, который требовал изменения, но сами взгляды наших международных клиентов должны были отличаться. И.Е. нашему офису в Гонконге требовалось различное количество места и данных для просмотра данных, чем нашему английскому офису. Простая смена языка немного отразилась на макете представления и доставила мне немного хлопот.

То, что мы в итоге сделали, это

С очень небольшим количеством кода вы можете переопределить маршрутизацию для ваших представлений и отправить английский для одного набора представлений и японский для другого при любых обстоятельствах, которые вам нравятся. Не нужно менять URL или делать это на стороне клиента или даже менять свои действия.

РЕДАКТИРОВАТЬ: после перечитывания я думаю, что это будет очень подходящим для вашего сайта, так как вы используете два набора представлений, по одному для каждого языка.

хм ... мои действия уже выполняют переключение. В моем базовом контроллере я установил логическое значение IsEnglish. Тогда это в основном: return (IsEnglish)? Просмотр (& quot; EnglishView & quot;): Просмотр (& quot; JapaneseView & quot;); Моя основная проблема заключается в том, чтобы фактически сказать контроллерам, какой язык и как сохранить его на этом языке, пока он не изменится снова (за посещение). Chaddeus

Похожие вопросы