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

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

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

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

Комментарии: 24

  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. russian-knight.livejournal.com

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

  4. Кирилл Маврешко

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

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

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

  5. david-m.livejournal.com

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

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

  6. 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. Кирилл Маврешко

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

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

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

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

  15. david-m.livejournal.com

    Да просто 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. Deepwalker

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  22. david-m.livejournal.com

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

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

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

  23. Max Ischenko

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

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

  24. Mike Ozornin

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

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

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