2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 import IntlObj from 'intl';
17 import IntlMessageFormatObj from 'intl-messageformat';
18 import IntlRelativeFormatObj from 'intl-relativeformat';
19 import createFormatCacheObj from 'intl-format-cache';
20 import i18nJson from 'i18nJson';
23 Intl libs are using out dated transpailer from ecmascript6.
24 * TODO: As soon as they fix it, remove this assignments!!!
26 var Intl = window.Intl || IntlObj.default,
27 IntlMessageFormat = IntlMessageFormatObj.default,
28 IntlRelativeFormat = IntlRelativeFormatObj.default,
29 createFormatCache = createFormatCacheObj.default;
34 i18nData = i18nJson.dataWrapperArr[i18nJson.i18nDataIdx];
39 var _locale = window.localStorage && localStorage.getItem('user_locale');
41 if(window.navigator) {
42 _locale = navigator.language || navigator.userLanguage;
44 //For now removing the dashes from the language.
45 let indexOfDash = _locale.indexOf('-');
46 if(-1 !== indexOfDash) {
47 _locale = _locale.substr(0, indexOfDash);
55 var _localeUpper = _locale.toUpperCase();
60 _localeUpper: _localeUpper,
61 _i18nData: i18nData || {},
64 return createFormatCache(Intl.NumberFormat)(this._locale).format(num);
67 date(date, options, relativeDates) {
68 if (undefined === relativeDates || relativeDates) {
69 return this.dateRelative(date, options);
71 return this.dateNormal(date, options);
75 dateNormal(date, options) {
76 return createFormatCache(Intl.DateTimeFormat)(this._locale, options).format(date);
79 dateRelative(date, options) {
80 return createFormatCache(IntlRelativeFormat)(this._locale, options).format(date);
83 message(messageId, options) {
84 return createFormatCache(IntlMessageFormat)(this._i18nData[messageId] || String(messageId), this._locale).format(options);
92 return this._localeUpper;
96 localStorage.setItem('user_locale', locale);
97 window.location.reload();
102 function i18nWrapper() {
103 return i18nWrapper.message.apply(i18nWrapper, arguments);
106 /*replace with some kind of extend method*/
108 for (propKey in i18n) {
109 prop = i18n[propKey];
110 if (typeof prop === 'function') {
111 prop = prop.bind(i18nWrapper);
113 i18nWrapper[propKey] = prop;
117 export default i18nWrapper;