1
This commit is contained in:
@@ -0,0 +1,417 @@
|
||||
// 统一类型定义 - 替换联合类型
|
||||
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 {string,number,Date} 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'
|
||||
Reference in New Issue
Block a user