从 v5.x 迁移

全局配置

lang 已被替换

使用 VueI18n 类构造函数 locale 选项或 VueI18n#locale 属性:

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. // ...
  4. })
  5. const app = new Vue({ i18n }).$mount('#app')
  6. // 更改 locale
  7. i18n.locale = 'ja'
  8. // 或者
  9. app.$i18n.locale = 'ja'

fallbackLang 已被替换

使用 VueI18n 类构造函数 fallbackLocale 选项或 VueI18n#fallbackLocale 属性:

  1. const i18n = new VueI18n({
  2. locale: 'ja',
  3. fallbackLocale: 'en',
  4. // ...
  5. })
  6. const app = new Vue({ i18n }).$mount('#app')
  7. // 更改 fallback locale
  8. i18n.fallbackLocale = 'zh'
  9. // 或者
  10. app.$i18n.fallbackLocale = 'zh'

missingHandler 已被替换

使用 VueI18n 类构造函数 missing 选项或 VueI18n#missing 属性:

  1. const i18n = new VueI18n({
  2. // ...
  3. missing: (locale, key, vm) => {
  4. // 处理翻译缺失
  5. },
  6. // ...
  7. })
  8. const app = new Vue({ i18n }).$mount('#app')
  9. // 改变丢失的处理函数
  10. i18n.missing = (locale, key, vm) => {
  11. // 处理翻译缺失
  12. }
  13. // or
  14. app.$i18n.missing = (locale, key, vm) => {
  15. // 处理翻译缺失
  16. }

i18nFormatter 已被替换

使用 VueI18n 类构造函数 formatter 选项或 VueI18n#formatter 属性:

  1. class CustomFormatter {
  2. format (message, ...values) {
  3. // 一些渲染逻辑
  4. return 'something string'
  5. }
  6. }
  7. const i18n = new VueI18n({
  8. // ...
  9. formatter: new CustomFormatter(),
  10. // ...
  11. })
  12. const app = new Vue({ i18n }).$mount('#app')
  13. // 更改自定义格式化程序
  14. i18n.formatter = {
  15. format: (message, ...values) => {
  16. // 一些渲染逻辑
  17. return 'something string'
  18. }
  19. }
  20. // or
  21. app.$i18n.formatter = {
  22. format: (message, ...values) => {
  23. // 一些渲染逻辑
  24. return 'something string'
  25. }
  26. }

全局方法

Vue.locale 已被替换

使用 VueI18n 类构造函数 messages 选项,或者使用 VueI18n#GetLocaleMessage / VueI18n#setLocaleMessage 方法:

  1. const i18n = new VueI18n({
  2. // ...
  3. messages: {
  4. en: {
  5. hello: 'hello world',
  6. // ...
  7. },
  8. ja: {
  9. hello: 'こんにちは、世界',
  10. // ...
  11. }
  12. },
  13. // ...
  14. })
  15. const app = new Vue({ i18n }).$mount('#app')
  16. // 获取 locale message
  17. const en = i18n.getLocaleMessage('en')
  18. en.greeting = 'hi!'
  19. // 设置 locale message
  20. i18n.setLocaleMessage('en', en)
  21. // 或者
  22. const ja = app.$i18n.getLocaleMessage('ja')
  23. ja.greeting = 'やあ!'
  24. app.$i18n.setLocaleMessage('ja', ja)

Vue.t 已被替换

使用 VueI18n#t 方法:

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. messages: {
  4. en: {
  5. greeting: 'hi {name}'
  6. }
  7. },
  8. // ...
  9. })
  10. i18n.t('greeting', { name: 'kazupon' }) // -> hi kazupon

Vue.tc 已被替换

使用 VueI18n#tc 方法:

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. messages: {
  4. en: {
  5. apple: 'no apples | one apple | {count} apples'
  6. }
  7. },
  8. // ...
  9. })
  10. const count = 10
  11. i18n.tc('apple', count, { count }) // -> 10 apples

Vue.te 已被替换

使用 VueI18n#te 方法:

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. messages: {
  4. en: {
  5. hello: 'hello world'
  6. }
  7. },
  8. // ...
  9. })
  10. i18n.te('hello') // -> true
  11. i18n.te('hallo', 'ja') // -> false
  12. i18n.te('hello') // -> true

构造函数选项

locales 已被替换

使用 messagesVueI18n 类的构造函数的选项,或 messagesi18n 选项 (针对组件选项):

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. messages: {
  4. en: {
  5. greeting: 'hi {name}'
  6. }
  7. },
  8. // ...
  9. })
  10. // 针对组件选项
  11. const Component1 = {
  12. i18n: {
  13. messages: {
  14. en: {
  15. title: 'Title1'
  16. }
  17. }
  18. }
  19. }

实例属性

$lang 已被替换

使用 VueI18n#locale 属性:

  1. const i18n = new VueI18n({
  2. locale: 'en',
  3. // ...
  4. })
  5. const app = new Vue({ i18n }).$mount('#app')
  6. // 更改 locale
  7. i18n.locale = 'ja'
  8. // 或者
  9. app.$i18n.locale = 'ja'

特性

已删除动态语言环境

如果需要动态设置语言环境信息,则应实现以下内容:

  1. const i18n = new VueI18n({ locale: 'en' })
  2. const app = new Vue({
  3. i18n,
  4. data: { loading: '' }
  5. }).$mount('#app')
  6. function loadLocaleMessage (locale, cb) {
  7. return fetch('/locales/' + locale, {
  8. method: 'get',
  9. headers: {
  10. 'Accept': 'application/json',
  11. 'Content-Type': 'application/json'
  12. }
  13. }).then((res) => {
  14. return res.json()
  15. }).then((json) => {
  16. if (Object.keys(json).length === 0) {
  17. return Promise.reject(new Error('locale empty !!'))
  18. } else {
  19. return Promise.resolve(json)
  20. }
  21. }).then((message) => {
  22. cb(null, message)
  23. }).catch((error) => {
  24. cb(error)
  25. })
  26. }
  27. app.loading = 'loading ...'
  28. loadLocaleMessage('en', (err, message) => {
  29. if (err) {
  30. app.loading = ''
  31. console.error(err)
  32. return
  33. }
  34. i18n.setLocaleMessage('en', message)
  35. app.loading = ''
  36. })