Многоязыковость
От: Konstantin Sokolovskiy  
Дата: 31.01.02 09:42
Оценка:
Привет, многоуважаемый All!

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

Все это вполне хорошо работает, пользователь выбирает испанский язык в настройках — ему все меню на испанском, ну и т.д.

А вот с какой проблемой я столкнулся. Все это строки, которые выдаются пользователю, имеют определенный encoding, скажем, windows-1251 для русского языка. Но есть неким образом сформированные динамические данные, которые могут быть представлены в совершенно другом encoding, что приводит к тому, что пользователь видит либо эти самые динамические данные, либо интерфейс

Конечно, можно было бы использовать utf-8, но дело в том, что динамическим данным много лет (5-20). Вследствие этого, а также ряда других причин сконвертировать их в utf-8 становится малореально.

Что же остается делать?
Есть ли другие способы?

Да, забыл сказать. Решения можно предлагать в расчете на IE 5+.
Re: Многоязыковость
От: Lexey Россия  
Дата: 31.01.02 10:09
Оценка:
Здравствуйте Konstantin Sokolovskiy, Вы писали:

KS>Привет, многоуважаемый All!


KS>Я хотел бы обсудить достаточно насущную, для себя, по крайней мере, тему поддержки многоязыковости в веб-приложениях.

KS>Просто в данный момент я работаю над неким коробочным продуктом, в котором эта самая многоязыковость должна поддерживаться. Первое, что приходит в голову, это создать некое подобие файла ресурсов, который можно переводить, а потом нужный файл при необходимости подключать в зависимости от настроек пользователя. Ну либо в базу класть, не суть важно в данном случае. Оставим в стороне сложности с переводом картинок с текстами, не об этом сейчас речь.

KS>Все это вполне хорошо работает, пользователь выбирает испанский язык в настройках — ему все меню на испанском, ну и т.д.


KS>А вот с какой проблемой я столкнулся. Все это строки, которые выдаются пользователю, имеют определенный encoding, скажем, windows-1251 для русского языка. Но есть неким образом сформированные динамические данные, которые могут быть представлены в совершенно другом encoding, что приводит к тому, что пользователь видит либо эти самые динамические данные, либо интерфейс


KS>Конечно, можно было бы использовать utf-8, но дело в том, что динамическим данным много лет (5-20). Вследствие этого, а также ряда других причин сконвертировать их в utf-8 становится малореально.


А перекодировать их в нужную кодировку перед отдачей клиенту?
Re[2]: Многоязыковость
От: Аноним  
Дата: 31.01.02 10:35
Оценка:
L>А перекодировать их в нужную кодировку перед отдачей клиенту?

Мысль правильная :-)
Но есть одно но: кодировка динамических данных неизвестна. Это связано с историческими причинами, в которые мне не хотелось бы углубляться. Будь их кодировка известна, можно было бы просто все сразу сконвертнуть в utf-8, и проблем бы не было.
Re[3]: Многоязыковость
От: Lexey Россия  
Дата: 31.01.02 12:20
Оценка:
Здравствуйте Аноним, Вы писали:

L>>А перекодировать их в нужную кодировку перед отдачей клиенту?


А>Мысль правильная

А>Но есть одно но: кодировка динамических данных неизвестна. Это связано с историческими причинами, в которые мне не хотелось бы углубляться. Будь их кодировка известна, можно было бы просто все сразу сконвертнуть в utf-8, и проблем бы не было.

Ну тогда наверное только вешаться.
Re[4]: Многоязыковость
От: Konstantin Sokolovskiy  
Дата: 31.01.02 12:25
Оценка:
Здравствуйте Lexey, Вы писали:

L>Ну тогда наверное только вешаться. :))


А для чего существует функция escape, интересно?
Не для этих ли вещей?

Только IE не хочет отображать непосредственно то, что она выдает... а использовать каждый раз unescape как-то не хочется...
Re[5]: Многоязыковость
От: Lexey Россия  
Дата: 31.01.02 13:23
Оценка:
Здравствуйте Konstantin Sokolovskiy, Вы писали:

KS>Здравствуйте Lexey, Вы писали:


L>>Ну тогда наверное только вешаться.


KS>А для чего существует функция escape, интересно?

KS>Не для этих ли вещей?

Нет, она предназначена для URL-энкодинга.

KS>Только IE не хочет отображать непосредственно то, что она выдает... а использовать каждый раз unescape как-то не хочется...

И не захочет — escape заменяет символы на %xx, а браузер понимает только &#xx. unescape тебе тут тоже ничем не поможет. Он вернет тебе обратно те самые символы, которые были до этого, кодировка при этом никак не изменится.

В общем, если у тебя нет никакой информации о кодировке (и нет никакой возможности ее добыть, хотя бы и статанализом), то это 100% в морг.
Re: Многоязыковость
От: Konstantin Sokolovskiy  
Дата: 04.02.02 15:36
Оценка:
В общем, проблема вполне решаема...
Не вполне красиво, но лучше так, чем вообще никак.

Смысл решения сводится к использованию функции escape для кодирования пользоательских строк на клиенте и отсылке всего этого на сервер.
На сервере заменяем "%" и "%u" на "&#x" и получаем готовые строки для возврата клиенту, которые будут показываться независмо от того, какой именно charset у него стоит.

Там возникают некоторые проблемы с alert'ами, но это уже мелкие технические сложности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.