install.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { warn } from './util'
  2. import extend from './extend'
  3. import defineMixin from './mixin'
  4. import interpolationComponent from './components/interpolation'
  5. import numberComponent from './components/number'
  6. import { bind, update, unbind } from './directive'
  7. export let Vue
  8. export function install (_Vue, options = { bridge: false }) {
  9. /* istanbul ignore if */
  10. if (process.env.NODE_ENV !== 'production' && install.installed && _Vue === Vue) {
  11. warn('already installed.')
  12. return
  13. }
  14. install.installed = true
  15. Vue = _Vue
  16. const version = (Vue.version && Number(Vue.version.split('.')[0])) || -1
  17. /* istanbul ignore if */
  18. if (process.env.NODE_ENV !== 'production' && version < 2) {
  19. warn(`vue-i18n (${install.version}) need to use Vue 2.0 or later (Vue: ${Vue.version}).`)
  20. return
  21. }
  22. extend(Vue)
  23. Vue.mixin(defineMixin(options.bridge))
  24. Vue.directive('t', { bind, update, unbind })
  25. Vue.component(interpolationComponent.name, interpolationComponent)
  26. Vue.component(numberComponent.name, numberComponent)
  27. // use simple mergeStrategies to prevent i18n instance lose '__proto__'
  28. const strats = Vue.config.optionMergeStrategies
  29. strats.i18n = function (parentVal, childVal) {
  30. return childVal === undefined
  31. ? parentVal
  32. : childVal
  33. }
  34. }