import { i18n } from '@/plugins/vueI18n' type I18nGlobalTranslation = { (key: string): string (key: string, locale: string): string (key: string, locale: string, list: unknown[]): string (key: string, locale: string, named: Record): string (key: string, list: unknown[]): string (key: string, named: Record): string } type I18nTranslationRestParameters = [string, any] const getKey = (namespace: string | undefined, key: string) => { if (!namespace) { return key } if (key.startsWith(namespace)) { return key } return `${namespace}.${key}` } export const useI18n = ( namespace?: string ): { t: I18nGlobalTranslation } => { const normalFn = { t: (key: string) => { return getKey(namespace, key) } } if (!i18n) { return normalFn } const { t, ...methods } = i18n.global const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => { if (!key) return '' if (!key.includes('.') && !namespace) return key //@ts-ignore return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters)) } return { ...methods, t: tFn } } export const t = (key: string) => key