Володя тут на работе озвучил интересную задачку. Вот есть у нас OpenID-сервер, и там пользователь может вписать, как его зовут, и сервер будет раздавать эту информацию сайтам-консумерам, которые ее просят. Так вот хочется очень простой вещи: отдавать русскоязычным сайтам свое имя по-русски, а остальным -- по-английски.
По идее, чтобы выдавать языкозависимый контент, в HTTP есть заголовок Accept-Language. Но он не работает, потому что это будет запрос со стороны браузера пользователя, и там будет зашит какой-то его дефолтный Accept-Language, совершенно не связнный с языком того сайта, на который он логинится. Фактически, со стороны сервера о сайте консумера мы знаем очень немного:
Пока у меня в голове сидит только одна идея: GET'ать страницу trust root'а и смотреть, много ли в ней русских букв. Если много, считать ее русской.
Может у кого-нибудь есть получше идеи?
Комментарии: 24
8.07.08 02:26
путь юзер сам решает кому как отдавать
8.07.08 04:05
Ещё несколько вариантов:
Лично я за последний вариант. Если кому-то эта фича будет реально нужна - заведёт себе два OpenID (возможно даже на одном провайдере OpenID) и пропишет в них данные о себе на разных языках. Это, кстати, позволит без проблем работать с более чем двумя языками. :)
P.S. Почему-то не удаётся авторизоваться по моему OpenID (раньше всё работало, а сейчас получаю ошибку WorkPress "We were unable to authenticate your OpenID")... Кроме того справка по разметке сбоку некорректная: список с минусами как-то странно рендерится, больше похоже на заголовок чем на список.
8.07.08 07:21
Дать пользователю возможность выбрать. Автоматизации не надо.
8.07.08 07:22
Обычно, для таких целей делают поддержку нескольких профилей SRE. Например, у провайдера myopenid.com они называются "персонами", и для каждой можно задать полностью новый набор SRE и vCard-данных.
При аутентификации, на странице запроса доверия к сайту, просто предлагают, какую персону ты хочешь использовать (если сайт запросил SRE-данные).
По-моему, такая схема куда удобнее разных сомнительных автоматизаций, и шире в возможностях. Кроме того, это сейчас в SRE единственное поле, требующее перевода - имя. Но, в будущем, ситуация может поменяться. Например, может добавиться поле адреса, а его тоже надо будет писать по-разному, если я решил воспользоваться OpenID для заказа какой-то вещи по почте из Европы, например.
8.07.08 10:34
+1 к «персонам». Это гораздо более общее и гибкое решение.
Дополнительно, можно предложить OpenID-группе расширить протокол полем «язык» (точнее, «локаль», видимо).
8.07.08 10:34
сделать 2 кнопки для подтверждения на русском и на английком
[подтвердить] [confirm]
8.07.08 12:03
Кстати, ЖЖ тоже не принимает Яндексовый OpenID, ни в каком виде. :( Почините, пожалуйста!
Upd. Даже этот блог не принимает!!!
8.07.08 12:43
Вообще полная автоматика — это не очень хорошо. Вот автоматически предложить нужный вариант и альтернативы, чтобы пользователь только подтвердил «да, оно» — это то, что надо.
Вообще я к OpenID отношусь очень скептически. Пока что удобнее просто заполнить поля имя и e-mail, чем куда-то лезть и регистрироваться.
Было бы гораздо удобнее при заполнении данных «вручную» создавать аккаунт OpenID автоматом. Просто рассылать почту, «не хотите ли? Если хотите — щёлкните на ссылке».
8.07.08 12:44
В http-ответе есть Content-Language, можно дергать trust_root и проверять заголовок в ответе.
8.07.08 12:48
Можно запросить страницу только первый раз, и, определив язык, создать на будущее запись сопоставления url <-> lang. При желании продвинутый юзер сможет переопределить по этим записять, какому сайту какое имя отдавать. Еще плюс - алгоритм определения языка ведь не 100% точен, и так будет возможность исправить.
Логика такая - если я регулярно подписываюсь на этом сайте, то для меня важно, как будет выглядеть моё имя здесь, и хочется иметь возмость тонкой настройки. А если зашел разок, тогда и заморачиватся особо не буду.
8.07.08 13:30
Зачем усложнять сверх меры? Будущее за UTF8, если это надо для того чтобы западные блоггеры обращались по имени, пускай копируют и вставляют.
Кстати недавно узнал про hreflang параметр у ссылки
8.07.08 14:07
А, правда, что с OpenID?
По существу вот что отвечу.
8.07.08 14:37
вообще когда openid-клиент обращается к провайдеру за данными о сервере (создается сеансовый nonce etc.), это именно соединение сервер-сервер, в котором может быть указан accept-language, и его можно сохранить рядом с nonce
8.07.08 19:34
Смотрю, многие на языках зациклились. А зря. Перевод имени и прочих данных - это частный (и очень узкий) случай применения персон. Т.е. персоны вообще могут и эту задачу решить, и много других.
Возьмём тот же SRE. Откровенно говоря, мне он не нравится. Да, он даёт некий базовый минимум, но насколько же он беден! Например, информация о вашем распложении. В SRE есть поле "страна" и индекс. Но формат индекса в разных странах различен. Получается, даже зная индекс, я не могу вычислить населённый пункт, не прибегая к помощи дополнительного ПО. В основном, люди в Сети общаются с соотечественниками, и на родном языке. Знать, что люди пишущие в этот блог, на 90% проживают в России, Белоруссии и Украине мне неинтересно, я это и так знаю. Мне любопытно где они проживают. Сам, я, например, из Самары.
Это я к тому, что будущее, уверен, не за SRE. Вымрет он, как динозавр. Будущий формат должен чем-то походить на XMPP (Jabber), т.е. быть таким же легкорасширяемым, сверх базового минимума. Чтобы провайдеры могли поверх него легко реализовывать свои "феньки", а они, со временем, могут настолько полюбиться людям, что станут массовыми и даже войдут в стандарт. В этом плане, мне нравится hCard, хотя и над ним ещё нужно поработать. Ну и доработать протокол обмена, чтобы можно было по желанию отдавать сайту такие приватные сведения, которые просто так с твоей странички не считаешь, вроде номера телефона или точного адреса.
Так вот, применение персон сейчас, даже в "эпоху SRE", позволит сделать "задел на будущее", когда число и состав полей изменится, а может и сами методы запроса данных.
8.07.08 21:33
Да просто OpenID и все его расширения — это на 90% велосипедостроительство… Если бы Фицпатрик не выпендривался, а использовал бы XML-формат для данных, то SRE вообще был бы не нужен — всё бы спокойно расширялось естественным образом, и можно было хоть географические координаты свои сообщать в составе ответа через KML-неймспейс…
8.07.08 23:29
Ух, как много комментариев :-). Спасибо! Сразу много ответов по многим пунктам:
Не, это не работает слишком часто... Взять хотя бы прямо этот сайт :-)
Проблема совсем не в кодировке. Проблема в том, что любые символы, кроме латиницы, не обладают универсальной читаемостью в мире. Предстаьвте себе англоязычный форум, где общается больше одного китайца, подписывающихся иероглифами. Попробуйте их а) различить б) обратиться к кому-нибудь по имени.
Ни в коем случае! :-). Я знаю, что это дико нравится гикам. Потому что дает еще одну прикольную ручку для игры в новую технологию. Но наша задача -- сделать сервер максимально удобным для людей, которые просто хотят не запоминать логин и пароль. В идеале человек вообще никогда не должен на самом сервере ничего настраивать, тот должен просто работать. То есть мне хочется как раз устранить мнение об OpenID как о исключительно гиковской игрушке.
По этой же причине я не хочу дополнительных кнопок с выбором языков вручную, мне хотелось как раз поразмышлять над тем, а не может ли сервер делать это автоматически.
Починили. На Я.рушных страницах потерялись делегационные линки ненароком.
Проблема в том, что его никто не присылает. Да и не должен, потому что на сервер юзер попадает редиректом, у которого контента нет.
Опять-таки, "может", но не указан. Мне хочется, чтобы сейчас работало. Тратить энергию на убеждение в течение пары лет мирового сообщества ради такой простой штуки не хочется :-)
Вряд ли, я думаю... Он никогда не предназначался для решения задачи представления профиля человека в машиночитаемом виде. Он решает одну маленькую задачу: облегчение первоначальной регистрации. Решает ее хорошо, и поэтому никуда не денется.
Ох, Давид, опасная это точка зрения. То, что на основе существующих технологий получилось создать работающую систему с универсальным идентификатором -- это только показатель инженерного таланта Фицпатрика. В OpenID нет ничего "пацанского", это очень взвешенное решение, и очень хорошо, что оно не решает никаких непосильных задач индустрии, а просто допускает расширение. Кроме того, до него это не удавалось никому.
Касаемо же XML... В рамках конкретно OpenID его, мягко говоря, некуда сунуть. Серверы пресылают пользователя редиректами, у которых нет контента. А вот запросить с OpenID-страницы пользователя машиночитаемую информацию ничто не мешает уже сейчас. Это может быть микроформат, может быть ссылка на FOAF, может быть просто любое XML-представление данных о пользователе, запрошенное с нужным заголовком Accept. Только вот OpenID тут ни при чем, не о том речь :-)
9.07.08 00:13
Уп-с... Еще не починили все же, это я поторопился. Но, в общем, в ближайшее время.
9.07.08 03:17
Мой OpenID находится не на яндексе, и, я только что проверил, Blogger.com его по-прежнему отлично понимает. В отличие от этого блога. Хотя раньше здесь тоже работал. Возможно движок этого блога обновился и где-то вылез злобный баг. Только что проверил - всё ещё не работает, отправляю через имя+email. :(
Что касается основной темы, то я очень не люблю проявления ИИ, особенно что касается разнообразного "автоопределения" чего-то, особенно когда меня не спросили надо ли автоопределять и не дают возможности полностью контролировать эту фичу. Мы ещё долго будем расхлёбывать проблему с IE и его "автоопределением" HTML. IMHO всю эту эвристику нужно использовать только тогда, когда без неё решить проблему невозможно в принципе, а в остальных случаях она создаёт больше проблем чем решает. И уж во всяком случае ради такой мелкой и спицифичной фичи с ней связываться точно не стоит!
Угу. И представьте себе вашу эвристику "если на странице "много" иероглифов" в этой ситуации после того, как иероглифами на этой странице подписалось два-три человека (логинились не по OpenID или их провайдер OpenID просто не пытается определять язык) а то и просто кто-то вставил в текст комментария абзац иероглифами.
Ну и самое главное - не нужно делать более универсальные решения чем требуется. Какова вероятность широкого использования яндексовского OpenID китайцами, общающимися на англоязычном форуме? :) И стоит ли ради пары таких пользователей усложнять код? У нас специфика немного другая: фактически используются только два языка, причём те, кто активно общается в англоязычных форумах/блогах обычно используют одно написание своего имени и для русских/украинских/etc. и для английских - на английском. Иначе возникает куча проблем, в т.ч. с почтовыми клиентами которые в From: пихают имя на русском не глядя на каком языке пишется письмо и заканчивая сложностью поиска информации конкретного автора в инете если автор подписывается то по-русски то по-английски.
9.07.08 07:16
Микроформат или XML это конечно хорошо, но огромное количество программ и устройств понимает отлично vcard. Только представьте себе - щелк на кнопке рядом с комментом и vcard в вашей адресной книге, еще щелчек и он в мобильнике.
9.07.08 10:47
Нет-нет, речь не о моем блоге. Яндексовый OpenID вчера у многих не работал везде, это известная проблема.
То, что у меня здесь не работают некоторые OpenID, я тоже знаю, но починить не могу :-(. Это очередной плагин для WordPress, который написан настолько отвратительно, что я даже не могу начать понимать, что там происходит. К сожалению, в WP-мире это обычно не считается проблемой.
Как-то я не совсем понятно выразился. Предложенная эвристика заключается в выборе между латиницей и русским языком только. Моя цель не выбрать наиболее подходящий язык вообще, а решать одну конкретную задачу: писать "Ivan Sagalaev" в нерусскоязычных форумах и "Иван Сагалаев" в русских.
Кхм.. Так вот именно об этом я и говорю. Только вы не считаете это проблемой -- что люди пишут свое имя универсальной латиницей везде. Это вполне приемлемо, никто не спорит. Но я просто хочу подумать, а можно ли сделать лучше.
На самом деле, я могу понять, почему вы против эвристики. Действительно, полно софта, который ее активно абьюзит и не дает себя исправлять. Но то, что эвристика -- всегда плохо, конечно, неправда. Например, мы пользуемся эвристикой каждый раз, когда набираем адрес в строке браузера: если он начинается с "ftp.", то браузер будет сначала пробовать достучаться до хоста по http://FTP. Когда это последний раз кому-то мешало?
Вот и в нашем случае, речь конечно не идет о каком-то навязанном автоматизме, который не будет работать. Речь пока идет только о принципиальных подходах.
Правда ведь было бы лучше, если бы глядели и подставляли адекватное? Причем, конечно, давая исправлять подсказку. Это ведь очень просто.
Я, вообще, очень люблю гугловый поиск, однако тут...
http://yandex.ru/yandsearch?text=Sagalaev: над рзультатами тут же есть автокоррекционная подсказка на русский. Полезная эвристика.
9.07.08 10:53
Я не очень понял, где тут проблема. Получить из персональной страницы человека vcard уже сейчас можно кучей разных способов. Можно преобразовать hCard, можно, опять-таки, сослаться на vcard
<link>ом, можно с нужным Accept страницу забрать... Все это и есть и даже местами работает. Но речь-то вообще не про это :-)9.07.08 12:50
Про XML спорить не буду:) Но насчёт гиков — даже с автоопределением языка (как бы оно ни делалось) всё равно ведь придётся просить юзера заполнить в профиле ДВА поля — имя по-русски и имя по-английски. Это же реально те же профили.
И что в этом случае плохого в том, если страничка openid-подтверждения будет выглядеть как:
Подтвердить вход?
(три кнопки)
Представиться как: (селектор с выбором имени, по умолчанию русское)
9.07.08 13:03
А почему не использовать эвристики Яндекса, которым тот определяет регион пользователя при поисковых запросах?
Иван: вход по OpenID не сработал, пришлось перенабирать коммиентарий.
11.07.08 15:49
А персон точно не стоит ждать в Яндекс.OpenID?
Хотелось бы иногда отдавать профиль МоегоКруга, а иногда более неформальный Я.рушный. Сейчас приходится мириться с тем, что очень часто OpenID МоегоКруга не работает.
Вот и сейчас так же.