1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
---
title: Intl
slug: Web/JavaScript/Reference/Global_Objects/Intl
tags:
- Internationalization
- JavaScript
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Intl
---
<div>{{JSRef("Global_Objects", "Intl", "Collator,DateTimeFormat,NumberFormat")}}</div>
<h2 id="Summary" name="Summary">Сводка</h2>
<p>Объект <strong><code>Intl</code></strong> является пространством имён для API интернационализации ECMAScript, предосталяющим языко-зависимое сравнение строк, форматирование чисел и дат со временем. Конструкторы объектов {{jsxref("Global_Objects/Collator", "Collator")}}, {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} и {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}} являются свойствами объекта <code>Intl</code>. На этой странице описаны эти свойства, а также общая функциональность конструкторов интернационализации и других языко-зависимых функций.</p>
<h2 id="Properties" name="Properties">Свойства</h2>
<dl>
<dt>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</dt>
<dd>Конструктор <dfn>сортировщиков</dfn> — объектов, включающих языко-зависимое сравнение строк.</dd>
<dt>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</dt>
<dd>Конструктор объектов, включающих языко-зависимое форматирование даты и времени.</dd>
<dt>{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}</dt>
<dd>Конструктор объектов, включающих языко-зависимое форматирование чисел.</dd>
</dl>
<h2 id="Methods">Methods</h2>
<dl>
<dt>{{jsxref("Intl.getCanonicalLocales()")}}</dt>
<dd>Returns canonical locale names.</dd>
</dl>
<h2 id="Locale_identification_and_negotiation" name="Locale_identification_and_negotiation">Идентификация и согласование локали</h2>
<p>Конструкторы интернационализации, а также некоторые языко-зависимые методы других конструкторов (перечисленные в разделе {{anch("See_also", "Смотрите также")}}) используют общий шаблон для идентификации локалей и определения используемой локали: они все принимают аргументы <code>locales</code> и <code>options</code> и согласовывают запрошенную локаль (локали) с поддерживаемыми локалями согласно алгоритму, определённому свойством <code>options.localeMatcher</code>.</p>
<h3 id="locales_argument" name="locales_argument">Аргумент <code>locales</code></h3>
<p>Аргумет <code>locales</code> должен быть либо строкой, содержащей <a href="http://tools.ietf.org/html/rfc5646">языковую метку BCP 47</a>, либо массивом таких языковых меток. Если аргумент <code>locales</code> не предоставлен или не определён, используется локаль по умолчанию среды выполнения.</p>
<p>Языковая метка BCP 47 однозначно определяет язык или локаль (разница между ними весьма расплывчата). В своей самой общей форме она может содержать в следующем порядке: код языка, код письменности и код страны, разделённые символами дефиса. Примеры:</p>
<ul>
<li><code>"hi"</code>: хинди.</li>
<li><code>"de-AT"</code>: немецкий, используемый в Австрии.</li>
<li><code>"zh-Hans-CN"</code>: упрощённый китайский, используемый в Китае.</li>
</ul>
<p>Подметки, определяющие языки, письменности, страны (регионы) и (используется не часто) варианты в языковых метках BCP 47 могут быть найдены в <a href="http://www.iana.org/assignments/language-subtag-registry">Реестре языковых подметок IANA</a>.</p>
<p>BCP 47 также позволяет использовать расширения, и одно из них имеет значение для функций интернационализации JavaScript: это расширение <code>"u"</code> (Unicode). Оно может использоваться для запрашивания настраиваемого языко-зависимого поведения объектов {{jsxref("Global_Objects/Collator", "Collator")}}, {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} или {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}. Примеры:</p>
<ul>
<li><code>"de-DE-u-co-phonebk"</code>: использовать вариант телефонной книги немецкого порядка сортировки, который расширяет гласные с умляутами до пар символов: ä → ae, ö → oe, ü → ue.</li>
<li><code>"th-TH-u-nu-thai"</code>: использовать тайские цифры (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) при форматировании чисел.</li>
<li><code>"ja-JP-u-ca-japanese"</code>: использовать японский календарь при форматировании даты и времени, так что 2013 год выражается 25-м годом периода Хэйсей или 平成25.</li>
</ul>
<h3 id="Locale_negotiation" name="Locale_negotiation">Согласование локали</h3>
<p>Аргумент <code>locales</code>, после вырезания всех расширений Unicode, интерпретируется как приоритетный запрос из приложения. Среда выполнения сравнивает его с доступными локалями в выбирает наилучшую из имеющихся. Существует два алгоритма сравнения: сопоставление <code>"lookup"</code> (поиск) следует алгоритму поиска, определённому в <a href="http://tools.ietf.org/html/rfc4647#section-3.4">BCP 47</a>; сопоставление <code>"best fit"</code> (наилучший подходящий) позволяет среде выполнения предоставлять локаль, которая, как минимум, но возможно и лучше, подходит для запроса, нежели локаль, найденная с помощью алгоритма поиска. Если приложение не предоставляет аргумент <code>locales</code> или среда выполнения не имеет локали, соответствующей запросу, то используется локаль по умолчанию для среды выполнения. Метод сопоставления можно выбрать с помощью свойства аргумента <code>options</code> (смотрите ниже).</p>
<p>Если выбранная языковая метка содержит подстроку расширения Unicode, это расширение будет использоваться для настройки сконструированного объекта или поведения функции. Каждый конструктор или функция поддерживают только определённое подмножество ключей, определённых расширением Unicode, и поддерживаемые значения часто зависят от языковой метки. Например, ключ <code>"co"</code> (сравнение) поддерживается только объектом {{jsxref("Global_Objects/Collator", "Collator")}}, а его значение <code>"phonebk"</code> поддерживается только для немецкого языка.</p>
<h3 id="options_argument" name="options_argument">Аргумент <code>options</code></h3>
<p>Аргумент <code>options</code> должен быть объектом со свойствами, которые различаются для конструкторов и функций. Если аргумент <code>options</code> не предоставлен или не определён, для всех свойств используются значения по умолчанию.</p>
<p>Одно свойство поддерживается для всех языко-зависимых конструкторов: свойство <code>localeMatcher</code>, чьим значением должна быть одна из строк <code>"lookup"</code> или <code>"best fit"</code> и которое выбирает один из алгоритмов сопоставления локалей, описанных выше.</p>
<h2 id="Specifications" name="Specifications">Спецификации</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Спецификация</th>
<th scope="col">Статус</th>
<th scope="col">Комментарии</th>
</tr>
<tr>
<td>{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}</td>
<td>{{Spec2('ES Int 1.0')}}</td>
<td>Изначальное определение.</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
<div>Таблица совместимости на этой странице генерируется из структурированных данных. Чтобы внести свои изменения в эти данные, вы можете перейти на страницу <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отослать нам pull request.</div>
<div id="compat-mobile">
<p>{{Compat("javascript.builtins.Intl")}}</p>
</div>
<h2 id="See_also" name="See_also">Смотрите также</h2>
<ul>
<li>Введение: <a href="http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/index.html">API интернационализации ECMAScript</a></li>
<li>Конструкторы
<ul>
<li>{{jsxref("Collator", "Intl.Collator")}}</li>
<li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li>
<li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
</ul>
</li>
<li>Методы
<ul>
<li>{{jsxref("String.prototype.localeCompare()")}}</li>
<li>{{jsxref("Number.prototype.toLocaleString()")}}</li>
<li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
<li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
<li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
</ul>
</li>
</ul>
|