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)?
- Как будут выглядеть национальные символы в конфигах? В логах? Хрен с ними, со временем разберёмся.
- Очень желательно (или даже обязательно) - чтобы работало без поддержки сервера. Америкосов (да и большинство европейцев) никогда не убедишь в важности национальных алфавитов. Сервера годами не апдейтятся. Вроде бы предложенный мной стандарт замечательно обойдется без поддержки сервера.
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)?
- Как будут выглядеть национальные символы в конфигах? В логах? Хрен с ними, со временем разберёмся.
- Очень желательно (или даже обязательно) - чтобы работало без поддержки сервера. Америкосов (да и большинство европейцев) никогда не убедишь в важности национальных алфавитов. Сервера годами не апдейтятся. Вроде бы предложенный мной стандарт замечательно обойдется без поддержки сервера.