useI18n.js 664 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { i18n } from '@/plugins/vueI18n'
  2. const getKey = (namespace, key) => {
  3. if (!namespace) {
  4. return key
  5. }
  6. if (key.startsWith(namespace)) {
  7. return key
  8. }
  9. return `${namespace}.${key}`
  10. }
  11. export const useI18n = ( namespace )=> {
  12. const normalFn = {
  13. t: (key) => {
  14. return getKey(namespace, key)
  15. }
  16. }
  17. if (!i18n) {
  18. return normalFn
  19. }
  20. const { t, ...methods } = i18n.global
  21. const tFn = (key, ...arg) => {
  22. if (!key) return ''
  23. if (!key.includes('.') && !namespace) return key
  24. //@ts-ignore
  25. return t(getKey(namespace, key), ...arg)
  26. }
  27. return {
  28. ...methods,
  29. t: tFn
  30. }
  31. }
  32. export const t = (key) => key