美文网首页
2023-08-16

2023-08-16

作者: 缘有言故 | 来源:发表于2023-08-15 19:03 被阅读0次

    工作日记:vue2.7如何使用vue-i18n

    > 版本:

    > vue:2.7.0

    > vue-i18n:8.28.2

    ## 一、下载

    ```javascript

    npm i vue-i18n@8.28.2

    ```

    ## 二、新建

    新建一个文件,例如:lang,项目结构如下:

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/62feddfbb78f4fb89c3d379177bfcd41.png)

    index.js:

    ```javascript

    import Vue from 'vue'

    import VueI18n from 'vue-i18n'

    Vue.use(VueI18n)

    import zh from './zh'

    import tw from './tw'

    import en from './en'

    import vn from './vn'

    import ru from './ru'

    const messages = {

        'zh': zh,

        'tw': tw,

        'en': en,

        'vn': vn,

        'ru': ru

    }

    const i18n = new VueI18n({

        locale: 'zh',

        fallbackLocale: 'zh-CN',

        messages,

    })

    export default i18n

    ```

    设置语言内容,例如:zh.js / en.js

    zh.js:

    ```javascript

    export default {

        setting: {

            setting: '设置',

            ...

        }

    }

    ```

    en.js:

    ```javascript

    export default {

        setting: {

            setting: 'setting',

            ...

        }

    }

    ```

    ....

    ## 三、在main.js引入

    ```javascript

    import i18n from '@/lang'

    new Vue({

      router,

      pinia,

      i18n,

      render: h => h(App)

    }).$mount('#app')

    ```

    ## 四、在html中使用

    在html标签中使用

    ```html

    <NavBar :title="$t('setting.setting')"  bg-color="#FDDEF3"/>

    ```

    在html文本中使用

    ```html

    <p>{{$t('setting.setting')}}</p>

    ```

    ## 五、在js中使用

    ```javascript

    this.$t('setting.setting')

    ```

    但是因为vue.2.7,setup中不可以直接使用this的,所以需要自行封装一个useI18n

    ### 5.1 新建一个vueApi.js

    ```javascript

    import { getCurrentInstance } from 'vue'

    // 访问i18n

    export const useI18n = () => {

        const vm = getCurrentInstance()

        if (!vm) throw new Error('must be called in setup')

        return vm.proxy.$i18n

    }

    ```

    ### 5.2 使用

    可以愉快的使用composition api 啦

    引入:

    ```javascript

    import { useI18n } from '@/utils/vueApi'

    const i18n = useI18n()

    ```

    ## 六、切换语言

    ```html

    <button @click="changeLanguage('zh')">中文</button>

    <button @click="changeLanguage('en')">英文</button>

    ...

    ```

    ```javascript

    const changeLanguage = (e) => {

      i18n.locale = e

    }

    ```

    相关文章

      网友评论

          本文标题:2023-08-16

          本文链接:https://www.haomeiwen.com/subject/qmghmdtx.html