blob: ef97b8bab489bdfddb09ff11386f6e6d6409a65e [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';
avigaffa00e935f2017-09-10 08:58:51 +030017import IntlMessageFormatObj from 'intl-messageformat';
Michael Landoefa037d2017-02-19 12:57:33 +020018import IntlRelativeFormatObj from 'intl-relativeformat';
19import createFormatCacheObj from 'intl-format-cache';
20import i18nJson from 'i18nJson';
Michael Landoefa037d2017-02-19 12:57:33 +020021/*
avigaffa00e935f2017-09-10 08:58:51 +030022 Intl libs are using out dated transpailer from ecmascript6.
23 * TODO: As soon as they fix it, remove this assignments!!!
24 * */
Michael Landoefa037d2017-02-19 12:57:33 +020025var Intl = window.Intl || IntlObj.default,
avigaffa00e935f2017-09-10 08:58:51 +030026 IntlMessageFormat = IntlMessageFormatObj.default,
Michael Landoefa037d2017-02-19 12:57:33 +020027 IntlRelativeFormat = IntlRelativeFormatObj.default,
28 createFormatCache = createFormatCacheObj.default;
29
Michael Landoefa037d2017-02-19 12:57:33 +020030/*extract locale*/
31var _locale = window.localStorage && localStorage.getItem('user_locale');
32if(!_locale) {
33 if(window.navigator) {
34 _locale = navigator.language || navigator.userLanguage;
35
36 //For now removing the dashes from the language.
37 let indexOfDash = _locale.indexOf('-');
38 if(-1 !== indexOfDash) {
39 _locale = _locale.substr(0, indexOfDash);
40 }
41 }
42 if(!_locale) {
43 _locale = 'en';
44 }
45}
46
47var _localeUpper = _locale.toUpperCase();
Michael Landoefa037d2017-02-19 12:57:33 +020048var i18n = {
49
50 _locale: _locale,
51 _localeUpper: _localeUpper,
Avi Zivb8e2faf2017-07-18 19:45:38 +030052 _i18nData: i18nJson || {},
Michael Landoefa037d2017-02-19 12:57:33 +020053
54 number(num) {
55 return createFormatCache(Intl.NumberFormat)(this._locale).format(num);
56 },
57
58 date(date, options, relativeDates) {
59 if (undefined === relativeDates || relativeDates) {
60 return this.dateRelative(date, options);
61 } else {
62 return this.dateNormal(date, options);
63 }
64 },
65
66 dateNormal(date, options) {
67 return createFormatCache(Intl.DateTimeFormat)(this._locale, options).format(date);
68 },
69
70 dateRelative(date, options) {
71 return createFormatCache(IntlRelativeFormat)(this._locale, options).format(date);
72 },
avigaffa00e935f2017-09-10 08:58:51 +030073 message(messageId, options) {
74 let messageTxt = null;
Avi Zivb8e2faf2017-07-18 19:45:38 +030075 if (i18nJson && i18nJson[messageId]) {
avigaffa00e935f2017-09-10 08:58:51 +030076 messageTxt = i18nJson[messageId];
77 } else {
78 messageTxt = String(messageId);
Avi Zivb8e2faf2017-07-18 19:45:38 +030079 }
avigaffa00e935f2017-09-10 08:58:51 +030080 return createFormatCache(IntlMessageFormat)(messageTxt, this._locale).format(options);
81
Michael Landoefa037d2017-02-19 12:57:33 +020082 },
Michael Landoefa037d2017-02-19 12:57:33 +020083 getLocale() {
84 return this._locale;
85 },
Michael Landoefa037d2017-02-19 12:57:33 +020086 getLocaleUpper() {
87 return this._localeUpper;
88 },
Michael Landoefa037d2017-02-19 12:57:33 +020089 setLocale(locale) {
90 localStorage.setItem('user_locale', locale);
91 window.location.reload();
92 }
93
94};
Michael Landoefa037d2017-02-19 12:57:33 +020095function i18nWrapper() {
96 return i18nWrapper.message.apply(i18nWrapper, arguments);
97}
98
99/*replace with some kind of extend method*/
100var prop, propKey;
101for (propKey in i18n) {
102 prop = i18n[propKey];
103 if (typeof prop === 'function') {
104 prop = prop.bind(i18nWrapper);
105 }
106 i18nWrapper[propKey] = prop;
107}
108
Michael Landoefa037d2017-02-19 12:57:33 +0200109export default i18nWrapper;