1.1.4 • Published 5 months ago

vue-data-i18n v1.1.4

Weekly downloads
1
License
ISC
Repository
-
Last release
5 months ago

vue-data-i18n

基于vue-data的vue国际化插件

使用

npm install vue-data-i18n -D
import vuedatai18n from 'vue-data-i18n'

this.$setLanguage('zh');//设置语言为zh

国际化配置文件

例如入口文件同目录下有 i18n.json

{
  "config": ["cn", "en"], //config数组第一个值将会默认作为翻译时的key来和$t的参数匹配
  "data": [
    ["()中()国()", "()china()()"],
    ["${不显示key}", "buxianshikey"] 
  ]
}

入口js文件

import i18nData from './i18n.json'
Vue.use(vuedatai18n, i18nData) // i18nData是json字符串

script标签

data() {
  return {
    xx: '123',
    yy: 'sss',
    zz: 'ddd'
  }
},
console.log(this.$t("(xx)中(yy)国(zz)")) // 打印 中文:123中sss国ddd,英文:123chinasssddd

template标签

<div>{{$t("(xx)中(yy)国(zz)")}}</div> // 页面展示:中文:不显示,英文:buxianshikey

非vue实例对象的属性将会当成普通字符串原样输出

比如:

console.log(this.$t("(xx)中(yy)国(zz1)")) // 打印 中文:123中sss国zz1,英文:123chinassszz1
<div>{{$t("(xx)中(yy)国(zz1)")}}</div> // 页面展示:中文:123中sss国zz1,英文:123chinassszz1

如果当前vue实例没有的属性会再往全局对象中取找,如果找到了就取全局属性值,再没找到就当成字符串输出。

${xxx}

<div>{{$t("${不显示key}")}}</div> // 页面展示:中文:123中sss国zz1,英文:123chinassszz1

同名冲突处理

翻译文件中翻译主键值有可能会有不同的多语言翻译的情况,比如:

{
  "config": ["cn", "en"], //config数组第一个值将会默认作为翻译时的key来和$t的参数匹配
  "data": [
    ["好的", "yes"], 
    ["好的", "ok"] // 只会最后一次出现的key生效
  ]
}

要想都生效的话就需要用到中括号来区分了,如下:

{
  "config": ["cn", "en"], //config数组第一个值将会默认作为翻译时的key来和$t的参数匹配
  "data": [
    ["好的[1]", "yes"], 
    ["好的[2]", "ok"] // 只会最后一次出现的key生效
  ]
}

使用的时候同样要把中括号带上去选择:

console.log(this.$t("好的[1]")) // 打印 中文:好的,英文:yes
<div>{{$t("好的[2]")}}</div> // 页面展示:中文:好的,英文:ok

中括号是不会出现在翻译结果里面的。

第三方库国际化

可以通过语言切换回调方法做第三方国际化,比如:

import Vue from 'vue'
import { Menu, Submenu, MenuItem } from 'element-ui'
import vuedata from 'vue-data'
import vuedatai18n from 'vue-data-i18n'
import i18nData from './i18n.json'
import { beforeSend, beforeReceive } from './assets/util/ajaxHandler.js'

import App from './App.vue'
import router from './park-router'

import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'

Vue.use(vuedata)
Vue.use(vuedatai18n, {
  data: i18nData.data,
  config: i18nData.config,
  callback: function(newV, oldV) {
    // 设置语言
    if(newV === 'cn') {
      locale.use(zhLocale)
    } else {
      locale.use(enLocale)
    }
  }
})
Vue.component(Menu.name, Menu)
Vue.component(Submenu.name, Submenu)
Vue.component(MenuItem.name, MenuItem)

多个翻译文件

---src
----assets
-----languages
------cn.json
------en.json

en.json

{
  "中国":"china"
}

默认的语言可以不用创建json文件,如果不存在默认的语言配置文件的话就会把其他配置文件的key作为值,比如cn.json

非vue文件使用

在非vue文件中可以使用window.VueData.$t来做国际化操作。

1.1.4

5 months ago

1.1.3

8 months ago

1.1.2

9 months ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.10

1 year ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago