Hi!
Предложение первое, не торопиться. А по существу, сделать драфт
по всей русской части apache, как предположительно это будет работать.
Если бы это удалось, то появится первый полноценный многоязычный сервер.
>
> 1) Механизм Language Negotiation уже существует в Apache (MultiViews),
> каким-то образом он работает, хотя на практике неприменим из-за лени
> пользователей.
И не только, MSIE 3.х вообще не управляется, и часто шлет мусор.
> 2) mod_charset вступает в дело на предпоследней стадии обработки запроса,
> когда известен окончательный URL (после всех Alias/Redirect) и так далее.
>
> 3) на этом этапе модулю известны:
> a) URL и Filename
> b) Language документа (if any)
> c) Заголовки запроса - Accept/Accept-Charset/Accept-Language/User-Agent
> d) естественно, всякие настройки
>
> 4) Задача заключается в том, чтобы выяснить charset документа, выдаваемый
> в строке Content-Type и правила перекодировки из кодировки сервера в кодировку
> клиента.
>
> 5) Предлагается:
> a) сделать какой-то механизм объявления серверу, что такому-то Document
> Language может соответствовать такой-то возможный список charsets.
> Вариантов два:
> - CharsetDecl koi8-r ru ua by
> - CharsetLanguageBind ru koi8-r windows-1251 iso-8859-5
Я думаю что лучше: CharsetDecl koi8-r windows-1251 iso-8859-5 ru,
то есть последний таг - язык, так уже работало для CharsetTable.
Это так же правильно, как и CharsetLanguageBind, но совместимо.
> При этом в обоих случаях _удобно_ (мне как программисту) понимать под
> Charset внутреннее название таблицы перекодировки (в большинстве
> случаев оно совпадает с выдаваемым пользователю
> Content-Type:... charset=name)
Я тут хочу повторить свое предложение: использовать одну таблицу
для каждого Charset - через UNI-code (utf8?), a из него генерировать
все остальные. Я тут в одном месте долго искал ошибку: почему сервер
в windows-1251, не перекодирует,как оказалось что сервер настроен на koi8-r,
а тут была перекодировка из iso-8859-5 в windows-1251 - пока нашел - вспотел.
А было бы здорово для каждой кодировки иметь только один файл:
CharsetRecodeUniTable koi8-r conf/uni-koi.tab
> б) для случая, когда внутреннее имя и имя выдаваемое пользователю не
> совпадают, нужна какая-то директива вида:
>
> CharsetOverrideName internal_name language displayed_name
А как это?
> в) Заголовок Accept-Charset должен обрабатываться таким образом,
> что во внимание принимаются только charsets, определенные для данного
> языка документа.
>
> г) К механизму MultiViews это не должно иметь почти никакого отношения, за
> исключением того факта, что Document Language определяется директивой
> AddLanguage (благо она уже есть).
Надо еще DefaultLanguage.
> г) Этот режим должен быть выключен по умолчанию. Для включения нужна отдельная
> директива. Я предлагаю расширить CharsetMatchLanguage - ввести режим
> strict который и будет делать вышеописанное.
>
>
> Давайте дальнейшее обсуждение продолжать где-то с этой точки. А то есть
> непонимание.
Я тут посмотрел коды ошибок для HTTP/1.1, там есть код 406 - кто
знает, как реагируют разные клиенты на него?
--
Best regards, Eugene Byrganov
mailto:E.B.Byrganov@inp.nsk.su
work - http://www.inp.nsk.su/
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.