@liujitcn/kratos-taro-app-core 0.0.21 → 0.0.24

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/dist/runner.mjs CHANGED
@@ -67,7 +67,17 @@ async function main() {
67
67
  process.once("SIGINT", () => handleSignal("SIGINT"));
68
68
  process.once("SIGTERM", () => handleSignal("SIGTERM"));
69
69
  try {
70
- const args = ["exec", "taro", "build", "--type", options.type, "--mode", options.mode];
70
+ const args = [
71
+ "exec",
72
+ "taro",
73
+ "build",
74
+ "--type",
75
+ options.type,
76
+ "--mode",
77
+ options.mode,
78
+ "--env-prefix",
79
+ "VITE_APP_,TARO_APP_"
80
+ ];
71
81
  if (options.watch) args.push("--watch");
72
82
  child = spawn(process.platform === "win32" ? "pnpm.cmd" : "pnpm", args, {
73
83
  cwd: hostRoot,
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "type": "git",
8
8
  "url": "git@github.com:liujitcn/kratos-admin.git"
9
9
  },
10
- "version": "0.0.21",
10
+ "version": "0.0.24",
11
11
  "type": "module",
12
12
  "files": [
13
13
  "dist",
@@ -15,7 +15,7 @@ export class FileServiceImpl {
15
15
  /** 上传多个浏览器文件。 */
16
16
  async MultiUploadFile(files: File[], fileType: string): Promise<MultiUploadFileResponse> {
17
17
  if (process.env.TARO_ENV !== 'h5') {
18
- throw new Error(t('core.file.temporaryPathRequired'))
18
+ throw new Error(t('core.file.temporary_path_required'))
19
19
  }
20
20
  const paths = files.map((file) => URL.createObjectURL(file))
21
21
  try {
@@ -28,7 +28,7 @@ export class FileServiceImpl {
28
28
  /** 上传单个浏览器文件。 */
29
29
  async UploadFile(file: File, fileType: string): Promise<FileInfo> {
30
30
  if (process.env.TARO_ENV !== 'h5') {
31
- throw new Error(t('core.file.temporaryPathRequired'))
31
+ throw new Error(t('core.file.temporary_path_required'))
32
32
  }
33
33
  const path = URL.createObjectURL(file)
34
34
  try {
@@ -53,7 +53,7 @@ export class FileServiceImpl {
53
53
  'source-client': 'miniapp',
54
54
  },
55
55
  })
56
- if (response.statusCode !== 200) throw new Error(t('core.file.downloadFailed'))
56
+ if (response.statusCode !== 200) throw new Error(t('core.file.download_failed'))
57
57
  await Taro.openDocument({ filePath: response.tempFilePath, showMenu: true })
58
58
  }
59
59
  }
@@ -1,13 +1,13 @@
1
1
  import { http } from '../../utils/http'
2
- import type { GetLanguageRequest, GetLanguageResponse, LanguageService } from '../../rpc/base/v1/language'
2
+ import type { LanguageService, OptionLanguageRequest, OptionLanguageResponse } from '../../rpc/base/v1/language'
3
3
 
4
4
  const LANGUAGE_URL = '/v1/base/language'
5
5
 
6
6
  /** 语言公共服务。 */
7
7
  export class LanguageServiceImpl implements LanguageService {
8
- /** 查询当前支持的语言和主语言。 */
9
- GetLanguage(request: GetLanguageRequest): Promise<GetLanguageResponse> {
10
- return http<GetLanguageResponse>({
8
+ /** 查询当前支持的语言选项。 */
9
+ OptionLanguage(request: OptionLanguageRequest): Promise<OptionLanguageResponse> {
10
+ return http<OptionLanguageResponse>({
11
11
  url: LANGUAGE_URL,
12
12
  method: 'GET',
13
13
  authMode: 'none',
package/src/bootstrap.ts CHANGED
@@ -25,7 +25,7 @@ export function bootstrapKratosTaroApp(options: KratosTaroBootstrapOptions): voi
25
25
  registerLocaleMessages(options.modules)
26
26
  initializeLocale()
27
27
  void defLanguageService
28
- .GetLanguage({})
28
+ .OptionLanguage({})
29
29
  .then((response) => {
30
30
  applyLanguageConfig(response)
31
31
  })
package/src/index.ts CHANGED
@@ -1,13 +1,7 @@
1
- // Core 语言包在本文件的 coreModule 中注册,供 Taro 公共页面、请求工具和业务模块复用。
1
+ // Core 语言包由同步脚本生成并在本文件的 coreModule 中注册,供 Taro 公共页面、请求工具和业务模块复用。
2
2
  import { corePages } from './pages'
3
3
  import { defineKratosTaroModule } from './module'
4
- import coreEnUS from './locales/en-US.json'
5
- import coreJaJP from './locales/ja-JP.json'
6
- import coreZhCN from './locales/zh-CN.json'
7
- import coreZhTW from './locales/zh-TW.json'
8
- import coreKoKR from './locales/ko-KR.json'
9
- import coreFrFR from './locales/fr-FR.json'
10
- import coreEsES from './locales/es-ES.json'
4
+ import { LOCALE_MESSAGES } from './locales/generated'
11
5
 
12
6
  /** core 内置模块。 */
13
7
  export const coreModule = defineKratosTaroModule({
@@ -31,15 +25,7 @@ export const coreModule = defineKratosTaroModule({
31
25
  USER_DEFAULT: 'static/tabs/user_default.png',
32
26
  USER_SELECTED: 'static/tabs/user_selected.png',
33
27
  },
34
- messages: {
35
- 'zh-CN': coreZhCN,
36
- 'zh-TW': coreZhTW,
37
- 'ko-KR': coreKoKR,
38
- 'fr-FR': coreFrFR,
39
- 'es-ES': coreEsES,
40
- 'en-US': coreEnUS,
41
- 'ja-JP': coreJaJP,
42
- },
28
+ messages: LOCALE_MESSAGES,
43
29
  })
44
30
 
45
31
  export * from './module'
@@ -4,7 +4,7 @@
4
4
 
5
5
  | 文件 | 用途 | 使用位置 |
6
6
  | --- | --- | --- |
7
- | `zh-CN.json` | 简体中文固定 UI 默认语言包,也是七语键集合和占位符校验基准。 | Taro 固定文案默认语言及缺失翻译回退。 |
7
+ | `zh-CN.json` | 简体中文固定 UI 默认语言包,也是所有语言键集合和占位符校验基准。 | Taro 固定文案默认语言及缺失翻译回退。 |
8
8
  | `zh-TW.json` | 繁体中文 Core 语言包。 | Taro 切换为繁体中文时使用。 |
9
9
  | `en-US.json` | 英文 Core 语言包。 | Taro 切换为英文时使用。 |
10
10
  | `ja-JP.json` | 日文 Core 语言包。 | Taro 切换为日文时使用。 |
@@ -12,4 +12,4 @@
12
12
  | `fr-FR.json` | 法语 Core 语言包。 | Taro 切换为法语时使用。 |
13
13
  | `es-ES.json` | 西班牙语 Core 语言包。 | Taro 切换为西班牙语时使用。 |
14
14
 
15
- 语言包是标准 JSON,不能在文件内直接写注释;公共键使用 `common.` 或 `core.` 命名空间。
15
+ 语言包是标准 JSON,不能在文件内直接写注释;公共键使用 `common.` 或 `core.` 命名空间。新增语言后执行仓库根目录的 `make i18n-sync`。语言切换选项固定显示后端 `base_language.native_name`,接口不可用时使用代码内置的原生名称;`common.language.*` 仅用于普通文案和语言迁移初始数据。新增语言的完整文件清单见[国际化语言扩展指南](../../../../../../docs/国际化语言扩展指南.md)。
@@ -6,10 +6,8 @@
6
6
  "common.action.login": "Log in",
7
7
  "common.action.logout": "Log out",
8
8
  "common.action.new": "New",
9
- "common.action.openInNewWindow": "Open in new window",
10
- "common.action.retry": "Retry",
9
+ "common.action.open_in_new_window": "Open in new window",
11
10
  "common.action.save": "Save",
12
- "common.action.search": "Search",
13
11
  "common.field.language": "Language",
14
12
  "common.language.en-US": "English",
15
13
  "common.language.ja-JP": "日本語",
@@ -19,95 +17,92 @@
19
17
  "common.language.fr-FR": "French",
20
18
  "common.language.es-ES": "Spanish",
21
19
  "common.message.loading": "Loading",
22
- "common.message.networkError": "Network error. Check your connection and try again.",
23
- "common.message.requestError": "Request failed",
20
+ "common.message.network_error": "Network error. Check your connection and try again.",
21
+ "common.message.request_error": "Request failed",
24
22
  "common.message.unknown": "Unable to process this request. Try again later.",
25
23
  "common.title.notice": "Notice",
26
- "core.auth.loginAgain": "Log in again",
27
- "core.auth.sessionExpired": "Your session has expired. Please log in again.",
24
+ "core.auth.login_again": "Log in again",
25
+ "core.auth.session_expired": "Your session has expired. Please log in again.",
28
26
  "core.config.missing": "Missing app configuration: {names}",
29
- "core.crypto.base64DecodeUnsupported": "Base64 decoding is not supported in this environment",
30
- "core.crypto.base64EncodeUnsupported": "Base64 encoding is not supported in this environment",
31
- "core.crypto.encryptFailed": "Password encryption failed",
32
- "core.crypto.passwordRequired": "Password is required",
33
- "core.crypto.passwordTooLong": "Password exceeds the supported length",
34
- "core.crypto.publicKeyInvalid": "Invalid public key",
35
- "core.crypto.randomFailed": "Failed to generate random data",
36
- "core.crypto.unsupported": "Password encryption is not supported in this environment",
37
- "core.file.downloadFailed": "Download failed",
38
- "core.file.temporaryPathRequired": "Use a temporary file path when uploading from a Mini Program",
39
- "core.file.uploadFailed": "Upload failed",
40
- "core.home.accountCapability": "Account features",
41
- "core.home.accountCapabilityDescription": "Profile, app settings, and AI assistant access are included",
42
- "core.home.crossPlatform": "Cross-platform pages",
43
- "core.home.crossPlatformDescription": "One codebase for H5 and WeChat Mini Program",
44
- "core.home.demoScope": "Demo scope",
27
+ "core.crypto.base64_decode_unsupported": "Base64 decoding is not supported in this environment",
28
+ "core.crypto.base64_encode_unsupported": "Base64 encoding is not supported in this environment",
29
+ "core.crypto.encrypt_failed": "Password encryption failed",
30
+ "core.crypto.password_required": "Password is required",
31
+ "core.crypto.password_too_long": "Password exceeds the supported length",
32
+ "core.crypto.public_key_invalid": "Invalid public key",
33
+ "core.file.download_failed": "Download failed",
34
+ "core.file.temporary_path_required": "Use a temporary file path when uploading from a Mini Program",
35
+ "core.file.upload_failed": "Upload failed",
36
+ "core.home.account_capability": "Account features",
37
+ "core.home.account_capability_description": "Profile, app settings, and AI assistant access are included",
38
+ "core.home.cross_platform": "Cross-platform pages",
39
+ "core.home.cross_platform_description": "One codebase for H5 and WeChat Mini Program",
40
+ "core.home.demo_scope": "Demo scope",
45
41
  "core.home.framework": "App framework",
46
42
  "core.home.language": "Language",
47
- "core.home.mainTitle": "Application Framework",
48
- "core.home.stateManagement": "State management",
49
- "core.home.staticHome": "Static home",
50
- "core.home.staticHomeDescription": "This page presents framework details without business APIs",
51
- "core.home.styleSolution": "Styling",
52
- "core.home.subTitle": "Shared navigation and account experience",
53
- "core.home.techStack": "Technology stack",
54
- "core.login.agreePrefix": "I have read and agree to the",
55
- "core.login.agreeSeparator": "and",
56
- "core.login.behaviorClick": "Click the characters in order",
57
- "core.login.behaviorLoading": "Loading...",
58
- "core.login.behaviorPuzzle": "Drag the slider to complete the puzzle",
59
- "core.login.behaviorRotate": "Drag the slider to rotate the inner image upright",
60
- "core.login.bindWechat": "Log in and link WeChat",
43
+ "core.home.main_title": "Application Framework",
44
+ "core.home.state_management": "State management",
45
+ "core.home.static_home": "Static home",
46
+ "core.home.static_home_description": "This page presents framework details without business APIs",
47
+ "core.home.style_solution": "Styling",
48
+ "core.home.sub_title": "Shared navigation and account experience",
49
+ "core.home.tech_stack": "Technology stack",
50
+ "core.login.agree_prefix": "I have read and agree to the",
51
+ "core.login.agree_separator": "and",
52
+ "core.login.behavior_click": "Click the characters in order",
53
+ "core.login.behavior_loading": "Loading...",
54
+ "core.login.behavior_puzzle": "Drag the slider to complete the puzzle",
55
+ "core.login.behavior_rotate": "Drag the slider to rotate the inner image upright",
56
+ "core.login.bind_wechat": "Log in and link WeChat",
61
57
  "core.login.captcha": "Enter verification code",
62
- "core.login.captchaLoadFailed": "Failed to load verification code",
63
- "core.login.captchaTypeMissing": "Verification method is not configured",
64
- "core.login.captchaTypeName": "Login verification method",
65
- "core.login.captchaTypeResponseMissing": "Verification response did not include a type",
66
- "core.login.captchaWriteFailed": "Failed to save verification image",
67
- "core.login.defaultSubTitle": "Welcome",
68
- "core.login.loginFailed": "Login failed. Try again.",
69
- "core.login.loginSuccess": "Logged in",
58
+ "core.login.captcha_load_failed": "Failed to load verification code",
59
+ "core.login.captcha_type_missing": "Verification method is not configured",
60
+ "core.login.captcha_type_name": "Login verification method",
61
+ "core.login.captcha_type_response_missing": "Verification response did not include a type",
62
+ "core.login.captcha_write_failed": "Failed to save verification image",
63
+ "core.login.default_sub_title": "Welcome",
64
+ "core.login.login_failed": "Login failed. Try again.",
65
+ "core.login.login_success": "Logged in",
70
66
  "core.login.password": "Enter password",
71
67
  "core.login.privacy": "Privacy Policy",
72
- "core.login.protocolMissing": "Terms of Service and Privacy Policy are not configured",
73
- "core.login.protocolPrompt": "Read and accept the agreements first. Confirm to accept and continue.",
68
+ "core.login.protocol_missing": "Terms of Service and Privacy Policy are not configured",
69
+ "core.login.protocol_prompt": "Read and accept the agreements first. Confirm to accept and continue.",
74
70
  "core.login.service": "Terms of Service",
75
71
  "core.login.tenant": "Enter tenant code",
76
- "core.login.userName": "Enter username or mobile number",
77
- "core.login.userNameMobile": "Enter username or mobile number",
78
- "core.login.userNamePassword": "Enter username and password",
72
+ "core.login.user_name": "Enter username or mobile number",
73
+ "core.login.user_name_mobile": "Enter username or mobile number",
74
+ "core.login.user_name_password": "Enter username and password",
79
75
  "core.login.wechat": "Continue with WeChat",
80
- "core.login.wechatBindTip": "This WeChat account is not linked. Log in to an existing account to link it.",
81
- "core.login.wechatFailed": "WeChat login failed. Try again later.",
76
+ "core.login.wechat_bind_tip": "This WeChat account is not linked. Log in to an existing account to link it.",
77
+ "core.login.wechat_failed": "WeChat login failed. Try again later.",
82
78
  "core.navigation.home": "Home",
83
79
  "core.navigation.error.access": "Invalid menu access mode: {access}",
84
- "core.navigation.error.childTab": "Only second-level app menus can be tabs: {name}",
80
+ "core.navigation.error.child_tab": "Only second-level app menus can be tabs: {name}",
85
81
  "core.navigation.error.cycle": "Menu parent cycle detected: {name}",
86
82
  "core.navigation.error.identity": "Menu id, name, or app/ path is invalid",
87
- "core.navigation.error.itemObject": "Menu item is not an object",
88
- "core.navigation.error.listMissing": "Menu response does not contain a flat list",
89
- "core.navigation.error.namePrefix": "Menu name must start with App: {name}",
90
- "core.navigation.error.parentInvalid": "Menu parent id is invalid: {name}",
91
- "core.navigation.error.parentMissing": "Menu parent id is missing: {name}",
92
- "core.navigation.error.parentNotFound": "Menu parent was not found: {name}",
93
- "core.navigation.error.responseObject": "Menu response is not an object",
94
- "core.navigation.error.rootTab": "Second-level app menu must be a tab: {name}",
95
- "core.navigation.error.tabCount": "tabBar must contain 0 or 2-5 items",
83
+ "core.navigation.error.item_object": "Menu item is not an object",
84
+ "core.navigation.error.list_missing": "Menu response does not contain a flat list",
85
+ "core.navigation.error.name_prefix": "Menu name must start with App: {name}",
86
+ "core.navigation.error.parent_missing": "Menu parent id is missing: {name}",
87
+ "core.navigation.error.parent_not_found": "Menu parent was not found: {name}",
88
+ "core.navigation.error.response_object": "Menu response is not an object",
89
+ "core.navigation.error.root_tab": "Second-level app menu must be a tab: {name}",
90
+ "core.navigation.error.tab_count": "tabBar must contain 0 or 2-5 items",
96
91
  "core.navigation.error.unique": "Menu id, name, and path must be unique",
97
- "core.navigation.error.viewKey": "Unregistered viewKey: {viewKey}",
92
+ "core.navigation.error.view_key": "Unregistered viewKey: {viewKey}",
98
93
  "core.navigation.my": "My Account",
99
94
  "core.navigation.protocol": "Agreement",
100
- "core.protocol.loadFailed": "Failed to load app configuration",
101
- "core.protocol.notConfigured": "{title} is not configured and cannot be viewed",
95
+ "core.protocol.load_failed": "Failed to load app configuration",
96
+ "core.protocol.not_configured": "{title} is not configured and cannot be viewed",
102
97
  "core.protocol.privacy": "Privacy Policy",
103
98
  "core.protocol.service": "Terms of Service",
104
99
  "core.status.CONFIG_ERROR": "Invalid navigation configuration",
105
- "core.status.FORBIDDEN": "Access denied",
100
+ "core.status.forbidden": "Access denied",
106
101
  "core.status.NOT_FOUND": "Page not found",
107
- "core.status.OFFLINE": "Network unavailable",
108
- "core.status.PAGE_UNAVAILABLE": "Page temporarily unavailable",
102
+ "core.status.offline": "Network unavailable",
103
+ "core.status.page_unavailable": "Page temporarily unavailable",
109
104
  "core.status.loading": "Loading",
110
- "core.webview.embedBlocked": "The destination may block embedding on H5",
111
- "core.webview.invalidUrl": "No valid link was provided",
112
- "core.webview.openFailed": "Unable to open link"
105
+ "core.webview.embed_blocked": "The destination may block embedding on H5",
106
+ "core.webview.invalid_url": "No valid link was provided",
107
+ "core.webview.open_failed": "Unable to open link"
113
108
  }
@@ -1,15 +1,13 @@
1
1
  {
2
- "common.action.back": "Regresar",
2
+ "common.action.back": "Volver",
3
3
  "common.action.cancel": "Cancelar",
4
- "common.action.confirm": "Aceptar",
4
+ "common.action.confirm": "Confirmar",
5
5
  "common.action.delete": "Eliminar",
6
6
  "common.action.login": "Iniciar sesión",
7
7
  "common.action.logout": "Cerrar sesión",
8
8
  "common.action.new": "Nuevo",
9
- "common.action.openInNewWindow": "Se abre una nueva ventana",
10
- "common.action.retry": "Inténtalo de nuevo",
9
+ "common.action.open_in_new_window": "Abrir en una ventana nueva",
11
10
  "common.action.save": "Guardar",
12
- "common.action.search": "Buscar",
13
11
  "common.field.language": "Idioma",
14
12
  "common.language.en-US": "Inglés",
15
13
  "common.language.ja-JP": "Japonés",
@@ -18,96 +16,93 @@
18
16
  "common.language.ko-KR": "Coreano",
19
17
  "common.language.fr-FR": "Francés",
20
18
  "common.language.es-ES": "Español",
21
- "common.message.loading": "se está cargando",
22
- "common.message.networkError": "Error de red, prueba con otra red",
23
- "common.message.requestError": "Error de solicitud",
24
- "common.message.unknown": "No se puede procesar en este momento, inténtalo de nuevo más tarde",
25
- "common.title.notice": "Consejos",
26
- "core.auth.loginAgain": "Inicia sesión nuevamente",
27
- "core.auth.sessionExpired": "La página actual no es válida, inicie sesión nuevamente",
28
- "core.config.missing": "Falta la configuración del terminal móvil: {names}",
29
- "core.crypto.base64DecodeUnsupported": "El entorno actual no admite la decodificación Base64",
30
- "core.crypto.base64EncodeUnsupported": "El entorno actual no admite la codificación Base64",
31
- "core.crypto.encryptFailed": "Falló el cifrado de contraseña",
32
- "core.crypto.passwordRequired": "La contraseña no puede estar vacía",
33
- "core.crypto.passwordTooLong": "La longitud de la contraseña excede el límite",
34
- "core.crypto.publicKeyInvalid": "El formato de clave pública no es válido",
35
- "core.crypto.randomFailed": "Falló la generación de números aleatorios",
36
- "core.crypto.unsupported": "El entorno actual no admite el cifrado de contraseña",
37
- "core.file.downloadFailed": "Falló la descarga",
38
- "core.file.temporaryPathRequired": "Utilice la ruta del archivo temporal para cargar el miniprograma.",
39
- "core.file.uploadFailed": "Falló la carga",
40
- "core.home.accountCapability": "Capacidades de la cuenta",
41
- "core.home.accountCapabilityDescription": "Se han reservado la información personal, la configuración de la aplicación y la entrada del asistente inteligente",
42
- "core.home.crossPlatform": "Página cruzada",
43
- "core.home.crossPlatformDescription": "El mismo conjunto de códigos de página se adapta a los mini programas H5 y WeChat",
44
- "core.home.demoScope": "Alcance de demostración",
45
- "core.home.framework": "Marco de aplicación",
46
- "core.home.language": "Lenguaje de desarrollo",
47
- "core.home.mainTitle": "Ejemplo de marco de aplicación",
48
- "core.home.stateManagement": "Gestión de estados",
49
- "core.home.staticHome": "Página de inicio estática",
50
- "core.home.staticHomeDescription": "La página de inicio actual se utiliza para mostrar información del marco y no depende de interfaces comerciales.",
51
- "core.home.styleSolution": "esquema de estilo",
52
- "core.home.subTitle": "Preservar la navegación universal y la experiencia del centro personal",
53
- "core.home.techStack": "Pila de tecnología actual",
54
- "core.login.agreePrefix": "He leído y acepto",
55
- "core.login.agreeSeparator": "y",
56
- "core.login.behaviorClick": "Por favor haga clic en el texto en orden",
57
- "core.login.behaviorLoading": "Cargando...",
58
- "core.login.behaviorPuzzle": "Arrastre el control deslizante para completar el rompecabezas",
59
- "core.login.behaviorRotate": "Arrastre el control deslizante para corregir la imagen del círculo interior",
60
- "core.login.bindWechat": "Inicie sesión y vincule WeChat",
61
- "core.login.captcha": "Por favor ingresa el código de verificación",
62
- "core.login.captchaLoadFailed": "Error al cargar el código de verificación",
63
- "core.login.captchaTypeMissing": "El tipo de código de verificación de inicio de sesión no está configurado",
64
- "core.login.captchaTypeName": "Tipo de código de verificación de inicio de sesión",
65
- "core.login.captchaTypeResponseMissing": "La interfaz del código de verificación no devuelve el tipo",
66
- "core.login.captchaWriteFailed": "Error al escribir la imagen del código de verificación",
67
- "core.login.defaultSubTitle": "Bienvenido a esta aplicación",
68
- "core.login.loginFailed": "Error al iniciar sesión, inténtelo de nuevo",
69
- "core.login.loginSuccess": "Inicio de sesión exitoso",
70
- "core.login.password": "Por favor ingrese la contraseña",
71
- "core.login.privacy": "\"Acuerdo de Privacidad\"",
72
- "core.login.protocolMissing": "Los términos de servicio y el acuerdo de privacidad no están configurados",
73
- "core.login.protocolPrompt": "Primero lea y verifique el contenido del acuerdo. Después de hacer clic en Aceptar, comprobará automáticamente y continuará iniciando sesión.",
74
- "core.login.service": "\"Términos de servicio\"",
75
- "core.login.tenant": "Por favor ingrese el número de inquilino",
76
- "core.login.userName": "Por favor ingrese su nombre de usuario o número de teléfono móvil",
77
- "core.login.userNameMobile": "Por favor ingrese el nombre de usuario/número de teléfono móvil",
78
- "core.login.userNamePassword": "Por favor ingrese nombre de usuario y contraseña",
79
- "core.login.wechat": "Inicio de sesión con un clic en WeChat",
80
- "core.login.wechatBindTip": "Esta cuenta de WeChat aún no ha sido vinculada. Inicie sesión en su cuenta existente para completar el enlace.",
81
- "core.login.wechatFailed": "Error al iniciar sesión en WeChat, inténtelo de nuevo más tarde.",
19
+ "common.message.loading": "Cargando",
20
+ "common.message.network_error": "Error de red. Comprueba tu conexión e inténtalo de nuevo.",
21
+ "common.message.request_error": "Error de solicitud",
22
+ "common.message.unknown": "No se puede procesar esta solicitud. Inténtalo de nuevo más tarde.",
23
+ "common.title.notice": "Aviso",
24
+ "core.auth.login_again": "Vuelve a iniciar sesión",
25
+ "core.auth.session_expired": "Tu sesión ha caducado. Vuelve a iniciar sesión.",
26
+ "core.config.missing": "Falta la configuración de la aplicación: {names}",
27
+ "core.crypto.base64_decode_unsupported": "La decodificación Base64 no está disponible en este entorno",
28
+ "core.crypto.base64_encode_unsupported": "La codificación Base64 no está disponible en este entorno",
29
+ "core.crypto.encrypt_failed": "Error al cifrar la contraseña",
30
+ "core.crypto.password_required": "La contraseña es obligatoria",
31
+ "core.crypto.password_too_long": "La contraseña supera la longitud permitida",
32
+ "core.crypto.public_key_invalid": "Clave pública no válida",
33
+ "core.file.download_failed": "Error de descarga",
34
+ "core.file.temporary_path_required": "Al cargar desde un miniprograma, usa una ruta temporal del archivo",
35
+ "core.file.upload_failed": "Error de carga",
36
+ "core.home.account_capability": "Funciones de la cuenta",
37
+ "core.home.account_capability_description": "Incluye el perfil, la configuración de la aplicación y el acceso al asistente de IA",
38
+ "core.home.cross_platform": "Páginas multiplataforma",
39
+ "core.home.cross_platform_description": "Una sola base de código para H5 y el miniprograma de WeChat",
40
+ "core.home.demo_scope": "Alcance de la demostración",
41
+ "core.home.framework": "Marco de la aplicación",
42
+ "core.home.language": "idioma",
43
+ "core.home.main_title": "Ejemplo de marco de aplicación",
44
+ "core.home.state_management": "Gestión del estado",
45
+ "core.home.static_home": "Página de inicio estática",
46
+ "core.home.static_home_description": "Esta página presenta información del marco sin usar APIs de negocio",
47
+ "core.home.style_solution": "Estilos",
48
+ "core.home.sub_title": "Navegación compartida y experiencia de cuenta",
49
+ "core.home.tech_stack": "Pila tecnológica",
50
+ "core.login.agree_prefix": "He leído y acepto",
51
+ "core.login.agree_separator": "y",
52
+ "core.login.behavior_click": "Haz clic en los caracteres en orden",
53
+ "core.login.behavior_loading": "Cargando...",
54
+ "core.login.behavior_puzzle": "Arrastra el control deslizante para completar el rompecabezas",
55
+ "core.login.behavior_rotate": "Arrastra el control deslizante para orientar correctamente la imagen interior",
56
+ "core.login.bind_wechat": "Iniciar sesión y vincular WeChat",
57
+ "core.login.captcha": "Introduce el código de verificación",
58
+ "core.login.captcha_load_failed": "Error al cargar el código de verificación",
59
+ "core.login.captcha_type_missing": "El método de verificación no está configurado",
60
+ "core.login.captcha_type_name": "Método de verificación de inicio de sesión",
61
+ "core.login.captcha_type_response_missing": "La respuesta de verificación no incluye un tipo",
62
+ "core.login.captcha_write_failed": "Error al guardar la imagen de verificación",
63
+ "core.login.default_sub_title": "Bienvenido",
64
+ "core.login.login_failed": "Error de inicio de sesión. Inténtalo de nuevo.",
65
+ "core.login.login_success": "Sesión iniciada",
66
+ "core.login.password": "Introduce la contraseña",
67
+ "core.login.privacy": "Política de privacidad",
68
+ "core.login.protocol_missing": "Los términos del servicio y la política de privacidad no están configurados",
69
+ "core.login.protocol_prompt": "Lee y acepta primero los acuerdos. Confirma para aceptar y continuar.",
70
+ "core.login.service": "Términos del servicio",
71
+ "core.login.tenant": "Introduce el código del inquilino",
72
+ "core.login.user_name": "Introduce el nombre de usuario",
73
+ "core.login.user_name_mobile": "Introduce el nombre de usuario o el número de móvil",
74
+ "core.login.user_name_password": "Introduce el nombre de usuario y la contraseña",
75
+ "core.login.wechat": "Continuar con WeChat",
76
+ "core.login.wechat_bind_tip": "Esta cuenta de WeChat no está vinculada. Inicia sesión con una cuenta existente para vincularla.",
77
+ "core.login.wechat_failed": "Error de inicio de sesión de WeChat. Inténtalo de nuevo más tarde.",
82
78
  "core.navigation.home": "Inicio",
83
79
  "core.navigation.error.access": "Modo de acceso al menú no válido: {access}",
84
- "core.navigation.error.childTab": "Sólo se puede utilizar como pestaña el menú secundario del móvil: {name}",
85
- "core.navigation.error.cycle": "Hay un bucle principal en el menú móvil: {name}",
86
- "core.navigation.error.identity": "ID de menú, nombre o aplicación/ruta no válidos",
87
- "core.navigation.error.itemObject": "El elemento del menú no es un objeto",
88
- "core.navigation.error.listMissing": "Falta lista plana de respuesta del menú",
89
- "core.navigation.error.namePrefix": "El nombre del menú debe usar el prefijo de la aplicación: {name}",
90
- "core.navigation.error.parentInvalid": "El número principal del menú móvil no es válido: {name}",
91
- "core.navigation.error.parentMissing": "Al menú le falta el número principal: {name}",
92
- "core.navigation.error.parentNotFound": "El menú móvil principal no existe: {name}",
93
- "core.navigation.error.responseObject": "La respuesta del menú no es un objeto",
94
- "core.navigation.error.rootTab": "El menú secundario del móvil debe usarse como pestaña: {name}",
95
- "core.navigation.error.tabCount": "tabBar solo puede configurar 0 o 2-5 elementos",
96
- "core.navigation.error.unique": "La identificación del menú, el nombre y la ruta deben ser únicos",
97
- "core.navigation.error.viewKey": "Clave de vista no registrada: {viewKey}",
98
- "core.navigation.my": "Mío",
99
- "core.navigation.protocol": "Detalles del acuerdo",
100
- "core.protocol.loadFailed": "Error al cargar la configuración móvil",
101
- "core.protocol.notConfigured": "{title} no está configurado y no se puede ver temporalmente.",
102
- "core.protocol.privacy": "Acuerdo de privacidad",
103
- "core.protocol.service": "Términos de servicio",
80
+ "core.navigation.error.child_tab": "Solo los menús de aplicación de segundo nivel pueden ser pestañas: {name}",
81
+ "core.navigation.error.cycle": "Se detectó un ciclo en los menús superiores: {name}",
82
+ "core.navigation.error.identity": "El id, nombre o ruta app/ del menú no es válido",
83
+ "core.navigation.error.item_object": "El elemento del menú no es un objeto",
84
+ "core.navigation.error.list_missing": "La respuesta del menú no contiene una lista plana",
85
+ "core.navigation.error.name_prefix": "El nombre del menú debe comenzar por App: {name}",
86
+ "core.navigation.error.parent_missing": "Falta el ID del menú superior: {name}",
87
+ "core.navigation.error.parent_not_found": "No se encontró el menú superior: {name}",
88
+ "core.navigation.error.response_object": "La respuesta del menú no es un objeto",
89
+ "core.navigation.error.root_tab": "El menú de aplicación de segundo nivel debe ser una pestaña: {name}",
90
+ "core.navigation.error.tab_count": "tabBar debe contener 0 o entre 2 y 5 elementos",
91
+ "core.navigation.error.unique": "El id, nombre y ruta del menú deben ser únicos",
92
+ "core.navigation.error.view_key": "viewKey no registrado: {viewKey}",
93
+ "core.navigation.my": "Mi cuenta",
94
+ "core.navigation.protocol": "Acuerdo",
95
+ "core.protocol.load_failed": "Error al cargar la configuración de la aplicación",
96
+ "core.protocol.not_configured": "{title} no está configurado y no se puede ver",
97
+ "core.protocol.privacy": "Política de privacidad",
98
+ "core.protocol.service": "Términos del servicio",
104
99
  "core.status.CONFIG_ERROR": "Configuración de navegación no válida",
105
- "core.status.FORBIDDEN": "Aún no hay acceso",
106
- "core.status.NOT_FOUND": "la página no existe",
107
- "core.status.OFFLINE": "Red no disponible",
108
- "core.status.PAGE_UNAVAILABLE": "la página no está disponible temporalmente",
109
- "core.status.loading": "se está cargando",
110
- "core.webview.embedBlocked": "La página H5 actual puede estar restringida por el sitio de destino para su inserción.",
111
- "core.webview.invalidUrl": "Falta una dirección de enlace válida",
112
- "core.webview.openFailed": "El enlace no se puede abrir"
100
+ "core.status.forbidden": "Acceso denegado",
101
+ "core.status.NOT_FOUND": "Página no encontrada",
102
+ "core.status.offline": "Red no disponible",
103
+ "core.status.page_unavailable": "Página temporalmente no disponible",
104
+ "core.status.loading": "Cargando",
105
+ "core.webview.embed_blocked": "El destino puede impedir la incrustación en H5",
106
+ "core.webview.invalid_url": "No se ha proporcionado un enlace válido",
107
+ "core.webview.open_failed": "No se pudo abrir el enlace"
113
108
  }