Go to the English language version of this page

Как сделать многоязычную WWW страницу

Paul Gorodyansky 'Cyrillic (Russian): instructions for Windows and Internet'

 
Эта страница - для разработчиков, которые хотели бы иметь - на одной странице - несколько языков, например, русский, польский, и французский.


Согласно HTML стандартам, у HTML текста (от <html> до </html>, один файл .html) может быть только одна кодировка:

Примечание. То же самое, кстати, верно и для .XML - одна кодировка на документ, например,
  <?xml version="1.0" encoding="windows-1251"?>


В отличие, скажем, от файлов MS Word, файл .HTML (и .XML) - это простой текстовый файл (plain text), точно такой же, как .TXT.

Поэтому HTML файл, как и .TXT, может содержать знаки только одного набора символов (Character Set).
Например, нельзя в одном HTML файле иметь буквы из Западно-Европейского набора символов
  (Character Set "Western", encoding: iso-8859-1 или windows-1252)
и кириллицы
  (Character Set "Cyrillic", encoding: например, windows-1251)
.

Можно это пояснить на простом примере. Русской 'д' в кодировке windows-1251 присвоено значение 228. Немецкая a-umlaut в кодировке "Western" - тоже 228.

Поэтому если в простом текстовом файле, каким является .HTML, присутствует байт со значением 228, мы увидим либо русскую 'д' во всех местах текста, где встречается этот код 228
  (если страница объявлена как "Cyrillic(Windows)": charset=windows-1251),
либо увидим немецкую букву a-umlaut во всех таких местах
  (если страница объявлена как "Western": charset=windows-1252 или charset=iso-8859-1),
но никак не обе буквы сразу на одной Web-странице.

Если charset для страницы не задан, то увидим ли на экране немецкую букву или русскую зависит от текущей кодировки браузера. Например, в IE 5 это зависит от того, выбрано ли в меню View/Encoding "Western" или "Cyrillic(Windows)"

Примечание. Хочу напомнить, что английский алфавит имеет специальный статус. А именно, каждый набор символов (кириллица, японский, центрально-европейский,...) включает в себя, в дополнение к национальным буквам, символы ASCII, и значит, буквы английского алфавита.
Поэтому английский текст и русский текст на одной странице не означает смеси букв из разных наборов символов, не означает многоязычности страницы - это Windows-1251 страница (один charset), просто 1251 включает и английские буквы (точнее - ASCII символы), а не только кириллицу.



Как же тогда сделать страницу, где должны быть буквы из разных наборов символов?

Тут могут быть 2 варианта:

Вариант 1.

На самом деле страница не очень уж многоязычная - например, на русской странице (HTML текст в кодировке Cyrillic windows-1251) надо только 2-3 немецкие (греческие, ...) буквы поместить, а не большие куски немецкого текста.

Саму немецкую или греческую букву вставить нельзя, как было описано выше, но можно использовать некое её представление:



Примечание. Оба способа, описанные выше, не работают в Netscape 4, так что если надо его поддерживать, то следует использовать Вариант 2, описанный ниже.



Вариант 2.

Страница по-настоящему многоязычная - большие куски текста для каждого из языков
(и/или надо Netscape 4 поддерживать).

Естественно, никто не будет набирать много текста, вводя каждую букву в виде &uml; или &#nnnn;.
А уж модифицировать (например, исправить ошибку в слове) такой текст совсем затруднительно.

Тогда делают так:

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

То есть, есть следующие наборы символов (Character Sets), и надо выбрать один из них для создания многоязычной страницы:

Unicode Character Set включает в себя символы многих алфавитов, и европейских, и азиатских, поэтому этот набор символов как раз и подходит для создания многоязычных страниц. Ведь как и для всякого другого набора символов, в кодировках Unicode всем символам присвоен уникальный код, то есть, в любой кодировке набора символов Unicode буква 'д' и немецкая a-umlaut имеют разные коды, например, в UTF-8, где 8-ми битовые западно-европейские буквы с диакритикой и русские буквы представлены 2-х байтовыми комбинациями:

и так как коды - разные, то обе эти буквы могут находиться в одном UTF-8 HTML файле.

Именно поэтому в Unicode plain text file (.HTML, .TXT, .XML) можно иметь символы разных национальных алфавитов - у них разные коды! Естественно, используемый шрифт тоже должен быть Unicode-шрифтом, но это не проблема - и MS IE, и Netscape как раз по умолчанию используют Unicode шрифты типа "Arial" и "Times New Roman".
Таким образом, на UTF-8 странице можно иметь русские, немецкие, греческие, и т.д. буквы.

Поэтому многоязычные страницы делают в кодировке UTF-8, принятой для Unicode в Интернете.


 
Примечание. Если, в дополнение к европейским языкам, Вы хотите иметь на такой UTF-8 странице азиатские языки, скажем, японский или китайский или корейский, то:


Посмотрите мои тестовые UTF-8 страницы (там специально сделано method=GET для формы, чтобы видеть URL-encoded Hex-значения букв в строке адреса браузера после Submit),
где есть и японский текст:


Разработчику надо найти редактор, который может создать HTML файл с текстом в кодировке UTF-8 внутри.
То есть, если потом посмотреть на Hex-значения букв (например, Hex в FAR через F3), то должны быть значения кодировки UTF-8, например, немецкая a-umlaut - C3A4, а русская 'д' - D0B4.

В таком, поддерживающем UTF-8 редакторе работаешь, как в MS Word 97/2000/XP - разные алфавиты доступны путем переключения клавиатуры:
'RU' - вводится русский текст, переключишь на 'DE' - будут вводиться немецкие буквы.

Если же нерусских букв немного, то можно их скопировать из окна утилиты Charmap включённой в состав MS Windows:



Важно!
Естественно, как и для любой другой кодировки, надо, чтобы страница 'заявила' о ней, то есть, надо чтобы browser 'знал', что для этой страницы charset=utf-8.
Это делается либо путем настройки Web сервера, который вместе с самой страницей шлет HTTP Header с таким значением в строке charset (предпочтительный вариант), либо путем задания
  <META http-equiv="content-type" content="text/html; charset=utf-8">
в самом 'теле' HTML файла
(как на моих тестовых UTF-8 страницах - я никак не могу сказать моему провайдеру Compuserve, чтобы его сервер составлял нужные мне HTTP headers).

Если charset никак не задан, то тоже ничего страшного - пользователь сможет выбрать Unicode(UTF-8) в меню кодировок своего браузера.



Вот опробованные мной редакторы, где можно писать HTML и текст будет в кодировке UTF-8:


Если кому интересны более детальные технические подробности насчет UTF-8 и создания многоязычных страниц, то вот 2 самых известных сайта на эту тему:

J.Korpela. Techniques for multilingual Web sites

A.Flavell. HTML Internationalization


Paul Gorodyansky. 'Cyrillic (Russian): instructions for Windows and Internet'