Browse Source

fix: I18n

zhengnaiwen_citu 1 year ago
parent
commit
ad653c36e2
2 changed files with 45 additions and 4 deletions
  1. 7 4
      src/config/axios/service.js
  2. 38 0
      src/hooks/web/useI18n.js

+ 7 - 4
src/config/axios/service.js

@@ -7,13 +7,12 @@ import { getToken, getRefreshToken, getTenantId, setToken } from '@/utils/auth'
 // import { getToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth'
 import errorCode from './errorCode'
 
+import { useI18n } from '@/hooks/web/useI18n'
+
 // import { resetRouter } from '@/router'
 // import { deleteUserCache } from '@/hooks/web/useCache'
 
-import { i18n } from '@/plugins/vueI18n'
-
-
-const { t } = i18n.global
+const { t } = useI18n()
 
 const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE
 const { result_code, base_url, request_timeout } = config
@@ -88,6 +87,10 @@ service.interceptors.request.use(
 // response 拦截器
 service.interceptors.response.use(
   async (response) => {
+    // import { i18n } from '@/plugins/vueI18n'
+
+    // console.log(i18n)
+    // const { t } = i18n
     let { data } = response
     const config = response.config
     if (!data) {

+ 38 - 0
src/hooks/web/useI18n.js

@@ -0,0 +1,38 @@
+import { i18n } from '@/plugins/vueI18n'
+
+const getKey = (namespace, key) => {
+  if (!namespace) {
+    return key
+  }
+  if (key.startsWith(namespace)) {
+    return key
+  }
+  return `${namespace}.${key}`
+}
+
+export const useI18n = ( namespace )=> {
+  const normalFn = {
+    t: (key) => {
+      return getKey(namespace, key)
+    }
+  }
+
+  if (!i18n) {
+    return normalFn
+  }
+
+  const { t, ...methods } = i18n.global
+
+  const tFn = (key, ...arg) => {
+    if (!key) return ''
+    if (!key.includes('.') && !namespace) return key
+    //@ts-ignore
+    return t(getKey(namespace, key), ...arg)
+  }
+  return {
+    ...methods,
+    t: tFn
+  }
+}
+
+export const t = (key) => key