Files
qiming/qiming-mobile/utils/i18n-third-party.uts

52 lines
1.7 KiB
Plaintext

import { reactive } from "vue";
import { DEFAULT_LANG } from "@/constants/i18n.constants";
import { getLocalFallback, toBundleKey } from "@/constants/i18n.local.constants";
export interface UniLoadMoreContentText {
contentdown: string;
contentrefresh: string;
contentnomore: string;
}
interface ThirdPartyLocaleState {
currentLang: string;
}
/**
* 第三方库语言状态适配层。
* 这里不维护独立词典,只缓存当前项目语言,确保所有第三方入口都跟随主 i18n 状态。
*/
export const thirdPartyLocaleState = reactive<ThirdPartyLocaleState>({
currentLang: DEFAULT_LANG,
});
const normalizeThirdPartyLang = (lang: string): string => {
return toBundleKey(lang);
};
/**
* 同步第三方库当前语言。
* 目前先作为统一收口点,后续新增 dayjs / markdown / UI 库时只需要继续往这里扩展。
*/
export const syncThirdPartyLocales = (lang: string) => {
thirdPartyLocaleState.currentLang = normalizeThirdPartyLang(lang);
};
/**
* 获取 `uni-load-more` 组件所需的文案对象。
* 通过显式传入 `content-text`,避免组件内部继续使用自己的默认语言逻辑。
*/
export const getUniLoadMoreContentText = (
overrides: Partial<UniLoadMoreContentText> = {},
): UniLoadMoreContentText => {
const lang = normalizeThirdPartyLang(thirdPartyLocaleState.currentLang);
return {
contentdown:
overrides.contentdown || getLocalFallback(lang, "Mobile.Common.loadMore"),
contentrefresh:
overrides.contentrefresh || getLocalFallback(lang, "Mobile.Page.loadingMore"),
contentnomore:
overrides.contentnomore || getLocalFallback(lang, "Mobile.Common.noMoreData"),
};
};