@liujitcn/kratos-admin-core 0.0.24 → 0.0.26
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/package/declarations/src/locales/generated.d.ts +9 -1949
- package/dist/package/declarations/src/locales/index.d.ts +4 -4
- package/dist/package/declarations/src/utils/index.d.ts +1 -3
- package/dist/package/declarations/src/utils/menuKey.d.ts +3 -0
- package/dist/package/src/locales/README.md +0 -4
- package/dist/package/src/locales/en-US.json +0 -4
- package/dist/package/src/locales/generated.ts +0 -24
- package/dist/package/src/locales/index.ts +0 -4
- package/dist/package/src/locales/zh-CN.json +0 -4
- package/dist/package/src/locales/zh-TW.json +0 -4
- package/dist/package/src/utils/index.ts +2 -16
- package/dist/package/src/utils/menuKey.ts +18 -0
- package/package.json +2 -2
- package/dist/package/src/locales/es-ES.json +0 -283
- package/dist/package/src/locales/fr-FR.json +0 -283
- package/dist/package/src/locales/ja-JP.json +0 -283
- package/dist/package/src/locales/ko-KR.json +0 -283
|
@@ -2,7 +2,7 @@ import type { AdminModule } from "../modules";
|
|
|
2
2
|
import type { OptionLanguageResponse } from "../rpc/base/v1/language";
|
|
3
3
|
import { type GeneratedLocale } from "./generated";
|
|
4
4
|
/** 管理端已打包的语言区域;运行时可切换列表由 base_language 接口决定。 */
|
|
5
|
-
export declare const SUPPORTED_LOCALES: ("zh-CN" | "en-US" | "
|
|
5
|
+
export declare const SUPPORTED_LOCALES: ("zh-CN" | "en-US" | "zh-TW")[];
|
|
6
6
|
/** 管理端支持的语言区域类型。 */
|
|
7
7
|
export type SupportedLocale = GeneratedLocale;
|
|
8
8
|
/** 单个模块的扁平语言包。 */
|
|
@@ -19,7 +19,7 @@ export interface LocaleOption {
|
|
|
19
19
|
export declare const DEFAULT_LOCALE: SupportedLocale;
|
|
20
20
|
export declare const LOCALE_STORAGE_KEY = "kratos-admin:locale";
|
|
21
21
|
/** 管理端 Vue I18n 实例。 */
|
|
22
|
-
export declare const adminI18n: import("vue-i18n").I18n<{}, {}, {}, "zh-CN" | "en-US" | "
|
|
22
|
+
export declare const adminI18n: import("vue-i18n").I18n<{}, {}, {}, "zh-CN" | "en-US" | "zh-TW", false>;
|
|
23
23
|
/** 规范化任意语言输入到管理端白名单。 */
|
|
24
24
|
export declare function normalizeLocale(value?: string): SupportedLocale;
|
|
25
25
|
/** 注册模块语言包并校验语言键、占位符和命名空间。 */
|
|
@@ -44,10 +44,10 @@ export declare function registerLocaleChangeHandler(handler: () => void | Promis
|
|
|
44
44
|
export declare function t(key: string, params?: LocaleParams): string;
|
|
45
45
|
/** 管理端响应式语言状态。 */
|
|
46
46
|
export declare function useLocaleStore(): {
|
|
47
|
-
locale: Readonly<globalThis.Ref<"zh-CN" | "en-US" | "
|
|
47
|
+
locale: Readonly<globalThis.Ref<"zh-CN" | "en-US" | "zh-TW", "zh-CN" | "en-US" | "zh-TW">>;
|
|
48
48
|
localeIndex: globalThis.ComputedRef<number>;
|
|
49
49
|
languageOptions: globalThis.ComputedRef<LocaleOption[]>;
|
|
50
|
-
supportedLocales: globalThis.ComputedRef<("zh-CN" | "en-US" | "
|
|
50
|
+
supportedLocales: globalThis.ComputedRef<("zh-CN" | "en-US" | "zh-TW")[]>;
|
|
51
51
|
setLocale: typeof setCurrentLocale;
|
|
52
52
|
t: typeof t;
|
|
53
53
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RouteItem, RouteMeta } from "../rpc/system/admin/v1/auth";
|
|
2
|
+
export { getRouteMenuKey } from "./menuKey";
|
|
2
3
|
/** 树形或枚举数据字段映射配置。 */
|
|
3
4
|
type FieldNamesProps = {
|
|
4
5
|
label?: string;
|
|
@@ -102,8 +103,6 @@ export declare function getUrlWithParams(): string;
|
|
|
102
103
|
export declare function isExternalPath(path?: string): boolean;
|
|
103
104
|
/** 获取菜单项实际跳转目标,外链优先使用 redirect。 */
|
|
104
105
|
export declare function getRouteTarget(item: RouteItem): string;
|
|
105
|
-
/** 获取菜单节点在 Element Plus 菜单树中的稳定索引。 */
|
|
106
|
-
export declare function getRouteMenuKey(item: RouteItem): string;
|
|
107
106
|
/** 判断菜单节点或其子节点是否对应当前路由。 */
|
|
108
107
|
export declare function isRouteMenuActive(item: RouteItem, currentPath: string): boolean;
|
|
109
108
|
/**
|
|
@@ -189,4 +188,3 @@ export declare function filterEnum(callValue: any, enumData?: any, fieldNames?:
|
|
|
189
188
|
* @description 递归查找 callValue 对应的 enum 值
|
|
190
189
|
* */
|
|
191
190
|
export declare function findItemNested(enumData: any, callValue: any, value: string, children: string): any;
|
|
192
|
-
export {};
|
|
@@ -7,9 +7,5 @@
|
|
|
7
7
|
| `zh-CN.json` | 简体中文固定 UI 默认语言包,也是所有语言键集合和占位符校验基准。 | 管理端固定文案默认语言及缺失翻译回退。 |
|
|
8
8
|
| `zh-TW.json` | 繁体中文公共语言包。 | 管理端切换为繁体中文时由 Vue I18n 使用。 |
|
|
9
9
|
| `en-US.json` | 英文公共语言包。 | 管理端切换为英文时由 Vue I18n 使用。 |
|
|
10
|
-
| `ja-JP.json` | 日文公共语言包。 | 管理端切换为日文时由 Vue I18n 使用。 |
|
|
11
|
-
| `ko-KR.json` | 韩语公共语言包。 | 管理端切换为韩语时由 Vue I18n 使用。 |
|
|
12
|
-
| `fr-FR.json` | 法语公共语言包。 | 管理端切换为法语时由 Vue I18n 使用。 |
|
|
13
|
-
| `es-ES.json` | 西班牙语公共语言包。 | 管理端切换为西班牙语时由 Vue I18n 使用。 |
|
|
14
10
|
|
|
15
11
|
语言包是标准 JSON,不能在文件内直接写注释;新增语言或修改键后执行仓库根目录的 `make i18n-sync`,脚本会校验所有语言并生成注册产物。语言切换选项固定显示后端 `base_language.native_name`,接口不可用时使用代码内置的原生名称;`common.language.*` 仅用于普通文案和语言迁移初始数据。新增语言的完整文件清单见[国际化语言扩展指南](../../../../../../docs/国际化语言扩展指南.md)。
|
|
@@ -23,12 +23,8 @@
|
|
|
23
23
|
"common.field.phone": "Phone number",
|
|
24
24
|
"common.field.start_time": "Start time",
|
|
25
25
|
"common.language.en-US": "English",
|
|
26
|
-
"common.language.ja-JP": "日本語",
|
|
27
26
|
"common.language.zh-CN": "简体中文",
|
|
28
27
|
"common.language.zh-TW": "Traditional Chinese",
|
|
29
|
-
"common.language.ko-KR": "Korean",
|
|
30
|
-
"common.language.fr-FR": "French",
|
|
31
|
-
"common.language.es-ES": "Spanish",
|
|
32
28
|
"common.message.no_data": "No data",
|
|
33
29
|
"common.message.operation_success": "Operation completed",
|
|
34
30
|
"common.message.system_error": "System error",
|
|
@@ -1,34 +1,18 @@
|
|
|
1
1
|
/* 此文件由 scripts/sync_locales.py 生成,请勿手工修改。 */
|
|
2
2
|
import "dayjs/locale/zh-cn";
|
|
3
3
|
import "dayjs/locale/en";
|
|
4
|
-
import "dayjs/locale/es";
|
|
5
|
-
import "dayjs/locale/fr";
|
|
6
|
-
import "dayjs/locale/ja";
|
|
7
|
-
import "dayjs/locale/ko";
|
|
8
4
|
import "dayjs/locale/zh-tw";
|
|
9
5
|
import elementLocaleZhCn from "element-plus/es/locale/lang/zh-cn";
|
|
10
6
|
import elementLocaleEnUs from "element-plus/es/locale/lang/en";
|
|
11
|
-
import elementLocaleEsEs from "element-plus/es/locale/lang/es";
|
|
12
|
-
import elementLocaleFrFr from "element-plus/es/locale/lang/fr";
|
|
13
|
-
import elementLocaleJaJp from "element-plus/es/locale/lang/ja";
|
|
14
|
-
import elementLocaleKoKr from "element-plus/es/locale/lang/ko";
|
|
15
7
|
import elementLocaleZhTw from "element-plus/es/locale/lang/zh-tw";
|
|
16
8
|
|
|
17
9
|
import localeZhCn from "./zh-CN.json";
|
|
18
10
|
import localeEnUs from "./en-US.json";
|
|
19
|
-
import localeEsEs from "./es-ES.json";
|
|
20
|
-
import localeFrFr from "./fr-FR.json";
|
|
21
|
-
import localeJaJp from "./ja-JP.json";
|
|
22
|
-
import localeKoKr from "./ko-KR.json";
|
|
23
11
|
import localeZhTw from "./zh-TW.json";
|
|
24
12
|
|
|
25
13
|
export const LOCALE_MESSAGES = {
|
|
26
14
|
"zh-CN": localeZhCn,
|
|
27
15
|
"en-US": localeEnUs,
|
|
28
|
-
"es-ES": localeEsEs,
|
|
29
|
-
"fr-FR": localeFrFr,
|
|
30
|
-
"ja-JP": localeJaJp,
|
|
31
|
-
"ko-KR": localeKoKr,
|
|
32
16
|
"zh-TW": localeZhTw,
|
|
33
17
|
} as const satisfies Record<string, Record<string, string>>;
|
|
34
18
|
|
|
@@ -39,19 +23,11 @@ export const SUPPORTED_LOCALES = Object.keys(LOCALE_MESSAGES) as GeneratedLocale
|
|
|
39
23
|
export const DAYJS_LOCALE_MAP: Record<string, string> = {
|
|
40
24
|
"zh-CN": "zh-cn",
|
|
41
25
|
"en-US": "en",
|
|
42
|
-
"es-ES": "es",
|
|
43
|
-
"fr-FR": "fr",
|
|
44
|
-
"ja-JP": "ja",
|
|
45
|
-
"ko-KR": "ko",
|
|
46
26
|
"zh-TW": "zh-tw",
|
|
47
27
|
};
|
|
48
28
|
|
|
49
29
|
export const ELEMENT_LOCALES = {
|
|
50
30
|
"zh-CN": elementLocaleZhCn,
|
|
51
31
|
"en-US": elementLocaleEnUs,
|
|
52
|
-
"es-ES": elementLocaleEsEs,
|
|
53
|
-
"fr-FR": elementLocaleFrFr,
|
|
54
|
-
"ja-JP": elementLocaleJaJp,
|
|
55
|
-
"ko-KR": elementLocaleKoKr,
|
|
56
32
|
"zh-TW": elementLocaleZhTw,
|
|
57
33
|
} as const;
|
|
@@ -187,10 +187,6 @@ function fallbackNativeLanguageName(languageCode: SupportedLocale): string {
|
|
|
187
187
|
"zh-CN": "简体中文",
|
|
188
188
|
"zh-TW": "繁體中文",
|
|
189
189
|
"en-US": "English",
|
|
190
|
-
"ja-JP": "日本語",
|
|
191
|
-
"ko-KR": "한국어",
|
|
192
|
-
"fr-FR": "Français",
|
|
193
|
-
"es-ES": "Español",
|
|
194
190
|
}[languageCode];
|
|
195
191
|
}
|
|
196
192
|
|
|
@@ -23,12 +23,8 @@
|
|
|
23
23
|
"common.field.phone": "手机号码",
|
|
24
24
|
"common.field.start_time": "开始时间",
|
|
25
25
|
"common.language.en-US": "English",
|
|
26
|
-
"common.language.ja-JP": "日本語",
|
|
27
26
|
"common.language.zh-CN": "简体中文",
|
|
28
27
|
"common.language.zh-TW": "繁体中文",
|
|
29
|
-
"common.language.ko-KR": "韩语",
|
|
30
|
-
"common.language.fr-FR": "法语",
|
|
31
|
-
"common.language.es-ES": "西班牙语",
|
|
32
28
|
"common.message.no_data": "暂无数据",
|
|
33
29
|
"common.message.operation_success": "操作成功",
|
|
34
30
|
"common.message.system_error": "系统出错",
|
|
@@ -23,12 +23,8 @@
|
|
|
23
23
|
"common.field.phone": "手機號碼",
|
|
24
24
|
"common.field.start_time": "開始時間",
|
|
25
25
|
"common.language.en-US": "英文",
|
|
26
|
-
"common.language.ja-JP": "日文",
|
|
27
26
|
"common.language.zh-CN": "簡體中文",
|
|
28
27
|
"common.language.zh-TW": "繁體中文",
|
|
29
|
-
"common.language.ko-KR": "韓文",
|
|
30
|
-
"common.language.fr-FR": "法文",
|
|
31
|
-
"common.language.es-ES": "西班牙文",
|
|
32
28
|
"common.message.no_data": "暫無資料",
|
|
33
29
|
"common.message.operation_success": "操作成功",
|
|
34
30
|
"common.message.system_error": "系統出錯",
|
|
@@ -3,6 +3,8 @@ import type { RouteItem, RouteMeta } from "../rpc/system/admin/v1/auth";
|
|
|
3
3
|
import { BaseMenuType } from "../rpc/system/admin/v1/common";
|
|
4
4
|
import { t } from "../locales";
|
|
5
5
|
|
|
6
|
+
export { getRouteMenuKey } from "./menuKey";
|
|
7
|
+
|
|
6
8
|
const mode = import.meta.env.VITE_ROUTER_MODE;
|
|
7
9
|
|
|
8
10
|
/** 树形或枚举数据字段映射配置。 */
|
|
@@ -203,22 +205,6 @@ export function getRouteTarget(item: RouteItem): string {
|
|
|
203
205
|
return item.path ?? "";
|
|
204
206
|
}
|
|
205
207
|
|
|
206
|
-
/** 获取菜单节点的首个可跳转子路径。 */
|
|
207
|
-
function getFirstRoutePath(item: RouteItem): string {
|
|
208
|
-
if (item.path) return item.path;
|
|
209
|
-
for (const child of item.children ?? []) {
|
|
210
|
-
const path = getFirstRoutePath(child);
|
|
211
|
-
if (path) return path;
|
|
212
|
-
}
|
|
213
|
-
return "";
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/** 获取菜单节点在 Element Plus 菜单树中的稳定索引。 */
|
|
217
|
-
export function getRouteMenuKey(item: RouteItem): string {
|
|
218
|
-
if (item.path) return item.path;
|
|
219
|
-
return `folder:${getFirstRoutePath(item) || getRouteMetaTitle(item.meta)}`;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
208
|
/** 判断路由路径是否匹配菜单路径,兼容动态参数。 */
|
|
223
209
|
function matchRoutePath(menuPath: string, currentPath: string): boolean {
|
|
224
210
|
const menuSegments = menuPath.split("/").filter(Boolean);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RouteItem } from "../rpc/system/admin/v1/auth";
|
|
2
|
+
|
|
3
|
+
/** 获取菜单节点的首个可跳转子路径。 */
|
|
4
|
+
function getFirstRoutePath(item: RouteItem): string {
|
|
5
|
+
if (item.path) return item.path;
|
|
6
|
+
for (const child of item.children ?? []) {
|
|
7
|
+
const path = getFirstRoutePath(child);
|
|
8
|
+
if (path) return path;
|
|
9
|
+
}
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** 获取菜单节点在 Element Plus 菜单树中的稳定索引。 */
|
|
14
|
+
export function getRouteMenuKey(item: RouteItem): string {
|
|
15
|
+
if (item.path) return item.path;
|
|
16
|
+
const title = item.meta?.title ?? "";
|
|
17
|
+
return `folder:${title}:${getFirstRoutePath(item)}`;
|
|
18
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liujitcn/kratos-admin-core",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.26",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "kratos-admin frontend runtime and base modules",
|
|
7
7
|
"author": {
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"scripts": {
|
|
203
203
|
"build": "pnpm build:package",
|
|
204
204
|
"build:package": "node ../../scripts/build-package.mjs .",
|
|
205
|
-
"test": "tsc -p tsconfig.test.json && node --test dist/test/tests/modules.test.js dist/test/tests/dict.test.js",
|
|
205
|
+
"test": "tsc -p tsconfig.test.json && node --test dist/test/tests/modules.test.js dist/test/tests/dict.test.js dist/test/tests/menu.test.js",
|
|
206
206
|
"type:check": "vue-tsc --noEmit --skipLibCheck"
|
|
207
207
|
}
|
|
208
208
|
}
|
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"common.action.back": "Volver",
|
|
3
|
-
"common.action.cancel": "Cancelar",
|
|
4
|
-
"common.action.close": "Cerrar",
|
|
5
|
-
"common.action.confirm": "Confirmar",
|
|
6
|
-
"common.action.create": "Crear",
|
|
7
|
-
"common.action.delete": "Eliminar",
|
|
8
|
-
"common.action.download": "Descargar",
|
|
9
|
-
"common.action.edit": "Editar",
|
|
10
|
-
"common.action.expand": "Expandir",
|
|
11
|
-
"common.action.collapse": "Contraer",
|
|
12
|
-
"common.action.login": "Iniciar sesión",
|
|
13
|
-
"common.action.logout": "Cerrar sesión",
|
|
14
|
-
"common.action.reset": "Restablecer",
|
|
15
|
-
"common.action.save": "Guardar",
|
|
16
|
-
"common.action.search": "Buscar",
|
|
17
|
-
"common.action.view": "Ver",
|
|
18
|
-
"common.field.end_time": "Hora de fin",
|
|
19
|
-
"common.field.language": "Idioma",
|
|
20
|
-
"common.field.operation": "Acciones",
|
|
21
|
-
"common.field.parameter_name": "Nombre del parámetro",
|
|
22
|
-
"common.field.parameter_value": "Valor del parámetro",
|
|
23
|
-
"common.field.phone": "Número de teléfono",
|
|
24
|
-
"common.field.start_time": "Hora de inicio",
|
|
25
|
-
"common.language.en-US": "Inglés",
|
|
26
|
-
"common.language.ja-JP": "日本語",
|
|
27
|
-
"common.language.zh-CN": "简体中文",
|
|
28
|
-
"common.language.zh-TW": "Chino tradicional",
|
|
29
|
-
"common.language.ko-KR": "Coreano",
|
|
30
|
-
"common.language.fr-FR": "Francés",
|
|
31
|
-
"common.language.es-ES": "Español",
|
|
32
|
-
"common.message.no_data": "Sin datos",
|
|
33
|
-
"common.message.operation_success": "Operación completada",
|
|
34
|
-
"common.message.system_error": "Error del sistema",
|
|
35
|
-
"common.validation.phone_invalid": "Introduce un número de teléfono válido",
|
|
36
|
-
"common.validation.phone_required": "Introduce un número de teléfono",
|
|
37
|
-
"common.title.notice": "Aviso",
|
|
38
|
-
"common.title.warning": "Confirmación",
|
|
39
|
-
"common.placeholder.input": "Introduce un valor",
|
|
40
|
-
"common.placeholder.input_content": "Introduce el contenido",
|
|
41
|
-
"common.placeholder.select": "Selecciona un valor",
|
|
42
|
-
"common.status.disabled": "Deshabilitado",
|
|
43
|
-
"common.status.enabled": "Habilitado",
|
|
44
|
-
"common.value.female": "Mujer",
|
|
45
|
-
"common.value.male": "Hombre",
|
|
46
|
-
"common.value.all": "Todos",
|
|
47
|
-
"core.auth.login_again": "Vuelve a iniciar sesión",
|
|
48
|
-
"core.auth.refresh_token_missing": "Falta el token de actualización",
|
|
49
|
-
"core.auth.session_expired": "Tu sesión ha caducado. Vuelve a iniciar sesión.",
|
|
50
|
-
"core.auth.no_menu_permission": "Esta cuenta no tiene permisos de menú. Contacta con un administrador.",
|
|
51
|
-
"core.auth.no_permission": "Acceso denegado",
|
|
52
|
-
"core.clipboard.success": "Copiado",
|
|
53
|
-
"core.cron.cycle_unit.day": "días",
|
|
54
|
-
"core.cron.cycle_unit.hour": "horas",
|
|
55
|
-
"core.cron.cycle_unit.minute": "minutos",
|
|
56
|
-
"core.cron.cycle_unit.month": "meses",
|
|
57
|
-
"core.cron.cycle_unit.second": "segundos",
|
|
58
|
-
"core.cron.cycle_unit.year": "años",
|
|
59
|
-
"core.cron.description.every": "Cada {unit}",
|
|
60
|
-
"core.cron.description.range": "{segment} de {start} a {end}",
|
|
61
|
-
"core.cron.description.specific": "{segment}: {values}",
|
|
62
|
-
"core.cron.description.step": "Desde {start} {unit}, ejecutar cada {step} {cycleUnit}",
|
|
63
|
-
"core.cron.description.unspecified": "{segment} no especificado",
|
|
64
|
-
"core.cron.description.weekday": "Día laborable más cercano al día {day} de este mes",
|
|
65
|
-
"core.cron.description_separator": "; ",
|
|
66
|
-
"core.cron.edit": "Editar expresión",
|
|
67
|
-
"core.cron.every_unit": "Cada {unit}",
|
|
68
|
-
"core.cron.expression": "Expresión Cron",
|
|
69
|
-
"core.cron.from": "desde",
|
|
70
|
-
"core.cron.last_day": "Último día de este mes",
|
|
71
|
-
"core.cron.nearest_workday": "día laborable más cercano",
|
|
72
|
-
"core.cron.not_configured": "No hay programación configurada",
|
|
73
|
-
"core.cron.placeholder": "Introduce una expresión Cron",
|
|
74
|
-
"core.cron.preset.daily_eight": "Cada día a las 8:00",
|
|
75
|
-
"core.cron.preset.daily_midnight": "Cada día a medianoche",
|
|
76
|
-
"core.cron.preset.every_five_minutes": "Cada 5 minutos",
|
|
77
|
-
"core.cron.preset.every_hour": "Cada hora",
|
|
78
|
-
"core.cron.preset.every_minute": "Cada minuto",
|
|
79
|
-
"core.cron.preset.monthly_first": "El día 1 de cada mes a medianoche",
|
|
80
|
-
"core.cron.preset.next_year_daily": "Cada día del próximo año a medianoche",
|
|
81
|
-
"core.cron.presets": "Expresiones habituales",
|
|
82
|
-
"core.cron.range": "Rango",
|
|
83
|
-
"core.cron.repeat": "Repetir",
|
|
84
|
-
"core.cron.run_once": "Ejecutar una vez por {unit}",
|
|
85
|
-
"core.cron.segment.day": "Día",
|
|
86
|
-
"core.cron.segment.hour": "Hora",
|
|
87
|
-
"core.cron.segment.minute": "Minuto",
|
|
88
|
-
"core.cron.segment.month": "Mes",
|
|
89
|
-
"core.cron.segment.second": "Segundo",
|
|
90
|
-
"core.cron.segment.year": "Año",
|
|
91
|
-
"core.cron.specific": "Específico",
|
|
92
|
-
"core.cron.start_every": "{unit}, cada",
|
|
93
|
-
"core.cron.this_month": "Día de este mes",
|
|
94
|
-
"core.cron.title": "Editar expresión de programación",
|
|
95
|
-
"core.cron.to": "a",
|
|
96
|
-
"core.cron.unit.day": "día",
|
|
97
|
-
"core.cron.unit.hour": "hora",
|
|
98
|
-
"core.cron.unit.minute": "minuto",
|
|
99
|
-
"core.cron.unit.month": "mes",
|
|
100
|
-
"core.cron.unit.second": "segundo",
|
|
101
|
-
"core.cron.unit.year": "año",
|
|
102
|
-
"core.cron.unspecified": "No especificado",
|
|
103
|
-
"core.cron.value_separator": ", ",
|
|
104
|
-
"core.cron.value_with_unit": "{value}{unit}",
|
|
105
|
-
"core.cron.workday": "Día laborable",
|
|
106
|
-
"core.data.confirm_action": "¿Seguro que quieres {action}?",
|
|
107
|
-
"core.data.operation_success": "{action} correctamente",
|
|
108
|
-
"core.download.large_file_notice": "Los conjuntos de datos grandes pueden tardar más en descargarse. Espera.",
|
|
109
|
-
"core.error.403.detail": "No tienes permiso para acceder a esta página.",
|
|
110
|
-
"core.error.404.detail": "La página solicitada no existe.",
|
|
111
|
-
"core.error.500.detail": "El servidor ha encontrado un error.",
|
|
112
|
-
"core.error.pending.detail": "Esta función está en construcción.",
|
|
113
|
-
"core.error.javascript.eval": "Uso no válido de Eval",
|
|
114
|
-
"core.error.javascript.internal": "Error interno del motor de JavaScript",
|
|
115
|
-
"core.error.javascript.range": "El parámetro está fuera de rango",
|
|
116
|
-
"core.error.javascript.reference": "No se encontró el objeto",
|
|
117
|
-
"core.error.javascript.syntax": "Error de sintaxis",
|
|
118
|
-
"core.error.javascript.type": "Tipo u objeto no válido",
|
|
119
|
-
"core.error.javascript.unknown": "Error desconocido",
|
|
120
|
-
"core.error.javascript.uri": "Error de URI",
|
|
121
|
-
"core.header.fullscreen": "Pantalla completa",
|
|
122
|
-
"core.header.fullscreen_exit": "Salir de pantalla completa",
|
|
123
|
-
"core.header.fullscreen_unsupported": "Este navegador no admite la pantalla completa",
|
|
124
|
-
"core.header.language": "Cambiar idioma",
|
|
125
|
-
"core.header.menu_search": "Buscar menús",
|
|
126
|
-
"core.header.menu_search_empty": "No se encontraron menús",
|
|
127
|
-
"core.header.menu_search_placeholder": "Buscar por nombre o ruta del menú",
|
|
128
|
-
"core.header.size.default": "Predeterminado",
|
|
129
|
-
"core.header.size.large": "Grande",
|
|
130
|
-
"core.header.size.small": "Pequeño",
|
|
131
|
-
"core.header.size_select": "Tamaño de los componentes",
|
|
132
|
-
"core.header.theme": "Configuración del tema",
|
|
133
|
-
"core.icon.empty": "No se encontraron iconos coincidentes",
|
|
134
|
-
"core.icon.placeholder": "Selecciona un icono",
|
|
135
|
-
"core.icon.search": "Buscar icons",
|
|
136
|
-
"core.layout.department_unassigned": "No hay departamento asignado",
|
|
137
|
-
"core.layout.home": "Inicio",
|
|
138
|
-
"core.layout.info": "Información personal",
|
|
139
|
-
"core.layout.password_change": "Cambiar contraseña",
|
|
140
|
-
"core.layout.unnamed_menu": "Menú sin nombre",
|
|
141
|
-
"core.layout.logout_confirm": "¿Seguro que quieres cerrar sesión?",
|
|
142
|
-
"core.layout.logout_success": "Sesión cerrada",
|
|
143
|
-
"core.layout.not_set": "No configurado",
|
|
144
|
-
"core.layout.role_unassigned": "No hay rol asignado",
|
|
145
|
-
"core.login.behavior_click": "Haz clic en los caracteres en orden",
|
|
146
|
-
"core.login.behavior_confirm": "Confirmar",
|
|
147
|
-
"core.login.behavior_puzzle": "Arrastra el control deslizante para completar el rompecabezas",
|
|
148
|
-
"core.login.behavior_rotate": "Arrastra el control deslizante para orientar correctamente la imagen interior",
|
|
149
|
-
"core.login.captcha": "Introduce el código de verificación",
|
|
150
|
-
"core.login.captcha_alt": "Código de verificación",
|
|
151
|
-
"core.login.greeting.afternoon": "Buenas tardes",
|
|
152
|
-
"core.login.greeting.evening": "Buenas noches",
|
|
153
|
-
"core.login.greeting.morning": "Buenos días",
|
|
154
|
-
"core.login.greeting.night": "Hola",
|
|
155
|
-
"core.login.greeting.noon": "Buenas tardes",
|
|
156
|
-
"core.login.other_methods": "Otros métodos de inicio de sesión",
|
|
157
|
-
"core.login.password": "Introduce la contraseña",
|
|
158
|
-
"core.login.tenant_code": "Introduce el código del inquilino",
|
|
159
|
-
"core.login.user_name": "Introduce el nombre de usuario",
|
|
160
|
-
"core.login.welcome": "Bienvenido a la consola de administración",
|
|
161
|
-
"core.oauth.dingtalk": "DingTalk",
|
|
162
|
-
"core.oauth.feishu": "Feishu",
|
|
163
|
-
"core.oauth.wechat": "WeChat",
|
|
164
|
-
"core.oauth.wechatmp": "Cuenta oficial de WeChat",
|
|
165
|
-
"core.oauth.wechatwork": "WeCom",
|
|
166
|
-
"core.oauth.unknown": "Proveedor desconocido",
|
|
167
|
-
"core.password.error": "La contraseña debe contener mayúsculas, minúsculas, un número y un carácter especial, y tener al menos 8 caracteres",
|
|
168
|
-
"core.password.crypto_unsupported": "El cifrado de contraseñas no es compatible con este entorno",
|
|
169
|
-
"core.password.required": "La contraseña es obligatoria",
|
|
170
|
-
"core.password.strength": "contraseña strength",
|
|
171
|
-
"core.password.strength.empty": "No introducida",
|
|
172
|
-
"core.password.strength.high": "Alta",
|
|
173
|
-
"core.password.strength.low": "Baja",
|
|
174
|
-
"core.password.strength.medium": "Media",
|
|
175
|
-
"core.password.tip": "Usa al menos 8 caracteres con mayúsculas, minúsculas, un número y un carácter especial. La contraseña debe alcanzar una seguridad alta antes de enviarla.",
|
|
176
|
-
"core.theme.accordion": "Menú acordeón",
|
|
177
|
-
"core.theme.aside_inverted": "Barra lateral oscura",
|
|
178
|
-
"core.theme.aside_inverted_tip": "Usar colores oscuros para la barra lateral",
|
|
179
|
-
"core.theme.breadcrumb": "Migas de pan",
|
|
180
|
-
"core.theme.breadcrumb_icon": "Iconos de migas de pan",
|
|
181
|
-
"core.theme.color": "Color del tema",
|
|
182
|
-
"core.theme.dark": "Modo oscuro",
|
|
183
|
-
"core.theme.footer": "Pie de página",
|
|
184
|
-
"core.theme.global": "Tema global",
|
|
185
|
-
"core.theme.grey": "Modo escala de grises",
|
|
186
|
-
"core.theme.header_inverted": "Encabezado oscuro",
|
|
187
|
-
"core.theme.header_inverted_tip": "Usar colores oscuros en el encabezado",
|
|
188
|
-
"core.theme.interface": "Configuración de la interfaz",
|
|
189
|
-
"core.theme.layout": "Diseño",
|
|
190
|
-
"core.theme.layout.classic": "Clásico",
|
|
191
|
-
"core.theme.layout.columns": "Columnas",
|
|
192
|
-
"core.theme.layout.transverse": "Transversal",
|
|
193
|
-
"core.theme.layout.vertical": "Vertical",
|
|
194
|
-
"core.theme.menu_collapse": "Contraer menú",
|
|
195
|
-
"core.theme.primary_reset": "Color del tema restablecido a {color}",
|
|
196
|
-
"core.theme.settings": "Configuración del diseño",
|
|
197
|
-
"core.theme.tabs": "Pestañas",
|
|
198
|
-
"core.theme.tabs_icon": "Iconos de pestañas",
|
|
199
|
-
"core.theme.watermark": "Marca de agua",
|
|
200
|
-
"core.theme.weak": "Modo para daltonismo",
|
|
201
|
-
"core.theme.color_hex_invalid": "Introduce un color hexadecimal válido",
|
|
202
|
-
"core.theme.color_rgb_invalid": "Introduce un color RGB válido",
|
|
203
|
-
"core.route.forbidden": "403 página",
|
|
204
|
-
"core.route.login": "Iniciar sesión",
|
|
205
|
-
"core.route.not_found": "404 página",
|
|
206
|
-
"core.route.server_error": "Página de error del servidor (500)",
|
|
207
|
-
"core.tabs.close_all": "Cerrar todo",
|
|
208
|
-
"core.tabs.close_current": "Cerrar actual",
|
|
209
|
-
"core.tabs.close_left": "Cerrar pestañas a la izquierda",
|
|
210
|
-
"core.tabs.close_other": "Cerrar otras pestañas",
|
|
211
|
-
"core.tabs.close_right": "Cerrar pestañas a la derecha",
|
|
212
|
-
"core.tabs.maximize": "Maximizar",
|
|
213
|
-
"core.tabs.refresh": "Actualizar actual",
|
|
214
|
-
"core.table.collapse_all": "Contraer todo",
|
|
215
|
-
"core.table.column_name": "Columna",
|
|
216
|
-
"core.table.column_setting": "Configuración de columnas",
|
|
217
|
-
"core.table.expand_all": "Expandir todo",
|
|
218
|
-
"core.table.hide_search": "Ocultar búsqueda",
|
|
219
|
-
"core.table.no_configurable_columns": "No hay columnas configurables",
|
|
220
|
-
"core.table.refresh": "Actualizar datos",
|
|
221
|
-
"core.table.show": "Visible",
|
|
222
|
-
"core.table.show_search": "Mostrar búsqueda",
|
|
223
|
-
"core.table.sort": "Ordenable",
|
|
224
|
-
"core.tree.filter_placeholder": "Introduce palabras clave para filtrar",
|
|
225
|
-
"core.tree.reset_selection": "Restablecer selección",
|
|
226
|
-
"core.upload.action": "Cargar archivo",
|
|
227
|
-
"core.upload.batch_add": "Añadir {resource} por lotes",
|
|
228
|
-
"core.upload.batch_failed": "No se pudieron añadir {resource} por lotes. Vuelve a subir el archivo.",
|
|
229
|
-
"core.upload.batch_success": "{resource} added Éxitofully",
|
|
230
|
-
"core.upload.click": "haz clic para cargar",
|
|
231
|
-
"core.upload.data_cover": "Sobrescribir datos",
|
|
232
|
-
"core.upload.drag_or_click": "Suelta el archivo aquí o ",
|
|
233
|
-
"core.upload.excel_format": "Sube un archivo .xls o .xlsx estándar de hasta {size} MB",
|
|
234
|
-
"core.upload.file": "Carga de archivo",
|
|
235
|
-
"core.upload.file_failed": "No se pudo subir el archivo. Inténtalo de nuevo.",
|
|
236
|
-
"core.upload.file_format_invalid": "El formato del archivo no es compatible",
|
|
237
|
-
"core.upload.file_size_exceeded": "El archivo no puede superar {size} MB",
|
|
238
|
-
"core.upload.file_success": "Archivo cargado",
|
|
239
|
-
"core.upload.image_failed": "No se pudo subir la imagen. Inténtalo de nuevo.",
|
|
240
|
-
"core.upload.image_format_invalid": "El formato de imagen no es compatible",
|
|
241
|
-
"core.upload.image_limit_exceeded": "Puedes subir hasta {limit} imágenes. Elimina una antes de subir otra.",
|
|
242
|
-
"core.upload.image_size_exceeded": "La imagen no puede superar {size} MB",
|
|
243
|
-
"core.upload.image_success": "Imagen cargada",
|
|
244
|
-
"core.upload.limit_exceeded": "Puedes subir hasta {limit} archivos. Elimina uno antes de subir otro.",
|
|
245
|
-
"core.upload.single_file_only": "Solo se puede cargar un archivo",
|
|
246
|
-
"core.upload.template": "Plantilla de {resource}",
|
|
247
|
-
"core.upload.template_download": "Descargar plantilla",
|
|
248
|
-
"core.upload.unnamed_file": "Archivo sin nombre",
|
|
249
|
-
"common.action.create_resource": "Crear {resource}",
|
|
250
|
-
"common.action.edit_resource": "Editar {resource}",
|
|
251
|
-
"common.action.refresh_cache": "Actualizar caché",
|
|
252
|
-
"common.dialog.cancel_delete": "Se canceló la eliminación de {resource}",
|
|
253
|
-
"common.dialog.delete_batch": "¿Eliminar los {count} {resource} {unit} seleccionados?",
|
|
254
|
-
"common.dialog.delete_selected": "¿Eliminar el {resource} seleccionado?",
|
|
255
|
-
"common.dialog.delete_single": "¿Eliminar este {resource}?",
|
|
256
|
-
"common.dialog.resource_field": "{field}: {value}",
|
|
257
|
-
"common.dialog.status_change": "¿{action} este {resource}?\n{field}: {value}",
|
|
258
|
-
"common.field.created_at": "Creado el",
|
|
259
|
-
"common.field.remark": "Observaciones",
|
|
260
|
-
"common.field.sort": "Orden",
|
|
261
|
-
"common.field.status": "Estado",
|
|
262
|
-
"common.field.tenant": "Inquilino",
|
|
263
|
-
"common.field.updated_at": "Actualizado el",
|
|
264
|
-
"common.message.create_success": "{resource} creado",
|
|
265
|
-
"common.message.delete_success": "{resource} eliminado",
|
|
266
|
-
"common.message.load_children_failed": "No se pudo cargar el {resource} secundario",
|
|
267
|
-
"common.message.refresh_success": "Actualizado",
|
|
268
|
-
"common.message.select_delete_item": "Selecciona elementos para eliminar",
|
|
269
|
-
"common.message.status_success": "{action} completado",
|
|
270
|
-
"common.message.update_success": "{resource} actualizado",
|
|
271
|
-
"common.placeholder.remark": "Introduce observaciones",
|
|
272
|
-
"common.validation.max_length": "{field} no debe superar {max} caracteres",
|
|
273
|
-
"common.validation.required_input": "Introduce {field}",
|
|
274
|
-
"common.validation.required_select": "Selecciona {field}",
|
|
275
|
-
"common.validation.sort_positive": "El orden debe ser mayor que 0",
|
|
276
|
-
"common.field.action": "Acciones",
|
|
277
|
-
"common.placeholder.start_date": "Fecha de inicio",
|
|
278
|
-
"common.placeholder.end_date": "Fecha de fin",
|
|
279
|
-
"common.value.yes": "Sí",
|
|
280
|
-
"common.value.no": "No",
|
|
281
|
-
"common.value.unknown": "Desconocido",
|
|
282
|
-
"common.value.none": "Ninguno"
|
|
283
|
-
}
|