38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
export type Lang = 'zh' | 'en' | 'ja' | 'fr';
|
|
|
|
export const LANGS: Lang[] = ['zh', 'en', 'ja', 'fr'];
|
|
|
|
export const DEFAULT_LANG: Lang = 'zh';
|
|
|
|
export const htmlLang: Record<Lang, string> = {
|
|
zh: 'zh-CN',
|
|
en: 'en',
|
|
ja: 'ja',
|
|
fr: 'fr',
|
|
};
|
|
|
|
export const langLabels: Record<Lang, string> = {
|
|
zh: '中文',
|
|
en: 'English',
|
|
ja: '日本語',
|
|
fr: 'Français',
|
|
};
|
|
|
|
export function isLang(value: string | undefined): value is Lang {
|
|
return value !== undefined && (LANGS as string[]).includes(value);
|
|
}
|
|
|
|
/** 站内路径(不含语言前缀),首页为空字符串 */
|
|
export type RouteKey = '' | 'teaching-philosophy' | 'curriculum' | 'faculty' | 'about';
|
|
|
|
export function hrefFor(lang: Lang, segment: RouteKey): string {
|
|
const prefix = lang === DEFAULT_LANG ? '' : `/${lang}`;
|
|
if (!segment) return prefix || '/';
|
|
return `${prefix}/${segment}`;
|
|
}
|
|
|
|
/** 从 [...lang] rest 参数解析语言,undefined 时返回默认语言 */
|
|
export function resolveLang(param: string | undefined): Lang {
|
|
return isLang(param) ? param : DEFAULT_LANG;
|
|
}
|