пятница, марта 31, 2006

Internationalization of Quake (draft)

- Where we need national charsets:

1) chat
2) server messages
3) names
4) team names
5) UI elements (easiest, not communicated across the network so no need to standardize this)

- Encoding: UTF-8, or special 8-bit charsets

Charset identifier:
=?koi8-r?=
=?utf-8?=
=?cp1251?=
В начале или конце строки? Если в конце - читабельнее будет на клиентах, не поддерживающих стандарт; но - проблемы с каналами сообщений (TF)? Ещё soundtriggers (хотя их никто вроде не использует). Ещё - qizmo добавляет в особые символы в конец строк, которые не должны быть видны отправителью; они будут видны тиммейтам, не использующим Qizmo (так?).
Наверное, надо разрешить помещать идентификатор в любой части строки.
- Если в строке несколько (конфликтующих) идентификаторов, что делать? Брать последний?
- Как пересылать набранный игроком текст, в котором содержится =?xx?= ? Искейпить? Или убедиться, что в конце есть идентификатор кодировки, и отправить как есть (а получатель возьмёт последний идентификатор в строке)?

- Специальные чарсеты для Квейка - чтобы текст был относительно читабельным на клиентах без поддежки языка (и на клиентах с поддержкой, но без нужных чарсетов - хотя в этом случае сам клиент мог бы подбирать похожие буквы из доступных чарсетов)
=?cyr-q?= - Как KOI8-R, но заглавные и строчные не инвертированы. Найти место для Ё и ё.
=?west-q?= - западноевропейские языки. Умляуты и т.п. по возможности на месте соответствующих обычных букв. Обсудить с европейцами. Препочтение чарсетам тех стран, где в квак активнее играют (Скандинавия, Германия)

- В то же время _должна_ быть поддержка не только специальных (=?cyr-q?=, =?west-q?=), но и стандартных чарсетов (cp1251 и т.п.). Это в первую очередь для моддеров - чтобы писать в своей обычной кодировке и добавлять в конец строки идентификатор кодировки, типа:
bprint (PRINT_HIGH, player_name, " вошёл в игру=?cp1251?=\n");
/*** Мммм.... а если мы хотим при этом использовать специальные символы (жёлтые скобочки, например)? "осталось \x90 5 \x91 минут"?
a) Можно сделать специальную кодировку: cp1251-q, koi8-r-q. Если cp1251, то спец.символы будут иметь непривычные коды :-( То есть, скажем, желтая скобка будет не \x90, а \x80 или \xF0 (хотя надо проверить... может, и нормально всё будет?)
b) Можно использовать Qizmo fun chars: $[ $] $1 $2 $xx. Нужно решить: как это объявлять и как искейпить. ****/ EDIT: кажется, проблем не возникнет - не пересекаются диапазоны (кроме, может быть, букв ё и я)

- Почему =?xx?= - в принципе любые символы можно, и не по два символа с каждой стороны, а по одному... но клиент должен уметь отличить даже обозначение незнакомой кодировки (какой-нибудь там =?cp5432?=). А, например, фраза типа ?chego? вполне может встретиться в чате; выбирать же в качестве ограничителя какой-нибудь непечатный символ нежелательно - неудобно будет модописателям и вообще всем, кто будет реализовывать поддержку фичи.

- Чарсет для русского языка (UTF 400-4FF):
0123456789abcdef
0*Ё**************
1АБВГДЕЖЗИЙКЛМНОП
2РСТУФХЦЧШЩЪЫЬЭЮЯ
3абвгдежзийклмноп
4рстуфхцчшщъыьэюя
5*ё**************
6****************
. . .
f****************

- Чарсет для квейковских специальных символов. Взять один из 256-символьных диапазонов, отведённых стандартом Unicode для таких целей, и расположить в нём квейковские специальные символы в привычном порядке (0-31 и 128-159).
Это нужно для Unicode-строк.
EDIT: а ведь можно просто использовать диапазон 0..255 (т.е. фактически 128..255)?

- Как будут выглядеть национальные символы в конфигах? В логах? Хрен с ними, со временем разберёмся.

- Очень желательно (или даже обязательно) - чтобы работало без поддержки сервера. Америкосов (да и большинство европейцев) никогда не убедишь в важности национальных алфавитов. Сервера годами не апдейтятся. Вроде бы предложенный мной стандарт замечательно обойдется без поддержки сервера.