基於Vue+ElementUI架構的前端國際化解決方案


1.項目目錄結構

├── build                      構建相關配置文件

 |     |── index.js             webpack的基礎配置入口

├── mock                     項目mock 模擬數據 在后端沒有提供接口的情況下可以攔截自己的數據進行開發

├── public                     靜態資源

 │   │── favicon.ico           favicon圖標

 │   └── index.html           html模板,主html入口

├── dist                         項目構建后生成的目錄結構

 |     |── index.html

 |     |── static

 |     |── css

 |     |── js

 |     |── images

├── src                      源代碼

 │   ├── api                  存放數據請求的接口,目錄下的js命名(模塊名.js)

 │   ├── assets               存放靜態資源,如字體,圖片,公共樣式,js等

 │   ├── components         全局公用組件 如有一個獨立功能需要建立多個組件請建立文件夾

 │   ├── directive             全局指令

 │   ├── filters                 全局 filter

 │   ├── icons                 項目所有 svg icons

 │   ├── language           多語言配置

 │   ├── layout               全局 layout,框架布局目錄

 │   ├── router               路由

 │   ├── store                 全局 store管理 VueX目錄

 │   ├── styles               全局樣式

 │   ├── utils                  全局公用方法

 │   ├── views                 views 所有頁面 主要用於存放導航或者側邊欄,路由配置成嵌套路由即可存在導航或側邊欄

 │   ├── App.vue             入口頁面

 │   ├── main.js              入口文件 加載組件 初始化等

 │   └── permission.js         權限管理

├── tests                     測試

├── .env.xxx                  環境變量配置,測試,線上等

├── .eslintrc.js                  eslint 配置項

├── .babelrc                  babel-loader 配置

├── .travis.yml                自動化CI配置

├── vue.config.js              vue-cli 配置

├── postcss.config.js           postcss 配置

└── package.json               package.json,依賴安裝及版本

2.安裝多語言模塊  npm install vue-i18n --save

創建目錄 /src/language,並分別創建文件 en.json、index.js、lang.js、zh.json,以中英文語言切換為例,如果需要增加其他語言,可增加相應的 .json文件即可

├── src                      源代碼

 │   ├── language           多語言配置目錄

 │   │   │── index.js          多語言核心入口文件

 │   │   │── lang.js           存儲用戶的語言選擇

 │   │   │── en.json          中文配置文件

 │   │   │── zh.json          英文配置文件

......

/src/language/index.js 文件的內容如下:

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import LangStorage from './lang'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'

Vue.use(VueI18n)


const DEFAULT_LANG = 'zh'
const LOCALE_KEY = 'localeLanguage'
const locales = {
    zh: Object.assign(require('./zh.json'), zhLocale),
    en: Object.assign(require('./en.json'), enLocale)
}
const i18n new VueI18n({
    locale: LangStorage.getLang('zh'),
    messages: locales
})
export const setup = lang => {
    if (lang === undefined) {
        lang = window.localStorage.getItem(LOCALE_KEY)
        if (locales[lang] === undefined) {
            lang = DEFAULT_LANG
        }
    }
    console.log(lang)
    window.localStorage.setItem(LOCALE_KEY, lang)
    Object.keys(locales).forEach(lang => {
        document.body.classList.remove(`lang-${lang}`)
    })
    document.body.classList.add(`lang-${lang}`)
    document.body.setAttribute('lang', lang)
    Vue.config.lang = lang
    i18n.locale = lang
}
window.i18n = i18n
export default i18n

/src/language/index.js 文件的內容如下:

export default {
    setLang (lang) {
        window.localStorage.setItem('user_lang', lang)
    },
    getLang (defaultLang) {
        const localLang = window.localStorage.getItem('user_lang')
        if (localLang === null) {
            return defaultLang
        } else {
            return localLang
        }
    }
}

/src/language/zh.json 文件的內容如下:

{
    "main": {
        "hello": "你好"
    },
    "Form": "表單",
    "router": {
        "maybe": "也許"
    }
}

/src/language/en.json 文件的內容如下:

{
    "main": {
        "hello": "Hello"
    },
    "Form": "Form",
    "router": {
        "maybe": "Maybe"
    }
}

/src/main.js中新增代碼如下:

import i18n from './language'

Vue.use(ElementUI, {
    i18n: (key, value) => i18n.t(key, value)
})

new Vue({
    el: '#app',
    i18n,
    router,
    store,
    render: h => h(App)
})

3.模板中使用

<el-button @click="changeLanguage">中英切換</el-button>

<div>{{$t("main.hello")}}</div>

......

import { setup } from '@/language/index.js'

import LangStorage from '@/language/lang'

methods:{
            changeLanguage () {
                if (this.$i18n.locale === 'en') {
                    setup('zh')
                } else {
                    setup('en')
                }
                LangStorage.setLang(this.$i18n.locale)
            }

}

點擊按鈕即可查看切換效果~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM