Содержание

Работа с языком в HTML (руководство)

Работа с языком в HTML (руководство)

Предполагаемая аудитория: XHTML/HTML и CSS кодеры, веб-разработчики (PHP, JSP, и т. д.), а также все, кому необходимо руководство по объявлению и использованию языковой информации в HTML. Предполагается, что вы имеете базовое знакомство с HTML и CSS.

Данное руководство объединяет и организует ссылки на статьи, которые, все вместе, помогут вам понять основные аспекты работы с языковой информацией при создании HTML и CSS.

В двух словах

Всегда добавляйте lang атрибут к тэгу html для того, чтобы установить язык по умолчанию вашей страницы.

<html lang="en">

Если это XHTML 1.x или HTML5 Polyglot документ, используемый, как XML, вам следует также использовать xml:lang атрибут (с тем же значением). Если ваша страница используется только, как XML, то просто используйте

xml:lang атрибут.

Не используйте meta элемент с http-equiv, установленным в значение Content-Language.

Выбирайте тэги из списка IANA Subtag Registry и следуйте правилам синтаксиса BCP 47 при использовании структур более сложных, чем просто языковой тэг. Держите свои языковые теги как можно более короткими.

Используйте :lang свойство в CSS, чтобы применять стили, зависящие от языка вашего контента.

Зачем объявлять язык?

Эта часть руководства объясняет мотивы для дальнейшего чтения. Если вы спешите и просто хотите знать, что делать, без теории, то начните читать раздел Как объявить язык страницы или элемента.

Браузеры и другие приложения могут использовать информацию о языке контента для предоставления пользователям наиболее подходящей информации или предоставления информации пользователям наиболее подходящим образом. Чем больше контента будет размечено и размечено правильно, тем более полезными и распространенными такие приложения станут.

Зачем использовать атрибут языка? содержит примеры того, как языковая информация может быть полезной.

Как объявить язык страницы или элемента

Вам следует устанавливать язык текста на странице, используя языковые атрибуты. К сожалению, существует более, чем один атрибут, а также есть несколько вещей, которые необходимо прояснить. Этот раздел обсуждает различные варианты: те, которые следует использовать, и те, которых следует избегать (и почему).

Объявление языка в HTML предоставляет итоговую информацию о том, как объявлять язык, используя атрибуты.

HTTP заголовки, мета элементы и информация о языке описывает, как языковые метаданные отличаются от действительного языка текста, а также Content-Language, используемый в HTTP заголовках и мета элементах.

Работа с языковыми тэгами

В этом разделе рассматривается, как выбирать и создавать языковые теги, то есть значения, используемые для атрибутов языка.

Чтобы быть уверенным в том, что все юзер агенты понимают, какой язык вы имеете в виду, вам необходимо следовать стандартным подходам при предоставлении языковых значений. Вам, вероятно, потребуется рассмотреть, как относиться к диалектным различиям, например между американским и британским английским, которые содержат существенные различия в орфографии и произношении.

Языковые тэги в HTML и XML описывает синтаксис языковых тэгов, использующих спецификацию BCP 47.

Выбор языкового тэга

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

Установка языковых настроек браузера

Когда ваш браузер получает документ из Сети, он отправляет HTTP запрос на сервер. Вместе с запросом, браузер также посылает информацию о своих языковых настройках. Эти настройки могут влиять на то, какой контент будет отправлен вам обратно. Узнайте, как устанавливать и изменять эти настройки.

Установка языковых настроек в браузере

Использование информации о языке для стилизации документа

Вам зачастую необходимо применять различные стили для текста на различных языках (например, шрифт или высота строки, или, вероятно, различные стили выделения и так далее). Если вы задействуете атрибуты для определения языка контента, то вы сможете использовать некоторые мощные CSS селекторы для автоматического применения различных стилей при изменении языка контента. Следующая статья рассматривает различные способы того, как это сделать.

Стилизация с использованием языковых атрибутов

Дополнительные материалы

  • Приступаете к работе? Язык в Сети

  • Ссылки по теме, Разработка HTML и CSS

    • Язык

Является ли HTML языком программирования / Хабр

В последнее время всё чаще и чаще различные интернет ресурсы устраивают холивары на тему: является ли HTML языком програмирования или нет. Как водится, аргументов в пользу обеих точек зрения приводят немалое количество, поэтому я решил поставить для себя точку в этом ненужном споре.

Определение языка программирования

Язы́к программи́рованияформальная знаковая система

, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

Так сказано в Википедии, и большинство остальных ресурсов либо полностью употребляет это определение, либо вольно излагает его без потери смысла. Рассмотрим поподробнее составные части определения ЯП:

  • Формальный язык — это множество конечных слов (строк, цепочек) над конечным алфавитом.
  • Знаковая система — это система однообразно интерпретируемых и трактуемых сообщений/сигналов, которыми можно обмениваться в процессе общения.
    Иногда знаковые системы помогают структурировать процесс общения с целью придания ему некой адекватности в плане реакций его участников на те или иные «знаки». В качестве примера знаковой системы обычно приводят язык (как в письменной форме так и, в случае естественных языков, в форме речи).
  • Компью́терная програ́мма — последовательность инструкций, предназначенных для исполнения устройством управления вычислительной машины.
  • Ле́ксика — совокупность слов того или иного языка, части языка или слов, которые знает тот или иной человек или группа людей.
  • Синтаксис — сторона языка программирования, которая описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию). Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.
  • Сема́нтика в программировании — дисциплина, изучающая формализации значений конструкций языков программирования посредством построения их формальных математических моделей.
    В качестве инструментов построения таких моделей могут использоваться различные средства, например, математическая логика, λ-исчисление, теория множеств, теория категорий, теория моделей, универсальная алгебра. Формализация семантики языка программирования может использоваться как для описания языка, определения свойств языка, так и для целей формальной верификации программ на этом языке программирования.
  • Язы́к — знаковая система, соотносящая понятийное содержание и типовое звучание (написание).

Более простым языком это может быть изложено так:

Язык программирования — множество заранее определенных, однообразных и понятных исполнителю (читай: интерпретатору/компилятору/компьютеру/программисту) инструкций, предназначенных для записи последовательно с целью их исполнения неким устройством, являющимся частью вычислительной машины. Также язык программирования должен обладать рядом особенностей: инструкций должно быть ограниченное число, и все их должны знать; инструкции должны выстраиваться определенным образом для получения определенных результатов, и все должны об этом знать; должны существовать правила написания инструкций и все должны их знать; каждая конструкция языка должна однозначно соотносить то что написано с тем, что требовалось обозначить.

Вот так громоздко и некрасиво получилось, зато без сложных слов. Мы вернемся к этому определению чуть позже.

Виды языков программирования


Часто употребляют также разделение на низкоуровневые и высокоуровневые языки. Эти виды отличаются «толщиной прослойки» между процессором и программистом. Говоря простыми словами — в низкоуровневых языках каждая инструкция представляет собой одну или небольшое число процессорных команд, а в высокоуровневом языке каждая инструкция это большой набор процессорных команд.

Рассмотрим поближе определения разных типов по версии Википедии:

  • Аспе́ктно-ориенти́рованное программи́рование (АОП) — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.
  • Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
  • Процедурное программирование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка[1].
  • Логи́ческое программи́рование — парадигма программирования, основанная на автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий принципы логического вывода информации на основе заданных фактов и правил вывода. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.
  • Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
  • Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
  • Мультипарадигма́льный язы́к программи́рования — как правило, язык программирования, который был разработан специально как инструмент мультипарадигмального программирования, то есть изобразительные возможности которого изначально предполагалось унаследовать от нескольких, чаще всего неродственных языков.
  • Эзотерический язык программирования — язык программирования, разработанный для исследования границ возможностей разработки языков программирования, для доказательства потенциально возможной реализации некой идеи (так называемое «доказательство концепции», англ. proof of concept), в качестве произведения программного искусства[en], или в качестве шутки (компьютерного юмора).

Императивный и декларативный подход


Все языки программирования делятся на две группы: декларативные и императивные.

Программа на императивном языке программирования с математической точки зрения представляет собой общее решение поставленной задачи, иными словами, ответ на вопрос «как делать?». Это последовательность команд, которые должен выполнить исполнитель.

Программа на декларативном языке программирования является сочетанием формализованной в рамках языка программирования задачей и всех необходимых для её решения теорем, проще говоря, ответ на вопрос «что делать?». Конкретную последовательность выполняемых действий выполняет компилятор, или чаще интерпретатор – программа, в реальном времени выполняющая код программы без его преобразования в машинный код.

Полнота по Тьюрингу

В теории вычислимости исполнитель (множество вычисляющих элементов) называется тьюринг-полным, если на нём можно реализовать любую вычислимую функцию. Другими словами, для каждой вычислимой функции существует вычисляющий её элемент (например, машина Тьюринга) или программа для исполнителя, а все функции, вычисляемые множеством вычислителей, являются вычислимыми функциями (возможно, при некотором кодировании входных и выходных данных).
Название пошло от Алана Тьюринга, который придумал абстрактный вычислитель — машину Тьюринга и дал определение множества функций, вычислимых посредством машин Тьюринга.
Другими словами язык является полным по Тьюрингу, если любая вычислимая функция, которая Вам нужна, может быть записана на этом языке и решена его исполнителем.

Не полные по Тьюрингу языки также существуют, но так как их создают в основном в академических целях, то они малоизвестны и широко не применяются.

Ответим на несколько вопросов:


  1. HTML — это язык?

    Да. Он имеет свойства, присущие языкам.

  2. HTML — соответствует определению языка программирования?

    Да. Он имеет синтаксис, семантику, лексику, он является языком и попадает в категорию декларативных языков программирования.

  3. HTML — является Тьюринг-полным языком?

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

  4. Можно ли называть HTML языком программирования?

    В зависимости от контекста — да, можно. Но при этом следует помнить, что с таким же успехом можно назвать ЯП и CSS и XML и SQL. Другими словами данные языки формально могут быть названы языками программирования, но только с определенной долей скептицизма и с полным понимаем того, что эти языки не удовлетворяют всем требованиям.

  5. Является ли HTML языком программирования?

    Нет. Задача обычного языка программирования в обработке данных, а задача HTML в отображении данных. Он не является языком программирования и на нем нельзя произвести вычислений.

Вывод: Мы можем назвать HTML языком программирования только в контексте формальной полемики. На деле он является языком гипертекстовой разметки и ни чем больше. Но читатель должен понимать, что если нет четко прописанных стандартов, то никто не запрещает сделать язык, идентичный по синтаксису с HTML, но интерпретируемый совершенно по другому таким образом, чтобы он был полным по Тьюрингу.

Объявление языка в HTML

Объявление языка в HTML

Вопрос

Как мне установить язык содержимого моей HTML-страницы?

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

Быстрый ответ

Всегда используйте атрибут языка в теге html , чтобы объявить язык текста по умолчанию на странице. Это наследуется всеми другими элементами. Например:

Обратите внимание, что следует использовать элемент html , а не элемент body , поскольку элемент body не закрывает текст внутри элемента head документа.

Если страница содержит содержимое на другом языке, добавьте атрибут языка к элементу, окружающему это содержимое. Это позволяет вам стилизовать или обрабатывать его по-разному. Например:

Заголовок "Le Bon Usage".

Используйте атрибут lang для страниц, обслуживаемых как HTML. (Информацию о страницах, представленных в формате XML, включая полиглот-документы XHTML 1.x и HTML5, см. в разделе Выбор правильного атрибута.)

Используйте языковые теги из реестра IANA Language Subtag . Вы можете найти вложенные теги, используя неофициальный инструмент поиска языковых подтегов. (подробнее)

В некоторых частях вашего кода могут возникнуть проблемы. Если у вас есть многоязычный текст в элементе title , вы не можете размечать части текста для разных языков, потому что атрибут title позволяет использовать только символы, без разметки. То же самое касается нескольких языков в значениях атрибутов. На данный момент нет хорошего решения для этого.

Используйте вложенные элементы, чтобы позаботиться о содержимом и значениях атрибутов одного и того же элемента на разных языках. (подробнее)

Вы никогда не должны использовать мета-элемент с атрибутом http-equiv , установленным на Content-Language , чтобы указать язык страницы, но в определенных обстоятельствах вы можете захотеть предоставить информацию о языке с заголовком HTTP для указания целевая аудитория вашей страницы. Независимо от того, используете ли вы заголовок HTTP или нет, вы всегда должны объявлять язык текста на странице с помощью языкового атрибута в теге html . Для получения дополнительной информации см. сопутствующую статью, заголовки HTTP, мета-элементы и информацию о языке.

Детали

В этом разделе представлена ​​более подробная информация по различным темам, связанным с объявлением языка в HTML.

Не забудьте также использовать атрибут dir при работе с двунаправленным текстом, таким как арабский, иврит и т. д.

Что делать, если содержимое элемента и значения атрибутов на разных языках?

Иногда язык текста в атрибут и содержимое элемента на разных языках. Например, в правом верхнем углу этой статьи есть ссылки на переведенные версии этой страницы. текст ссылки показывает язык целевой страницы, используя язык целевой страницы, но связанный атрибут title содержит подсказку в язык текущей страницы:

Если ваш код выглядит следующим образом, язык атрибуты на самом деле указывают, что не только содержимое, но и текст атрибута title на испанском языке. Это явно неправильно.

Неверный код. Не копируйте!

es">Испанский

Вместо этого переместите атрибут, содержащий текст на другом языке, в другой элемент, как показано в этом примере, где элемент a наследует настройку по умолчанию en элемента html .

Испанский

Что делать, если нет элемента, на который можно повесить атрибут?

Если вы хотите указать язык содержимого, но вокруг него нет разметки, используйте такой элемент, как span , bdi или div вокруг содержимого. Вот пример:

Вы бы сказали, что по-китайски это 中国科学院文献情报中心.

Выбор языковых значений

Чтобы быть уверенным, что все пользовательские агенты распознают язык, который вы имеете в виду, вам необходимо следовать стандартному подходу при предоставлении значений языковых атрибутов. Вам также необходимо подумать о том, как стандартно относиться к диалектным различиям между языками, например, к различиям между английским (США) и британский английский, которые значительно расходятся с точки зрения написания и произношения.

Правила создания значений языковых атрибутов описаны в спецификации IETF под названием BCP 47. В дополнение к определению того, как использовать простые языковые теги, такие как en для английского языка или fr для французского языка, BCP 47 описывает как составлять языковые теги, которые позволяют указывать региональные диалекты, сценарии и другие варианты, связанные с этим языком.

BCP 47 включает наборы кодов языков и стран ISO, но выходит за их пределы. Чтобы найти соответствующие коды, вы должны обратиться к Реестр языковых подтегов IANA .

Неофициальный инструмент поиска языковых подтегов предоставляет удобный внешний интерфейс для реестра IANA.

Нежное, но довольно подробное введение в синтаксис тегов BCP 47 см. в статье Language. теги в HTML и XML . Для получения помощи в выборе правильного языкового тега из множества возможных тегов и комбинаций см. Выбор языкового тега .

Выбор правильного атрибута

Если ваш документ HTML (т.е. используется как text/html ), используйте атрибут lang для установки языка документа или диапазона текста. Например, следующее устанавливает французский язык по умолчанию:

При обслуживании страниц XHTML 1.x или полиглотов как text/html используйте оба атрибута lang и атрибут xml:lang вместе каждый раз, когда вы хотите установить язык. 9Атрибут 0011 xml:lang — это стандартный способ определения информации о языке в XML. Убедитесь, что значения обоих атрибутов идентичны.

Атрибут xml:lang на самом деле не полезен для обработки файла как HTML, но заменяет атрибут lang каждый раз, когда вы обрабатываете или передаете документ как XML. Атрибут lang допускается синтаксисом XHTML и может также распознаваться браузерами. Однако при использовании других парсеров XML (таких как lang() в XSLT), вы не можете полагаться на распознавание атрибута lang .

Если вы обслуживаете свою страницу как XML (т.е. используете тип MIME, такой как application/xhtml+xml ), вы делаете не нужен атрибут lang . Одного атрибута xml:lang будет достаточно.

Дополнительная информация

Информация в этом разделе вряд ли будет полезной, но она предоставлена ​​для полноты.

Указание метаданных о языке аудитории

В дополнение к включению атрибута языка на странице в тег html (что следует всегда делать), вы также могли столкнуться с объявлениями языка в заголовке HTTP (который обслуживается страницей) или как метаданные . элементов.

Важно отметить, что объявление языка на странице всегда переопределяет информацию HTTP, когда дело доходит до определения фактического языка текста, но информация HTTP может предоставить более общую информацию о предполагаемое использование ресурса. Использование метаэлементов на странице HTML для объявления языка не рекомендуется.

Для получения информации о Content-Language в HTTP и мета-элементах см. HTTP-заголовки, мета-элементы и информацию о языке .

Различные вещи, которые не имеют значения

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

Во-первых, нельзя объявить язык текста с помощью CSS.

Во-вторых, DOCTYPE , с которого должен начинаться любой HTML-файл, может содержать то, что некоторым кажется похожим на объявление языка. DOCTYPE в приведенном ниже примере содержит текст EN, что означает «английский». Это, однако, указывает на язык схемы , связанной с этим документом — это не имеет ничего общего с языком самого документа.

В-третьих, иногда люди предполагают, что информация о естественном языке может быть получена из кодировки символов. Однако кодировка символов не позволяет однозначно идентифицировать естественный язык: должно быть однозначное соответствие между кодировкой и языком, чтобы этот вывод работал, а такого нет. Например, одна кодировка символов может использоваться для многих языков, например. Латинский 1 (ISO-8859-1) мог кодировать как французский, так и английский, а также множество других языков. Кроме того, кодировка символов может варьироваться в зависимости от одного языка, например, для арабского языка могут использоваться такие кодировки, как «Windows-1256», «ISO-8859-6» или «UTF-8».

Однако все эти примеры кодирования в настоящее время являются спорными, поскольку весь контент должен быть написан в кодировке UTF-8, которая охватывает все языки, кроме самых редких, в единой кодировке символов.

В некоторых алфавитах, таких как арабский и иврит, отображаемый текст читается преимущественно справа налево, хотя в этом потоке числа и текст из других алфавитов отображаются слева направо. Разметка, такая как 9Атрибут 0011 dir необходим для установки общего контекста письма справа налево, а в некоторых случаях для правильного отображения двунаправленного текста требуется разметка, но это невозможно сделать с помощью языковой разметки.

То же самое касается направления текста. Как и в случае с кодировками и языком, между языком и сценарием не всегда существует однозначное соответствие и, следовательно, направленность. Например, азербайджанский язык может быть написан как справа налево (арабский), так и слева направо (латиница или кириллица), а код языка az может относиться к обоим. Кроме того, разметка направления текста, используемая со встроенным текстом, применяет к тексту диапазон различных значений, тогда как язык — это простой переключатель, который не соответствует требуемым задачам.

Дальнейшее чтение

  • Начать? Язык в Интернете

  • Tutorial, Работа с языком в HTML

  • Ссылки по теме, Создание HTML и CSS

    • Язык
    • Использование атрибутов для объявления языка
    • Выбор языковых значений
    • Идентификация языковых изменений в документе

Работа с языком в HTML (учебник)

Работа с языком в HTML (учебник)

Целевая аудитория: кодировщики HTML, разработчики скриптов, кодировщики CSS и все, кому требуется руководство по объявлению и использованию языковой информации в HTML. Предполагается, что у вас есть базовые знания HTML и CSS.

В этом учебнике собраны и систематизированы указатели на статьи, которые в совокупности помогут вам понять основные аспекты работы с языковой информацией при разработке HTML и CSS.

В двух словах

Всегда добавляйте атрибут lang к тегу html , чтобы установить язык по умолчанию для вашей страницы.

Если это XHTML 1.x или многоязычный документ HTML5, используемый как XML, вы также должны использовать Атрибут xml:lang (с тем же значением). Если ваша страница обслуживается только в формате XML, просто используйте атрибут xml:lang .

Не используйте элемент meta с http-equiv , установленным на Content-Language .

Выберите теги из реестра вложенных тегов IANA и следуйте правилам синтаксиса в BCP 47 при использовании не только языкового вложенного тега. Делайте языковые теги как можно короче.

Используйте свойство :lang в CSS для применения стилей в зависимости от языка вашего контента.

Зачем объявлять язык?

Эта часть руководства задает мотивацию для прочтения оставшейся части. Если вы спешите и просто хотите знать, что делать, без теории, начните читать с раздела Как объявить язык страницы или элемента.

Браузеры и другие приложения могут использовать информацию о языке контента, чтобы предоставлять пользователям наиболее подходящую информацию или представлять информацию пользователям наиболее подходящим образом. Чем больше контента будет помечено и правильно помечено, тем более полезными и распространенными станут такие приложения.

Зачем использовать атрибут языка? содержит примеры того, как информация о языке может быть полезна.

Как объявить язык страницы или элемента

Вы должны установить язык текста на своей странице, используя языковые атрибуты. К сожалению, в некоторых форматах используется более одного атрибута, и необходимо уточнить еще несколько моментов. В этом разделе обсуждаются различные варианты: те, которые следует использовать, и те, которых следует избегать (и почему).

Объявление языка в HTML предоставляет краткую информацию о том, как объявить язык с помощью атрибутов.

Заголовки HTTP, метаэлементы и информация о языке описывает, чем языковые метаданные отличаются от фактического языка текста, и обсуждает Content-Language, используемый в заголовках HTTP и метаэлементах.

Работа с языковыми тегами

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

Чтобы быть уверенным, что все пользовательские агенты распознают язык, который вы имеете в виду, вам необходимо следовать стандартному подходу при предоставлении значений языка. Вам также может понадобиться подумать о том, как стандартно относиться к диалектным различиям, например. разница между американским английским и британским английским, которые значительно различаются с точки зрения написания и произношения.

Языковые теги в HTML и XML описывает синтаксис языковых тегов с использованием спецификации BCP 47.

Выбор языкового тега предоставляет практическую информацию о том, как выбрать правильные вложенные теги из тысяч доступных для представления нужного вам языка.

Настройка языковых параметров браузера

Когда ваш браузер извлекает документ из Интернета, он отправляет HTTP-запрос на сервер, где хранится информация. Вместе с запросом браузер отправляет информацию о своих языковых настройках. Эти настройки могут определять, какой контент будет отправлен вам обратно. Узнайте, как установить или изменить эти настройки.

Установка языковых настроек в браузере

Использование информации о языке для оформления документа

Вы часто хотите применить разные стили к тексту на разных языках (например, информацию о шрифте или высоте строки, или, возможно, разные стили выделения и т.