Иван Сагалаев

8.07.08 01:58

OpenID

Володя тут на работе озвучил интересную задачку. Вот есть у нас OpenID-сервер, и там пользователь может вписать, как его зовут, и сервер будет раздавать эту информацию сайтам-консумерам, которые ее просят. Так вот хочется очень простой вещи: отдавать русскоязычным сайтам свое имя по-русски, а остальным -- по-английски.

По идее, чтобы выдавать языкозависимый контент, в HTTP есть заголовок Accept-Language. Но он не работает, потому что это будет запрос со стороны браузера пользователя, и там будет зашит какой-то его дефолтный Accept-Language, совершенно не связнный с языком того сайта, на который он логинится. Фактически, со стороны сервера о сайте консумера мы знаем очень немного:

Пока у меня в голове сидит только одна идея: GET'ать страницу trust root'а и смотреть, много ли в ней русских букв. Если много, считать ее русской.

Может у кого-нибудь есть получше идеи?

Комментарии: 24 (feed)

  1. undefined

    путь юзер сам решает кому как отдавать

  2. Alex Efros

    Ещё несколько вариантов:

    • ориентироваться не на язык, а на домен: если .ru, .ua, etc. отдавать русский иначе английский
    • с учётом unicode, спокойно отдавать русское имя даже английским сайтам: ведь когда люди пишут в mail lists они зачастую в поле From: оставляют имя на родном языке, и это никому особо не мешает, хотя и выглядит иногда забавно
    • добавить это расширение в протокол, чтобы сайт мог сам запрашивать предпочитаемый язык
    • не морочить себе и людям голову добавляя ненужные фичи переусложняющие реализацию

    Лично я за последний вариант. Если кому-то эта фича будет реально нужна - заведёт себе два OpenID (возможно даже на одном провайдере OpenID) и пропишет в них данные о себе на разных языках. Это, кстати, позволит без проблем работать с более чем двумя языками. :)

    P.S. Почему-то не удаётся авторизоваться по моему OpenID (раньше всё работало, а сейчас получаю ошибку WorkPress "We were unable to authenticate your OpenID")... Кроме того справка по разметке сбоку некорректная: список с минусами как-то странно рендерится, больше похоже на заголовок чем на список.

  3. Marko Kevac

    Дать пользователю возможность выбрать. Автоматизации не надо.

  4. Kirill Mavreshko

    Обычно, для таких целей делают поддержку нескольких профилей SRE. Например, у провайдера myopenid.com они называются "персонами", и для каждой можно задать полностью новый набор SRE и vCard-данных.

    При аутентификации, на странице запроса доверия к сайту, просто предлагают, какую персону ты хочешь использовать (если сайт запросил SRE-данные).

    По-моему, такая схема куда удобнее разных сомнительных автоматизаций, и шире в возможностях. Кроме того, это сейчас в SRE единственное поле, требующее перевода - имя. Но, в будущем, ситуация может поменяться. Например, может добавиться поле адреса, а его тоже надо будет писать по-разному, если я решил воспользоваться OpenID для заказа какой-то вещи по почте из Европы, например.

  5. Давид Мзареулян

    +1 к «персонам». Это гораздо более общее и гибкое решение.

    Дополнительно, можно предложить OpenID-группе расширить протокол полем «язык» (точнее, «локаль», видимо).

  6. http://runmendev.livejournal.com/

    сделать 2 кнопки для подтверждения на русском и на английком
    [подтвердить] [confirm]

  7. Rakovets` Oleksandr

    Кстати, ЖЖ тоже не принимает Яндексовый OpenID, ни в каком виде. :( Почините, пожалуйста!

    Upd. Даже этот блог не принимает!!!

  8. Sam

    Вообще полная автоматика — это не очень хорошо. Вот автоматически предложить нужный вариант и альтернативы, чтобы пользователь только подтвердил «да, оно» — это то, что надо.

    Вообще я к OpenID отношусь очень скептически. Пока что удобнее просто заполнить поля имя и e-mail, чем куда-то лезть и регистрироваться.

    Было бы гораздо удобнее при заполнении данных «вручную» создавать аккаунт OpenID автоматом. Просто рассылать почту, «не хотите ли? Если хотите — щёлкните на ссылке».

  9. Иван

    В http-ответе есть Content-Language, можно дергать trust_root и проверять заголовок в ответе.

  10. diadya_vova

    Можно запросить страницу только первый раз, и, определив язык, создать на будущее запись сопоставления url <-> lang. При желании продвинутый юзер сможет переопределить по этим записять, какому сайту какое имя отдавать. Еще плюс - алгоритм определения языка ведь не 100% точен, и так будет возможность исправить.
    Логика такая - если я регулярно подписываюсь на этом сайте, то для меня важно, как будет выглядеть моё имя здесь, и хочется иметь возмость тонкой настройки. А если зашел разок, тогда и заморачиватся особо не буду.

  11. Артём Курапов

    Зачем усложнять сверх меры? Будущее за UTF8, если это надо для того чтобы западные блоггеры обращались по имени, пускай копируют и вставляют.

    Кстати недавно узнал про hreflang параметр у ссылки

  12. Николай Харитонов

    А, правда, что с OpenID?

    По существу вот что отвечу.

    • Во-первых, «персоны» действительно рулят.
    • Во-вторых, можно посмотреть на задачу шире и изобрести вариант, когда у каждой «персоны» есть понятие локали, и все «персоны» (или некоторые — по выбору пользователя) передаются на сайт. А сайт отображает данные той персоны, которая максимально подходит под Accept-Language клиента. Не того клиента, который авторизовался, а того который потом пришел.
  13. Artemy Tregubenko

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

  14. Kirill Mavreshko

    Смотрю, многие на языках зациклились. А зря. Перевод имени и прочих данных - это частный (и очень узкий) случай применения персон. Т.е. персоны вообще могут и эту задачу решить, и много других.

    Возьмём тот же SRE. Откровенно говоря, мне он не нравится. Да, он даёт некий базовый минимум, но насколько же он беден! Например, информация о вашем распложении. В SRE есть поле "страна" и индекс. Но формат индекса в разных странах различен. Получается, даже зная индекс, я не могу вычислить населённый пункт, не прибегая к помощи дополнительного ПО. В основном, люди в Сети общаются с соотечественниками, и на родном языке. Знать, что люди пишущие в этот блог, на 90% проживают в России, Белоруссии и Украине мне неинтересно, я это и так знаю. Мне любопытно где они проживают. Сам, я, например, из Самары.

    Это я к тому, что будущее, уверен, не за SRE. Вымрет он, как динозавр. Будущий формат должен чем-то походить на XMPP (Jabber), т.е. быть таким же легкорасширяемым, сверх базового минимума. Чтобы провайдеры могли поверх него легко реализовывать свои "феньки", а они, со временем, могут настолько полюбиться людям, что станут массовыми и даже войдут в стандарт. В этом плане, мне нравится hCard, хотя и над ним ещё нужно поработать. Ну и доработать протокол обмена, чтобы можно было по желанию отдавать сайту такие приватные сведения, которые просто так с твоей странички не считаешь, вроде номера телефона или точного адреса.

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

  15. Давид Мзареулян

    Да просто OpenID и все его расширения — это на 90% велосипедостроительство… Если бы Фицпатрик не выпендривался, а использовал бы XML-формат для данных, то SRE вообще был бы не нужен — всё бы спокойно расширялось естественным образом, и можно было хоть географические координаты свои сообщать в составе ответа через KML-неймспейс…

  16. Иван Сагалаев

    Ух, как много комментариев :-). Спасибо! Сразу много ответов по многим пунктам:

    ориентироваться не на язык, а на домен

    Не, это не работает слишком часто... Взять хотя бы прямо этот сайт :-)

    с учётом unicode, спокойно отдавать русское имя даже английским сайтам

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

    несколько предложений про профили/персоны

    Ни в коем случае! :-). Я знаю, что это дико нравится гикам. Потому что дает еще одну прикольную ручку для игры в новую технологию. Но наша задача -- сделать сервер максимально удобным для людей, которые просто хотят не запоминать логин и пароль. В идеале человек вообще никогда не должен на самом сервере ничего настраивать, тот должен просто работать. То есть мне хочется как раз устранить мнение об OpenID как о исключительно гиковской игрушке.

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

    Кстати, ЖЖ тоже не принимает Яндексовый OpenID, ни в каком виде. :(

    Починили. На Я.рушных страницах потерялись делегационные линки ненароком.

    В http-ответе есть Content-Language, можно дергать trust_root и проверять заголовок в ответе.

    Проблема в том, что его никто не присылает. Да и не должен, потому что на сервер юзер попадает редиректом, у которого контента нет.

    вообще когда openid-клиент обращается к провайдеру за данными о сервере (создается сеансовый nonce etc.), это именно соединение сервер-сервер, в котором может быть указан accept-language

    Опять-таки, "может", но не указан. Мне хочется, чтобы сейчас работало. Тратить энергию на убеждение в течение пары лет мирового сообщества ради такой простой штуки не хочется :-)

    Это я к тому, что будущее, уверен, не за SRE. Вымрет он, как динозавр.

    Вряд ли, я думаю... Он никогда не предназначался для решения задачи представления профиля человека в машиночитаемом виде. Он решает одну маленькую задачу: облегчение первоначальной регистрации. Решает ее хорошо, и поэтому никуда не денется.

    Да просто OpenID и все его расширения — это на 90% велосипедостроительство…

    Ох, Давид, опасная это точка зрения. То, что на основе существующих технологий получилось создать работающую систему с универсальным идентификатором -- это только показатель инженерного таланта Фицпатрика. В OpenID нет ничего "пацанского", это очень взвешенное решение, и очень хорошо, что оно не решает никаких непосильных задач индустрии, а просто допускает расширение. Кроме того, до него это не удавалось никому.

    Касаемо же XML... В рамках конкретно OpenID его, мягко говоря, некуда сунуть. Серверы пресылают пользователя редиректами, у которых нет контента. А вот запросить с OpenID-страницы пользователя машиночитаемую информацию ничто не мешает уже сейчас. Это может быть микроформат, может быть ссылка на FOAF, может быть просто любое XML-представление данных о пользователе, запрошенное с нужным заголовком Accept. Только вот OpenID тут ни при чем, не о том речь :-)

  17. Иван Сагалаев

    Починили. На Я.рушных страницах потерялись делегационные линки ненароком.

    Уп-с... Еще не починили все же, это я поторопился. Но, в общем, в ближайшее время.

  18. Alex Efros

    Мой OpenID находится не на яндексе, и, я только что проверил, Blogger.com его по-прежнему отлично понимает. В отличие от этого блога. Хотя раньше здесь тоже работал. Возможно движок этого блога обновился и где-то вылез злобный баг. Только что проверил - всё ещё не работает, отправляю через имя+email. :(

    Что касается основной темы, то я очень не люблю проявления ИИ, особенно что касается разнообразного "автоопределения" чего-то, особенно когда меня не спросили надо ли автоопределять и не дают возможности полностью контролировать эту фичу. Мы ещё долго будем расхлёбывать проблему с IE и его "автоопределением" HTML. IMHO всю эту эвристику нужно использовать только тогда, когда без неё решить проблему невозможно в принципе, а в остальных случаях она создаёт больше проблем чем решает. И уж во всяком случае ради такой мелкой и спицифичной фичи с ней связываться точно не стоит!

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

    Угу. И представьте себе вашу эвристику "если на странице "много" иероглифов" в этой ситуации после того, как иероглифами на этой странице подписалось два-три человека (логинились не по OpenID или их провайдер OpenID просто не пытается определять язык) а то и просто кто-то вставил в текст комментария абзац иероглифами.

    Ну и самое главное - не нужно делать более универсальные решения чем требуется. Какова вероятность широкого использования яндексовского OpenID китайцами, общающимися на англоязычном форуме? :) И стоит ли ради пары таких пользователей усложнять код? У нас специфика немного другая: фактически используются только два языка, причём те, кто активно общается в англоязычных форумах/блогах обычно используют одно написание своего имени и для русских/украинских/etc. и для английских - на английском. Иначе возникает куча проблем, в т.ч. с почтовыми клиентами которые в From: пихают имя на русском не глядя на каком языке пишется письмо и заканчивая сложностью поиска информации конкретного автора в инете если автор подписывается то по-русски то по-английски.

  19. http://deepwalker.blogspot.com/

    Микроформат или XML это конечно хорошо, но огромное количество программ и устройств понимает отлично vcard. Только представьте себе - щелк на кнопке рядом с комментом и vcard в вашей адресной книге, еще щелчек и он в мобильнике.

  20. Иван Сагалаев

    Мой OpenID находится не на яндексе, и, я только что проверил, Blogger.com его по-прежнему отлично понимает. В отличие от этого блога. Хотя раньше здесь тоже работал. Возможно движок этого блога обновился и где-то вылез злобный баг.

    Нет-нет, речь не о моем блоге. Яндексовый OpenID вчера у многих не работал везде, это известная проблема.

    То, что у меня здесь не работают некоторые OpenID, я тоже знаю, но починить не могу :-(. Это очередной плагин для WordPress, который написан настолько отвратительно, что я даже не могу начать понимать, что там происходит. К сожалению, в WP-мире это обычно не считается проблемой.

    Угу. И представьте себе вашу эвристику "если на странице "много" иероглифов" в этой ситуации после того, как иероглифами на этой странице подписалось два-три человека (логинились не по OpenID или их провайдер OpenID просто не пытается определять язык) а то и просто кто-то вставил в текст комментария абзац иероглифами.

    Как-то я не совсем понятно выразился. Предложенная эвристика заключается в выборе между латиницей и русским языком только. Моя цель не выбрать наиболее подходящий язык вообще, а решать одну конкретную задачу: писать "Ivan Sagalaev" в нерусскоязычных форумах и "Иван Сагалаев" в русских.

    У нас специфика немного другая: фактически используются только два языка, причём те, кто активно общается в англоязычных форумах/блогах обычно используют одно написание своего имени и для русских/украинских/etc

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

    На самом деле, я могу понять, почему вы против эвристики. Действительно, полно софта, который ее активно абьюзит и не дает себя исправлять. Но то, что эвристика -- всегда плохо, конечно, неправда. Например, мы пользуемся эвристикой каждый раз, когда набираем адрес в строке браузера: если он начинается с "ftp.", то браузер будет сначала пробовать достучаться до хоста по http://FTP. Когда это последний раз кому-то мешало?

    Вот и в нашем случае, речь конечно не идет о каком-то навязанном автоматизме, который не будет работать. Речь пока идет только о принципиальных подходах.

    Иначе возникает куча проблем, в т.ч. с почтовыми клиентами которые в From: пихают имя на русском не глядя на каком языке пишется письмо

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

    заканчивая сложностью поиска информации конкретного автора в инете если автор подписывается то по-русски то по-английски

    Я, вообще, очень люблю гугловый поиск, однако тут...
    http://yandex.ru/yandsearch?text=Sagalaev: над рзультатами тут же есть автокоррекционная подсказка на русский. Полезная эвристика.

  21. Иван Сагалаев

    Микроформат или XML это конечно хорошо, но огромное количество программ и устройств понимает отлично vcard. Только представьте себе - щелк на кнопке рядом с комментом и vcard в вашей адресной книге, еще щелчек и он в мобильнике.

    Я не очень понял, где тут проблема. Получить из персональной страницы человека vcard уже сейчас можно кучей разных способов. Можно преобразовать hCard, можно, опять-таки, сослаться на vcard <link>ом, можно с нужным Accept страницу забрать... Все это и есть и даже местами работает. Но речь-то вообще не про это :-)

  22. Давид Мзареулян

    Про XML спорить не буду:) Но насчёт гиков — даже с автоопределением языка (как бы оно ни делалось) всё равно ведь придётся просить юзера заполнить в профиле ДВА поля — имя по-русски и имя по-английски. Это же реально те же профили.
    И что в этом случае плохого в том, если страничка openid-подтверждения будет выглядеть как:

    Подтвердить вход?
    (три кнопки)

    Представиться как: (селектор с выбором имени, по умолчанию русское)

  23. Max Ischenko

    А почему не использовать эвристики Яндекса, которым тот определяет регион пользователя при поисковых запросах?

    Иван: вход по OpenID не сработал, пришлось перенабирать коммиентарий.

  24. Mike Ozornin

    А персон точно не стоит ждать в Яндекс.OpenID?

    Хотелось бы иногда отдавать профиль МоегоКруга, а иногда более неформальный Я.рушный. Сейчас приходится мириться с тем, что очень часто OpenID МоегоКруга не работает.
    Вот и сейчас так же.

Добавить комментарий

Текст через пустую строку превращается в отдельные абзацы, цитата отделяется символами > слева, списка состоит из пунктов с дефисом слева, курсив выделяется * с каждой стороны, жирный - двойными **, блоки кода отступают слева на 4 пробела