Quellcode durchsuchen

✨ feat(i18n): 更新 $t 函数以支持可选参数,增强国际化功能

陈雪 vor 2 Tagen
Ursprung
Commit
db423f451c
1 geänderte Dateien mit 13 neuen und 2 gelöschten Zeilen
  1. 13 2
      src/hook/i18n.ts

+ 13 - 2
src/hook/i18n.ts

@@ -1,12 +1,23 @@
 import { reactive, ref, toRefs, watchEffect } from 'vue'
 import { useI18n, UseI18nOptions } from 'vue-i18n'
 
+type OptionalLastN<
+  T extends any[],
+  N extends number,
+  Acc extends any[] = [],
+> = T['length'] extends N
+  ? [...T, ...Acc]
+  : T extends [...infer Rest, infer Last]
+  ? OptionalLastN<Rest, N, [Last?, ...Acc]>
+  : Acc
+
 export function useStoreI18n(options?: UseI18nOptions) {
   const { t, locale } = useI18n(options)
+
   const keyMap = reactive<Record<string, string>>({})
-  function $t(key: string) {
+  function $t(...[key, ...options]: OptionalLastN<Parameters<typeof t>, 1>) {
     watchEffect(() => {
-      if (locale.value) keyMap[key] = t(key)
+      if (locale.value) keyMap[key] = t(key, ...options)
     })
     return toRefs(keyMap)[key]
   }