Привет, многоуважаемый All!
Я хотел бы обсудить достаточно насущную, для себя, по крайней мере, тему поддержки многоязыковости в веб-приложениях.
Просто в данный момент я работаю над неким коробочным продуктом, в котором эта самая многоязыковость должна поддерживаться. Первое, что приходит в голову, это создать некое подобие файла ресурсов, который можно переводить, а потом нужный файл при необходимости подключать в зависимости от настроек пользователя. Ну либо в базу класть, не суть важно в данном случае. Оставим в стороне сложности с переводом картинок с текстами, не об этом сейчас речь.
Все это вполне хорошо работает, пользователь выбирает испанский язык в настройках — ему все меню на испанском, ну и т.д.
А вот с какой проблемой я столкнулся. Все это строки, которые выдаются пользователю, имеют определенный encoding, скажем, windows-1251 для русского языка. Но есть неким образом сформированные динамические данные, которые могут быть представлены в совершенно другом encoding, что приводит к тому, что пользователь видит либо эти самые динамические данные, либо интерфейс
Конечно, можно было бы использовать utf-8, но дело в том, что динамическим данным много лет (5-20). Вследствие этого, а также ряда других причин сконвертировать их в utf-8 становится малореально.
Что же остается делать?
Есть ли другие способы?
Да, забыл сказать. Решения можно предлагать в расчете на IE 5+.
Здравствуйте Konstantin Sokolovskiy, Вы писали:
KS>Привет, многоуважаемый All!
KS>Я хотел бы обсудить достаточно насущную, для себя, по крайней мере, тему поддержки многоязыковости в веб-приложениях.
KS>Просто в данный момент я работаю над неким коробочным продуктом, в котором эта самая многоязыковость должна поддерживаться. Первое, что приходит в голову, это создать некое подобие файла ресурсов, который можно переводить, а потом нужный файл при необходимости подключать в зависимости от настроек пользователя. Ну либо в базу класть, не суть важно в данном случае. Оставим в стороне сложности с переводом картинок с текстами, не об этом сейчас речь.
KS>Все это вполне хорошо работает, пользователь выбирает испанский язык в настройках — ему все меню на испанском, ну и т.д.
KS>А вот с какой проблемой я столкнулся. Все это строки, которые выдаются пользователю, имеют определенный encoding, скажем, windows-1251 для русского языка. Но есть неким образом сформированные динамические данные, которые могут быть представлены в совершенно другом encoding, что приводит к тому, что пользователь видит либо эти самые динамические данные, либо интерфейс
KS>Конечно, можно было бы использовать utf-8, но дело в том, что динамическим данным много лет (5-20). Вследствие этого, а также ряда других причин сконвертировать их в utf-8 становится малореально.
А перекодировать их в нужную кодировку перед отдачей клиенту?
Здравствуйте Аноним, Вы писали:
L>>А перекодировать их в нужную кодировку перед отдачей клиенту?
А>Мысль правильная
А>Но есть одно но: кодировка динамических данных неизвестна. Это связано с историческими причинами, в которые мне не хотелось бы углубляться. Будь их кодировка известна, можно было бы просто все сразу сконвертнуть в utf-8, и проблем бы не было.
Ну тогда наверное только вешаться.
Здравствуйте Konstantin Sokolovskiy, Вы писали:
KS>Здравствуйте Lexey, Вы писали:
L>>Ну тогда наверное только вешаться.
KS>А для чего существует функция escape, интересно?
KS>Не для этих ли вещей?
Нет, она предназначена для URL-энкодинга.
KS>Только IE не хочет отображать непосредственно то, что она выдает... а использовать каждый раз unescape как-то не хочется...
И не захочет — escape заменяет символы на %xx, а браузер понимает только &#xx. unescape тебе тут тоже ничем не поможет. Он вернет тебе обратно те самые символы, которые были до этого, кодировка при этом никак не изменится.
В общем, если у тебя нет никакой информации о кодировке (и нет никакой возможности ее добыть, хотя бы и статанализом), то это 100% в морг.
В общем, проблема вполне решаема...
Не вполне красиво, но лучше так, чем вообще никак.
Смысл решения сводится к использованию функции escape для кодирования пользоательских строк на клиенте и отсылке всего этого на сервер.
На сервере заменяем "%" и "%u" на "&#x" и получаем готовые строки для возврата клиенту, которые будут показываться независмо от того, какой именно charset у него стоит.
Там возникают некоторые проблемы с alert'ами, но это уже мелкие технические сложности.