Коды @OSLang
Значения (строковое в колонке Hex) возвращаемые макросом @OSLang определяют язык OS
Примечание: Коды, содержащие буквы, возможно, могут содержать эти буквы в верхнем регистре.
Теги языков читаются так: de-AT : language-region : Немецкий, используемый в Австрии
Hex | Dec | Тег | Язык |
---|---|---|---|
0004 | 4 | zh-CHS | Китайский — упрощенный |
0401 | 1025 | ar-SA | Арабский (Саудовская Аравия) |
0402 | 1026 | bg-BG | Болгарский (Болгария) |
0403 | 1027 | ca-ES | Каталанский (Каталония) |
0404 | 1028 | zh-TW | Китайский (Тайвань) |
0405 | 1029 | cs-CZ | Чешский (Республика Чехия) |
0406 | 1030 | da-DK | Датский (Дания) |
0407 | 1031 | de-DE | Немецкий (Германия) |
0408 | 1032 | el-GR | Греческий (Греция) |
0409 | 1033 | en-US | Английский (США) |
040a | 1034 | es | Испанский (традиционная сортировка) |
040b | 1035 | fi-FI | Финский (Финляндия) |
040c | 1036 | fr-FR | Французский (Франция) |
040d | 1037 | he-IL | Иврит (Израиль) |
040e | 1038 | hu-HU | Венгерский (Венгрия) |
040f | 1039 | is-IS | Исландский (Исландия) |
0410 | 1040 | it-IT | Итальянский (Италия) |
0411 | 1041 | ja-JP | Японский (Япония) |
0412 | 1042 | ko-KR | Корейский (Республика Корея) |
0413 | 1043 | nl-NL | Нидерландский (Нидерланды) |
0414 | 1044 | nb-NO | Норвежский, букмол (Норвегия) |
0415 | 1045 | pl-PL | Польский (Польша) |
0416 | 1046 | pt-BR | Португальский (Бразилия) |
0417 | 1047 | rm-CH | Ретороманский (Швейцария) |
0418 | 1048 | ro-RO | Румынский (Румыния) |
0419 | 1049 | ru-RU | Русский (Россия) |
041a | 1050 | hr-HR | Хорватский (Хорватия) |
041b | 1051 | sk-SK | Словацкий (Словакия) |
041c | 1052 | sq-AL | Албанский (Албания) |
041d | 1053 | sv-SE | Шведский (Швеция) |
041e | 1054 | th-TH | Тайский (Таиланд) |
041f | 1055 | tr-TR | Турецкий (Турция) |
0420 | 1056 | ur-PK | Урду (Исламская Республика Пакистан) |
0421 | 1057 | id-ID | Индонезийский (Индонезия) |
0422 | 1058 | uk-UA | Украинский (Украина) |
0423 | 1059 | be-BY | Белорусский (Беларусь) |
0424 | 1060 | sl-SI | Словенский (Словения) |
0425 | 1061 | et-EE | Эстонский (Эстония) |
0426 | 1062 | lv-LV | Латышский (Латвия) |
0427 | 1063 | lt-LT | Литовский (Литва) |
0428 | 1064 | tg-Cyrl-TJ | Таджикский (кириллица) — Таджикистан |
0429 | 1065 | fa-IR | Фарси (Иран) |
042a | 1066 | vi-VN | Вьетнамский (Вьетнам) |
042b | 1067 | hy-AM | Армянский (Армения) |
042c | 1068 | az-Latn-AZ | Азербайджанский (латиница, Азербайджан) |
042d | 1069 | eu-ES | Баскский (Страна Басков) |
042e | 1070 | hsb-DE | Upper Sorbian — Германия |
042f | 1071 | mk-MK | Македонский (Бывшая югославская Республика Македония) |
0432 | 1074 | tn-ZA | Тсвана (Южная Африка) |
0434 | 1076 | xh-ZA | Исикоса (Южная Африка) |
0435 | 1077 | zu-ZA | Исизулу (Южная Африка) |
0436 | 1078 | af-ZA | Африкаанс (Южная Африка) |
0437 | 1079 | ka-GE | Грузинский (Грузия) |
0438 | 1080 | fo-FO | Фарерский (Фарерские о-ва) |
0439 | 1081 | hi-IN | Хинди (Индия) |
043a | 1082 | mt-MT | Мальтийский (Мальта) |
043b | 1083 | se-NO | Саамский северный (Норвегия) |
043e | 1086 | ms-MY | Малайский (Малайзия) |
043f | 1087 | kk-KZ | Казахский (Казахстан) |
0440 | 1088 | ky-KG | Киргизский (Киргизия) |
0441 | 1089 | sw-KE | Суахили (Кения) |
0442 | 1090 | tk-TM | Туркменский — Туркмения |
0443 | 1091 | uz-Latn-UZ | Узбекский (латиница, Узбекистан) |
0444 | 1092 | tt-RU | Татарский (Россия) |
0445 | 1093 | bn-IN | Бенгальский (Индия) |
0446 | 1094 | pa-IN | Пенджабский (Индия) |
0447 | 1095 | gu-IN | Гуджарати (Индия) |
0448 | 1096 | or-IN | Ория (Индия) |
0449 | 1097 | ta-IN | Тамильский (Индия) |
044a | 1098 | te-IN | Телугу (Индия) |
044b | 1099 | kn-IN | Каннада (Индия) |
044c | 1100 | ml-IN | Малаялам (Индия) |
044d | 1101 | as-IN | Ассамский (Индия) |
044e | 1102 | mr-IN | Маратхи (Индия) |
044f | 1103 | sa-IN | Санскрит (Индия) |
0450 | 1104 | mn-MN | монгольский (кириллица, Монголия) |
0451 | 1105 | bo-CN | Тибетский — Китай |
0452 | 1106 | cy-GB | Валлийский (Соединенное Королевство) |
0453 | 1107 | km-KH | Кхмерский (Камбоджа) |
0454 | 1108 | lo-LA | Лаосский (Лаосская Народно-Демократическая Республика) |
045c | 1116 | chr-Cher-US | Чероки — Чероки |
045d | 1117 | iu-Cans-CA | Inuktitut (Canadian_Syllabics) — Канада |
0456 | 1110 | gl-ES | Галисийский (Галисия) |
0457 | 1111 | kok-IN | Конкани (Индия) |
045a | 1114 | syr-SY | Сирийский (Сирия) |
045b | 1115 | si-LK | Сингальский (Шри-Ланка) |
045e | 1118 | am-ET | Амхарский (Эфиопия) |
0461 | 1121 | ne-NP | Непальский (Непал) |
0462 | 1122 | fy-NL | Фризский (Нидерланды) |
0463 | 1123 | ps-AF | Пушту (Афганистан) |
0464 | 1124 | fil-PH | Филиппинский (Филиппины) |
0465 | 1125 | dv-MV | Дивихай (Мальдивы) |
0468 | 1128 | ha-Latn-NG | Хауса (латиница, Нигерия) |
046a | 1130 | yo-NG | Йоруба (Нигерия) |
046B | 1131 | quz-BO | Кечуа (Боливия) |
046c | 1132 | nso-ZA | Северный сото (Южная Африка) |
046d | 1133 | ba-RU | Башкирский — Россия |
046e | 1134 | lb-LU | Люксембургский (Люксембург) |
046f | 1135 | kl-GL | Гренландский — Гренландия |
0470 | 1136 | ig-NG | Игбо (Нигерия) |
0473 | 1139 | ti-ET | Тигринья — Эфиопия |
0475 | 1141 | haw-US | Гавайский США |
0478 | 1144 | ii-CN | Yi — Китай |
047a | 1146 | arn-CL | Арaуканский (Чили) |
047c | 1148 | moh-CA | Могавк (Могавк) |
047e | 1150 | br-FR | Бретонский — Франция |
0480 | 1152 | ug-CN | Уйгурский — Китай |
0481 | 1153 | mi-NZ | Маори (Новая Зеландия) |
0482 | 1154 | oc-FR | Occitan — Франция |
0483 | 1155 | co-FR | Corsican — Франция |
0484 | 1156 | gsw-FR | Alsatian — Франция |
0485 | 1157 | sah-RU | Саха — Россия |
0486 | 1158 | qut-GT | Киче — Гватемала |
0487 | 1159 | rw-RW | Киньяруанда (Руанда) |
0488 | 1160 | wo-SN | Волоф (Республика Сенегал) |
048c | 1164 | prs-AF | Dari — Афганистан |
0491 | 1169 | gd-GB | Шотландский гэльский — Соединенное Королевство (Великобритания) |
0492 | 1170 | ku-Arab-IQ | Центральный курдский — Ирак |
0801 | 2049 | ar-IQ | Арабский (Ирак) |
0803 | 2051 | ca-ES-valencia | Valencian — Валенсия |
0804 | 2052 | zh-CN | Китайский (КНР) |
0807 | 2055 | de-CH | Немецкий (Швейцария) |
0809 | 2057 | en-GB | Английский (Великобритания) |
080a | 2058 | es-MX | Испанский (Мексика) |
080c | 2060 | fr-BE | Французский (Бельгия) |
0810 | 2064 | it-CH | Итальянский (Швейцария) |
0813 | 2067 | nl-BE | Нидерландский (Бельгия) |
0814 | 2068 | nn-NO | Норвежский, нюнорск (Норвегия) |
0816 | 2070 | pt-PT | Португальский (Португалия) |
0819 | 2073 | ru-MO | Русский (Молдова) |
081a | 2074 | sr-Latn-CS | Сербский (латиница, Сербия) |
081d | 2077 | sv-FI | Шведский (Финляндия) |
082c | 2092 | az-Cyrl-AZ | Азербайджанский (кириллица, Азербайджан) |
082e | 2094 | dsb-DE | Lower Sorbian — Германия |
0832 | 2098 | tn-BW | Сетсвана / Тсвана — Ботсвана |
083B | 2107 | se-SE | Саамский северный (Швеция) |
083c | 2108 | ga-IE | Ирландский (Ирландия) |
083e | 2110 | ms-BN | Малайский (Бруней-Даруссалам) |
0843 | 2115 | uz-Cyrl-UZ | Узбекский (кириллица, Узбекистан) |
0845 | 2117 | bn-BD | Бенгальский (Бангладеш) |
0846 | 2118 | pa-Arab-PK | Панджаби — Пакистан |
0849 | 2121 | ta-LK | Тамил — Шри-Ланка |
0850 | 2128 | mn-Mong-CN | Монгольский (Монг) — Монголия |
0859 | 2137 | sd-Arab-PK | Синдхи — Пакистан |
085d | 2141 | iu-Latn-CA | Инуктитут (латиница, Канада) |
085f | 2143 | tzm-Latn-DZ | Тамазигхт (латиница) — Алжир |
0867 | 2151 | ff-Latn-SN | Пулар — Сенегал |
086b | 2155 | quz-EC | Кечуа (Эквадор) |
0873 | 2163 | ti-ER | Тигринья — Эритрея |
0c01 | 3073 | ar-EG | Арабский (Египет) |
0c04 | 3076 | zh-HK | Китайский (Гонконг) |
0c07 | 3079 | de-AT | Немецкий (Австрия) |
0c09 | 3081 | en-AU | Английский (Австралия) |
0c0a | 3082 | es-ES | Испанский (Испания) |
0c0c | 3084 | fr-CA | Французский (Канада) |
0c1a | 3098 | sr-Cyrl-CS | Сербский (кириллица, Сербия) |
0c3b | 3131 | se-FI | Саамский северный (Финляндия) |
0c6b | 3179 | quz-PE | Кечуа (Перу) |
1001 | 4097 | ar-LY | Арабский (Ливия) |
1004 | 4100 | zh-SG | Китайский (Сингапур) |
1007 | 4103 | de-LU | Немецкий (Люксембург) |
1009 | 4105 | en-CA | Английский (Канада) |
100a | 4106 | es-GT | Испанский (Гватемала) |
100c | 4108 | fr-CH | Французский (Швейцария) |
101a | 4122 | hr-BA | Хорватский (Босния и Герцеговина) |
103b | 4155 | smj-NO | Саамский Лул (Норвегия) |
105f | 4191 | tzm-Tfng-MA | Центральный Атлас Тамазигхт (тифинаг) — Марокко |
1401 | 5121 | ar-DZ | Арабский (Алжир) |
1404 | 5124 | zh-MO | Китайский (Макао) |
1407 | 5127 | de-LI | Немецкий (Лихтенштейн) |
1409 | 5129 | en-NZ | Английский (Новая Зеландия) |
140a | 5130 | es-CR | Испанский (Коста-Рика) |
140c | 5132 | fr-LU | Французский (Люксембург) |
141a | 5146 | bs-Latn-BA | Боснийский (латиница, Босния и Герцеговина) |
143b | 5179 | smj-SE | Саамский Лул (Швеция) |
1801 | 6145 | ar-MA | Арабский (Марокко) |
1809 | 6153 | en-IE | Английский (Ирландия) |
180a | 6154 | es-PA | Испанский (Панама) |
180c | 6156 | fr-MC | Французский (Монако) |
181a | 6170 | sr-SP-Cyrl | Сербский (кириллица, Сербия) |
183b | 6203 | sma-NO | Саамский южный (Норвегия) |
1c01 | 7169 | ar-TN | Арабский (Тунис) |
1c09 | 7177 | en-ZA | Английский (Южная Африка) |
1c0a | 7178 | es-DO | Испанский (Доминиканская республика) |
1c1a | 7194 | sr-Cyrl-BA | Сербский (кириллица, Босния и Герцеговина) |
1c3b | 7227 | sma-SE | Саамский южный (Швеция) |
2001 | 8193 | ar-OM | Арабский (Оман) |
2009 | 8201 | en-JM | Английский (Ямайка) |
200a | 8202 | es-VE | Испанский (Венесуэла) |
201a | 8218 | bs-Cyrl-BA | Боснийский (кириллица, Босния и Герцеговина) |
203b | 8251 | sms-FI | Саамский Скольт (Финляндия) |
2401 | 9217 | ar-YE | Арабский (Йемен) |
2409 | 9225 | en-029 | Английский (Карибский бассейн) |
240a | 9226 | es-CO | Испанский (Колумбия) |
241a | 9242 | sr-Latn-RS | Сербский (латиница) — Сербия |
243b | 9275 | smn-FI | Саамский Инари (Финляндия) |
2801 | 10241 | ar-SY | Арабский (Сирия) |
2809 | 10249 | en-BZ | Английский (Белиз) |
280a | 10250 | es-PE | Испанский (Перу) |
281a | 10266 | sr-Cyrl-RS | Сербский (кириллица) — Сербия |
2c01 | 11265 | ar-JO | Арабский (Иордания) |
2c09 | 11273 | en-TT | Английский (Тринидад и Тобаго) |
2c0a | 11274 | es-AR | Испанский (Аргентина) |
2c1a | 11290 | sr-Latn-ME | Сербский (латиница) — Черногория |
3001 | 12289 | ar-LB | Арабский (Ливан) |
3009 | 12297 | en-ZW | Английский (Зимбабве) |
300a | 12298 | es-EC | Испанский (Эквадор) |
301a | 12314 | sr-Cyrl-ME | Сербский (кириллица) — Черногория |
3401 | 13313 | ar-KW | Арабский (Кувейт) |
3409 | 13321 | en-PH | Английский (Республика Филиппины) |
340a | 13322 | es-CL | Испанский (Чили) |
3801 | 14337 | ar-AE | Арабский (ОАЭ) |
380a | 14346 | es-UY | Испанский (Уругвай) |
3c01 | 15361 | ar-BH | Арабский (Бахрейн) |
3c0a | 15370 | es-PY | Испанский (Парагвай) |
4001 | 16385 | ar-QA | Арабская (Катар) |
4009 | 16393 | en-IN | Английский — Индия |
400a | 16394 | es-BO | Испанский (Боливия) |
4409 | 17417 | en-MY | Английский — Малайзия |
440a | 17418 | es-SV | Испанский (Сальвадор) |
4809 | 18441 | en-SG | Английский — Сингапур |
480a | 18442 | es-HN | Испанский (Гондурас) |
4c0a | 19466 | es-NI | Испанский (Никарагуа) |
500a | 20490 | es-PR | Испанский (Пуэрто-Рико) |
540a | 21514 | es-US | Испанский — США |
7c04 | 31748 | zh-CHT | Китайский (традиционное письмо) |
MsgBox ( 0 , «Язык вашей операционной системы:» , _Language ())
Func _Language ()
Switch @OSLang
Case «0419» , «0819»
Return «Русский»
Case «0422»
Return «Украинский»
Case «0423»
Return «Белорусский»
Case «0437»
Return «Грузинский»
Case «082c»
Return «Азербайджанский»
Case «0443» , «0843»
Return «Узбекский»
Case «043f»
Return «Казахский»
Case «0444»
Return «Татарский»
Case «0440»
Return «Киргизский»
Case «0413» , «0813»
Return «Нидерландский»
Case «0409» , «0809» , «0c09» , «1009» , «1409» , «1809» , «1c09» , «2009» , «2409» , «2809» , «2c09» , «3009» , «3409»
Return «Английский»
Case «040c» , «080c» , «0c0c» , «100c» , «140c» , «180c»
Return «Французский»
Case «0407» , «0807» , «0c07» , «1007» , «1407»
Return «Немецкий»
Case «0410» , «0810»
Return «Итальянский»
Case «0414» , «0814»
Return «Норвежский»
Case «0416» , «0816»
Return «Португальский»
Case «040a» , «080a» , «0c0a» , «100a» , «140a» , «180a» , «1c0a» , «200a» , «240a» , «280a» , «2c0a» , «300a» , «340a» , «380a» , «3c0a» , «400a» , «440a» , «480a» , «4c0a» , «500a»
Return «Испанский»
Case «041d» , «081d»
Return «Шведский»
Case Else
Return «Не удалось определить язык OS, добавьте его в функцию»
EndSwitch
EndFunc
Объявление языка в HTML
Целевая аудитория: HTML кодеры, веб-разработчики (PHP, JSP, и т. д.), менеджеры веб-проектов, а также все, кто хочет лучше понимать, как объявлять язык текста на веб-странице.
Вопрос
Как установить язык содержимого моей HTML страницы?
Краткий ответ
Всегда используйте языковой атрибут тэга html для объявления языка по умолчанию на странице. Если страница содержит контент на другом языке, добавляйте языковой атрибут к элементам, окружающим этот контент.
Используйте lang атрибут для HTML страниц и xml:lang атрибут для страниц XML. Для XHTML 1.x и документов HTML5 Polyglot используйте оба атрибута вместе.
Используйте языковые тэги из IANA Language Subtag Registry . Вы можете найти тэги также с помощью Language Subtag Lookup.
Используйте вложенные элементы для того, чтобы позаботиться о контенте и значения атрибутов для одинаковых элементов на разных языках.
Детали
Основы
Всегда используйте языковой атрибут элемента html . Он наследуется всеми другими элементами, и поэтому для текста в head элементе документа будет задан язык по умолчанию.
Обратите внимание, что предпочтительнее использовать html элемент, чем body , так как body элемент не включает в себя текст из head элемента.
Если у вас есть какой-либо контент на странице, язык которого отличается от заданного в языковом атрибуте элемента html , добавляйте языковые атрибуты к элементам окружающим такой контент. Это позволит вам отображать или обрабатывать его различным образом.
С некоторыми частями кода у вас могут возникнуть проблемы. Если у вас есть мультиязычный текст в элементе title , вы не сможете разметить текст, содержащий разные языки, потому что title атрибут поддерживает только символы, а не разметку. То же самое относится к нескольким языкам в значениях атрибутов. На текущий момент эффективное решение этой проблемы отсутствует.
Выбор корректного атрибута
Если ваш документ HTML (то есть обрабатывается, как text/html ), используйте lang атрибут для установки языка документа или блока текста. Например, следующий код установит французский языком по умолчанию:
Когда XHTML 1.x или страницы Polyglot обрабатываются, как text/html , используйте оба атрибута lang и xml:lang вместе каждый раз, когда вы хотите объявить язык. Атрибут xml:lang — это стандартный способ объявления языковой информации в XML. Убедитесь, что значения обоих атрибутов идентичны.
Атрибут xml:lang не особо полезен для обработки HTML файлов, но он будет перекрывать значение lang атрибута каждый раз, когда вы обрабатываете документ, как XML. Атрибут lang разрешен синтаксисом XHTML и может быть распознан браузерами. Однако, когда используются другие синтаксические анализаторы XML (например, функция lang() в XSLT), вы не можете полагаться на то, что атрибут lang будет распознан.
Если вы обрабатываете ваш документ, как XML (то есть используете MIME type application/xhtml+xml ), то атрибут lang не нужен, будет достаточно атрибута xml:lang .
Что, если содержимое элемента и значения его атрибутов на разных языках?
Иногда язык текста в атрибутах и язык непосредственно контента элемента различаются. Например, в правом верхнем углу этой статьи расположен список ссылок на другие переводы данной страницы. Текст ссылки отображает язык целевой страницы, но связанный title атрибут содержит подсказку на языке текущей страницы:
Если ваш код выглядит, как указано ниже, то атрибут языка указывает, что испанский — не только язык контента, но и title текста. Это, очевидно, некорректно.
Вместо этого, перенесите языковой атрибут в другой элемент, как показано в данном примере, в котором span элемент наследует en язык по умолчанию, установленный у html элемента.
Что если нет подходящего элемента для того, чтобы прицепить атрибут языка?
Если вы хотите указать язык контента, но вокруг него нет никакой разметки, используйте такой элемент, как span или div . Вот пример:
You’d say that in Chinese as 中国科学院文献情报中心 .
Выбор значений языка
Чтобы быть уверенными, что юзер агенты распознают указанный вами язык, вам следует придерживаться стандартизированному подходу при указании значений атрибутов языка. Вам также необходимо подумать о том, как стандартизированно ссылаться на различные диалекты одного языка, например, такие, как американский и британский английский, которые существенно отличаются своим написанием и произношением.
Правила создания языковых атрибутов описываются IETF спецификацией, которая называется BCP 47. Помимо описания использования простых тэгов языка таких, как en (английский) или fr (французский), BCP 47 описывает, как сочетать языковые тэги, что позволяет вам указывать региональные диалекты, скрипты и другие варианты, относящиеся к данному языку.
BCP 47 включает в себя, но выходит за рамки ISO списков кодов языков и стран. Чтобы найти подходящий код, вам нужно обратиться к IANA Language Subtag Registry .
Неофициальная утилита Language Subtag Lookup предоставляет удобный фронтенд инструментарий для IANA registry.
Для краткого, но достаточно тщательного ознакомления с синтаксисом тэгов BCP 47, читайте Языковые тэги в HTML и XML . Если необходима помощь в выборе корректного языкового тэга из множества возможных тэгов и комбинаций, смотрите Выбор тэга языка .
Дополнительная информация
Указание метаданных о языке аудитории
Если вы хотите создать метаданные, описывающие скорее язык целевой аудитории страницы, чем язык определенной части текста, реализуйте это с помощью отправки сервером информации в HTTP заголовке Content-Language . Если ваша целевая аудитория говорит более, чем на одном языке, HTTP заголовок позволяет вам использовать список языков, разделённых запятыми.
Это пример HTTP заголовка, объявляющего ресурс смесью английского, хинди панджаби языков:
Content-Language: en, hi, pa
Обратите внимание, что этот подход не сработает, если страница загружается с жесткого диска, CD или другого источника, не являющегося сервером. В настоящее время нет широко распространенного способа использования таких метаданных внутри страницы.
В прошлом многие люди использовали meta элемент с атрибутом http-equiv со значением Content-Language . Из-за давних путаниц и непоследовательных реализаций этого элемента HTML5 спецификация сделала его несоответствующим стандартам HTML, так что вам больше не следует использовать этот элемент.
Для обратной совместимости, HTML5 описывает алгоритм, с помощью которого язык контента может быть определён из HTTP или meta Content-Language информации при определённых условиях. Как бы то ни было, это только запасной механизм для случаев, когда языковой атрибут отсутствует у html тэга. Если вы используете атрибут языка для html , что следует делать всегда, подобные запасные пути бесполезны.
Для подробной информации о Content-Language в HTTP и meta элементах читайте HTTP и meta для информации о языке .
Различные вещи, которые не относятся к делу
Вероятно, стоит упомянуть ещё несколько моментов, которые не имеют отношения к этой дискуссии.
Первое, невозможно объявить язык с помощью CSS.
Второе, DOCTYPE , с которого должен начинаться любой HTML может содержать то, что выглядит для некоторых людей, как объявления языка. DOCTYPE в примере ниже содержит текст EN, что означает ‘English’. Это, тем не менее, указывает на язык schema (схемы), связанной с данным документом – это никоим образом не указывает на непосредственно язык самого документа.
Третье, иногда люди предполагают, что информация о естественном языке может быть получена из кодировки символов. Тем не менее, кодировка символов не позволяет однозначно идентифицировать естественный язык. Должно быть взаимно однозначное сопоставление между кодировкой и языком, чтобы это сработало, а его нет. Одна кодировка может быть использована многими языками, например Latin 1 (ISO-8859-1) используется и французским, и английским, а ещё многими другими языками. В дополнение, кодировка может отличаться в рамках одного языка, например арабский может использовать ‘Windows-1256’ или ‘ISO-8859-6’ или ‘UTF-8’.
Все эти примеры кодировок спорны, так как весь контент сегодня должен быть создан в UTF-8, который охватывает все, кроме самых редких, языки.
В некоторых текстах, таких, как арабский и иврит, отображаемый текст читается в основном справа налево, хотя числа и иностранные термины отображаются слева направо. Необходима разметка, такая, как dir атрибут, для объявления right-to-left содержания. И в некоторых случаях разметка необходима для правильного отображения двунаправленного текста, но это невозможно сделать с помощью разметки языка.
То же самое относится к направлению текста. Как и в случае с кодировками, не всегда существует соответствие между языком и текстом, в том числе его направлением. Например, азербайджанский может быть записан справа налево (арабская письменность) и слева направо (латиница и кириллица), соответственно код языка az может относится к обоим вариантам. Дополнительно, разметка направления текста применяет к тексту целый ряд различных значений, в то время, как язык является простым переключателем, который не соответствует поставленным задачам.
HTML :: Коды языков
– это специальные короткие алфавитные или цифровые коды, которые были разработаны для представления языков в обработке данных и коммуникациях.
В HTML 5 для указания кода требуемого языка используется один из наиболее известных стандартов ISO 639-1 , в котором используются сокращенные обозначения языков мира в виде двух латинских букв. Обычно коды языков указываются в качестве значения универсального атрибута lang для того, чтобы помочь браузерам и поисковым системам правильно обработать веб-страницу либо отдельные ее части (см. пример ниже).
В представленной таблице перечислены русские и английские названия всех доступных в стандарте ISO 639-1 языков, а также соответствующие им буквенные коды.
Коды языков в HTML
Этот стандарт определяет коды большинства языков:
- ISO 639-1 (1998) содержит 2-буквенные сокращения;
- ISO 639-2 (2002) содержит 3-буквенные сокращения;
- ISO 639-3 (2007) — 3-буквенные сокращения;
Двухбуквенные коды в большинстве своём совпадают с кодами, используемыми в других классификаторах, например:
- коды стран по ISO 3166-1,
- коды валют по ISO 4217,
- доменные имена верхнего уровня стран (ccTLD) в Интернете — с небольшими разночтениями.
ГОСТ 7.75-97
Межгосударственный стандарт ГОСТ 7.75-97 «Коды наименований языков» в основном (за небольшими расхождениями) соответствует ИСО 639 и содержит список наименований языков на русском и английском языках, трёхбуквенные коды на основе кириллического алфавита, трёхбуквенные коды на основе латинского алфавита, трёхсимвольные цифровые коды. Разработан Российской Государственной библиотекой и Техническим Комитетом ТК 191 «Научно-техническая информация, библиотечное и издательское дело». Внесен Госстандартом Российской Федерации. Принят Межгосударственным Советом по стандартизации, метрологии и сертификации (отчет Технического секретариата № 12-97 от 21 ноября 1997 г.). Дата введения в действие непосредственно в качестве государственного стандарта Российской Федерации: 01 января 1999 г. Изменен: 01 декабря 2000 г.(Изменение № 1).
В 2010 г. Российской Государственной библиотекой (Научно-исследовательский отдел поддержки форматов машиночитаемых данных) ведется работа по пересмотру ГОСТ 7.75-97 на предмет соответствия ISO-639 согласно плану национальной системы стандартизации на 2009 г.
Согласно Изменению № 1, принятому Межгосударственным Советом по стандартизации, метрологии и сертификации (Протокол № 17 от 22 июня 2000 г.), ГОСТ 7.75-97 является стандартом в следующих государствах:
ГОСТ 7.75-97 устанавливает буквенные и цифровые обозначения наименований языков в кодированной форме, единые для различных систем обработки информации, ее хранения и обмена.
Всего предусмотрено 442 кода для 473 наименований языков на русском (из них альтернативных наименований — 31), тогда как ISO 639-2 предусмартивает 545 кодов для 563 наименований на английском языке, включая альтернативные.
Коды предназначаются для использования библиотеками, информационными службами и издательствами в целях унифицированного обозначения языка документа, что особенно важно при обмене информацией в автоматизированных информационных системах. Устанавливаемые стандартом коды также могут быть приняты лексикографами в любых случаях использования кодированной формы наименования языка.
Простой способ добавить несколько языков на сайт
Введение
В рамках своего проекта я столкнулся с задачей сделать текущий сайт компании мультиязычным. Более точно: создать возможность быстро и просто перевести сайт на английский, польский, итальянский и т.д.
Поиск в интернете показал, что существующие варианты создания мультиязычного сайта крайне громоздки и неэффективны. Подключать сторонние библиотеки зачастую проблемно, а советы по написанию своего решения связаны с большим объёмом однотипной работы.
Написание альтернативного метода смены локали заняло у меня всего несколько часов, а поддержание семантического единства и вовсе сводит к минимуму изменения при последующем добавлении новых страниц.
Исходные файлы примера сайта с автоматическим переводом можно скачать на github
Существующие альтернативы
Когда задача только появилась в разработке, первым шагом, разумеется, стало исследование готовых решений и советов на форумах о том, как наиболее просто и правильно реализовать возможность смены локали. Самые популярные интернет ресурсы для создания мультиязычных сайтов предлагаю следующие решения:
-
Создание дублирующих html блоков с текстом на разных языках, из которых только один оставляется активным для пользователя, а остальные прячутся (display: none).
Очевидным минусом такого способа является невероятно быстрое увеличение кода и мгновенная потеря читабельности и поддерживаемости кода. Кроме того, такое решение является уязвимым для ошибок в тексте и масштабируемости с точки зрения увеличения количества языков (далее локалей).
Подключение стороннего сервиса машинного перевода (такого как google translate) с большим количеством встроенных языков и минимальными изменениями в исходном коде страницы.
Когда задача только появилась в task list мы использовали этот способ как самый очевидный и удобный, однако опыт работы с клиентами – носителями языка из соединённых штатов и Израиля показал, что машинный перевод часто допускает ошибки при смене локали, а пользователи сайтов крайне резко реагируют на подобные ошибки перевода. В конце концом стратегические партнеры настойчиво посоветовали сменить способ изменения локали, и от этого способа пришлось отказаться.
Смена языка при помощи возможностей js или сторонних библиотек/фреймворков, таких как jQuery, основанных на поиске и прямом изменении DOM элементов.
Особенностью такого подхода является поиск огромного количества js селекторов, текст внутри которых необходимо заменить. Такой подход может хорошо работать для небольших проектов, однако при увеличении количества страниц пропорционально увеличивается количества функций замены текста, что ведет к потере эффективности в больших проектах.
Альтернативное решение
Основой подхода, который я предлагаю, как альтернативу существующим способам является, как ни странно не база, написанного мной js кода, которая является в целом тривиальной, а правило оформление селекторов, поддерживание которого позволяет гибко и просто настроить перевод любого количество страниц на любой язык без изменения кодовой базы и излишнего дублирования данных.
В изменении локали при альтернативном подходе выделяются три основных игрока:
- html страница с установленным правилом оформления селекторов блоков с текстом
- общий js сервис, основная задача которого состоит в замене textContet DOM элементов согласно правилу оформления селекторов
- JSON файл локали, содержащий в себе структуру с содержанием html блоков на всех языках, используемых при смене локали
Соблюдение правила оформления селекторов изменяемых элементов позволяет избавиться от необходимости менять js код сервиса смены локали, что является большим плюсом с точки зрения масштабируемости проекта.
Правило построения селекторов
Большинство методов смены локали страницы (среди приведенных альтернатив 1,3 и частично 2) предполагают необходимость каким-либо способом «пометить» изменяемый html блок, как правильно при помощи изменении поля class. Этот же механизм использует и альтернативный вариант.
Первым шагом оформления селекторов является разделение исходной страницы на функциональные блоки верхнего уровня. На странице нашей компании — это блоки:
Каждому блоку даем условное название, например,
Меню (menu)
Визитная карточка (home)
Пример работы сервиса (example)
Партнеры (clients)
Область применения сервиса (userfulBlock)
Примеры работы сервиса (examples)
Контакты и обратная связь (contacts)
После этого мы далее разбиваем каждый блок на более мелкие функциональные блоки, как это делается при применении библиотеки React.
Выделенным областям присваиваем свои имена и получаем структуру вида:
menu
home main, description, buttons
example statistics, headline, description, buttons
clients buttons
userfulBlock headline, userfulCards, elseBlock
examples headline, cards
contacts headline, description, contacts, form
Далее продолжаем эту процедуру пока не достигнем блоков, содержащих исходный текст.
В итоге получаем готовую структуру JSON файла локали, содержащий все необходимые тексты для изменения языка. Также, исходя из этого алгоритма определяется правило построения селекторов:
Каждый селектор начинается с ключевого слова locale и далее, согласно стилю dash case добавляются имена всех родительских блоков включая блок, содержащий исходный текст, например, описание примера в первой карточке будем иметь селектор locale-example-cards-description
Пример полученного файла json локали можно увидеть на github
Сервис смены локали
Сервис смены локали представляет собой модуль, содержащий функцию загрузки файла локали
с необязательным параметром defLang – язык установленные после загрузки локали (язык по умолчанию), а также основную функцию изменения текущей локали
с указанием требуемого языка.
Функция загрузки локали
Функция загрузки локали использует стандартный XMLHttpRequest запрос за данными. Использование именного этого стандарта обусловлено желанием минимизировать количество зависимостей и простотой использования запроса. После получения файла локали в консоль выводится оповещение о получении данных, а также вызывается функция изменения локали на язык по умолчанию в случае, если этот язык был передан в функцию как необязательный параметр. Ознакомиться с кодом функции можно тут:
Функция изменения локали
Типы данных
Представляет собой рекурсивную функцию, основной задачей которой являет обход объекта, содержащий локаль страницы (используя DFS алгоритм). Использование рекурсии при построении функции позволяет закодировать алгоритм максимально просто и лаконично, однако слишком большая глубина рекурсии может привести к переполнению стека. Особенности обхода данной проблемы можно найти на одноименном форуме, либо же ознакомившись с соответствующими статьями на habr.com.
В основе работы рекурсивной функции заложена обработка 4 типов данных:
-
поле содержащее строку исходного текста, используемого для добавления на страницу.
Например:
поле содержащее массив строк исходного текста, используемого для добавления на
страницу. Такое поле необходимо для создания списков, элементы которых могут менять
порядок. Например:
Вложенная структура данных, содержащая свой набор полей, необходимая для построения
архитектуры страницы. Например:
Массив вложенных структур данных, с одинаковым набором используемых полей. Такие
массивы используются, когда появляются списки одинаковых блоков кода, например,
карточек участников команды, или портфолио или тарифов оказываемых услуг.
Например:
На сайте это может выглядеть так:
Функции обработки
Обработка типа данных с исходным текстом осуществляется отдельной функцией
Принимающей на вход название поля структуры с исходным текстом, текущий объект локали, содержащий текст, который нужно добавить и текущее имя селектора, необходимое для поиска DOM элемента.
Обработка массива строк с исходным текстом также осуществляется отдельной функцией
Сигнатура и тело этой функции ничем не отличается от прошлой за исключением того, что элементам DOM присваиваются элементы из массива.
Основная рекурсивная функция замены текста занимается классификацией текущего поля локали в один 4 приведенных выше типов и соответствующей реакцией на полученный тип:
На вход эта функция принимает текущую языковую локаль и корневой селектор (в данном случае “locale”). Далее при обнаружении вложенной структуры или массива структур функция будет рекурсивно вызывать саму себя, соответствующе изменяя входные параметры.
Основным плюсом альтернативного подхода является то, что описанный выше сервис не требует никаких функциональных изменений, и добавляется как js файл, использующий созданный вами файл локали.
Заключение
Суть описанного выше подхода заключается в зафиксированном правиле описания селекторов и построения файла локали. Благодаря этому появляется уникальная возможность перевода любых страниц из коробки и переиспользования уже переведенного материала.
Описанный выше алгоритм построения селекторов не является обязательным и критичным для работы сервиса. Сервис является гибким для расширения и добавления новых методов и алгоритмов, а также для построения имен селекторов и структуры json локали. Возможным плюсом будет являться сохранение локали в cookie браузера и изменение локали, в зависимости от местоположения пользователя сервиса.
Исходные файлы примера сайта с автоматическим переводом можно скачать на github.
Какую локаль правильно указывать в атрибуте lang тега html?
Правильный, минимально достаточный вариант:
Суффикс -RU означает «тот русский, на котором говорят именно в России» и конкретно для русского языка является избыточным.
Если страница релевантна запросу и при этом на этом же сайте нет вариантов этого же текста на других диалектах, едва ли имеет смысл не показывать эту страницу пользователю только на том основании, что на ней используется другой диалект того же языка. Для владельца сайта в этом тем более нет смысла.
Различия между диалектами одного языка обычно не слишком существенны. (Украинский язык, насколько мне известно, самостоятелен [код «uk» согласно ISO 639-1] и диалектом русского не является.)
Пожалуй, определённая логика в этом есть, но учитывая, что она носит неоднозначный характер (только самому пользователю доподлинно известно, что именно он ищет на самом деле), а также тот факт, что на многих сайтах язык не указан вообще (что не означает, что контент соответствующих страниц не является качественным/релевантным), маловероятно, что поисковики снабжены столь тонкими механизмами. Более того, не факт, что поисковики используют атрибут lang как таковой.
В этом контексте были бы полезны комментарии официальных представителей основных поисковых сервисов, но вряд ли мы услышим здесь таковые.
Linux.yaroslavl.ru
В этом разделе документа обсуждаются два важных вопроса интернационализации HTML: задание языка (атрибут lang ) и направления (атрибут dir ) текста в документе.
8.1 Задание языка содержимого: атрибут lang
Информация о языке, указанная с помощью атрибута lang , может использоваться агентом пользователя для управления генерацией изображения различными способами. Некоторые ситуации, в которых указываемая автором информация а языке, может быть полезна:
- Помощь поисковым машинам
- Помощь синтезаторам речи
- Помощь агентам пользователей в выборе вариантов глифов для высококачественной типографии
- Помощь агенту пользователя в выборе набора кавычек
- Помощь агенту пользователя в вопросах переноса, лигатур и интервалов
- Помощь программа проверки грамматики и орфографии
Атрибут lang указывает код содержимого элемента и значений атрибутов; относится ли он к данному атрибуту, зависит от синтаксиса и семантики атрибута и от операции.
Атрибут lang предназначен для того, чтобы позволить агентам пользователей более осмысленно генерировать изображение на основе принятой культурной практики для данного языка. Это не подразумевает, что агенты пользователей должны генерировать символы, не являющиеся типичными для конкретного языка, менее осмысленным способом; агенты пользователей должны пытаться сгенерировать се символы , независимо от значения, указанного в атрибуте lang .
Например, если в русском тексте должен появиться символ греческого алфавита:
агент пользователя (1) должен попытаться сгенерировать русский текст соответствующим образом (например, в соответствующих кавычках) и (2) попытаться сгенерировать символ γ, даже если это не русский символ.
Дополнительную информацию см. в разделе о неотображаемых символах.
Значением атрибута lang является код языка, идентифицирующий естественный разговорный язык, который устно, письменно или иным образом используется для передачи информации между людьми. Компьютерные языки явным образом исключены из кодов языков.
В документе [RFC1766] определены и описаны все коды языков, которые должны использоваться в документах на языке HTML.
Кратко говоря, коды языков состоят из первичного кода и ряда подкодов, который может быть пустым:
Вот несколько примеров кодов языков:
- «en»: английский
- «en-US»: американская версия английского.
- «en-cockney»: кокни (диалект английского).
- «i-navajo»: навахо (язык американских индейцев).
- «x-klingon»: Первичный код «x» обозначает экспериментальный код языка
Двухбуквенные первичные коды зарезервированы для сокращений языков по стандарту [ISO639]. Сюда входят коды fr (французский), de (немецкий), it (итальянский), nl (голландский), el (греческий), es (испанский), pt (португальский), ar (арабский), he (иврит), ru (русский), zh (китайский), ja (японский), hi (хинди), ur (урду) и sa (санскрит).
Любой двухбуквенный подкод считается кодом страны в стандарте [ISO3166].
8.1.2 Наследование кодов языков
Элемент наследует информацию о коде языка в следующем порядке старшинства (от высшего к низшему):
- Атрибут lang , установленный для самого элемента.
- Самый близкий родительский элемент, для которого установлено значение атрибута lang (то есть атрибут lang наследуется).
- Заголовок HTTP «Content-Language» (который может конфигурироваться на сервере). Например:
- Значения по умолчанию и настройки агента пользователя.
В этом примере первичным языком документа является французский («fr»). Один абзац объявлен на испанском языке («es»), после чего язык снова становится французским. В следующий абзац включена японская фраза («ja»), после чего язык опять изменяется на французский.
8.1.3 Интерпретация кодов языков
В контексте HTML код языка должен интерпретироваться агентами пользователя как иерархия знаков, а не один знак. Если агент пользователя генерирует изображение в соответствии с информацией о языке (скажем, сравнивая языковые коды в таблицах стилей и значения атрибута lang ), он всегда должен находить точное соответствие, но должен также принимать во внимание первичные коды. Таким образом, если значение атрибута lang «en-US» установлено для элемента HTML , агент пользователя должен сначала выбрать информацию о стиле, совпадающую с «en-US», а затем сгенерировать более общее значение «en».
Примечание. Иерархия кодов языков не гарантирует понимания всех языков с общими префиксами людьми, бегло говорящими на одном или нескольких из этих языков. Она помогает пользователю запросить эту общность, когда для пользователя она является истинной.
8.2 Указание направления текста и таблиц: атрибут dir
Определения атрибутовdir = LTR | RTL [CI] Этот атрибут задает основное направление нейтрального в смысле направления текста (например, текста, который не наследует направленность, как определено в [UNICODE]) и направление таблиц. Возможные значения:
- LTR : Слева направо.
- RTL : Справа налево.
Кроме задания языка документа с помощью атрибута lang , авторы могут указать основное направление (слева направо или справа налево) частей текста, таблицы и т.д. Это делается с помощью атрибута dir .
Спецификация [UNICODE] назначает направление символам и определяет (сложный) алгоритм для определения соответствующего направления текста. Если документ не содержит отображаемых справа налево символов, агент пользователя не должен использовать двунаправленный алгоритм [UNICODE]. Если документ содержит такие символы, и если агент пользователя и отображает, он должен использовать двунаправленный алгоритм.
Хотя в Unicode определены специальные символы, отвечающие за направление текста, HTML предлагает конструкции разметки высшего уровня, выполняющие те же функции: атрибут dir (не спутайте с элементом DIR ) и элемент BDO . Таким образом, чтобы привести цитату на иврите, проще написать
чем с эквивалентными ссылками Unicode:
Агенты пользователей не должны использовать атрибут lang для определения направления текста.
Атрибут dir наследуется, и его можно переопределить. Подробнее см. в разделе о наследовании информации о направлении текста.
8.2.1 Введение в двунаправленный алгоритм
В следующем примере проиллюстрировано ожидаемое поведение двунаправленного алгоритма. В нем показаны английский текст слева направо и текст на иврите справа налево.
Рассмотрите следующий текст:
Символы в этом примере (и во всех реплицированных примерах) хранятся в компьютере в том же виде, в каком они отображаются здесь: первый символ — «а», второй — «н», последний «6».
Предположим, для содержащего этот абзац документа определен английский язык. Это означает, что основным направлением является направление слева направо. Корректное представление этой строки:
Строки точек указывают структуру предложения: основным языком является английский, но встроены некоторые элементы на иврите. Для получения корректного представления не нужно никакой дополнительной разметки, поскольку фрагменты на иврите корректно обращаются агентами пользователя, применяющими двунаправленный алгоритм.
С другой стороны, если для документа определен язык иврит, основным будет направление справа налево. Корректное представление, таким образом, будет:
В это случае все предложение представляется справа налево, а фрагменты на английском языке обращаются двунаправленным алгоритмом.
8.2.2 Наследование информации о направлении текста
Для двунаправленного алгоритма Unicode необходимо основное направление текста для текстовых блоков. Чтобы указать основное направление элементов уровня блока, установите для этого элемента атрибута dir . Значением атрибута dir , устанавливаемым по умолчанию, является «ltr» (слева направо).
Если атрибут dir установлен для элемента уровня блока, он действует на протяжении всего элемента и для всех вложенных элементов уровня блока. Установка атрибута dir для вложенного элемента имеет приоритет по отношению к наследуемому значению.
Чтобы установить основное направление текста для всего документа, установите атрибут dir в элементе HTML .
Встроенные элементы, с другой стороны, не наследуют атрибут dir . Это означает, что встроенный элемент без атрибута dir не открывает дополнительного уровня внедрения в соответствии с двунаправленным алгоритмом. (Здесь элементом считается элемент уровня блока или встроенный элемент на основе представления по умолчанию. Помните, что элементы INS и DEL могут быть элементами уровня блока или встраиваемыми элементами в зависимости от контекста.)
8.2.3 Установка направления внедренного текста
Двунаправленный алгоритм [UNICODE] автоматически обращает последовательности внедренных символов в соответствии с наследуемым направлением (как показано в предыдущих примерах). Однако в общем в расчет принимается только один уровень внедрения. Для того, чтобы изменения направления достигали дополнительных уровней, используйте атрибут dir во встроенном элементе.
Рассмотрите текст предыдущего примера:
Предположим, основным языком для документа, содержащего этот абзац, является английский. В этом английском предложении содержится фрагмент на иврите, продолжающийся от ИВРИТ2 до ИВРИТ4, и в нем содержится англоязычный фрагмент (английский3). Таким образом, желаемое представление текста:
Для изменения направления текста двух внедренных фрагментов необходимо задать дополнительную информацию, что мы и делаем, явно разделяя второе внедрение. В этом примере мы используем для разметки текста элемент SPAN и атрибут dir :
Авторы также могут использовать для изменения направления нескольких внедренных фрагментов символы Unicode. Для указания направления слева направо во внедряемом фрагменте окружите текст символами LEFT-TO-RIGHT EMBEDDING («LRE», шестнадцатеричный код 202A) и POP DIRECTIONAL FORMATTING («PDF», шестнадцатеричный код 202C). Для указания направления справа налево во внедряемом фрагменте окружите текст символами RIGHT-TO-LEFT EMBEDDING («RTE», шестнадцатеричный код 202B) и PDF.
Использование разметки направленности HTML с символами Unicode. Авторы и разработчики средств создания HTML-документов должны знать о возможных конфликтах, возникающих при использовании атрибута dir со встроенными элементами (включая BDO ) одновременно с соответствующими символами форматирования [UNICODE]. Предпочтительнее использовать только один метод. Метод с использованием разметки гарантирует структурную целостность документа и устраняет некоторые проблемы с редактированием двунаправленного текста HTML в простых текстовых редакторах, но некоторое программное обеспечение может лучше использовать символы [UNICODE]. Если используются оба метода, следует хорошо позаботиться о правильном вложении разметки и символов, иначе результаты могут быть непредсказуемыми.
8.2.4 Приоритет над двунаправленным алгоритмом: элемент BDO
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутовdir = LTR | RTL [CI] Этот обязательный атрибут указывает основное направление текстового содержимого элемента. Это направление имеет приоритет по отношению к наследуемому направлению символов, как определено в [UNICODE]. Возможные значения:
- LTR : Направление слева направо.
- RTL : Направление справа налево.
Двунаправленного алгоритма и атрибута dir обычно достаточно для управления изменением направления внедренного текста. Однако в некоторых ситуациях двунаправленный алгоритм может привести к некорректному представлению. Элемент BDO позволяет авторам отключать двунаправленный алгоритм для выбранных фрагментов текста.
Рассмотрите документ с тем же текстовым фрагментом:
но предположите, что этот текст уже представлен в нужном порядке. Одной причиной этого может быть то, что стандарт MIME ([RFC2045], [RFC1556]) благоприятствует визуальному порядку, то есть последовательности с направлением справа налево вставляются в байтовый поток с направлением справа налево. В электронной почте это может форматироваться, включая перевод строки, например:
Это конфликтует с двунаправленным алгоритмом [UNICODE], поскольку этот алгоритм инвертирует 2ТИРВИ, 4ТИРВИи 6ТИРВИ во второй раз, так что слова на иврите отображаются слева направо, а не справа налево.
В этом случае решением будет переопределить действие двунаправленного алгоритма, поместив выдержку Email в элемент PRE (для сохранения переводов строки) и каждую строку, для которой атрибут dir установлен в LTR , в элемент BDO :
Двунаправленному алгоритму выдается команда «Я должен быть слева направо!», что приведет к нужному представлению:
Элемент BDO следует использовать в сценариях, где необходим абсолютный контроль над последовательностью (например, многоязыковые номера частей). Атрибут dir для этого элемента является обязательным.
Авторы могут также использовать специальные символы Unicode для того, чтобы избежать использования двунаправленного алгоритма — LEFT-TO-RIGHT OVERR >
Примечание. Помните, что при использовании атрибута dir во встроенных элементах (включая BDO ) одновременно с соответствующими символами форматирования [UNICODE], могут возникать конфликты.
Двунаправленность и кодировка символов В соответствии с [RFC1555] и [RFC1556] существуют специальные соглашения относительно использования значений параметра «charset» для указания обработки двунаправленности в почте MIME, в частности для отличия визуальной, явной и неявной направленности. Значение параметра «ISO-8859-8» (для иврита) обозначает визуальную кодировку, «ISO-8859-8-i» обозначает неявную двунаправленность, а «ISO-8859-8-e» обозначает явную направленность.
Поскольку HTML использует двунаправленный алгоритм Unicode, соответствующие документы, использующие кодировку ISO 8859-8, должны помечаться как «ISO-8859-8-i». Явное управление направлением в HTML также возможно, но его нельзя выразить в ISO 8859-8, поскольку не следует использовать «ISO-8859-8-e».
Значение «ISO-8859-8» подразумевает, что документ отформатирован визуально, и некоторая разметка будет использоваться неправильно (например, TABLE с выравниванием по правому краю без разбивки строк), чтобы гарантировать правильное отображение для более старых агентов пользователя, не поддерживающих двунаправленность. Такие документы не удовлетворяют настоящей спецификации. При необходимости их можно изменить (и одновременно они будут корректно отображаться в старых версиях агентов пользователей), добавив, где нужно, разметку BDO . Вопреки сказанному в [RFC1555] и [RFC1556], кодировка ISO-8859-6 (арабская) не представляет визуального порядка.
8.2.5 Ссылки на символы для управления направлением и объединением
Поскольку иногда возникает двусмысленность относительно некоторых символов (например, символов пунктуации), спецификация [UNICODE] включает символы для правильного определения назначения. Спецификация Unicode также включает некоторые символы для управления объединением при необходимости (например, в некоторых ситуациях с арабскими символами). HTML 4.0 включает для этих символов ссылки на символы.
Следующее DTD определяет представление некоторых объектов направления:
Объект zwnj используется для блокировки объединения в тех контекстах, где объединение произойдет, но оно происходить не должно. Объект zwj имеет обратное действие; он производит объединение в случае, когда оно не предполагается, но должно произойти. Например, арабская буква «HEH» используется для сокращения «Hijri», названия исламской системы летоисчисления. Поскольку отдельный иероглиф «HEH» в арабской письменности выглядит как цифра пять, для того, чтобы не путать букву «HEH» с последней цифрой пять в годе, используется исходная форма буквы «HEH». Однако, нет последующего контекста (например, буквы для объединения), с которым можно объединить «HEH». Символ zwj предоставляет такой контекст.
Точно так же в персидских текстах буква может иногда объединяться с последующей буквой, в то время как в рукописном тексте этого быть не должно. Символ zwnj используется для блокировки объединения в таких случаях.
Символы порядка, lrm и rlm , используются для определения направления нейтральных по отношению к направлению символов. Например, если двойные кавычки ставятся между арабской (справа налево) и латинской (слева направо) буквами, направление кавычек неясно (относятся ли они к арабскому или к латинскому тексту?). Символы lrm и rlm имеют свойство направления, но не имеют свойств ширины и разделения слов/строк. Подробнее см. [UNICODE].
Отражение глифов символов. Вообще двунаправленный алгоритм не отражает глифы символов и не влияет на них. Исключением являются такие символы как скобки (см. [UNICODE], таблица 4-7). Если отражение желательно, например, для египетских иероглифов, греческих знаков или специальных эффектов дизайна, можно сделать это с помощью стилей.
8.2.6 Таблице стилей и двунаправленность
Вообще использование таблиц стилей для изменения визуального представления элемента с уровня блока до встроенного и наоборот используется в прямом направлении. Однако, поскольку двунаправленный алгоритм использует различия встроенных элементов/элементов уровня блока, во время преобразования нужно быть внимательным.
Если встроенный элемент, не имеющий атрибута dir, преобразуется в стиль элемента уровня блока с помощью таблицы стилей, для определения основного направления блока он наследует атрибут dir от ближайшего родительского элемента блока.
Если элемент блока, не имеющий атрибута a dir, преобразуется к стилю встроенного элемента с помощью таблицы стилей, результирующее представление должно быть эквивалентным, в терминах двунаправленного форматирования, форматированию, получаемому путем явного добавления атрибута dir (которому назначено унаследованное значение) преобразованному элементу.
8 Информация о языке и направление текста
В этом разделе документа обсуждаются два важных вопроса интернационализации HTML: задание языка (атрибут lang ) и направления (атрибут dir ) текста в документе.
8.1 Задание языка содержимого: атрибут lang
Информация о языке, указанная с помощью атрибута lang , может использоваться агентом пользователя для управления генерацией изображения различными способами. Некоторые ситуации, в которых указываемая автором информация а языке, может быть полезна:
- Помощь поисковым машинам
- Помощь синтезаторам речи
- Помощь агентам пользователей в выборе вариантов глифов для высококачественной типографии
- Помощь агенту пользователя в выборе набора кавычек
- Помощь агенту пользователя в вопросах переноса, лигатур и интервалов
- Помощь программа проверки грамматики и орфографии
Атрибут lang указывает код содержимого элемента и значений атрибутов; относится ли он к данному атрибуту, зависит от синтаксиса и семантики атрибута и от операции.
Атрибут lang предназначен для того, чтобы позволить агентам пользователей более осмысленно генерировать изображение на основе принятой культурной практики для данного языка. Это не подразумевает, что агенты пользователей должны генерировать символы, не являющиеся типичными для конкретного языка, менее осмысленным способом; агенты пользователей должны пытаться сгенерировать се символы , независимо от значения, указанного в атрибуте lang .
Например, если в русском тексте должен появиться символ греческого алфавита:
агент пользователя (1) должен попытаться сгенерировать русский текст соответствующим образом (например, в соответствующих кавычках) и (2) попытаться сгенерировать символ γ, даже если это не русский символ.
Дополнительную информацию см. в разделе о неотображаемых символах.
Значением атрибута lang является код языка, идентифицирующий естественный разговорный язык, который устно, письменно или иным образом используется для передачи информации между людьми. Компьютерные языки явным образом исключены из кодов языков.
В документе [RFC1766] определены и описаны все коды языков, которые должны использоваться в документах на языке HTML.
Кратко говоря, коды языков состоят из первичного кода и ряда подкодов, который может быть пустым:
Вот несколько примеров кодов языков:
- «en»: английский
- «en-US»: американская версия английского.
- «en-cockney»: кокни (диалект английского).
- «i-navajo»: навахо (язык американских индейцев).
- «x-klingon»: Первичный код «x» обозначает экспериментальный код языка
Двухбуквенные первичные коды зарезервированы для сокращений языков по стандарту [ISO639]. Сюда входят коды fr (французский), de (немецкий), it (итальянский), nl (голландский), el (греческий), es (испанский), pt (португальский), ar (арабский), he (иврит), ru (русский), zh (китайский), ja (японский), hi (хинди), ur (урду) и sa (санскрит).
Любой двухбуквенный подкод считается кодом страны в стандарте [ISO3166].
8.1.2 Наследование кодов языков
Элемент наследует информацию о коде языка в следующем порядке старшинства (от высшего к низшему):
- Атрибут lang , установленный для самого элемента.
- Самый близкий родительский элемент, для которого установлено значение атрибута lang (то есть атрибут lang наследуется).
- Заголовок HTTP «Content-Language» (который может конфигурироваться на сервере). Например:
- Значения по умолчанию и настройки агента пользователя.
В этом примере первичным языком документа является французский («fr»). Один абзац объявлен на испанском языке («es»), после чего язык снова становится французским. В следующий абзац включена японская фраза («ja»), после чего язык опять изменяется на французский.
8.1.3 Интерпретация кодов языков
В контексте HTML код языка должен интерпретироваться агентами пользователя как иерархия знаков, а не один знак. Если агент пользователя генерирует изображение в соответствии с информацией о языке (скажем, сравнивая языковые коды в таблицах стилей и значения атрибута lang ), он всегда должен находить точное соответствие, но должен также принимать во внимание первичные коды. Таким образом, если значение атрибута lang «en-US» установлено для элемента HTML , агент пользователя должен сначала выбрать информацию о стиле, совпадающую с «en-US», а затем сгенерировать более общее значение «en».
Примечание. Иерархия кодов языков не гарантирует понимания всех языков с общими префиксами людьми, бегло говорящими на одном или нескольких из этих языков. Она помогает пользователю запросить эту общность, когда для пользователя она является истинной.
8.2 Указание направления текста и таблиц: атрибут dir
Определения атрибутовdir = LTR | RTL [CI] Этот атрибут задает основное направление нейтрального в смысле направления текста (например, текста, который не наследует направленность, как определено в [UNICODE]) и направление таблиц. Возможные значения:
- LTR : Слева направо.
- RTL : Справа налево.
Кроме задания языка документа с помощью атрибута lang , авторы могут указать основное направление (слева направо или справа налево) частей текста, таблицы и т.д. Это делается с помощью атрибута dir .
Спецификация [UNICODE] назначает направление символам и определяет (сложный) алгоритм для определения соответствующего направления текста. Если документ не содержит отображаемых справа налево символов, агент пользователя не должен использовать двунаправленный алгоритм [UNICODE]. Если документ содержит такие символы, и если агент пользователя и отображает, он должен использовать двунаправленный алгоритм.
Хотя в Unicode определены специальные символы, отвечающие за направление текста, HTML предлагает конструкции разметки высшего уровня, выполняющие те же функции: атрибут dir (не спутайте с элементом DIR ) и элемент BDO . Таким образом, чтобы привести цитату на иврите, проще написать
чем с эквивалентными ссылками Unicode:
Агенты пользователей не должны использовать атрибут lang для определения направления текста.
Атрибут dir наследуется, и его можно переопределить. Подробнее см. в разделе о наследовании информации о направлении текста.
8.2.1 Введение в двунаправленный алгоритм
В следующем примере проиллюстрировано ожидаемое поведение двунаправленного алгоритма. В нем показаны английский текст слева направо и текст на иврите справа налево.
Рассмотрите следующий текст:
Символы в этом примере (и во всех реплицированных примерах) хранятся в компьютере в том же виде, в каком они отображаются здесь: первый символ — «а», второй — «н», последний «6».
Предположим, для содержащего этот абзац документа определен английский язык. Это означает, что основным направлением является направление слева направо. Корректное представление этой строки:
Строки точек указывают структуру предложения: основным языком является английский, но встроены некоторые элементы на иврите. Для получения корректного представления не нужно никакой дополнительной разметки, поскольку фрагменты на иврите корректно обращаются агентами пользователя, применяющими двунаправленный алгоритм.
С другой стороны, если для документа определен язык иврит, основным будет направление справа налево. Корректное представление, таким образом, будет:
В это случае все предложение представляется справа налево, а фрагменты на английском языке обращаются двунаправленным алгоритмом.
8.2.2 Наследование информации о направлении текста
Для двунаправленного алгоритма Unicode необходимо основное направление текста для текстовых блоков. Чтобы указать основное направление элементов уровня блока, установите для этого элемента атрибута dir . Значением атрибута dir , устанавливаемым по умолчанию, является «ltr» (слева направо).
Если атрибут dir установлен для элемента уровня блока, он действует на протяжении всего элемента и для всех вложенных элементов уровня блока. Установка атрибута dir для вложенного элемента имеет приоритет по отношению к наследуемому значению.
Чтобы установить основное направление текста для всего документа, установите атрибут dir в элементе HTML .
Встроенные элементы, с другой стороны, не наследуют атрибут dir . Это означает, что встроенный элемент без атрибута dir не открывает дополнительного уровня внедрения в соответствии с двунаправленным алгоритмом. (Здесь элементом считается элемент уровня блока или встроенный элемент на основе представления по умолчанию. Помните, что элементы INS и DEL могут быть элементами уровня блока или встраиваемыми элементами в зависимости от контекста.)
8.2.3 Установка направления внедренного текста
Двунаправленный алгоритм [UNICODE] автоматически обращает последовательности внедренных символов в соответствии с наследуемым направлением (как показано в предыдущих примерах). Однако в общем в расчет принимается только один уровень внедрения. Для того, чтобы изменения направления достигали дополнительных уровней, используйте атрибут dir во встроенном элементе.
Рассмотрите текст предыдущего примера:
Предположим, основным языком для документа, содержащего этот абзац, является английский. В этом английском предложении содержится фрагмент на иврите, продолжающийся от ИВРИТ2 до ИВРИТ4, и в нем содержится англоязычный фрагмент (английский3). Таким образом, желаемое представление текста:
Для изменения направления текста двух внедренных фрагментов необходимо задать дополнительную информацию, что мы и делаем, явно разделяя второе внедрение. В этом примере мы используем для разметки текста элемент SPAN и атрибут dir :
Авторы также могут использовать для изменения направления нескольких внедренных фрагментов символы Unicode. Для указания направления слева направо во внедряемом фрагменте окружите текст символами LEFT-TO-RIGHT EMBEDDING («LRE», шестнадцатеричный код 202A) и POP DIRECTIONAL FORMATTING («PDF», шестнадцатеричный код 202C). Для указания направления справа налево во внедряемом фрагменте окружите текст символами RIGHT-TO-LEFT EMBEDDING («RTE», шестнадцатеричный код 202B) и PDF.
Использование разметки направленности HTML с символами Unicode. Авторы и разработчики средств создания HTML-документов должны знать о возможных конфликтах, возникающих при использовании атрибута dir со встроенными элементами (включая BDO ) одновременно с соответствующими символами форматирования [UNICODE]. Предпочтительнее использовать только один метод. Метод с использованием разметки гарантирует структурную целостность документа и устраняет некоторые проблемы с редактированием двунаправленного текста HTML в простых текстовых редакторах, но некоторое программное обеспечение может лучше использовать символы [UNICODE]. Если используются оба метода, следует хорошо позаботиться о правильном вложении разметки и символов, иначе результаты могут быть непредсказуемыми.
8.2.4 Приоритет над двунаправленным алгоритмом: элемент BDO
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутовdir = LTR | RTL [CI] Этот обязательный атрибут указывает основное направление текстового содержимого элемента. Это направление имеет приоритет по отношению к наследуемому направлению символов, как определено в [UNICODE]. Возможные значения:
- LTR : Направление слева направо.
- RTL : Направление справа налево.
Двунаправленного алгоритма и атрибута dir обычно достаточно для управления изменением направления внедренного текста. Однако в некоторых ситуациях двунаправленный алгоритм может привести к некорректному представлению. Элемент BDO позволяет авторам отключать двунаправленный алгоритм для выбранных фрагментов текста.
Рассмотрите документ с тем же текстовым фрагментом:
но предположите, что этот текст уже представлен в нужном порядке. Одной причиной этого может быть то, что стандарт MIME ([RFC2045], [RFC1556]) благоприятствует визуальному порядку, то есть последовательности с направлением справа налево вставляются в байтовый поток с направлением справа налево. В электронной почте это может форматироваться, включая перевод строки, например:
Это конфликтует с двунаправленным алгоритмом [UNICODE], поскольку этот алгоритм инвертирует 2ТИРВИ, 4ТИРВИи 6ТИРВИ во второй раз, так что слова на иврите отображаются слева направо, а не справа налево.
В этом случае решением будет переопределить действие двунаправленного алгоритма, поместив выдержку Email в элемент PRE (для сохранения переводов строки) и каждую строку, для которой атрибут dir установлен в LTR , в элемент BDO :
Двунаправленному алгоритму выдается команда «Я должен быть слева направо!», что приведет к нужному представлению:
Элемент BDO следует использовать в сценариях, где необходим абсолютный контроль над последовательностью (например, многоязыковые номера частей). Атрибут dir для этого элемента является обязательным.
Авторы могут также использовать специальные символы Unicode для того, чтобы избежать использования двунаправленного алгоритма — LEFT-TO-RIGHT OVERR >
Примечание. Помните, что при использовании атрибута dir во встроенных элементах (включая BDO ) одновременно с соответствующими символами форматирования [UNICODE], могут возникать конфликты.
Двунаправленность и кодировка символов В соответствии с [RFC1555] и [RFC1556] существуют специальные соглашения относительно использования значений параметра «charset» для указания обработки двунаправленности в почте MIME, в частности для отличия визуальной, явной и неявной направленности. Значение параметра «ISO-8859-8» (для иврита) обозначает визуальную кодировку, «ISO-8859-8-i» обозначает неявную двунаправленность, а «ISO-8859-8-e» обозначает явную направленность.
Поскольку HTML использует двунаправленный алгоритм Unicode, соответствующие документы, использующие кодировку ISO 8859-8, должны помечаться как «ISO-8859-8-i». Явное управление направлением в HTML также возможно, но его нельзя выразить в ISO 8859-8, поскольку не следует использовать «ISO-8859-8-e».
Значение «ISO-8859-8» подразумевает, что документ отформатирован визуально, и некоторая разметка будет использоваться неправильно (например, TABLE с выравниванием по правому краю без разбивки строк), чтобы гарантировать правильное отображение для более старых агентов пользователя, не поддерживающих двунаправленность. Такие документы не удовлетворяют настоящей спецификации. При необходимости их можно изменить (и одновременно они будут корректно отображаться в старых версиях агентов пользователей), добавив, где нужно, разметку BDO . Вопреки сказанному в [RFC1555] и [RFC1556], кодировка ISO-8859-6 (арабская) не представляет визуального порядка.
8.2.5 Ссылки на символы для управления направлением и объединением
Поскольку иногда возникает двусмысленность относительно некоторых символов (например, символов пунктуации), спецификация [UNICODE] включает символы для правильного определения назначения. Спецификация Unicode также включает некоторые символы для управления объединением при необходимости (например, в некоторых ситуациях с арабскими символами). HTML 4.0 включает для этих символов ссылки на символы.
Следующее DTD определяет представление некоторых объектов направления:
Объект zwnj используется для блокировки объединения в тех контекстах, где объединение произойдет, но оно происходить не должно. Объект zwj имеет обратное действие; он производит объединение в случае, когда оно не предполагается, но должно произойти. Например, арабская буква «HEH» используется для сокращения «Hijri», названия исламской системы летоисчисления. Поскольку отдельный иероглиф «HEH» в арабской письменности выглядит как цифра пять, для того, чтобы не путать букву «HEH» с последней цифрой пять в годе, используется исходная форма буквы «HEH». Однако, нет последующего контекста (например, буквы для объединения), с которым можно объединить «HEH». Символ zwj предоставляет такой контекст.
Точно так же в персидских текстах буква может иногда объединяться с последующей буквой, в то время как в рукописном тексте этого быть не должно. Символ zwnj используется для блокировки объединения в таких случаях.
Символы порядка, lrm и rlm , используются для определения направления нейтральных по отношению к направлению символов. Например, если двойные кавычки ставятся между арабской (справа налево) и латинской (слева направо) буквами, направление кавычек неясно (относятся ли они к арабскому или к латинскому тексту?). Символы lrm и rlm имеют свойство направления, но не имеют свойств ширины и разделения слов/строк. Подробнее см. [UNICODE].
Отражение глифов символов. Вообще двунаправленный алгоритм не отражает глифы символов и не влияет на них. Исключением являются такие символы как скобки (см. [UNICODE], таблица 4-7). Если отражение желательно, например, для египетских иероглифов, греческих знаков или специальных эффектов дизайна, можно сделать это с помощью стилей.
8.2.6 Таблицы стилей и двунаправленность
Вообще использование таблиц стилей для изменения визуального представления элемента с уровня блока до встроенного и наоборот используется в прямом направлении. Однако, поскольку двунаправленный алгоритм использует различия встроенных элементов/элементов уровня блока, во время преобразования нужно быть внимательным.
Если встроенный элемент, не имеющий атрибута dir, преобразуется в стиль элемента уровня блока с помощью таблицы стилей, для определения основного направления блока он наследует атрибут dir от ближайшего родительского элемента блока.
Блог Vaden Pro
- 398 просмотров
Характеристика значения
Общее определение
Коды для языков используются для корректного написания знаков препинания и других вспомогательных символов. Это необходимо так, как на разных языках мира они обозначаются по-разному.
Функцию корректного отображения отыгрывает браузер. Он обращается к своей базе, по соответствующему коду определяет язык и правильно отображает текст. Связующим звеном между необходимым текстом и кодировкой языка является атрибут lang. Именно он является носителем кода.
Как правильно задавать?
Ниже представлена небольшая информация о некоторых мировых языках и кодировкой для них.
Кодировка языка
Язык контента | Кодировка |
Абхазский язык | ab |
Азербайджанский язык | az |
Аймарский язык | ay |
Албанский язык | sq |
Английский язык | en |
Американское наречие английского | en-us |
Арабский язык | ar |
Армянский язык | hy |
Ассамский язык | as |
Африкаанс язык | af |
Башкирский язык | ba |
Белорусский язык | be |
Бенгальский язык | bn |
Болгарский язык | bg |
Бретонский язык | br |
Валлийский язык | cy |
Венгерский язык | hu |
Вьетнамский язык | vi |
Галисийский | gl |
Голландский язык | nl |
Греческий язык | el |
Грузинский язык | ka |
Гуарани язык | gn |
Датский язык | da |
Зулу | zu |
Иврит | iw |
Идиш | ji |
Индонезийский язык | in |
Интерлингва (искусственно созданный) | ia |
Ирландский язык | ga |
Исландский язык | is |
Испанский язык | es |
Итальянский язык | it |
Казахский язык | kk |
Камбоджийский язык | km |
Каталанский язык | ca |
Кашмирский язык | ks |
Кечуа | qu |
Киргизский язык | ky |
Китайский язык | zh |
Корейский язык | ko |
Корсиканский язык | co |
Курдский язык | ku |
Лаосский | lo |
Латвийский язык | lv |
Латынь | la |
Литовский язык | lt |
Малагасийский язык | mg |
Малайский язык | ms |
Мальтийский язык | mt |
Маори | mi |
Македонский язык | mk |
Молдавский язык | mo |
Монгольский язык | mn |
Науру | na |
Немецкий язык | de |
Непальский язык | ne |
Норвежский язык | no |
Пенджаби | pa |
Персидский язык | fa |
Польский язык | pl |
Португальский язык | pt |
Пуштунский язык | ps |
Ретороманский язык | rm |
Румынский язык | ro |
Русский язык | ru |
Самоанский язык | sm |
Санскрит | sa |
Сербский язык | sr |
Словацкий язык | sk |
Словенский язык | sl |
Сомали | so |
Суахили | sw |
Суданский язык | su |
Тагальский язык | tl |
Таджикский язык | tg |
Тайский язык | th |
Тамильский язык | ta |
Татарский язык | tt |
Тибетский язык | bo |
Тонга | to |
Турецкий язык | tr |
Туркменский язык | tk |
Узбекский язык | uz |
Украинский язык | uk |
Урду | ur |
Фиджи | fj |
Финский язык | fi |
Французский язык | fr |
Фризский язык | fy |
Хауса | ha |
Хинди | hi |
Хорватский язык | hr |
Чешский язык | cs |
Шведский язык | sv |
Эсперанто (искусственно созданный) | eo |
Эстонский язык | et |
Яванский язык | jw |
Японский язык | ja |
Важно помнить, что код заданный атрибутом lang внутри тега html задаст языковое оформление ко всему документу. Если необходимо применить языковые настройки к локальной части контента, то атрибут с кодом следует связывать с классом или тегом, внутри которых будет находиться необходимая часть текста.
Существует также возможность обращаться к атрибуту с заданной кодировкой в файле CSS. Это нужно для установки особых шрифтов, работающих только для определенного языка. В тоже время некоторые символы для дополнительного оформления текста могут изменять высоту строки. Поэтому нужно будет корректировать размер шрифта или высоту строки. Помимо этого каждый язык имеет собственные правила переноса, что тоже учитывается при применении кодировки языка.
Проверка орфографии улучшается в том случае, если браузеру удалось определить язык контента. Это еще одна значимая причина, по которой не следует игнорировать применения атрибута с языковым кодированием.
Еще один совет для использования языковых настроек заключается в том, что их необходимо применять сразу при создании контента. Это мотивируется тем, что при развитии спецификаций W3C значимость оформления текста с использованием языковых кодировок может возрасти. А внесение их в созданный контент сложнее, чем в тот, который только формируется.
Также хотелось подчеркнуть актуальность этой темы, так как на просторах веб-сети все больше появляется мульти язычных веб-сайтов. И эта тенденция набирает все больших и больших оборотов.
Одним из логичных объяснений этому является стремление захватить как можно большую аудиторию для блогеров с одной стороны, и расширить круг потенциальных клиентов для бизнесменов с другой стороны.
Как написать простую HTML-страничку
Создание веб-сайтов не такое сложное дело, как кажется. Узнайте, как закодировать простую страницу с помощью HTML — языка разметки для Web.
Спроектировать и создать простой веб-сайт очень просто. Даже новички могут изучать веб-дизайн, не прилагая слишком много усилий и времени.
HTML — это основной язык разметки веб-страниц. Давайте изучим его основы, и попробуем создать простую страницу.
Введение в HTML
HTML — это язык гипертекстовой разметки.
Гипертекст — это текст, который работает как ссылка.
HTML определяет структуру веб-страницы, и обеспечивает ее надлежащее отображение в браузере. Документ HTML может быть очень простым или сложным, в зависимости от поставленных задач.
Веб-браузеры получают HTML-документы с веб-сервера, и отображают их как веб-страницы. Каждый браузер понимает HTML, и воспроизводит изображения, текст, видео, так, как это написано в коде.
HTML является основным языком разметки для Web. Однако он используется для создания статических веб-страниц, без интерактивности и анимации. HTML5, последняя версия HTML, немного лучше в этом смысле, особенно что касается видео или аудио.
HTML5
HTML сегодня – это HTML5, новейшая версия, которая добавляет больше функций, чем предыдущие, и теперь может определять способ отображения видео, изображений и текста на экране браузера.
HTML5 — один из мощных инструментов для разработки веб-страниц. С HTML5 потоковая передача мультимедиа возможна без использования сторонних плагинов, таких как Flash. HTML5 также поддерживает хранение данных на стороне клиента. Это можно использовать для поддержки веб-приложений, когда клиент находится в автономном режиме.
Веб и HTML
Сеть состоит из взаимосвязанных веб-страниц и приложений, а также изображений, видео, анимации и интерактивного контента. Языки разметки составляют основу Web. Эти языки используются с тех пор, когда сайты были очень простыми, и будут оставаться частью сети, ее развития и будущего.
HTML остается фундаментальным навыком для всех веб-разработчиков и дизайнеров.
Согласно обзору W3Techs, HTML — это язык, используемый на 74,3% всех сайтов.
Среди подкатегорий, HTML5 используется на 82,9% всех сайтов, которые используют HTML.
Как создать простую HTML-страницу
Разработка HTML проста, и поэтому можно легко научиться кодировать простую HTML-страницу. Но для начала нужно изучить основы языка.
Кодирование HTML с помощью текстового редактора
Документ HTML — это в основном текстовый документ. Существует множество доступных редакторов текста, которые можно использовать для написания HTML. Два самых популярных: Dreamweaver и Sublime Text. Бесплатные редакторы — Notepad ++ для Windows и Text Wrangler для Mac. На самом деле сделать веб-страницу можно и в Microsoft Word, но делать это не стоит, поскольку он добавляет дополнительный и ненужный код в документы HTML.
Для примера мы будем использовать Notepad ++ в качестве редактора. Вы можете выбрать любой редактор по вашему выбору.
Создание и редактирование HTML
Создание нового документа HTML такое же, как и для любого другого типа документа. Выберите «Файл» — «Новый», чтобы открыть новый документ в Notepad ++. Внесите изменения в документ и нажмите «Сохранить».
Сохранение HTML
HTML-документ — это файл с расширением .htm или .html. Некоторые редакторы также могут предоставить опцию «Сохранить как HTML». Называть файл лучше латинскими буквами, с маленькой буквы, а пробелы заменять тире или точками.
Если вы написали код в «Блокноте» и сохранили его как текстовый документ, то перевести его в html-страничку можно с помощью программы Total Commander. Выбираем команду «Переименовать» и меняем расширение файла из .txt на .html.
Формат HTML-страницы
HTML как язык состоит из элементов, тегов и атрибутов, которые определяют содержание сайта. Элементы HTML позволяют нам добавлять таблицы, изображения, видео, аудио и т. д. на веб-страницу.
Элементы HTML
Элементы определяют структуру и содержимое веб-страницы. Обозначаются угловыми скобками вокруг имени элемента. Содержимое, которое не находится между «<>«, будет отображаться на веб-сайте. Элемент выглядит примерно так:
Элемент с угловыми скобками вокруг него образует тег ( ). Теги не отображаются на экране, но помогают браузеру понять, что он должен отображать. Открывающий тег отмечает начало элемента, а закрывающий тег отмечает его конец.
Содержимое между открывающим и закрывающим тэгами является содержимым элемента.
Теги могут использоваться двумя способами:
Использование тегов в паре
Парные теги содержат открывающий и закрывающий теги. Вот как они выглядят:
Существует открывающий тег (
) и закрывающий тег ( ), указывающий конец абзаца. Это означает, что все, что находится между этими двумя тегами, является абзацем.
Одиночные теги используются для определения самозакрывающихся элементов, и вставки элементов, таких как изображения. Вам не нужно определять начало и конец этих элементов.
Эти элементы пишутся так:
Закрытие / (косая черта) также не является обязательным. Это то же самое, что и при записи . Однако, чтобы избежать путаницы с открывающим тегом, рекомендуется добавить / (косую черту) в конце.
Атрибуты — это элементы, которые расширяют теги дополнительной информацией. Атрибут помещается в открывающий тег, и включает имя и значение.
Тег с атрибутом будет выглядеть так:
Тег «HTML» выше имеет атрибут «lang» со значением «en-US».
Структура документа HTML
Каждый HTML-документ имеет базовую структуру, определенную с помощью следующих элементов:
DOCTYPE или DTD: Декларация типа документа указывает версию используемого HTML. Этот тег помещается в начале документа.
HTML: Пара тегов HTML определяет начало и конец документа HTML.
Раздел HEADER : этот раздел определяет общую информацию для страницы, и обычно короткий. Содержимое этого элемента не отображается на странице. Заголовок содержит тег TITLE, который определяет название документа, отображаемое в строке заголовка браузера. HEADER также может содержать метаданные, или ссылки на внешние файлы.
Раздел BODY: Этот раздел содержит основную часть страницы. Его содержимое отображается в браузере. Большая часть кода HTML-страницы находится внутри элемента body.
Кодировка: этот тег указывает кодировку, используемую в документе HTML. Кодировка указывает, как файл сохраняется, и как будут отображаться специальные символы. Общепринятым значением для этого тега является UTF-8, который позволяет отображать практически все символы языка.
Простая страница HTML
Теперь, когда мы поняли основные элементы HTML, попробуем создать базовую HTML-страницу. Давайте начнем с создания чистого текстового документа в текстовом редакторе.
Шаг 1: Первая строка добавляемого HTML-кода указывает элемент DOCTYPE как «html». Это означает, что используется последняя версия HTML.
Шаг 2: Далее мы добавляем теги начала и конца для документа html. Мы также определяем язык как английский (en).
Шаг 3: Затем мы добавляем тег заголовка с тегом Title и сведениями о наборе символов.
Шаг 4: После этого пишется тег BODY.