bitwarden-estensione-browser/src/services/i18n.service.ts

70 lines
2.4 KiB
TypeScript
Raw Normal View History

2018-01-09 20:26:20 +01:00
import { PlatformUtilsService } from 'jslib/abstractions';
2017-12-06 20:05:49 +01:00
2018-01-13 03:51:07 +01:00
// 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',
];
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 = {};
2018-01-05 22:30:15 +01:00
if (platformUtilsService.isEdge()) {
2018-01-12 05:42:50 +01:00
loadMessages('../_locales/', 'en', localeMessages,
(prop: string, message: string) => chrome.i18n.getMessage(prop));
2018-01-12 04:13:57 +01:00
return localeMessages;
}
if (platformUtilsService.isSafari()) {
let lang = navigator.language;
2018-01-13 03:51:07 +01:00
if (SupportedLocales.indexOf(lang) === -1) {
2018-01-12 04:13:57 +01:00
lang = lang.slice(0, 2);
2018-01-13 03:51:07 +01:00
if (SupportedLocales.indexOf(lang) === -1) {
lang = SupportedLocales[0];
2017-12-06 20:05:49 +01:00
}
2018-01-12 04:13:57 +01:00
}
2018-01-12 05:39:16 +01:00
const dir = './_locales/';
loadMessages(dir, lang, localeMessages, (prop: string, message: string) => message);
2018-01-13 03:51:07 +01:00
if (lang !== SupportedLocales[0]) {
loadMessages(dir, SupportedLocales[0], defaultMessages,
(prop: string, message: string) => message);
2018-01-12 04:13:57 +01:00
}
}
return new Proxy({}, {
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);
},
set: (target, name, value) => {
return false;
},
});
}
2018-01-13 03:51:07 +01:00
async function loadMessages(localesDir: string, locale: string, messagesObj: any,
messageCallback: (prop: string, message: string) => string): Promise<any> {
const formattedLocale = locale.replace('-', '_');
const file = await fetch(localesDir + formattedLocale + '/messages.json');
const locales = await file.json();
for (const prop in locales) {
if (locales.hasOwnProperty(prop)) {
messagesObj[prop] = messageCallback(prop, locales[prop].message);
}
}
}