从 v5.x 迁移

全局配置

lang 已被替换

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

  const i18n = new VueI18n({
    locale: 'en',
    // ...
  })
  const app = new Vue({ i18n }).$mount('#app')

  // 更改 locale
  i18n.locale = 'ja'
  // 或者
  app.$i18n.locale = 'ja'

fallbackLang 已被替换

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

  const i18n = new VueI18n({
    locale: 'ja',
    fallbackLocale: 'en',
    // ...
  })
  const app = new Vue({ i18n }).$mount('#app')

  // 更改 fallback locale
  i18n.fallbackLocale = 'zh'
  // 或者
  app.$i18n.fallbackLocale = 'zh'

missingHandler 已被替换

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

const i18n = new VueI18n({
  // ...
  missing: (locale, key, vm) => {
    // 处理翻译缺失
  },
  // ...
})
const app = new Vue({ i18n }).$mount('#app')

// 改变丢失的处理函数
i18n.missing = (locale, key, vm) => {
  // 处理翻译缺失
}
// or
app.$i18n.missing = (locale, key, vm) => {
  // 处理翻译缺失
}

i18nFormatter 已被替换

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

  class CustomFormatter {
    format (message, ...values) {
      // 一些渲染逻辑
      return 'something string'
    }
  }

  const i18n = new VueI18n({
    // ...
    formatter: new CustomFormatter(),
    // ...
  })
  const app = new Vue({ i18n }).$mount('#app')

  // 更改自定义格式化程序
  i18n.formatter = {
    format: (message, ...values) => {
      // 一些渲染逻辑
      return 'something string'
    }
  }
  // or
  app.$i18n.formatter = {
    format: (message, ...values) => {
      // 一些渲染逻辑
      return 'something string'
    }
  }

全局方法

Vue.locale 已被替换

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

  const i18n = new VueI18n({
    // ...
    messages: {
      en: {
        hello: 'hello world',
        // ...
      },
      ja: {
        hello: 'こんにちは、世界',
        // ...
      }
    },
    // ...
  })
  const app = new Vue({ i18n }).$mount('#app')

  // 获取 locale message
  const en = i18n.getLocaleMessage('en')
  en.greeting = 'hi!'
  // 设置 locale message
  i18n.setLocaleMessage('en', en)
  // 或者
  const ja = app.$i18n.getLocaleMessage('ja')
  ja.greeting = 'やあ!'
  app.$i18n.setLocaleMessage('ja', ja)

Vue.t 已被替换

使用 VueI18n#t 方法:

const i18n = new VueI18n({
  locale: 'en',
  messages: {
    en: {
      greeting: 'hi {name}'
    }
  },
  // ...
})

i18n.t('greeting', { name: 'kazupon' }) // -> hi kazupon

Vue.tc 已被替换

使用 VueI18n#tc 方法:

const i18n = new VueI18n({
  locale: 'en',
  messages: {
    en: {
      apple: 'no apples | one apple | {count} apples'
    }
  },
  // ...
})

const count = 10
i18n.tc('apple', count, { count }) // -> 10 apples

Vue.te 已被替换

使用 VueI18n#te 方法:

const i18n = new VueI18n({
  locale: 'en',
  messages: {
    en: {
      hello: 'hello world'
    }
  },
  // ...
})

i18n.te('hello') // -> true
i18n.te('hallo', 'ja') // -> false
i18n.te('hello') // -> true

构造函数选项

locales 已被替换

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

const i18n = new VueI18n({
  locale: 'en',
  messages: {
    en: {
      greeting: 'hi {name}'
    }
  },
  // ...
})

// 针对组件选项
const Component1 = {
  i18n: {
    messages: {
      en: {
        title: 'Title1'
      }
    }
  }
}

实例属性

$lang 已被替换

使用 VueI18n#locale 属性:

const i18n = new VueI18n({
  locale: 'en',
  // ...
})
const app = new Vue({ i18n }).$mount('#app')

// 更改 locale
i18n.locale = 'ja'
// 或者
app.$i18n.locale = 'ja'

特性

已删除动态语言环境

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

const i18n = new VueI18n({ locale: 'en' })
const app = new Vue({
  i18n,
  data: { loading: '' }
}).$mount('#app')

function loadLocaleMessage (locale, cb) {
  return fetch('/locales/' + locale, {
    method: 'get',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
  }).then((res) => {
    return res.json()
  }).then((json) => {
    if (Object.keys(json).length === 0) {
      return Promise.reject(new Error('locale empty !!'))
    } else {
      return Promise.resolve(json)
    }
  }).then((message) => {
    cb(null, message)
  }).catch((error) => {
    cb(error)
  })
}

app.loading = 'loading ...'
loadLocaleMessage('en', (err, message) => {
  if (err) {
    app.loading = ''
    console.error(err)
    return
  }
  i18n.setLocaleMessage('en', message)
  app.loading = ''
})
最近一次更新: 2019-3-27 19:07:32