Какой тэг языка подходит для меня? Как выбрать язык и другие субтэги?
В HTML и XML документах языковой тэг используется для объявления языка контента.
Языковой тэг состоит из одного или нескольких субтэгов (subtag), разделённых дефисами. Субтэги могут быть различных типов.
BCP означает 'Best Current Practice' и является постоянным именем серии RFC документов, чьё количество изменяется по мере их обновления. Последний RFC, описывающий синтаксис языковых тэгов - это RFC 5646, Tags for the Identification of Languages, он заменил предыдущие RFC, такие, как 4646, 3066 и 1766.
Синтаксис языковых тэгов определён BCP 47, написанный IETF. В прошлом было необходимо обращаться к спискам кодов различных ISO стандартов, чтобы найти подходящие субтэги, но сегодня всё, что вам нужно, это IANA Language Subtag Registry. Мы опишем новый реестр ниже.
Эта статья предоставляет советы по выбору компонентов для языковых тэгов. Для обзора концепций, определяемых BCP 47, смотрите Языковые тэги в HTML и XML.
Все субтэги, которые необходимы для создания языковых тэгов находятся в одном месте - IANA Language Subtag Registry. Реестр представляет собой длинный текстовый файл, содержащий около 8,000 записей.
Первый (и часто единственный) субтэг в языковом тэге всегда означает язык. Он упоминается в BCP 47, как субтэг основного языка (primary language subtag). Мы будем использовать этот термин для субтэга, который обозначает язык, чтобы показать различие со всей строкой, которая называется 'языковым тэгом'.
Чтобы найти субтэг основного языка ищите на странице по имени этого языка. Например, если вы хотите объявить что-либо французским языком, то поиск 'French' в реестре вернет вам запись, которая выглядит так:
%% Type: language Subtag: fr Description: French Added: 2005-10-16 Suppress-Script: Latn %%
Ваш поиск совпал с полем Description
. Проверьте, что тип этой записи language
. То, что вы ищете, это значение поля Subtag
, то есть fr
.
В остальной части этой статьи вы найдете рекомендации по выбору субтэгов основного языка и, при необходимости, других типов субтэгов. Обратите внимание, что не все решения о создании языкового тега просты. Существуют обстоятельства, при которых использование определяет, какие из различных возможностей вам следует использовать.
Существуют утилиты, предоставляющие дополнительную помощь в поиске по реестру, такие, как Language Subtag Lookup.
Помните о регистре символов. По соглашению, субтэги основного языка пишутся в нижнем регистре, субтэги письменности начинаются с заглавной буквы, а субтэги региона - в верхнем регистре. Это только соглашение, и вы можете использовать любой регистр, который вам нравится.
С другой стороны, вы можете использовать языковые тэги в данных, где регистр букв важен, например, имена файлов в некоторых системах. В таких случаях, вам следует убедиться, что вы следуете политике совместимости регистра символов; Для любых новых систем, где регистр не важен, рекомендуется следовать соглашениям BCP 47.
Вы всегда начинаете с выбора субтэга основного языка, и зачастую это всё, что вам нужно для вашего языкового тэга.
Всегда помните, что золотое правило гласит: "сохраняйте ваши языковые тэги как можно более короткими". Добавляйте дальнейшие субтэги только если вам необходимо указать различие языка от чего либо ещё в контексте, в котором ваш контент используется.
Во время поиска подходящего субтэга основного языка есть несколько вещей о которых следует помнить.
Вы можете искать информацию в SIL Ethnologue и проверять также в Wikipedia. Ethnologue использует такие же трёхбуквенные коды, что и BCP47, но вам придётся конвертировать двухбуквенные коды BCP47 в их соттветствие ISO 639-3, чтобы найти язык по коду. (Утилита Language Subtag Lookup может сделать это для вас).
Есть небольшое число примеров, когда различные коды языков доступны для того, что многие люди считают одним языком, например, филиппинский и тагальский язык, или язык Чви и Акан. В реестре нет указания на то, какой из них вам следует использовать, но вам следует убедиться, что вы последовательно используете одинаковый код в рамках приложения или одного контекста.
Scope: collection
, означающее, что этот субтэг представляет группу языков, происходящих от общего предка, используемых в одной географической зоне, или связанных как-то ещё.
Вам следует искать более конкретный субтэг для языка, который вам нужен. К сожалению, реестр субтэгов не предоставляет никаких указателей для этого.
Вы можете использовать эти субтэги, если недоступны никакие более конкретные субтэги, и всегда более предпочтительно использовать один из них, чем субтэги MUL
(несколько языков) или UND
(не определено).
Scope
, установленное в значение macrolanguage
, то есть этот субтэг основного языка указывает на несколько более конкретных субтэгов основного языка в реестре.
Например, ku
(курдский) это языковая ветвь указывающая на ckb
(Сорани), kmr
(Курманджи) и sdh
(Южнокурдский язык).
Вы сможете найти более конкретные субтэги, с помощью поиска по реестру: Macrolanguage: <имя субтэга>
. Либо утилита Language Subtag Lookup может автоматически создасть список для переданной языковой ветви (пример).
Как мы рекомендовали для коллекций, упомянутых выше, в большинстве случаев лучше попытаться использовать более конкретные субтэги, но есть небольшое число важных исключений. Это ситуации, в которых вам следует использовать субтэг языковой ветви по причинам обратной совместимости.
Например, хотя BCP 47 объясняет, что zh
(субтэг языковой ветви для китайского) не указывает на один из множества, иногда взаимно непонятных, диалектов китайского, на практике, соглашение в подавляющем большинстве случаев связывает субтэг языковой ветви с языком, доминирующим среди других охватываемых субтэгов - в данном случае, cmn
(путунхуа). Если ваше приложение для обозначения путунхуа использовало в прошлом языковой тэг zh-CN
(китайский, используемый в материковом Китае), или даже просто zh
, то вы можете продолжать использовать zh
. Использование cmn
или cmn-CN
может привести к серьёзным проблемам с совместимостью если программы или пользователи ожидают такой тэг, как zh
.
Если, с другой стороны, вы используете zh
для обозначения другого китайского диалекта, например, хакка, то вам следует вместо него использовать субтэг hak
.
Deprecated
, то вам не следует его использовать. Обычно реестр указывает рекомендованный альтернативный вариант в поле Preferred-Value
. Например, запись субтэга для iw
(иврит) содержит два следующих поля:
Deprecated: 1989-01-01 Preferred-Value: he
Это означает, что вам следует использовать субтэг he
для иврита.
В прошлом при работе с кодами ISO иногда встречались несколько кодов для одного языка - там мог быть двухбуквенный код и один или два трёхбуквенных. Эта неоднозначность была устранена в реестре IANA Subtag Registry, который содержит только один код для одного языка. Если существует двухбуквенный ISO код, то он будет использован, если нет, то трёхбуквенный. Разработчики реестра также координируют текущее развитие реестра с изменениями, происходящими в мире ISO.
Спецификация BCP 47 позволяет использование дополнительного трёхбуквенного субтэга сразу после субтэга основного языка. Он называется субтэгом диалекта (extended language subtag или extlang). Определено только относительно небольшое количество субтэгов диалекта, и они обязательно должны быть использованы с конкретными субтэгами основного языка (указанного в поле Prefix
записи субтэга диалекта в реестре).
На сегодня только семь субтэгов основного языка могут быть использованы с субтэгами диалекта. Шесть из них имеют поле Scope
, со значением macrolanguage
в реестре (ar
, kok
, ms
, sw
, uz
и zh
). Седьмой код - sgn
.
Рассмотрим следующее:
Там, где возможно, используйте просто тэг языка вместо комбинации языка и диалекта.
Всегда есть трёхбуквенный субтэг, являющийся эквивалентом любой паре язык + диалект. Например, zh-yue
(Кантонский диалект китайского языка) может быть также выражен с помощью субтэга yue
.
Единственное значительное исключение для комбинации языка и диалекта - укоренившаяся практика для системы, с которой вы работаете; например, когда zh-yue
предпочтительнее yue
для поддержки обратной совместимости.
ar
(субтэг арабских языков) может быть более подходящим для арабского литературного языка, чем arb
(более конкретный субтэг, означающий современный стандартный арабский язык).
Подобным образом, при работе с преобладающим языком в наборе, для обратной совместимости обычно лучше заменить комбинацию языка и диалекта, отбросив субтэг диалекта, а не субтэг основного языка. Например, упрощение ms-zsm
к ms
(субтэг малайских языков) может быть иногда лучше, чем zsm
(литературный малайский).
Примером использования может быть Общий Репозиторий Языковых Данных (Unicode's CLDR), который использует языковую ветвь zh
для отображения путунхуа (Mandarin Chinese) и ku
для курдского языка. Таким образом для путунхуа вы используете zh
, а не cmn
, а для курманджи (севернокурдский) вы используете ku-Latn
, а не kmr-Latn
. База данных CLDR, однако, вообще не использует субтэги диалектов, так что вам придется использовать yue
для кантонского диалекта китайского языка, а не zh-yue
.
Субтэги письменности должны быть использованы в качестве части языкового тэга только тогда, когда необходимо передать какую-то отличительную информацию через тэг. Обычно это случаи, когда один язык использует различные типы письма или когда контент был записан с помощью нетипичной для данного языка письменности (например, русский текст, написанный латиницей, будет иметь такой тэг: ru-Latn
).
Субтэги письменности всегда состоят из четырёх букв, и должны идти после любых субтэгов языка или диалекта и до всех других субтэгов.
Вот что нужно учитывать при выборе субтэга письменности.
uz-Arab
, при этом субтэг письменности Arab
не будет иметь отношения к аудио-записи.
Для неписьменного контента может быть использован субтэг письменности Zxxx
, в данном случае: uz-Zxxx
, так как Zxxx
это код для неписьменных документов
, но снова - это полезно только в случае, если нужно, подчеркнуть подобные отличия.
Suppress-script
со значением какого-либо субтэга письменности. Например, запись в реестре для en (английский) содержит:
Suppress-Script: Latn
означающую, что вам не следует использовать субтэг письменности Latn
(латиница) с этим языком.
Причина в том, что практически все документы на английском записаны латиницей, и это не добавляет никакой отличительной информации. Тем не менее, если англоязычный документ записан латиницей, а также есть блоки с другой системой письма, например, такой, как шрифт Брайля (Brai
), тогда может быть допустимым обозначить обе письменности, чтобы помочь при выборке контента (например, для применения стилей).
Заметьте, что не все языковые субтэги строго связаны с какой-либо письменностью и имеют поля suppress-script. При этом вам не следует полагать, что необходимо обяхательно использовать субтэг письменности, если поле suppress-script отсутствует.
Субтэги региона связывают выбранный вами субтэг языка с определённым регионом мира. Субтэги региона должны идти после всех субтэгов языка и письменности.
Как и субтэги письменности, субтэги региона следует использовать только, если они вносят информацию, необходимую, чобы отличить этот языковой тэг от другого; если нет - отбрасывайте его.
Например, en-GB
может быть полезным отличием при проверке правописания, но субтэг региона в ja-JP
вряд ли полезен, если только вы намеренно не подчёркиваете, что это не японский, используемый в других частях мира.
Есть 2 типа субтэгов региона: двухбуквенные коды и коды, состоящие из трёх цифр. Последние, как правило, определяют многонациональные регионы, а не конкретные страны. Например es-ES
означает испанский, на котором говорят в Испании, тогда, как es-419
означает испанский, распространённый в Латинской Америке.
Избегайте устаревших субтэгов.
Проверьте, что субтэг, который вы собираетесь использовать, не является устаревшим. Таким же образом, как и для субтэгов других типов, реестр указывает с помощью поля Preferred-Value
, какая альтернатива должна быть использована.
В некоторых случаях в устаревших записях нет поля Preferred-Value
, но иногда поле Comments
содержит рекомендацию. Например, в YU (Югославия) вы найдёте:
Deprecated: 2003-07-23 Comments: see BA, HR, ME, MK, RS, or SI
И опять же, используйте субтэги варианта только, если необходимо подчеркнуть отличие этого языкового тэга от другого, похожего в контексте используемой информации.
Субтэги варианта описывают дополнительные отличия, не охваченные другими субтэгами. Обычно это диалекты, варианты написания (такие, как реформы правописания), транскрипции и так далее. Субтэг варианта обычно имеет длину от пяти до восьми символов и может содержать буквы и/или цифры. Зарегистрированы также несколько субтэгов, состоящих из 4 цифр (обычно представляющих год). Субтэги варианта должны идти после всех субтэгов языка, письменности и региона.
Основная вешь, за которой нужно следить при использовании субтэгов варианта - это порядок их использования.
Проверяйте контекст и порядок субтэгов варианта.
Большинство записей субтэгов варианта в реестре содержат одно поле Prefix
или более. Префиксы указывают на то, с какими субтэгами обычно принято использовать данный вариант.
Например, pinyin
, как правило, следует использовать с языковыми тэгами, которые также содержат субтэги zh
и Latn
или субтэги bo
и Latn
, так как запись pinyin
содержит следующее:
Prefix: zh-Latn Prefix: bo-Latn
Если у вас есть веская причина, вы можете использовать субтэг варианта и с другими субтэгами, например, cmn-Latn-pinyin
может быть отличным способом обозначить путунхуа (Mandarin Chinese), записанный с помощью пиньинь.
Хотя zh
, bo
и Latn
и определены, это минимальное требование. Вы можете также включать другие субтэги, такие, как регион, в языковой тэг (там, где это уместно), например, zh-Latn-CN-pinyin
.
Среди других полей префиксов, запись субтэга варианта 1994
содержит
Prefix: sl-rozaj-biske
Это означает, что данный субтэг должен быть использован в языковом тэге, который уже содержит два других субтэга варианта, rozaj
и biske
. Любой субтэг варианта, определенный в поле prefix должен идти до субтэга варианта, который вы только что искали.
Некоторые субтэги варианта не содержат поля prefix, например, fonipa
(Международный фонетический алфавит). Такие варианты должны идти после любых других субтэгов варианта, которые содержат информацию в поле prefix.
Если вы планируете использовать более, чем один вариант без префиксов, то располагайте их в порядке уменьшения их значимости. Если они равнозначны, то ранжируйте по алфавиту. Это должно помочь совместимости.
Эти субтэги, состоящие из одного символа, позволяют расширять языковые тэги. На сегодняшний день, зарегистрирован только один субтэг расширения. Субтэг u
был зарегистрирован организацией Unicode Consortium для добавления информации о поведении языка или локали. Многие обозначения локалей требуют дополнительных надстроек с конкретными значениями языка, культуры, региона или других вариаций. Это расширение предоставляет механизм использования этих дополнительных надстроек языковых тэгов для постановки их аналогичным образом в другие языковые тэги.
Например, следующий код обозначает, что приложение использует для сортировки метод телефонной книги, что отсортированные данные отсортированы в соответствии с этим методом и так далее.
de-DE-u-co-phonebk
Расширение u-
определено в RFC 6067, который ссылается на Unicode Consortium's Common Locale Data Repository (CLDR). Оно не определено в BCP 47.
Субтэги частного использования не присутствуют в реестре субтэгов, они создаются и поддерживаются сторонами частных соглашений, которые их используют. Они представлены в виде однобуквенных субтэгов или 'синглтонов'. Синглтон частного использования это - x
. Обратите внимание, что любые субтэги, идущие после синглтона могут быть до 8 символов длиной, при этом вы можете использовать несколько субтэгов.
Субтэги частного использования следует использовать с большой осторожностью, и избегать их, там, где это возможно, поскольку они препятствуют функциональной совместимости, которую продвигает BCP 47.
В качестве примера использования субтэга частного использования, en-US-x-twain
, может обозначать определённый тип американского английского, но только в рамках соглашения внутри закрытого сообщества. За пределами этого частного соглашения нельзя полагаться на его смысл.
Читайте подробнее в BCP 47:
Устаревшие тэги это особые случаи, существующие для обратной совместимости. Это тэги, зарегистрированные до RFC 4646, которые не могут быть полностью собраны из субтэгов текущего реестра, или не следующие сунтаксису, определённому для языковых тэгов.
Практически все устаревшие тэги были заменены в реестре субтэгами или комбинациями субтэгов. Подобные тэги сегодня не рекомендуются к использованию и обычно содержат поле Preferred-Value
, указывающее на предпочтительный вариант использования. Например, запись в реестредля устаревшего тэга art-lojban
указывает, что вам следует использовать языковой субтэг jbo
.
Обратите внимание, что вам не следует использовать дополнительные субтэги в устаревшем тэге.
Приступаете к работе? Язык в Сети
Ссылки по теме, Создание HTML и CSS
Ссылки по теме, Создание XML
Ссылки по теме, Создание SVG