@zfqh/uview-x 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.0.6](http://10.10.10.16/caoben/front-end-tools/compare/@zfqh/uview-x@0.0.5...@zfqh/uview-x@0.0.6) (2026-11-11)
7
+
8
+ **Note:** Version bump only for package @zfqh/uview-x
9
+
10
+
11
+
12
+
13
+
6
14
  ## [0.0.5](http://10.10.10.16/caoben/front-end-tools/compare/@zfqh/uview-x@0.0.4...@zfqh/uview-x@0.0.5) (2026-11-11)
7
15
 
8
16
 
package/README.md CHANGED
@@ -67,12 +67,12 @@ dev 阶段也可使用 easycom(`pages.json`):
67
67
 
68
68
  ## 国际化
69
69
 
70
- 默认简体中文;其他语言按需引入并合并(可选:`en`、`es`、`fr`、`ru`、`zh-Hant`):
70
+ 默认简体中文;其他语言按需引入并合并(可选:`zh-CN`、`zh-TW`、`en-US`、`es-ES`、`fr-FR`、`ru-RU`):
71
71
 
72
72
  ```ts
73
- import en from '@zfqh/uview-x/locales/en';
74
- // createI18n({ messages: { en: { ...en, ...自定义 } } })
75
- // 其他语言将路径中的 en 换成对应 locale 即可
73
+ import enUS from '@zfqh/uview-x/locales/en-US';
74
+ // createI18n({ messages: { 'en-US': { ...enUS, ...自定义 } } })
75
+ // 其他语言将路径中的 en-US 换成对应 locale 即可
76
76
  ```
77
77
 
78
78
  ## 文档
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 可选组件语言包:英文(en)。
2
+ * uview-x 可选组件语言包:英文(en-US)。
3
3
  *
4
4
  * 不参与内部聚合、不会被 `createI18n` 自动合并;需要英文时由使用方显式引入并合并:
5
- * `import en from '@zfqh/uview-x/locales/en'`,再在 `createI18n({ messages: { en } })` 中使用。
5
+ * `import enUS from '@zfqh/uview-x/locales/en-US'`,再在 `createI18n({ messages: { 'en-US': enUS } })` 中使用。
6
6
  * 键空间固定为 `uv.*`,`uv.form.*` 与 async-validator 默认 messages 完全对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const en = {
8
+ const enUS = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: 'Tips',
@@ -76,4 +76,4 @@ const en = {
76
76
  },
77
77
  };
78
78
 
79
- export default en;
79
+ export default enUS;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 可选组件语言包:西班牙语(es)。
2
+ * uview-x 可选组件语言包:西班牙语(es-ES)。
3
3
  *
4
4
  * 不参与内部聚合、不会被 `createI18n` 自动合并;需要西班牙语时由使用方显式引入并合并:
5
- * `import es from '@zfqh/uview-x/locales/es'`,再在 `createI18n({ messages: { es } })` 中使用。
5
+ * `import esES from '@zfqh/uview-x/locales/es-ES'`,再在 `createI18n({ messages: { 'es-ES': esES } })` 中使用。
6
6
  * 键空间固定为 `uv.*`,`uv.form.*` 与 async-validator 默认 messages 完全对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const es = {
8
+ const esES = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: 'Consejo',
@@ -76,4 +76,4 @@ const es = {
76
76
  },
77
77
  };
78
78
 
79
- export default es;
79
+ export default esES;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 可选组件语言包:法语(fr)。
2
+ * uview-x 可选组件语言包:法语(fr-FR)。
3
3
  *
4
4
  * 不参与内部聚合、不会被 `createI18n` 自动合并;需要法语时由使用方显式引入并合并:
5
- * `import fr from '@zfqh/uview-x/locales/fr'`,再在 `createI18n({ messages: { fr } })` 中使用。
5
+ * `import frFR from '@zfqh/uview-x/locales/fr-FR'`,再在 `createI18n({ messages: { 'fr-FR': frFR } })` 中使用。
6
6
  * 键空间固定为 `uv.*`,`uv.form.*` 与 async-validator 默认 messages 完全对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const fr = {
8
+ const frFR = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: 'Conseil',
@@ -76,4 +76,4 @@ const fr = {
76
76
  },
77
77
  };
78
78
 
79
- export default fr;
79
+ export default frFR;
package/locales/index.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import type { I18nMessages } from '../utils/locale';
2
- import zhHans from './zh-Hans';
2
+ import zhCN from './zh-CN';
3
3
 
4
4
  /**
5
5
  * uview-x 默认语言包与查询工具。
6
6
  *
7
- * - 内部只聚合默认语言 `zh-Hans`;其他语言(如 `en` / `es` / `fr` / `ru` / `zh-Hant`)是独立文件,不进入内部聚合,
8
- * 由使用方 `import en from '@zfqh/uview-x/locales/en'` 后自行合并进 `createI18n`;
7
+ * - 内部只聚合默认语言 `zh-CN`;其他语言(如 `en-US` / `es-ES` / `fr-FR` / `ru-RU` / `zh-TW`)是独立文件,不进入内部聚合,
8
+ * 由使用方 `import enUS from '@zfqh/uview-x/locales/en-US'` 后自行合并进 `createI18n`;
9
9
  * - 纯数据 / 纯函数模块:不 import `vue` / `vue-i18n`,避免与 `utils/locale.ts` 形成值循环;
10
10
  * - 组件内置文案统一使用 `uv.*` 键空间,用户可在 `createI18n({ messages })` 中按同名 key 覆盖;
11
11
  * - 用户未创建 i18n 实例时,`utils/locale.ts` 的 `appTranslate` 会回退到这里的中文默认语言包。
@@ -19,9 +19,9 @@ export interface LocaleMessages {
19
19
  [key: string]: LocaleMessageValue;
20
20
  }
21
21
 
22
- /** 内部聚合的默认组件语言包:仅 `zh-Hans`(其他语言按需从 `locales/<locale>.ts` 引入) */
22
+ /** 内部聚合的默认组件语言包:仅 `zh-CN`(其他语言按需从 `locales/<locale>.ts` 引入) */
23
23
  export const componentMessages: Record<string, LocaleMessages> = {
24
- 'zh-Hans': zhHans,
24
+ 'zh-CN': zhCN,
25
25
  };
26
26
 
27
27
  function isLocaleMessages(value: LocaleMessageValue | undefined): value is LocaleMessages {
@@ -59,20 +59,20 @@ function mergeMessages(builtinMessages: LocaleMessages, userMessages: LocaleMess
59
59
  }
60
60
 
61
61
  /**
62
- * 把默认语言(`zh-Hans`)合并进用户 messages(返回新对象,不修改入参)。
62
+ * 把默认语言(`zh-CN`)合并进用户 messages(返回新对象,不修改入参)。
63
63
  *
64
- * - 仅对内置 `zh-Hans` 深合并,用户同名 key 优先,未覆盖的中文默认文案保留;
65
- * - 用户传入的其他 locale(如自行合并的 `en`)原样保留,不做补全或内置合并;
64
+ * - 仅对内置 `zh-CN` 深合并,用户同名 key 优先,未覆盖的中文默认文案保留;
65
+ * - 用户传入的其他 locale(如自行合并的 `en-US`)原样保留,不做补全或内置合并;
66
66
  * - 用户未传 messages 时返回仅含中文默认语言包的副本。
67
67
  */
68
68
  export function mergeDefaultMessages(userMessages?: I18nMessages): I18nMessages {
69
- const userZhHans = userMessages ? userMessages['zh-Hans'] : undefined;
69
+ const userZhCN = userMessages ? userMessages['zh-CN'] : undefined;
70
70
  const merged: I18nMessages = {
71
- 'zh-Hans': mergeMessages(componentMessages['zh-Hans'], isLocaleMessages(userZhHans) ? userZhHans : {}),
71
+ 'zh-CN': mergeMessages(componentMessages['zh-CN'], isLocaleMessages(userZhCN) ? userZhCN : {}),
72
72
  };
73
73
  if (userMessages) {
74
74
  for (const locale of Object.keys(userMessages)) {
75
- if (locale !== 'zh-Hans') {
75
+ if (locale !== 'zh-CN') {
76
76
  merged[locale] = userMessages[locale];
77
77
  }
78
78
  }
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 可选组件语言包:俄语(ru)。
2
+ * uview-x 可选组件语言包:俄语(ru-RU)。
3
3
  *
4
4
  * 不参与内部聚合、不会被 `createI18n` 自动合并;需要俄语时由使用方显式引入并合并:
5
- * `import ru from '@zfqh/uview-x/locales/ru'`,再在 `createI18n({ messages: { ru } })` 中使用。
5
+ * `import ruRU from '@zfqh/uview-x/locales/ru-RU'`,再在 `createI18n({ messages: { 'ru-RU': ruRU } })` 中使用。
6
6
  * 键空间固定为 `uv.*`,`uv.form.*` 与 async-validator 默认 messages 完全对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const ru = {
8
+ const ruRU = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: 'Подсказка',
@@ -76,4 +76,4 @@ const ru = {
76
76
  },
77
77
  };
78
78
 
79
- export default ru;
79
+ export default ruRU;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 默认组件语言包:简体中文(zh-Hans)。
2
+ * uview-x 默认组件语言包:简体中文(zh-CN)。
3
3
  *
4
- * 默认语言由 `createI18n` 自动注入(可传 `messages['zh-Hans']` 覆盖同名 key);
4
+ * 默认语言由 `createI18n` 自动注入(可传 `messages['zh-CN']` 覆盖同名 key);
5
5
  * 键空间固定为 `uv.*`;
6
6
  * `uv.form.*` 与 `components/uv-form/valid.ts` 的 async-validator 默认 messages 对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const zhHans = {
8
+ const zhCN = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: '提示',
@@ -76,4 +76,4 @@ const zhHans = {
76
76
  },
77
77
  };
78
78
 
79
- export default zhHans;
79
+ export default zhCN;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * uview-x 可选组件语言包:繁体中文(zh-Hant)。
2
+ * uview-x 可选组件语言包:繁体中文(zh-TW)。
3
3
  *
4
4
  * 不参与内部聚合、不会被 `createI18n` 自动合并;需要繁体中文时由使用方显式引入并合并:
5
- * `import zhHant from '@zfqh/uview-x/locales/zh-Hant'`,再在 `createI18n({ messages: { 'zh-Hant': zhHant } })` 中使用。
5
+ * `import zhTW from '@zfqh/uview-x/locales/zh-TW'`,再在 `createI18n({ messages: { 'zh-TW': zhTW } })` 中使用。
6
6
  * 键空间固定为 `uv.*`,`uv.form.*` 与 async-validator 默认 messages 完全对齐,`%s` 占位符由校验器替换。
7
7
  */
8
- const zhHant = {
8
+ const zhTW = {
9
9
  uv: {
10
10
  dialog: {
11
11
  title: '提示',
@@ -76,4 +76,4 @@ const zhHant = {
76
76
  },
77
77
  };
78
78
 
79
- export default zhHant;
79
+ export default zhTW;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zfqh/uview-x",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "uview-x:面向 uni-app x 蒸汽模式(Vapor)、经典 uni-app Vue3 与 nvue 的 UV UI 组件库,组件保持 uv-ui API。",
5
5
  "main": "index.ts",
6
6
  "types": "types/index.d.ts",
@@ -39,5 +39,5 @@
39
39
  "README.md",
40
40
  "CHANGELOG.md"
41
41
  ],
42
- "gitHead": "d9f4a73af79882b88161f2b898b9de28c4630532"
42
+ "gitHead": "cc5d98c2352fc99519a4660779a24cf992faad32"
43
43
  }
package/types/index.d.ts CHANGED
@@ -11,13 +11,6 @@ import type { I18n, I18nOptions } from 'vue-i18n';
11
11
  type UviewX$uv = (typeof import('../utils'))['$uv'];
12
12
 
13
13
  declare global {
14
- namespace UniNamespace {
15
- interface GetAppBaseInfoResult {
16
- /** uni-app x App 返回的语言,如 en / zh-Hans / zh-Hant / fr / es(经典端用 language 兜底) */
17
- appLanguage?: string;
18
- }
19
- }
20
-
21
14
  interface Uni {
22
15
  $uv: UviewX$uv;
23
16
  /** `createI18n` 创建的全局 i18n 实例 */
@@ -50,9 +43,9 @@ declare module 'vue' {
50
43
  declare module '@zfqh/uview-x' {
51
44
  /** 运行时配置;颜色通过 `config.color` 访问(键为 camelCase,如 `primary`);H5 滚动条通过 `config.scrollbar` 控制(默认隐藏) */
52
45
  export const config: (typeof import('../utils'))['config'];
53
- /** 创建 i18n 实例并挂到 `uni.$i18n`(仅注入并深合并默认中文 `zh-Hans`;其他语言需自行 import 语言包后合并) */
46
+ /** 创建 i18n 实例并挂到 `uni.$i18n`(仅注入并深合并默认中文 `zh-CN`;其他语言需自行 import 语言包后合并) */
54
47
  export function createI18n(opts: I18nOptions): I18n;
55
- /** 获取当前语言(storage `UNI_LOCALE` → `uni.getLocale` → `getAppBaseInfo` → `zh-Hans`) */
48
+ /** 获取当前语言(storage `UNI_LOCALE` → `getAppBaseInfo` 的 `language` / `osLanguage` / `hostLanguage` → `zh-CN`) */
56
49
  export function getLocale(): string;
57
50
  /** 按当前语言取词(优先全局语言包,其次默认中文语言包;支持 `a.b.c` 路径与 `{name}` 占位符) */
58
51
  export function getLocaleMessage(key: string, values?: Record<string, string | number>): string;
package/utils/locale.ts CHANGED
@@ -7,8 +7,8 @@ import { getBuiltinMessage, mergeDefaultMessages } from '../locales';
7
7
  /**
8
8
  * 国际化能力(默认中文 + 可选语言包 + 4 个公共 API)。
9
9
  *
10
- * 默认语言只有简体中文(`zh-Hans`),`createI18n` 只注入并深合并内置中文;
11
- * 英文等其他语言为独立语言包(`locales/en.ts`),由使用方显式引入后合并进 `messages`。
10
+ * 默认语言只有简体中文(`zh-CN`),`createI18n` 只注入并深合并内置中文;
11
+ * 英文等其他语言为独立语言包(`locales/en-US.ts`),由使用方显式引入后合并进 `messages`。
12
12
  *
13
13
  * 公共 API(由 `utils/index.ts` 导出到包入口):
14
14
  * `createI18n`、`getLocale`、`getLocaleMessage`、`setLocale`。
@@ -35,45 +35,17 @@ interface RefLike<T> {
35
35
  value: T;
36
36
  }
37
37
 
38
- /**
39
- * `uni` 全局对象的最小运行时视图(含 i18n 实例挂载点)。
40
- *
41
- * 对外 `$i18n` 声明在 `types/index.d.ts`;这里再留一份最小结构,保证其他包深引用
42
- * `@zfqh/uview-x/utils/locale`(不会加载本包 types 入口)时仍能编译。
43
- * 纯 Node / 单测环境可能没有 `uni` 全局,所有访问都要容错。
44
- */
45
- interface UniWithI18n {
46
- $i18n?: I18n;
47
- getStorageSync?: (key: string) => unknown;
48
- setStorageSync?: (key: string, value: unknown) => void;
49
- getLocale?: () => string;
50
- setLocale?: (locale: string) => void;
51
- getAppBaseInfo?: () => { appLanguage?: string; language?: string };
52
- }
53
-
54
- /** 读取 uni 全局对象;不存在时返回 undefined */
55
- function getUni(): UniWithI18n | undefined {
56
- return typeof uni === 'undefined' ? undefined : (uni as unknown as UniWithI18n);
57
- }
58
-
59
- /** 读取挂到 `uni.$i18n` 上的 i18n 实例 */
60
- function getUniI18n(): I18n | undefined {
61
- const uniApi = getUni();
62
- return uniApi ? uniApi.$i18n : undefined;
63
- }
64
-
65
38
  /** 语言持久化 key:App 端切换语言可能触发重启,必须先落盘 */
66
39
  const STORAGE_KEY = 'UNI_LOCALE';
67
40
 
68
41
  /** 回退语言(内部使用,不对外导出) */
69
- const fallbackLocale = 'zh-Hans';
42
+ const fallbackLocale = 'zh-CN';
70
43
 
71
44
  /** 读取上次选择的语言;storage 不可用或无有效值时返回空字符串 */
72
45
  function readStorageLocale(): string {
73
- const uniApi = getUni();
74
- if (uniApi && typeof uniApi.getStorageSync === 'function') {
46
+ if (typeof uni !== 'undefined' && typeof uni.getStorageSync === 'function') {
75
47
  try {
76
- const stored: unknown = uniApi.getStorageSync(STORAGE_KEY);
48
+ const stored: unknown = uni.getStorageSync(STORAGE_KEY);
77
49
  if (typeof stored === 'string' && stored) {
78
50
  return stored;
79
51
  }
@@ -102,26 +74,19 @@ function readStorageLocale(): string {
102
74
  *
103
75
  * 顺序:
104
76
  * 1. 本地存储 `UNI_LOCALE`(用户上次通过 `setLocale` 选择的语言);
105
- * 2. `uni.getLocale()`(H5 / 小程序 / 经典 App);
106
- * 3. `uni.getAppBaseInfo().appLanguage`(uni-app x App);
107
- * 4. `uni.getAppBaseInfo().language`(经典端已废弃字段,兜底);
108
- * 5. `zh-Hans`。
77
+ * 2. `uni.getAppBaseInfo().language`;
78
+ * 3. `uni.getAppBaseInfo().osLanguage`;
79
+ * 4. `uni.getAppBaseInfo().hostLanguage`;
80
+ * 5. `zh-CN`。
109
81
  */
110
82
  export function getLocale(): string {
111
83
  const stored = readStorageLocale();
112
84
  if (stored) {
113
85
  return stored;
114
86
  }
115
- const uniApi = getUni();
116
- if (uniApi && typeof uniApi.getLocale === 'function') {
117
- const systemLocale = uniApi.getLocale();
118
- if (systemLocale) {
119
- return systemLocale;
120
- }
121
- }
122
- if (uniApi && typeof uniApi.getAppBaseInfo === 'function') {
123
- const info = uniApi.getAppBaseInfo();
124
- const systemLocale = info.appLanguage || info.language;
87
+ if (typeof uni !== 'undefined' && typeof uni.getAppBaseInfo === 'function') {
88
+ const info = uni.getAppBaseInfo() as { language?: string; osLanguage?: string; hostLanguage?: string };
89
+ const systemLocale = info.language || info.osLanguage || info.hostLanguage;
125
90
  if (systemLocale) {
126
91
  return systemLocale;
127
92
  }
@@ -157,7 +122,10 @@ function isI18nGlobalLike(value: unknown): value is I18nGlobalLike {
157
122
 
158
123
  /** 当前 `uni.$i18n.global` 的运行时视图;实例不存在时返回 undefined */
159
124
  export function getI18nGlobal(): I18nGlobalLike | undefined {
160
- const global = getUniI18n()?.global;
125
+ if (typeof uni === 'undefined') {
126
+ return undefined;
127
+ }
128
+ const global = uni.$i18n?.global;
161
129
  return isI18nGlobalLike(global) ? global : undefined;
162
130
  }
163
131
 
@@ -189,7 +157,7 @@ function getMessage(messages: I18nMessages, locale: string, key: string): string
189
157
  /**
190
158
  * 翻译(App / 小程序 / 无 i18n 实例时的统一实现)。
191
159
  *
192
- * locale 优先级:storage `UNI_LOCALE` → `uni.$i18n.global.locale` → 内部 `localeState` → `zh-Hans`;
160
+ * locale 优先级:storage `UNI_LOCALE` → `uni.$i18n.global.locale` → 内部 `localeState` → `zh-CN`;
193
161
  * 消息优先级:全局语言包(当前语言 → 中文回退)→ 内置中文默认语言包 → key。
194
162
  * 其他语言(如英文)由使用方在 `createI18n` 中显式合并,未合并时回退中文。
195
163
  * storage 优先用于 nvue 等页面上下文模块副本不同、实例未共享的场景(setLocale 已先落盘)。
@@ -210,9 +178,9 @@ export function appTranslate(key: string, values?: Record<string, string | numbe
210
178
  /**
211
179
  * 创建 i18n 实例并挂到 `uni.$i18n`。
212
180
  *
213
- * - 只注入内置默认中文:`mergeDefaultMessages(opts.messages)` 仅深合并 `zh-Hans`,
214
- * 用户同名 key 优先;其他 locale(如显式引入的 `en`)原样透传,不做内置补全;
215
- * - 未显式传 `fallbackLocale` 时默认 `zh-Hans`,未合并的语言回退中文;
181
+ * - 只注入内置默认中文:`mergeDefaultMessages(opts.messages)` 仅深合并 `zh-CN`,
182
+ * 用户同名 key 优先;其他 locale(如显式引入的 `en-US`)原样透传,不做内置补全;
183
+ * - 未显式传 `fallbackLocale` 时默认 `zh-CN`,未合并的语言回退中文;
216
184
  * - App 端不依赖 vue-i18n 注入,直接把 `global.t` 替换为包内 `appTranslate`;
217
185
  * - 用 `opts.locale` 初始化内部 `localeState`,无实例时也能保持语言一致。
218
186
  */
@@ -234,9 +202,8 @@ export function createI18n(opts: I18nOptions): I18n {
234
202
  // #ifdef APP
235
203
  i18n.global.t = appTranslate as unknown as typeof i18n.global.t;
236
204
  // #endif
237
- const uniApi = getUni();
238
- if (uniApi) {
239
- uniApi.$i18n = i18n;
205
+ if (typeof uni !== 'undefined') {
206
+ uni.$i18n = i18n;
240
207
  }
241
208
  if (typeof opts.locale === 'string' && opts.locale) {
242
209
  localeState.value = opts.locale;
@@ -277,17 +244,16 @@ export function setLocale(locale: string): void {
277
244
  // 实例不可写时忽略,继续持久化
278
245
  }
279
246
  }
280
- const uniApi = getUni();
281
- if (uniApi && typeof uniApi.setStorageSync === 'function') {
247
+ if (typeof uni !== 'undefined' && typeof uni.setStorageSync === 'function') {
282
248
  try {
283
- uniApi.setStorageSync(STORAGE_KEY, locale);
249
+ uni.setStorageSync(STORAGE_KEY, locale);
284
250
  } catch (e) {
285
251
  // storage 不可用时忽略
286
252
  }
287
253
  }
288
- if (uniApi && typeof uniApi.setLocale === 'function') {
254
+ if (typeof uni !== 'undefined' && typeof uni.setLocale === 'function') {
289
255
  try {
290
- uniApi.setLocale(locale);
256
+ uni.setLocale(locale);
291
257
  } catch (e) {
292
258
  // App 端 setLocale 可能触发重启 / 平台不支持,忽略
293
259
  }