You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Метод **`toLocaleString()`** значений {{jsxref("Number")}} возвращает строку с языкозависимым представлением этого числа. В реализациях с поддержкой [`Intl.NumberFormat` API](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) этот метод просто вызывает `Intl.NumberFormat`.
9
11
10
-
Метод **`toLocaleString()`** возвращает строку с языкозависимым представлением числа.
12
+
При каждом вызове `toLocaleString` происходит поиск по большой базе локализованных строк, что может быть неэффективным. Когда метод вызывается много раз с одинаковыми параметрами, лучше создать объект {{jsxref("Intl.NumberFormat")}} и использовать его метод {{jsxref("Intl/NumberFormat/format", "format()")}}, потому что объект `NumberFormat` запоминает переданные ему параметры и может кешировать данные, чтобы последующие вызовы `format` могли выполнять поиск с более определённым контекстом.
11
13
12
-
Новые аргументы `locales` и `options` позволяют приложениям определять язык, чьё поведение и соглашения по форматированию которого оно хочет использовать. В старых реализациях, игнорирующих аргументы `locales` и `options`, используемая локаль и форма возвращённой строки целиком зависит от реализации.
Проверьте раздел [Совместимость с браузерами](#Browser_compatibility), чтобы увидеть, какие браузеры поддерживают аргументы `locales` и `options`, и [Пример: проверка поддержки аргументов `locales` и `options`](#Example:_Checking_for_support_for_locales_and_options_arguments) для определения этой возможности.
26
+
Параметры `locales` и `options` изменяют поведение функции и позволяют приложениям определять язык, правила форматирования которого, следует использовать.
27
+
28
+
В реализациях, поддерживающих [`Intl.NumberFormat` API](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat), эти параметры соответствуют параметрам конструктора [`Intl.NumberFormat()`](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat). Реализации без поддержки `Intl.NumberFormat` должны игнорировать оба параметра, используя локаль и формат возвращаемой строки определяемые самой реализацией.
29
+
30
+
-`locales` {{optional_inline}}
31
+
32
+
- : Строка с языковым тегом BCP 47 или массив таких строк. Соответствует параметру [`locales`](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#locales) конструктора `Intl.NumberFormat().
33
+
34
+
В реализациях без поддержки `Intl.NumberFormat` этот параметр игнорируется и обычно используется локаль устройства.
35
+
36
+
-`options` {{optional_inline}}
37
+
38
+
- : Объект определяющий выходной формат. Соответствует параметру [`options`](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options) конструктора `Intl.NumberFormat()`.
39
+
40
+
В реализациях без поддержки `Intl.NumberFormat` этот параметр игнорируется.
23
41
24
-
> **Примечание:** API интернационализации ECMAScript, реализованное в Firefox 29, добавляет аргумент `locales` к методу `Number.toLocaleString()`. Если этот аргумент равен {{jsxref("Global_Objects/undefined", "undefined")}}, этот метод возвращает локализованные цифры на языке, определяемом ОС, в то время, как предыдущие версии Firefox возвращали цифры на английском языке. Это изменение было помечено, как регрессия, затрагивающая обратную совместимость, которая скоро может быть исправлена. ([Firefox bug 999003](https://bugzil.la/999003))
42
+
Смотрите описание [конструктора `Intl.NumberFormat()`](/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat) для подробностей использования этих параметров.
Строка, представляющая указанное число в соответствии с языковыми требованиями.
47
+
48
+
В реализациях с поддержкой `Intl.NumberFormat` результат будет эквивалентным `new Intl.NumberFormat(locales, options).format(number)`.
49
+
50
+
> **Примечание:** В большинстве случаев форматирование, возвращаемое `toLocaleString()`, единообразно. Однако результат может быть разным в зависимости от времени, языка и реализации — это допускается спецификацией. Не следует сравнивать результат `toLocaleString()` со статическими значениями.
27
51
28
52
## Примеры
29
53
30
-
### Пример: использование `toLocaleString`
54
+
### Использование `toLocaleString()`
31
55
32
-
При базовом использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.
56
+
При использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и настройками по умолчанию.
33
57
34
58
```js
35
59
var number =3500;
36
60
37
61
console.log(number.toLocaleString()); // Отобразит '3,500' в локали U.S. English
38
62
```
39
63
40
-
### Пример: проверка поддержки аргументов`locales` и `options`
64
+
### Проверка поддержки параметров`locales` и `options`
41
65
42
-
Аргументы`locales` и `options`поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:
66
+
Параметры`locales` и `options`могут поддерживаться не во всех реализациях. В реализациях без поддержки интернационализации `toLocaleString()` всегда использует системную локаль, что может оказаться не тем, что вам нужно. Поскольку любая реализация, поддерживающая параметры `locales` и `options`, должна поддерживать {{jsxref("Intl")}} API, проверить наличие последней можно таким способом:
43
67
44
68
```js
45
69
functiontoLocaleStringSupportsLocales() {
46
-
var number =0;
47
-
try {
48
-
number.toLocaleString("i");
49
-
} catch (e) {
50
-
returne.name==="RangeError";
51
-
}
52
-
returnfalse;
70
+
return (
71
+
typeofIntl==="object"&&
72
+
!!Intl&&
73
+
typeofIntl.DateTimeFormat==="function"
74
+
);
53
75
}
54
76
```
55
77
56
-
### Пример: использование аргумента`locales`
78
+
### Использование параметра`locales`
57
79
58
-
Этот пример показывает некоторые локализованные числовые форматы. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент`locales`:
80
+
Этот пример показывает некоторые локализованные форматы чисел. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр`locales`:
59
81
60
82
```js
61
83
var number =123456.789;
62
84
63
-
// В Германии в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - точка
85
+
// В Германии в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов точка
64
86
console.log(number.toLocaleString("de-DE"));
65
-
//→ 123.456,789
87
+
// 123.456,789
66
88
67
-
// В России в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - пробел
89
+
// В России в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов пробел
68
90
console.log(number.toLocaleString("ru-RU"));
69
-
//→ 123 456,789
91
+
// 123 456,789
70
92
71
-
// В большинстве арабоговорящих стран используют настоящие арабские цифры
93
+
// В большинстве арабоязычных стран используют настоящие арабские цифры
72
94
console.log(number.toLocaleString("ar-EG"));
73
-
//→ ١٢٣٤٥٦٫٧٨٩
95
+
// ١٢٣٤٥٦٫٧٨٩
74
96
75
97
// В Индии используют разделители для тысяч/лакх/крор
76
98
console.log(number.toLocaleString("en-IN"));
77
-
//→ 1,23,456.789
99
+
// 1,23,456.789
78
100
79
101
// Ключ расширения nu запрашивает систему нумерации, например, китайскую десятичную
При форматировании большого количества чисел лучшим вариантом будет создание объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} и использование функции, предоставляемой его свойством {{jsxref("NumberFormat.format")}}.
139
+
// Используем язык системы по умолчанию дял форматирования чисел
140
+
constnum=30000.65;
141
+
console.log(
142
+
num.toLocaleString(undefined, {
143
+
minimumFractionDigits:2,
144
+
maximumFractionDigits:2,
145
+
}),
146
+
);
147
+
// "30,000.65" если язык по умолчанию английский или
148
+
// "30.000,65" если язык по умолчанию немецкий или
0 commit comments