Хранение языка в URL или сеансе или другом - PullRequest
9 голосов
/ 08 февраля 2009

Я занимаюсь разработкой многоязычного сайта и мне было интересно, как лучше всего сохранить язык, выбранный пользователем?

Либо через QueryString, либо он должен быть в Session..или какие-либо другие опции?

Ответы [ 6 ]

7 голосов
/ 29 декабря 2009

Другое соображение, не упомянутое ни в одном из других ответов, это дружественность поисковой системы Если вы используете разные URL для каждого языка, как

http://{en|cy}.example.com/subdir/ or <a href="http://example.com/" rel="noreferrer">http://example.com/</a>{en|cy}/subdir) 
, тогда поисковые системы могут проиндексировать ваш сайт на нескольких языках.
2 голосов
/ 08 июня 2009

, если учесть этот сценарий, когда пользователь просматривал серию страниц в «en» и информация о языке сохраняется в сеансе cookie, а страницы кэшируются (http, browser, app) ..

когда пользователь переключает язык на "cy", произойдет изменение для текущей страницы, но когда пользователь перейдет на страницу, которую он ранее посещал (где срок действия кэшей заголовка истек, срок действия не истек), это произойдет загрузите страницу в «en», так как строка запроса не указывает язык - чтобы она обслуживала контент на этом языке.

маловероятно, что пользователь захочет менять языки так часто, но как разработчик, это сценарий, который должен быть обработан.

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

2 голосов
/ 08 февраля 2009

Я думаю, что это очень сильно зависит от того, как ваше приложение обрабатывает (желает обрабатывать) пользовательские языки. Если ваши пользователи должны войти на ваш сайт, то у вас, вероятно, есть страница настроек учетной записи где-то с соответствующим объектом профиля пользователя или чем-то похожим позади. В таком случае, я полагаю, вы бы сохранили эти настройки в БД, и когда пользователь возвращается на ваш сайт, вы каким-то образом получаете информацию о пользователе (то есть из файла cookie), вы загружаете свой объект профиля пользователя из БД. Информация будет храниться на сессии, так как я думаю, что это будет наиболее подходящим в этом случае. Если вашим пользователям не нужно входить в систему, поэтому вы не можете идентифицировать их напрямую, я сохраню языковые настройки в файле cookie. Это дает вашему пользователю значение того, что он всегда будет находить сайт на предпочитаемом им языке, когда вернется позже (учитывая, что он не удаляет файлы cookie, а срок действия файла cookie достаточно велик). В качестве третьей возможности вы можете просто определить язык пользователя в соответствии с его настройками браузера по умолчанию (как упомянуто выше «regex»).

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

  • объекты, хранящиеся в сеансе, хранятся на стороне сервера, используя память сервера. Так что не храните в памяти бесполезные вещи, если они вам не нужны. Однако объект сеанса подходит для хранения данных, связанных с посещением пользователя и конфигурациями.
  • Данные, хранящиеся в файлах cookie или объекте Viewstate, передаются между браузером клиента и веб-сервером. Так что это вызывает дополнительный трафик и может снизить производительность.

Bye

1 голос
/ 08 февраля 2009

Свойства профиля были созданы специально для того, чтобы вы могли хранить пользовательские настройки. Это было бы хорошим местом для хранения данных такого рода.

0 голосов
/ 08 февраля 2009

Строка запроса не является подходящим местом для этого, если только она изначально не считывается из строки запроса и не сохраняется где-то еще.

Сохраните его в файле cookie или, если файлы cookie отключены, сохраните его в сеансе или в состоянии просмотра.

Ответ Кевина «Свойства профиля» - это простой способ позволить созданной библиотеке сделать тяжелую работу за вас с минимальными усилиями с вашей стороны.

0 голосов
/ 08 февраля 2009

Существует свойство, которое передается, когда браузер делает запрос, который вы можете использовать. Ссылка на это свойство в вашем коде указана ниже:

Request.UserLanguages // returns an array

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

В ваш обработчик Page.Load поместите что-то вроде следующего:

string prefLan;    
if(Request.Cookies["preferedLanguage"] != null)
        prefLan = Server.HtmlEncode(Request.Cookies["preferedLanguage"].Value);
...