溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue如何動態(tài)添加store、路由和國際化配置方式

發(fā)布時間:2022-03-31 09:05:15 來源:億速云 閱讀:551 作者:小新 欄目:開發(fā)技術

這篇文章主要為大家展示了“vue如何動態(tài)添加store、路由和國際化配置方式”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“vue如何動態(tài)添加store、路由和國際化配置方式”這篇文章吧。

    vue動態(tài)添加store,路由和國際化

    vue動態(tài)添加store

    想寫組件庫?用這個吧 …

    // store module標準格式
    import demo from '@/store/modules/demo'
    $store.registerModule('demo', demo)

    vue動態(tài)添加路由

    從后端加載路由不再是夢 …

    // 不加這個可以跳轉(zhuǎn),但是options里面沒有新加的信息
    $router.options.routes.push(...routerArray)
    $router.beforeEach
    $router.beforeResolve
    $router.afterEach
    $router.beforeHooks  // 數(shù)組
    $router.afterHooks  // 數(shù)組

    用這些修改全局路由守衛(wèi)及守衛(wèi)順序

    vue動態(tài)加載國際化

    從后端加載國際化,so easy …

    $i18n.setLocaleMessage('zh_CN', messageObject)
    // or
    $i18n.mergeLocaleMessage('zh_CN', messageObject)

    前端項目中用vue-i18n實現(xiàn)國際化

    在項目中安裝國際化包的依賴

    npm i vue-i18n --save

    配置文件

    作為獨立的i18n文件,在main.js中引入。要是國際化文件不多,建議用非異步方式引入。

    異步方式引入,一次只加載一種國際化包

    lang/index.js

    import Vue from 'vue';
    // import Cookies from 'js-cookie'
    import VueI18n from 'vue-i18n';
    Vue.use(VueI18n);
    class I18n extends VueI18n {
        constructor() {
            super({
                locale: '',
                message: {},
            });
        }
        // vue i18n init
        async init() {
            const sLang = this.getLang();
            await this.setLocale(sLang);
            return this;
        }
        // get/update language
        getLang() {
            // get define language
            // 需要取cookies里面的值的話就加上
            // sLang = Cookies.get('language') || navigator.language || 'zh-CN';
            let sLang = navigator.language || 'zh-CN';
            return sLang;
        }
        // set locale language
        async setLocale(sLang) {
            // async load language message
            const loadMessages = async function(sLang) {
                const oMessages = {};
                try {
                    // local language file
                    const oProjectMessage = await import(`./${sLang}`);
                    // 需要 element 里面的語言包的話就加上
                    // const oElementMessage = await import(
                    //     `element-ui/lib/locale/lang/${sLang}`
                    // );
                    // assign language message
                    Object.assign(
                        oMessages,
                        oProjectMessage.default,
                        // oElementMessage.default,
                    );
                } catch (error) {
                    throw new Error(error);
                }
                return oMessages;
            };
            const oMessages = await loadMessages(sLang);
            // vue-i18n的方法
            this.setLocaleMessage(sLang, oMessages);
            // update lang
            this.locale = sLang;
        }
    }
    export default new I18n();

    *main.js

    import Vue from 'vue';
    import App from './App.vue';
    import router from './router';
    import i18n from './lang/index'; //引入i8n配置
    import 'normalize.css';
    Vue.config.productionTip = false;
    // 初始化i18n和Vue
    i18n.init().then(async (oI18n) => {
        new Vue({
            router,
            i18n: oI18n, //掛在在vue 下
            render: function(h) {
                return h(App);
            },
        }).$mount('#app');
    });

    以上異步方式適合應用在項目用默認的國際化語言,如果在頁面上切語言的話,會很不方便,需要大刷。

    下面推薦一下頁面上有切語言的,非異步方式,一次加載所有的國際化文件。

    非異步步方式,每次加載所有的包

    lang/index.js

    import Vue from 'vue'; // 引入Vue
    import VueI18n from 'vue-i18n'; // 引入i18n
    // import locale from 'element-ui/lib/locale' // 引入element 國際化配置
    import cookie from 'js-cookie';
    import cn from './zh-CN'; //簡體中文語言文件
    import tw from './zh-TW'; //繁體中文語言文件
    import en from './en';
    Vue.use(VueI18n);
    const locale = cookie.get('language') || navigator.language || 'zh-CN';
    // 創(chuàng)建實例并且掛在自定義語言包
    const i18n = new VueI18n({
        locale: locale, // 默認語言為中文
        messages: {
            'zh-CN': cn,
            'zh-TW': tw,
            en,
        },
        silentTranslationWarn: true,
    });
    // locale.i18n((key, value) => i18n.t(key, value)); // 把element 的語言包掛在到i18n中
    export default i18n; // 導出實例

    main.js

    * import Vue from 'vue';
    import App from './App.vue';
    import router from './router';
    import i18n from './lang/index'; //引入i8n配置
    import 'normalize.css';
    // import common plugins
    import utils from './utils';
    Vue.config.productionTip = false;
    // install utils
    Vue.use(utils);
    new Vue({
        router,
        i18n, // 掛在在vue 下
        render: function(h) {
            return h(App);
        },
    }).$mount('#app');
    /* 路由發(fā)生變化修改頁面title */
    router.beforeEach((to, from, next) => {
        if (to.name) {
            document.title = `${i18n.t('title')}-${i18n.t(to.name)}`;
        }
        next();
    });

    lang/zh-CN.js

     export default {
        title: '夢醒在笑-標題',
        edit: '修改',
        }

    lang/cn.js

     export default {
        title: 'title',
        edit: 'edit',
        }

    lang/zh-TW.js

     export default {
        title: '繁體﹣標題',
        edit: '編輯',
        }

    使用

    在HTML中使用

     <div>{{ $i18n.t('title')}}</div>

    在JS中使用

    this.$i18n.t('title')

    切語言

    非異步方式切換完頁面不用刷新。

    //在頁面上這樣調(diào)用 changeLang('zh-TW')changeLang('zh-CN')changeLang('en')
    changeLang(lang) {
       //切換語言
       this.lang = lang;
       this.$i18n.locale = lang;
       this.$utils.cookie.set('language', lang);
    },

    以上是“vue如何動態(tài)添加store、路由和國際化配置方式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI