Володя тут на работе озвучил интересную задачку. Вот есть у нас OpenID-сервер, и там пользователь может вписать, как его зовут, и сервер будет раздавать эту информацию сайтам-консумерам, которые ее просят. Так вот хочется очень простой вещи: отдавать русскоязычным сайтам свое имя по-русски, а остальным — по-английски.
По идее, чтобы выдавать языкозависимый контент, в HTTP есть заголовок Accept-Language. Но он не работает, потому что это будет запрос со стороны браузера пользователя, и там будет зашит какой-то его дефолтный Accept-Language, совершенно не связнный с языком того сайта, на который он логинится. Фактически, со стороны сервера о сайте консумера мы знаем очень немного:
- некий корневой URL (он же trust_root)
- параметр return_to, куда мы возвращаем пользователя после авторизации, и который обычно показывает на какую-нибудь служебную страницу
Пока у меня в голове сидит только одна идея: GET'ать страницу trust root'а и смотреть, много ли в ней русских букв. Если много, считать ее русской.
Может у кого-нибудь есть получше идеи?
Комментарии: 24
путь юзер сам решает кому как отдавать
Ещё несколько вариантов:
Лично я за последний вариант. Если кому-то эта фича будет реально нужна - заведёт себе два OpenID (возможно даже на одном провайдере OpenID) и пропишет в них данные о себе на разных языках. Это, кстати, позволит без проблем работать с более чем двумя языками. :)
P.S. Почему-то не удаётся авторизоваться по моему OpenID (раньше всё работало, а сейчас получаю ошибку WorkPress "We were unable to authenticate your OpenID")... Кроме того справка по разметке сбоку некорректная: список с минусами как-то странно рендерится, больше похоже на заголовок чем на список.
Дать пользователю возможность выбрать. Автоматизации не надо.
Обычно, для таких целей делают поддержку нескольких профилей SRE. Например, у провайдера myopenid.com они называются "персонами", и для каждой можно задать полностью новый набор SRE и vCard-данных.
При аутентификации, на странице запроса доверия к сайту, просто предлагают, какую персону ты хочешь использовать (если сайт запросил SRE-данные).
По-моему, такая схема куда удобнее разных сомнительных автоматизаций, и шире в возможностях. Кроме того, это сейчас в SRE единственное поле, требующее перевода - имя. Но, в будущем, ситуация может поменяться. Например, может добавиться поле адреса, а его тоже надо будет писать по-разному, если я решил воспользоваться OpenID для заказа какой-то вещи по почте из Европы, например.
+\1 к «персонам». Это гораздо более общее и гибкое решение.
Дополнительно, можно предложить OpenID-группе расширить протокол полем «язык» (точнее, «локаль», видимо).
сделать 2 кнопки для подтверждения на русском и на английком
[подтвердить] [confirm]
Кстати, ЖЖ тоже не принимает Яндексовый OpenID, ни в каком виде. :( Почините, пожалуйста!
Upd. Даже этот блог не принимает!!!
Вообще полная автоматика — это не очень хорошо. Вот автоматически предложить нужный вариант и альтернативы, чтобы пользователь только подтвердил «да, оно» — это то, что надо.
Вообще я к OpenID отношусь очень скептически. Пока что удобнее просто заполнить поля имя и e-mail, чем куда-то лезть и регистрироваться.
Было бы гораздо удобнее при заполнении данных «вручную» создавать аккаунт OpenID автоматом. Просто рассылать почту, «не хотите ли? Если хотите — щёлкните на ссылке».
В http-ответе есть Content-Language, можно дергать trust_root и проверять заголовок в ответе.
Можно запросить страницу только первый раз, и, определив язык, создать на будущее запись сопоставления url <->