avva: (Default)
[personal profile] avva
Эта запись обращена в первую очередь к программистам, а также специалистам по проблемам языков и кодировок на веб-страницах и в веб-проектах. Но и ко всем вообще, кто хочет высказать своё мнение.

Уважаемые программисты-специалисты!

Сейчас идёт обсуждение того, как улучшить и приспособить ЖЖ для нужд юзеров, пишущих и читающих на самых разных языках, кроме английского. Общее отношение к этой задаче у разработчиков и админов ЖЖ (в частности, у главного decision-maker'а [livejournal.com profile] bradfitz) самое положительное, все хотят это сделать. Просто до сих пор руки не доходили этим заниматься.

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

Можно разделить проблему на две части.

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

Проблема 1. относительно несложная. В одном из своих предыдущих проектов [livejournal.com profile] bradfitz уже сделал схему поддержки многоязыкового интерфейса, которая скорее всего будет приспособлена для целей ЖЖ. См. http://www.freevote.com . Переводить менюшки, страницы и т.п. с английского на русский (и другие языки) должна будет небольшая команда (команды) добровольцев. Для каждого языка (так мне сейчас представляется, если можно лучше - поправьте) будет храниться своё название кодировки, к-е будет прописываться в атрибуте HEAD каждой служебной HTML-страницы (служебная страница = всё, кроме дневников и дружеских с календарными лент. Т.е. то, что кончается на .bml).

Основные сложности заключаются во второй проблеме. Как дела обстоят сейчас? Любой текст записывается в базу данных в виде 8-битного потока. Если он туда был отправлен в какой-то кодировке, то потом, чтобы его правильно посмотреть, у юзера эта кодировка должна быть правильно прописана. Например, в русском ЖЖ мы де-факто стандартизировались на cp-1251.

Кроме того, время от времени IE по каким-то своим причинам посылает серверу ЖЖ не 8-битный текст, а переводит все русские буквы в Юникод и посылает их в виде HTML-entities типа Ӓ Серверу на это плевать, он их в таком же виде записывает в БД и выбрасывает потом юзеру.

Чего хотелось бы добиться?
1. The Right Thing. Главным критерием [livejournal.com profile] bradfitz'а и остальных здесь является сделать не как попроще, чтобы отвязаться, а как правильно, в соответствии со стандартами, и чтобы юзерам было поудобней.
2. Любой текст, записываемый в БД, должен быть идентифицирован с точки зрения его кодировки. Т.е. например он либо сразу должен быть в Юникоде, либо, если это 8-битный текст, вместе с ним должна быть записана информация о кодировке и/или языке.
3. Желательно придумать решение, позволяющее многоязыковость в пределах одной страницы. Например, я запишу себе в друзья японца, француза и русского; хотелось бы их записи все видеть правильно на одной френдовой ленте.

Какие пока придуманы варианты?

На входе:
1) Брать тот же восьмибитный поток от браузера, но не забывать про информацию о кодировке (если я правильно помню, браузер прописывает её в HTTP-заголовках?). Хранить информацию в базе данных в том же виде, что и сейчас, плюс кодировка для каждой записи/комментария.
2) Брать восьмибитный поток от браузера и переводить его в чистый Юникод при помощи информации о кодировке. После этого в базе данных хранить одним из двух способов:
2а) перевести все Юникод-символы больше 128 в HTML-entities типа Ӓ , полученный текст хранить как восьмибитный поток, как и раньше.
2б) хранить в БД сам Юникод как-он-есть, например в кодировке UTF-8.

На выходе:
3) Брать текст вместе с кодировкой, записанный в варианте 1) выше, и выкидывать его наружу без изменений. Кодировку прописывать в заголовок страницы. Этот вариант, однако, не позволяет соседствовать на одной странице записям/комментариям на разных языках/в разных кодировках.
4) Брать текст из БД, как бы он там ни был записан, переводить его в Юникод (если он ещё не в Юникоде), из Юникода в HTML-entities, и в таком виде кидать юзеру. Недостатки: больше траффика (но страницы зипуются сервером, если браузер это понимает, так что это, возможно, не так страшно); все ли браузеры правильно поймут и покажут HTML-entities?
5) Брать текст из БД, как бы он там ни был записан, переводить его в Юникод (если он ещё не там), и кидать его в UTF-8 юзеру, прописав UTF-8 в качестве кодировки на странице. Недостатки: все ли браузеры правильно понимают и интерпретируют кодировку UTF-8?

Какие вопросы надо решить:
  • Какие из вышеприведенных опций стоит выбрать?
  • А может быть, есть другие варианты, которые можно предложить?
  • Какие существуют проблемы с популярными браузерами? В этой области я вообще ничего не знаю, так что особенно нужна помощь. Особенно важно: можем ли мы положиться на то, что браузер всегда передаёт серверу правильную информацию о кодировке, когда он кидает ему текст из формы? Правильно ли себя в этой области ведут Эксплорер, Нетскейп, Опера и т.п.? Нужно ли что-то специально прописывать в форме? Этот вопрос особенно важен потому, что нужно решить, можем ли мы расчитывать на то, что всегда сможем корректно перевести входные данные в Юникод.
  • Тот же вопрос, но о браузерах на выходе. Что они понимают, а что нет, из предложенных ршений?
  • Ну и вообще любые предложения и замечания.

    Спасибо!

    P.S. Если у кого-то есть желание присоединиться к команде разработчиков ЖЖ, то они все тусуются в этих двух местах: [livejournal.com profile] lj_dev и http://lists.livejournal.com .

Date: 2001-09-11 06:08 am (UTC)
From: [identity profile] auto194419.livejournal.com
Ìíå êàæåòñÿ, íàèáîëåå âåðíî - õðàíèòü â UTF-8, è â íåé è ïîêàçûâàòü âñåãäà! Âñå ñîâðåìåííûå browsers óìåþò íîðìàëüíî å¸ îòîáðàæàòü.

Notification æå íóæíî ïîñûëàòü â çàêàçàííîé êîäèðîâêå - î÷åíü ÷àñòî KOI8 èëè win1251 - äàëåêî íå ëó÷øåå ðåøåíèå.

Date: 2001-09-11 06:18 am (UTC)
From: [identity profile] xfyre.livejournal.com
ïîëîæèì, íå âñå. ïîðÿäêà 95%, ÿ äóìàþ, íî äëÿ èíòåðàêòèâíîãî ðåñóðñà è 5% òåðÿòü íåãîæå. ñì. âûøå.

Date: 2001-09-12 04:05 pm (UTC)
From: [identity profile] avva.livejournal.com
Ïîíèìàåòå, íå ñîâñåì ÿñíî, êàê ñäåëàòü UTF8 îïöèîíàëüíûì äëÿ *íåêîòîðûõ* þçåðîâ.

Åñëè óæ ââîäèòü UTF-8 â áàçó äàííûõ, òî ïîíÿòíî, ÷òî ýòî äëÿ âñåõ. Ïðåäïîëîæèì, ñäåëàëè ýòî. È ÷òî òåïåðü âûäàâàòü þçåðó, ê-é íå õî÷åò âèäåòü Þíèêîä? Êàê è êóäà åìó ïåðåâîäèòü? Êèäàòü åìó íå charser=utf8, à HTML-entities? Èëè ïûòàòüñÿ ïåðåâîäèòü â êîäèðîâêó åãî âûáîðà, òåðÿÿ ïî ïóòè íå âïîëçàþùèå â íå¸ ñèìâîëû?

Ïîìîãèòå ìíå, ÿ íå ñîâñåì ïîíèìàþ, êàê ëó÷øå ýòî ñäåëàòü. Ñàìîå ãëàâíîå äëÿ ìåíÿ - èçáåæàòü nightmare scenario, ïðè êîòîðîì Áðàä ïî ìîåé ðåêîìåíäàöèè ïåðåâîäèò âñþ áàçó äàííûõ íà Þíèêîä, à ïîòîì îêàçûâàåòñÿ, ÷òî áîëüøîìó êîëè÷åñòâó þçåðîâ ýòî âñ¸ ëîìàåò. ß æ òîãäà çàñòðåëþñü îò ñòûäà ;)

Date: 2001-09-13 05:50 am (UTC)
From: [identity profile] xfyre.livejournal.com
charset áàçû äàííûõ è charset, â êîòîðîì êîíòåíò âûâîäèòñÿ è/èëè ââîäèòñÿ â ÁÄ - äâå áîëüøèå ðàçíèöû. ýòî õîðîøî âèäíî íà ïðèìåðå Oracle - character set òàì çàäàåòñÿ ïðè ñîçäàíèè ÁÄ, à ïîëüçîâàòåëü ðàáîòàåò ñ òåì, ÷òî ó íåãî îïðåäåëåíî ïåðåìåííîé îêðóæåíèÿ NLS_LANG (ïîä ïîëüçîâàòåëåì ÿ â äàííîì ñëó÷àå èìåþ â âèäó ñêðèïò, çàíèìàþùèéñÿ ðåíäåðèíãîì êîíòåíòà). ïåðåêîäèðîâêà ïðîèñõîäèò íà ëåòó ñðåäñòâàìè ÁÄ. ÿ ïî÷òè óâåðåí, ÷òî â äðóãèõ ðåàëèçàöèÿõ ýòî òîæå âîçìîæíî.

òî åñòü, ðåçþìèðóÿ - â íîðìàëüíûõ ðåàëèçàöèÿõ database character set îïðåäåëÿåò íå òî, â ÷åì áóäåò êîíòåíò _âûâîäèòüñÿ_, à òî, â ÷åì îí áóäåò _õðàíèòüñÿ_. èñïîëüçîâàíèå utf-8 â êà÷åñòâå DB character set íå âûíóæäàåò ê åãî èñïîëüçîâàíèþ â êà÷åñòâå êëèåíòñêîãî, à ïîçâîëÿåò åãî èñïîëüçîâàíèå â êà÷åñòâå êëèåíòñêîãî. âîò êàê-òî òàê.

ìàëî òîãî

Date: 2001-09-11 06:19 am (UTC)
From: [identity profile] vadimkle.livejournal.com
ìíå íîòèôèêàöèÿ êàêèì-òî íåÿñíûì îáðàçîì ïðèõîäèò â KOI8 - òàê è îòâåò, åñëè ÿ åãî äåëàþ ïðÿìî èç ïèñüìà îêàçûâàåòñÿ â íåé æå è, ñîîòâåòñòâåííî, íå ÷èòàåòñÿ.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 08:39 am
Powered by Dreamwidth Studios