tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 6.6 kB
Source Map (JSON)
{"version":3,"file":"t.mjs","sources":["../../../../src/_common/js/global-config/t.ts"],"sourcesContent":["import { isString } from 'lodash-es';\n\n/**\n * 复数规则判断函数\n * @param count 数量\n * @returns 返回复数形式的索引 (0: zero/none, 1: one, 2: other/many)\n */\nfunction getPluralIndex(count: number): number {\n if (count === 0) return 0; // no items\n if (count === 1) return 1; // one item\n return 2; // multiple items\n}\n\n/**\n * @see https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/config-provider/hooks/useConfig.ts#L48\n * 自定义 t function 可能依赖特定库函数,例如 tdesign-vue-next 中使用了 vue 的 h 函数\n * 因此交由各个类库自行实现\n */\n\n/**\n * 国际化函数,支持复数处理和变量替换\n *\n * 示例用法:\n * 1. 基本变量替换:\n * t('Hello {name}', { name: 'World' }) // => 'Hello World'\n *\n * 2. 复数处理(传入数字):\n * t('no apples | one apple | {count} apples', 0) // => 'no apples'\n * t('no apples | one apple | {count} apples', 1) // => 'one apple'\n * t('no apples | one apple | {count} apples', 5) // => '5 apples'\n *\n * 3. 复合使用:\n * t('no items found | found {count} item | found {count} items', 3, { count: 3 }) // => 'found 3 items'\n */\n\n// 类型重载定义\nexport function t(pattern: string): string;\nexport function t(pattern: string, data: Record<string, any>): string;\nexport function t(pattern: string, count: number): string;\nexport function t(pattern: string, count: number, data: Record<string, any>): string;\nexport function t<T>(pattern: T): string;\n\n/**\n * @param pattern 文本模式,可以是字符串、函数或其他类型\n * @param args 参数列表,支持 (count: number) 或 (count: number, data: object) 或 (data: object)\n * @returns 处理后的文本\n */\nexport function t<T>(pattern: T, ...args: any[]): string {\n if (isString(pattern)) {\n let text = pattern as string;\n let count: number | undefined;\n let data: Record<string, any> = {};\n\n // 解析参数\n if (args.length > 0) {\n const [firstArg, secondArg] = args;\n\n if (typeof firstArg === 'number') {\n // 第一个参数是数字,表示 count\n count = firstArg;\n if (secondArg && typeof secondArg === 'object') {\n // 第二个参数是对象,表示额外的数据\n data = secondArg;\n } else {\n data.count = count; // 若没有提供第二个参数,则将 count 添加到数据中\n }\n } else if (typeof firstArg === 'object' && firstArg !== null) {\n // 第一个参数是对象,表示数据\n data = firstArg;\n }\n }\n\n // 处理复数形式:支持 \"no items | one item | {count} items\" 格式\n if (text.includes('|')) {\n const pluralParts = text.split('|').map((part) => part.trim());\n\n if (typeof count === 'number') {\n // 使用 count 进行复数处理\n const pluralIndex = getPluralIndex(count);\n\n // 根据复数索引选择对应的文本\n if (pluralIndex < pluralParts.length) {\n text = pluralParts[pluralIndex];\n } else {\n // 如果索引超出范围,使用最后一个选项\n text = pluralParts[pluralParts.length - 1];\n }\n } else {\n // 如果没有 count,默认使用第一个选项\n const [firstPart] = pluralParts;\n text = firstPart;\n }\n }\n\n // 处理变量替换:{key} 格式\n if (data && Object.keys(data).length > 0) {\n const regular = /\\{\\s*([\\w-]+)\\s*\\}/g;\n text = text.replace(regular, (match, key) => {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n return String(data[key]);\n }\n return match; // 如果找不到对应的键,保留原始占位符\n });\n }\n\n return text as any;\n }\n\n // 如果不是字符串或函数,返回空字符串\n return '';\n}\n"],"names":["getPluralIndex","count","t","pattern","isString","text","data","_len","arguments","length","args","Array","_key","firstArg","secondArg","_typeof","includes","pluralParts","split","map","part","trim","pluralIndex","_pluralParts","_slicedToArray","firstPart","Object","keys","regular","replace","match","key","prototype","hasOwnProperty","call","String"],"mappings":"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"}