YOU*_*CHO 6 javascript internationalization vue.js vuex vue-i18n
现在我正在 Vue.js 中构建一个支持多种语言的应用程序。我使用https://kazupon.github.io/vue-i18n实现了国际化。
我想将 i18n 中的获取消息部分从项目中的静态 JSON 文件更改为 API 调用结果(axios、ajax、Vuex ...等)。
如何从 API 服务器获取 JSON 消息文件并支持动态多语言服务?
有任何想法吗?提前致谢!
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import EN from '@/COMMON/i18n/en.json'
import KO from '@/COMMON/i18n/ko.json'
import store from '@/COMMON/store/store'
Vue.use(VueI18n)
const i18n = new VueI18n({
locale: sessionStorage.LANG_CD,
fallbackLocale: 'ko',
silentTranslationWarn: true,
messages: {
en: EN,
ko: KO
// option 1. ko: axios ... some code
// option 2. ko: store.getters ... some code
},
});
export default {
i18n
}
Run Code Online (Sandbox Code Playgroud)
Use*_* 28 14
请参阅延迟加载翻译。
在文档中,它使用动态导入来导入新的翻译文件。您可以从那里修改为您的 API 调用。
例子:
// i18n-setup.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import axios from 'axios'
Vue.use(VueI18n)
export const i18n = new VueI18n({
locale: 'en',
fallbackLocale: 'en'
})
const loadedLanguages = []
function setI18nLanguage (lang) {
i18n.locale = lang
axios.defaults.headers.common['Accept-Language'] = lang
document.querySelector('html').setAttribute('lang', lang)
return lang
}
export function loadLanguageAsync (lang) {
if (loadedLanguages.includes(lang)) {
if (i18n.locale !== lang) setI18nLanguage(lang)
return Promise.resolve()
}
return axios.get(`/api/lang/${lang}`).then(response => {
let msgs = response.data
loadedLanguages.push(lang)
i18n.setLocaleMessage(lang, msgs.default)
setI18nLanguage(lang)
})
}
// router.js
router.beforeEach((to, from, next) => {
const lang = to.params.lang
loadLanguageAsync(lang).then(() => next())
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7960 次 |
| 最近记录: |