From 5f3c8f53614d93d21d0022b6b41559ba2cc4a3a1 Mon Sep 17 00:00:00 2001 From: fbaligand Date: Sat, 19 Aug 2017 08:45:53 +0200 Subject: [PATCH] add support for number format internationalization --- package.json | 2 +- .../kibana/common/field_formats/types/_numeral.js | 12 +++++++++++- src/core_plugins/kibana/ui_setting_defaults.js | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ea8f7cd7b7ff3..b67921a571a98 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "dependencies": { "@elastic/datemath": "2.3.0", "@elastic/filesaver": "1.1.2", - "@elastic/numeral": "2.2.1", + "@elastic/numeral": "2.3.0", "@elastic/test-subj-selector": "0.2.1", "@elastic/ui-ace": "0.2.3", "JSONStream": "1.1.1", diff --git a/src/core_plugins/kibana/common/field_formats/types/_numeral.js b/src/core_plugins/kibana/common/field_formats/types/_numeral.js index a042c4a1c72af..5bc00eea28f6c 100644 --- a/src/core_plugins/kibana/common/field_formats/types/_numeral.js +++ b/src/core_plugins/kibana/common/field_formats/types/_numeral.js @@ -1,8 +1,13 @@ import _ from 'lodash'; import numeral from '@elastic/numeral'; +import numeralLanguages from '@elastic/numeral/languages'; const numeralInst = numeral(); +numeralLanguages.forEach(function (numeralLanguage) { + numeral.language(numeralLanguage.id, numeralLanguage.lang); +}); + export function createNumeralFormat(FieldFormat, opts) { class NumeralFormat extends FieldFormat { static id = opts.id; @@ -11,7 +16,6 @@ export function createNumeralFormat(FieldFormat, opts) { constructor(params, getConfig) { super(params); - this.getConfig = getConfig; } @@ -34,8 +38,14 @@ export function createNumeralFormat(FieldFormat, opts) { if (isNaN(val)) return ''; + const previousLocale = numeral.language(); + const defaultLocale = this.getConfig && this.getConfig('format:number:defaultLocale') || 'en'; + numeral.language(defaultLocale); + const formatted = numeralInst.set(val).format(this.param('pattern')); + numeral.language(previousLocale); + return opts.afterConvert ? opts.afterConvert.call(this, formatted) : formatted; diff --git a/src/core_plugins/kibana/ui_setting_defaults.js b/src/core_plugins/kibana/ui_setting_defaults.js index 46cd81f1a234c..783bd0e4696fa 100644 --- a/src/core_plugins/kibana/ui_setting_defaults.js +++ b/src/core_plugins/kibana/ui_setting_defaults.js @@ -1,8 +1,12 @@ import moment from 'moment-timezone'; +import numeralLanguages from '@elastic/numeral/languages'; export function getUiSettingDefaults() { const weekdays = moment.weekdays().slice(); const [defaultWeekday] = weekdays; + const numeralLanguageIds = numeralLanguages.map(function (numeralLanguage) { + return numeralLanguage.id; + }); // wrapped in provider so that a new instance is given to each app/test return { @@ -237,6 +241,12 @@ export function getUiSettingDefaults() { value: '($0,0.[00])', description: 'Default numeral format for the "currency" format' }, + 'format:number:defaultLocale': { + value: 'en', + type: 'select', + options: numeralLanguageIds, + description: 'numeral language' + }, 'savedObjects:perPage': { type: 'number', value: 5,