2018-01-09 20:26:20 +01:00
|
|
|
import { PlatformUtilsService } from 'jslib/abstractions';
|
2017-12-06 20:05:49 +01:00
|
|
|
|
2018-01-09 20:26:20 +01:00
|
|
|
export default function i18nService(platformUtilsService: PlatformUtilsService) {
|
2018-01-12 04:13:57 +01:00
|
|
|
const defaultMessages: any = {};
|
|
|
|
const localeMessages: any = {};
|
|
|
|
|
|
|
|
// First locale is the default (English)
|
|
|
|
const supportedLocales = [
|
|
|
|
'en', 'cs', 'da', 'de', 'es', 'et', 'fi', 'fr', 'hr', 'hu', 'id', 'it', 'ja',
|
|
|
|
'nb', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sv', 'tr', 'uk', 'vi',
|
|
|
|
'zh-CN', 'zh-TW',
|
|
|
|
];
|
|
|
|
|
|
|
|
async function loadMessages(locale: string, messagesObj: any,
|
|
|
|
messageCallback: (prop: string, message: string) => string): Promise<any> {
|
|
|
|
const formattedLocale = locale.replace('-', '_');
|
|
|
|
const file = await fetch('../_locales/' + formattedLocale + '/messages.json');
|
|
|
|
const locales = await file.json();
|
|
|
|
for (const prop in locales) {
|
|
|
|
if (locales.hasOwnProperty(prop)) {
|
|
|
|
messagesObj[prop] = messageCallback(prop, locales[prop].message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-12-06 19:51:49 +01:00
|
|
|
|
2018-01-05 22:30:15 +01:00
|
|
|
if (platformUtilsService.isEdge()) {
|
2018-01-12 04:13:57 +01:00
|
|
|
loadMessages('en', localeMessages, (prop: string, message: string) => chrome.i18n.getMessage(prop));
|
|
|
|
return localeMessages;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (platformUtilsService.isSafari()) {
|
|
|
|
let lang = navigator.language;
|
|
|
|
if (supportedLocales.indexOf(lang) === -1) {
|
|
|
|
lang = lang.slice(0, 2);
|
|
|
|
|
|
|
|
if (supportedLocales.indexOf(lang) === -1) {
|
|
|
|
lang = supportedLocales[0];
|
2017-12-06 20:05:49 +01:00
|
|
|
}
|
2018-01-12 04:13:57 +01:00
|
|
|
}
|
2017-12-06 19:51:49 +01:00
|
|
|
|
2018-01-12 04:13:57 +01:00
|
|
|
loadMessages(lang, localeMessages, (prop: string, message: string) => message);
|
|
|
|
if (lang !== supportedLocales[0]) {
|
|
|
|
loadMessages(supportedLocales[0], defaultMessages, (prop: string, message: string) => message);
|
|
|
|
}
|
2017-12-06 19:51:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return new Proxy({}, {
|
2017-12-06 20:23:34 +01:00
|
|
|
get: (target, name) => {
|
2018-01-12 04:13:57 +01:00
|
|
|
const id = name.toString();
|
|
|
|
|
|
|
|
if (platformUtilsService.isSafari()) {
|
|
|
|
if (localeMessages.hasOwnProperty(id) && localeMessages[id]) {
|
|
|
|
return localeMessages[id];
|
|
|
|
} else if (defaultMessages.hasOwnProperty(id) && defaultMessages[id]) {
|
|
|
|
return defaultMessages[id];
|
|
|
|
}
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
|
|
|
|
return chrome.i18n.getMessage(id);
|
2017-12-06 19:51:49 +01:00
|
|
|
},
|
2017-12-06 20:23:34 +01:00
|
|
|
set: (target, name, value) => {
|
2017-12-06 19:51:49 +01:00
|
|
|
return false;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|