@ -1,6 +1,6 @@
|
||||
import { getLocaleByPath } from 'astro:i18n';
|
||||
import { DEFAULT_LOCALE, LOCALES, type Locale } from './config';
|
||||
import { translate } from './dictionary';
|
||||
import { DEFAULT_LOCALE, LOCALES, type Locale } from '@/i18n/config';
|
||||
import { translate } from '@/i18n/dictionary';
|
||||
|
||||
/**
|
||||
* 从 URL 解析语言,委托 Astro 内置的 astro:i18n.getLocaleByPath。
|
||||
@ -29,5 +29,17 @@ export function useTranslations(locale: Locale) {
|
||||
return { t, locale };
|
||||
}
|
||||
|
||||
/**
|
||||
* 一行取「当前语言 + 翻译函数」,干掉每个页面重复的样板:
|
||||
* const { locale, t } = getI18n(Astro)
|
||||
* 内部用 Astro.currentLocale(与 Layout 判断语言的方式一致),
|
||||
* 取不到时回退默认语言。参数只要求含 currentLocale 字段,避免耦合 Astro 全局类型。
|
||||
*/
|
||||
export function getI18n(Astro: { currentLocale?: string | undefined }) {
|
||||
const locale = (Astro.currentLocale as Locale) ?? DEFAULT_LOCALE;
|
||||
const { t } = useTranslations(locale);
|
||||
return { locale, t };
|
||||
}
|
||||
|
||||
export { LOCALES, DEFAULT_LOCALE };
|
||||
export type { Locale };
|
||||
|
||||
Reference in New Issue
Block a user