fuc-new/doc/node_modules/@vuepress/helper/lib/node/locales/getFullLocaleConfig.js
hellcat 6adbc04d4b 1
2025-10-03 17:17:08 +08:00

68 lines
2.3 KiB
JavaScript

import { deepAssign, fromEntries } from '../../shared/index.js';
import { Logger } from '../utils/index.js';
/**
* Get locale info
*
* 获取本地化信息
*
* @param app - VuePress App / VuePress 应用
* @param logger - Logger / 日志记录器
*
* @returns Array of locale path and language pairs / 本地化路径和语言对的数组
*/
export const getLocaleInfo = (app, logger) => {
const localeEntries = Object.entries(app.options.locales);
if (!localeEntries.length)
return [['/', app.options.lang]];
return localeEntries.map(([path, { lang }]) => {
if (lang)
return [path, lang];
if (app.options.debug) {
;
(logger ?? console).warn(`Locale ${path} is missing lang config, fallback to root lang ${app.options.lang}`);
}
return [path, app.options.lang];
});
};
export const getLocaleData = (info, lang, logger) => {
const isShortLang = !lang.includes('-');
// full search
const localeData = info.find(([langs]) => langs.includes(lang));
// find exact match
if (localeData)
return localeData[1];
if (!isShortLang) {
// find short lang match
const shortLang = lang.split('-')[0];
const shortLocaleData = info.find(([langs]) => langs.includes(shortLang));
if (shortLocaleData)
return shortLocaleData[1];
}
;
(logger ?? console).warn(`${lang} is missing it's i18n config`);
return (
// en-US
(info.find(([langs]) => langs.includes('en-US')) ??
// en
info.find(([langs]) => langs.some((item) => item.startsWith('en'))) ??
// first one
info[0])[1]);
};
/**
* Get final locale config for client
*
* 获取客户端的最终本地化配置
*
* @param options - Configuration options / 配置选项
*
* @returns Final locale config / 最终本地化配置
*/
export const getFullLocaleConfig = ({ app, name, default: defaultLocaleData, config: userLocalesConfig = {}, }) => {
const logger = new Logger(name);
const localeInfo = getLocaleInfo(app, logger);
return fromEntries(localeInfo.map(([localePath, lang]) => [
localePath,
deepAssign({}, getLocaleData(defaultLocaleData, lang, logger), (userLocalesConfig[localePath] ?? {})),
]));
};