{"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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"}