Files
2026-09-24 16:25:22 +08:00

417 lines
16 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 统一类型定义 - 替换联合类型
export type StringOrNull = string | null
export type NumberOrNull = number | null
export type StringOrNumber = string | number
export type StringOrNumberOrNull = string | number | null
export type DateOrNumberOrString = Date | number | string
export type UTSJSONObjectOrNull = UTSJSONObject | null
export type UTSJSONObjectOrArray = UTSJSONObject | Array<any>
export type AnyOrNull = any | null
export type StringOrMessageFunction = string | MessageFunction
export type StringOrVoid = string | void
export type GetAnyType = (obj : AnyOrNull) => AnyOrNull
export type I18nOptionsOrNull = I18nOptions | null
export type NumberFormatOrNull = NumberFormat | null
export type DateTimeFormatOrNull = DateTimeFormat | null
export type GetAnyTypeOrNull = GetAnyType | null
/**
* 警告处理器类型 - 用于处理国际化过程中的警告信息
* @param msg 警告消息内容
* @param err 可选的错误对象
*/
export type WarnHandler = (msg : StringOrNumberOrNull, err ?: Error) => void
/**
* 基础复数规则函数类型 - 定义基本的复数形式选择逻辑
* @param choice 数量值
* @param choicesLength 可选择的复数形式数量
* @returns 选择的复数形式索引
*/
export type BasePluralRule = (choice : number, choicesLength : number) => number
/**
* 复数规则类型 - 扩展的复数规则,支持回退到原始规则
* @param choice 数量值
* @param choicesLength 可选择的复数形式数量
* @param orgRule 可选的原始复数规则
* @returns 选择的复数形式索引
*/
export type PluralRule = (choice : number, choicesLength : number, orgRule ?: BasePluralRule) => number
/**
* 消息上下文类型 - 包含消息处理所需的所有上下文信息
*/
export type MessageContext = {
/** 列表参数 */
list : Array<any>
/** 命名参数对象 */
named : UTSJSONObject
/** 复数索引 */
pluralIndex : number
/** 复数规则函数 */
pluralRule ?: PluralRule
/** 原始复数规则函数 */
orgPluralRule ?: BasePluralRule
/** 字符串修饰器函数 */
modifier : (str : string) => string
/** 消息内容或消息函数 */
message : StringOrMessageFunction
/** 消息类型 */
type : string
/** 插值函数 */
interpolate : (val : any) => string
/** 值标准化函数 */
normalize : (values : Array<any>) => Array<any>
/** 参数值数组 */
values : Array<any>
}
/**
* 消息函数类型 - 接收上下文并返回格式化后的字符串
* @param ctx 消息上下文
* @returns 格式化后的消息字符串
*/
export type MessageFunction = (ctx : MessageContext) => string
/**
* 消息函数返回值类型
*/
export type MessageFunctionReturn = StringOrNumber
/**
* 数字格式化选项类型 - 基于 ECMA-402 Intl.NumberFormat 标准
*/
export type NumberFormat = {
/** 数字样式:'decimal'(十进制)、'currency'(货币)、'percent'(百分比) */
style ?: string
/** 货币代码,如 'USD'、'EUR'、'CNY' */
currency ?: string
/** 本地化代码 */
local ?: string
/** 货币显示方式:'symbol'(符号)、'code'(代码)、'name'(名称) */
currencyDisplay ?: string
/** 是否使用千分位分组 */
useGrouping ?: boolean
/** 最小整数位数 */
minimumIntegerDigits ?: number
/** 最小小数位数 */
minimumFractionDigits ?: number
/** 最大小数位数 */
maximumFractionDigits ?: number
/** 最小有效数字位数 */
minimumSignificantDigits ?: number
/** 最大有效数字位数 */
maximumSignificantDigits ?: number
}
/**
* 数字格式化选项类型(必填版本)- 所有字段都是必需的
*/
export type NumberFormatOpts = {
/** 数字样式 */
style : string
/** 本地化代码 */
local : string
/** 货币代码 */
currency : string
/** 货币显示方式 */
currencyDisplay : string
/** 是否使用千分位分组 */
useGrouping : boolean
/** 最小整数位数 */
minimumIntegerDigits : number
/** 最小小数位数 */
minimumFractionDigits : number | null
/** 最大小数位数 */
maximumFractionDigits : number | null
/** 最小有效数字位数 */
minimumSignificantDigits : number | null
/** 最大有效数字位数 */
maximumSignificantDigits : number | null
}
/**
* 数字格式化配置映射 - 语言代码 -> 格式名称 -> 格式配置
*/
export type NumberFormats = Map<string, Map<string, NumberFormat>>
/**
* 日期时间格式化选项类型 - 基于 ECMA-402 Intl.DateTimeFormat 标准
*/
export type DateTimeFormat = {
/** 本地化匹配算法:'lookup' 或 'best fit' */
localeMatcher ?: string
/** 本地化代码 */
local ?: string
/** 日历系统,如 'gregory'、'chinese'、'islamic'、'buddhist'、'coptic'、'dangi'、'ethioaa'、'ethiopic'、'hebrew'、'indian'、'iso8601'、'japanese'、'persian'、'roc' */
calendar ?: string
/** 数字系统,如 'arab'、'arabext'、'bali'、'beng'、'deva'、'fullwide'、'gujr'、'guru'、'hanidec'、'khmr'、'knda'、'laoo'、'latn'、'limb'、'mlym'、'mong'、'mymr'、'orya'、'tamldec'、'telu'、'thai'、'tibt' */
numberingSystem ?: string
/** 时区标识符,如 'UTC'、'Asia/Shanghai'、'America/New_York' */
timeZone ?: string
/** 是否使用12小时制 */
hour12 ?: boolean
/** 小时周期:'h11'(0-11 with AM/PM)、'h12'(1-12 with AM/PM)、'h23'(0-23)、'h24'(1-24) */
hourCycle ?: string
/** 格式匹配算法:'basic' 或 'best fit' */
formatMatcher ?: string
/** 日期分隔符:用于连接年月日的字符,如 '-'、'/'、'.' 等。设置后将输出纯数字格式(如 2025-5-3),忽略语言默认的文字后缀 */
dateSeparator ?: string
/** 星期显示:'long'(Monday)、'short'(Mon)、'narrow'(M) */
weekday ?: string
/** 纪元显示:'long'(Anno Domini)、'short'(AD)、'narrow'(A) */
era ?: string
/** 年份显示:'numeric'(2023)、'2-digit'(23) */
year ?: string
/** 月份显示:'numeric'(1)、'2-digit'(01)、'long'(January)、'short'(Jan)、'narrow'(J) */
month ?: string
/** 日期显示:'numeric'(1)、'2-digit'(01) */
day ?: string
/** 时段显示:'long'(in the morning)、'short'(AM)、'narrow'(a) */
dayPeriod ?: string
/** 小时显示:'numeric'(1)、'2-digit'(01) */
hour ?: string
/** 分钟显示:'numeric'(1)、'2-digit'(01) */
minute ?: string
/** 秒显示:'numeric'(1)、'2-digit'(01) */
second ?: string
/** 小数秒位数:0-3,控制毫秒显示精度 */
fractionalSecondDigits ?: number
/** 时区名称显示:'long'(Pacific Standard Time)、'short'(PST)、'shortOffset'(GMT-8)、'longOffset'(GMT-08:00)、'shortGeneric'(PT)、'longGeneric'(Pacific Time) */
timeZoneName ?: string
/** 日期样式:'full'、'long'、'medium'、'short' - 与单独的日期组件选项互斥 */
dateStyle ?: string
/** 时间样式:'full'、'long'、'medium'、'short' - 与单独的时间组件选项互斥 */
timeStyle ?: string
}
export type DateTimeFormatReal = {
/** 本地化匹配算法:'lookup' 或 'best fit' */
localeMatcher : string
/** 本地化代码 */
local : string
/** 日历系统,如 'gregory'、'chinese'、'islamic'、'buddhist'、'coptic'、'dangi'、'ethioaa'、'ethiopic'、'hebrew'、'indian'、'iso8601'、'japanese'、'persian'、'roc' */
calendar : string
/** 数字系统,如 'arab'、'arabext'、'bali'、'beng'、'deva'、'fullwide'、'gujr'、'guru'、'hanidec'、'khmr'、'knda'、'laoo'、'latn'、'limb'、'mlym'、'mong'、'mymr'、'orya'、'tamldec'、'telu'、'thai'、'tibt' */
numberingSystem : string
/** 时区标识符,如 'UTC'、'Asia/Shanghai'、'America/New_York' */
timeZone : string
/** 是否使用12小时制 */
hour12 : boolean
/** 小时周期:'h11'(0-11 with AM/PM)、'h12'(1-12 with AM/PM)、'h23'(0-23)、'h24'(1-24) */
hourCycle : string
/** 格式匹配算法:'basic' 或 'best fit' */
formatMatcher : string
/** 日期分隔符:用于连接年月日的字符,如 '-'、'/'、'.' 等。设置后将输出纯数字格式(如 2025-5-3),忽略语言默认的文字后缀 */
dateSeparator : string
/** 星期显示:'long'(Monday)、'short'(Mon)、'narrow'(M) */
weekday : string
/** 纪元显示:'long'(Anno Domini)、'short'(AD)、'narrow'(A) */
era : string
/** 年份显示:'numeric'(2023)、'2-digit'(23) */
year : string
/** 月份显示:'numeric'(1)、'2-digit'(01)、'long'(January)、'short'(Jan)、'narrow'(J) */
month : string
/** 日期显示:'numeric'(1)、'2-digit'(01) */
day : string
/** 时段显示:'long'(in the morning)、'short'(AM)、'narrow'(a) */
dayPeriod : string
/** 小时显示:'numeric'(1)、'2-digit'(01) */
hour : string
/** 分钟显示:'numeric'(1)、'2-digit'(01) */
minute : string
/** 秒显示:'numeric'(1)、'2-digit'(01) */
second : string
/** 小数秒位数:0-3,控制毫秒显示精度 */
fractionalSecondDigits : number
/** 时区名称显示:'long'(Pacific Standard Time)、'short'(PST)、'shortOffset'(GMT-8)、'longOffset'(GMT-08:00)、'shortGeneric'(PT)、'longGeneric'(Pacific Time) */
timeZoneName : string
/** 日期样式:'full'、'long'、'medium'、'short' - 与单独的日期组件选项互斥 */
dateStyle : string
/** 时间样式:'full'、'long'、'medium'、'short' - 与单独的时间组件选项互斥 */
timeStyle : string
}
/**
* 日期时间格式化配置映射 - 语言代码 -> 格式名称 -> 格式配置
*/
export type DateTimeFormats = Map<string, Map<string, DateTimeFormat>>
/**
* I18n配置选项类型(可选版本)- 用于初始化国际化实例
*/
export type I18nOptions = {
/** 当前语言代码,如 'en-US'、'zh-CN' */
locale ?: string
/** 回退语言代码,当当前语言缺少翻译时使用 */
fallbackLocale ?: string
/** 翻译消息对象,按语言代码组织 */
messages ?: UTSJSONObject
/** 日期时间格式化配置 */
datetimeFormats ?: DateTimeFormats
/** 数字格式化配置 */
numberFormats ?: NumberFormats
/** 字符串修饰器映射 */
modifiers ?: Map<string, MessageFunction>
/** 复数规则映射,按语言代码组织 */
pluralRules ?: Map<string, PluralRule>
/** 缺失翻译处理函数 */
missing ?: ((locale : string, key : string, instance ?: any, type ?: string) => StringOrVoid) | null
/** 是否显示缺失翻译警告 */
missingWarn ?: boolean
/** 是否显示回退语言警告 */
fallbackWarn ?: boolean
/** 是否回退到根实例 */
fallbackRoot ?: boolean
/** 是否启用回退格式化 */
fallbackFormat ?: boolean
/** 是否允许未解析的翻译键 */
unresolving ?: boolean
/** 翻译后处理函数 */
postTranslation ?: ((str : string, key : string) => string) | null
/** 是否警告HTML消息 */
warnHtmlMessage ?: boolean
/** 是否转义参数 */
escapeParameter ?: boolean
/** 是否继承父级语言设置 */
inheritLocale ?: boolean
/** 警告处理器 */
warnHandler ?: WarnHandler
/** 默认复数规则 */
pluralRule ?: PluralRule
/** 是否全局注入 */
globalInjection ?: boolean
/** 是否允许组合式API */
allowComposition ?: boolean
/** 是否使用遗留模式 */
legacy ?: boolean
}
/**
* I18n配置选项类型(必填版本)- 内部使用的完整配置对象
* 参考语言代码标准:https://xnxy.github.io/2024/06/11/%E5%9B%BD%E9%99%85%E5%8C%96%E4%B8%AD%E5%B8%B8%E7%94%A8BCP-47%20Code%E5%92%8C%E8%AF%AD%E8%A8%80%E5%AF%B9%E7%85%A7%E8%A1%A8/
*/
export type I18nOptionsReally = {
/** 当前语言代码,如 'en-US'、'zh-CN' */
locale : string
/** 回退语言代码,当当前语言缺少翻译时使用 */
fallbackLocale : string
/** 翻译消息对象,按语言代码组织 */
messages : UTSJSONObject
/** 日期时间格式化配置 */
datetimeFormats : DateTimeFormats
/** 数字格式化配置 */
numberFormats : NumberFormats
/** 字符串修饰器映射 */
modifiers : Map<string, MessageFunction>
/** 复数规则映射,按语言代码组织 */
pluralRules : Map<string, PluralRule>
/** 缺失翻译处理函数 */
missing : ((locale : string, key : string, instance ?: any, type ?: string) => StringOrVoid) | null
/** 是否显示缺失翻译警告 */
missingWarn : boolean
/** 是否显示回退语言警告 */
fallbackWarn : boolean
/** 是否回退到根实例 */
fallbackRoot : boolean
/** 是否启用回退格式化 */
fallbackFormat : boolean
/** 是否允许未解析的翻译键 */
unresolving : boolean
/** 翻译后处理函数 */
postTranslation : ((str : string, key : string) => string) | null
/** 是否警告HTML消息 */
warnHtmlMessage : boolean
/** 是否转义参数 */
escapeParameter : boolean
/** 是否继承父级语言设置 */
inheritLocale : boolean
/** 警告处理器 */
warnHandler : WarnHandler
/** 默认复数规则 */
pluralRule : PluralRule
/** 是否全局注入 */
globalInjection : boolean
/** 是否允许组合式API */
allowComposition : boolean
/** 是否使用遗留模式 */
legacy : boolean
}
/**
* uniapp-x下的tmui4x附带的多语言插件,现面向所有用户开放本语言插件。
* @author tmui4x
* @copyright https://tmui.design
* @date 2025/7/8
*/
export interface Tmui4xI18nTml {
/** 实例配置,可以动态修改本配置 **/
ops : I18nOptionsReally
/** 设置语言 */
setLocale(local : string) : void;
/**
* 获取语言
* @returns {string} 当前设置的语言
*/
getLocale() : string;
/**
* 获取回退语言
* @returns {string} 当前回退的语言
*/
getFallbackLocale() : string;
/** 设置回退语言 */
setFallbackLocale(local : string) :void;
/** 全量填充配置 **/
setOptions(args : I18nOptions|null):void;
/**
* 翻译方法 - 参考 Vue I18n 实现(UTS类型安全优化版本)
* @param key 翻译键
* @param args 可选参数:数字(用于复数)、对象(用于插值)、字符串(locale)等同原vueI18n使用方式
* @param opts 可选的第二个参数当args为复数数字,key中函数 | 时,此opts起效且必须为utsjsonobject格式等同原vueI18n使用方式
* @returns 翻译后的字符串
*/
t(key : string, ...argsopts : Array<any>) : string;
/**
* 数字格式化方法 - 参考 Vue I18n 实现
* @param val 要格式化的数字
* @param name 格式化名称模板,如果不存在以opts为准,如果opts也没有则取默认值。
* @param opts 格式化选项
* @returns 格式化后的字符串
*/
n(val : number, formatName ?: string, opts ?: NumberFormat) : string;
/**
* 日期时间格式化方法 - 参考 Vue I18n 实现
* @param val 要格式化的日期时间值(Date对象、时间戳数字或日期字符串)
* @param formatName 格式化名称模板,如果不存在以opts为准,如果opts也没有则取默认值
* @param opts 格式化选项
* @returns 格式化后的字符串
*/
d(val : DateOrNumberOrString, formatName ?: string, opts ?: DateTimeFormat) : string;
/**
* 动态添加语言的新字段
* @param {string} local 语言
* @param {UTSJSONObject} newMessage 键值及字段。
*/
mergeLocaleMessage (local : string, newMessage : UTSJSONObject) : void;
/**
* 检测翻译键是否存在 - 参考 Vue I18n 的 te 方法实现
* @param {string} key 翻译键,支持嵌套路径如 'user.name'
* @param {string} locale 可选的语言代码,不提供则使用当前语言
* @returns {boolean} 存在返回true,不存在返回false
*/
te(key : string, locale ?: string) : boolean;
/**
* 相对时间
* @param {stringnumberDate} timeValue 时间差(毫秒)
* @param {string} unit 首选单位,它会自动进阶更高的维度,比如提供秒,超过60秒以分为单位进阶。
* @param {string} locale 可选语言,不提供以默认创建的设置为准。
* @returns {string} 格式化后的时间字符串
*/
rt(timeValues ?: number | Date | string, units ?: string, locale ?: string) : string;
/**
* 获取可用语言列表
* @returns {string[]}
*/
availableLocales() : string[]
}
/**
* 导出Tmui4xI18n国际化核心类
*/
export { Tmui4xI18n } from './instans/i18n'