blob: 6933e05206e1c2825931f0eaf964e96bc5003f94 [file] [log] [blame]
// 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
}
}