| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| import { createI18n } from 'vue-i18n' | |
| import { vueProps } from '@/vue-app' | |
| const loadedLanguage = [] | |
| const messages = {} | |
| export const i18n = createI18n({ | |
| locale: 'en', | |
| fallbackLocale: 'en', | |
| silentTranslationWarn: true, | |
| messages: messages, | |
| silentFallbackWarn: true, | |
| warnHtmlInMessage: 'off' | |
| }) | |
| export function loadLanguageAsync (lang) { | |
| if (!lang) { | |
| const locale = vueProps.$localStorage.get('LOCALE') | |
| lang = (!locale || typeof locale === 'object') ? 'en' : locale | |
| } | |
| if (loadedLanguage.includes(lang)) { | |
| return Promise.resolve(setLanguage(lang)) | |
| } | |
| return fetch(`locales/${lang}.json?ts=${Date.now()}`) | |
| .then(response => response.json()) | |
| .then(json => Promise.resolve(setLanguage(lang, json))) | |
| } | |
| function setLanguage (lang, message) { | |
| if (i18n) { | |
| i18n.global.locale = lang | |
| if (message && Object.keys(message).length > 0) { | |
| i18n.global.setLocaleMessage(lang, message) | |
| } | |
| } | |
| if (!loadedLanguage.includes(lang)) { | |
| loadedLanguage.push(lang) | |
| } | |
| if (message && Object.keys(message).length > 0) { | |
| messages[lang] = message | |
| } | |
| } |