blob: 2f63dfe605f19d61283c373390cdfc381104d51b [file] [log] [blame]
AviZi280f8012017-06-09 02:39:56 +03001/*!
Michael Landoefa037d2017-02-19 12:57:33 +02002 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
AviZi280f8012017-06-09 02:39:56 +03003 *
Michael Landoefa037d2017-02-19 12:57:33 +02004 * 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
AviZi280f8012017-06-09 02:39:56 +03007 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
Michael Landoefa037d2017-02-19 12:57:33 +020010 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
AviZi280f8012017-06-09 02:39:56 +030012 * 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.
Michael Landoefa037d2017-02-19 12:57:33 +020015 */
Michael Landoefa037d2017-02-19 12:57:33 +020016import IntlObj from 'intl';
Michael Landoefa037d2017-02-19 12:57:33 +020017import IntlRelativeFormatObj from 'intl-relativeformat';
18import createFormatCacheObj from 'intl-format-cache';
19import i18nJson from 'i18nJson';
Michael Landoefa037d2017-02-19 12:57:33 +020020/*
21 Intl libs are using out dated transpailer from ecmascript6.
22* TODO: As soon as they fix it, remove this assignments!!!
23* */
24var Intl = window.Intl || IntlObj.default,
Michael Landoefa037d2017-02-19 12:57:33 +020025 IntlRelativeFormat = IntlRelativeFormatObj.default,
26 createFormatCache = createFormatCacheObj.default;
27
Michael Landoefa037d2017-02-19 12:57:33 +020028/*extract locale*/
29var _locale = window.localStorage && localStorage.getItem('user_locale');
30if(!_locale) {
31 if(window.navigator) {
32 _locale = navigator.language || navigator.userLanguage;
33
34 //For now removing the dashes from the language.
35 let indexOfDash = _locale.indexOf('-');
36 if(-1 !== indexOfDash) {
37 _locale = _locale.substr(0, indexOfDash);
38 }
39 }
40 if(!_locale) {
41 _locale = 'en';
42 }
43}
44
45var _localeUpper = _locale.toUpperCase();
Michael Landoefa037d2017-02-19 12:57:33 +020046var i18n = {
47
48 _locale: _locale,
49 _localeUpper: _localeUpper,
Avi Zivb8e2faf2017-07-18 19:45:38 +030050 _i18nData: i18nJson || {},
Michael Landoefa037d2017-02-19 12:57:33 +020051
52 number(num) {
53 return createFormatCache(Intl.NumberFormat)(this._locale).format(num);
54 },
55
56 date(date, options, relativeDates) {
57 if (undefined === relativeDates || relativeDates) {
58 return this.dateRelative(date, options);
59 } else {
60 return this.dateNormal(date, options);
61 }
62 },
63
64 dateNormal(date, options) {
65 return createFormatCache(Intl.DateTimeFormat)(this._locale, options).format(date);
66 },
67
68 dateRelative(date, options) {
69 return createFormatCache(IntlRelativeFormat)(this._locale, options).format(date);
70 },
Avi Zivb8e2faf2017-07-18 19:45:38 +030071 message(messageId) {
72 if (i18nJson && i18nJson[messageId]) {
73 return i18nJson[messageId];
74 }
75 return messageId;
Michael Landoefa037d2017-02-19 12:57:33 +020076 },
Michael Landoefa037d2017-02-19 12:57:33 +020077 getLocale() {
78 return this._locale;
79 },
Michael Landoefa037d2017-02-19 12:57:33 +020080 getLocaleUpper() {
81 return this._localeUpper;
82 },
Michael Landoefa037d2017-02-19 12:57:33 +020083 setLocale(locale) {
84 localStorage.setItem('user_locale', locale);
85 window.location.reload();
86 }
87
88};
Michael Landoefa037d2017-02-19 12:57:33 +020089function i18nWrapper() {
90 return i18nWrapper.message.apply(i18nWrapper, arguments);
91}
92
93/*replace with some kind of extend method*/
94var prop, propKey;
95for (propKey in i18n) {
96 prop = i18n[propKey];
97 if (typeof prop === 'function') {
98 prop = prop.bind(i18nWrapper);
99 }
100 i18nWrapper[propKey] = prop;
101}
102
Michael Landoefa037d2017-02-19 12:57:33 +0200103export default i18nWrapper;