@lupinum/ginko 0.4.0 → 0.5.0
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 +150 -0
- package/README.md +2 -2
- package/dist/basics.d.mts +492 -0
- package/dist/basics.d.ts +492 -0
- package/dist/basics.mjs +416 -0
- package/dist/cli/index.mjs +54 -55
- package/dist/index.d.mts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +3 -3
- package/dist/internal/search.mjs +6 -3
- package/dist/internal.d.mts +387 -41
- package/dist/internal.d.ts +387 -41
- package/dist/internal.mjs +267 -101
- package/dist/nuxt/module.d.mts +2 -2
- package/dist/nuxt/module.d.ts +2 -2
- package/dist/nuxt/module.mjs +105 -13
- package/dist/nuxt/runtime/GinkoImage.d.mts +1 -1
- package/dist/nuxt/runtime/GinkoMarkdown.mjs +2 -2
- package/dist/nuxt/runtime/composables.d.mts +4 -3
- package/dist/nuxt/runtime/composables.mjs +19 -15
- package/dist/nuxt/runtime/fetch.d.mts +3 -1
- package/dist/nuxt/runtime/fetch.mjs +12 -6
- package/dist/nuxt/runtime/markdown.d.mts +3 -0
- package/dist/nuxt/runtime/markdown.mjs +15 -3
- package/dist/nuxt/runtime/plugin.mjs +6 -35
- package/dist/nuxt/runtime/preview-listener.d.mts +13 -0
- package/dist/nuxt/runtime/preview-listener.mjs +37 -0
- package/dist/nuxt/runtime/preview.vue +3 -1
- package/dist/nuxt/runtime/schema.d.ts +6 -0
- package/dist/nuxt/runtime/server/bundles.d.ts +4 -0
- package/dist/nuxt/runtime/server/files-md.d.ts +2 -0
- package/dist/nuxt/runtime/server/files.d.ts +2 -0
- package/dist/nuxt/runtime/server/headers.d.ts +2 -0
- package/dist/nuxt/runtime/server/items.d.mts +12 -0
- package/dist/nuxt/runtime/server/items.d.ts +12 -0
- package/dist/nuxt/runtime/server/items.mjs +17 -0
- package/dist/nuxt/runtime/server/llms-full.d.ts +2 -0
- package/dist/nuxt/runtime/server/llms.d.ts +2 -0
- package/dist/nuxt/runtime/server/markdown-trees.d.ts +2 -0
- package/dist/nuxt/runtime/server/markdown.d.ts +2 -0
- package/dist/nuxt/runtime/server/markdown.mjs +1 -1
- package/dist/nuxt/runtime/server/platform-md.d.mts +3 -0
- package/dist/nuxt/runtime/server/platform-md.d.ts +3 -0
- package/dist/nuxt/runtime/server/platform-md.mjs +71 -0
- package/dist/nuxt/runtime/server/redirects.d.ts +2 -0
- package/dist/nuxt/runtime/server/robots.d.ts +2 -0
- package/dist/nuxt/runtime/server/search.d.ts +2 -0
- package/dist/nuxt/runtime/server/site-config.d.ts +14 -0
- package/dist/nuxt/runtime/server/sitemap-source.d.ts +2 -0
- package/dist/nuxt/runtime/server/sitemap-xml.d.ts +24 -0
- package/dist/nuxt/runtime/server/sitemap.d.ts +2 -0
- package/dist/nuxt/runtime/shared.d.mts +10 -3
- package/dist/nuxt/runtime/shared.mjs +2 -2
- package/dist/shared/ginko.1wwZv4B_.d.ts +1622 -0
- package/dist/shared/{ginko.BBkZW2nW.d.ts → ginko.6cI8KXZP.d.mts} +2 -2
- package/dist/shared/{ginko.CQvxhyez.mjs → ginko.AprJymER.mjs} +30 -1
- package/dist/shared/ginko.BNVC-g9n.mjs +10389 -0
- package/dist/shared/{ginko.Bwan3BB-.d.mts → ginko.B_pACpVU.d.ts} +2 -2
- package/dist/shared/{ginko.CrNRBkS5.mjs → ginko.C4gcOovG.mjs} +253 -309
- package/dist/shared/{ginko.C90fPpMP.mjs → ginko.CXA2R3aS.mjs} +128 -101
- package/dist/shared/ginko.CjWB8N7f.d.ts +128 -0
- package/dist/shared/ginko.D1PeQ3ds.mjs +36 -0
- package/dist/shared/ginko.DIl7l-75.mjs +26 -0
- package/dist/shared/ginko.DY7RbCEw.mjs +601 -0
- package/dist/shared/ginko.Dmgixfpf.mjs +130 -0
- package/dist/shared/{ginko.D-fNojn9.d.mts → ginko.DrkUeYFP.d.mts} +824 -10
- package/dist/shared/{ginko.D-fNojn9.d.ts → ginko.DrkUeYFP.d.ts} +824 -10
- package/dist/shared/{ginko.akHewCGt.d.mts → ginko.DvPtlHIz.d.mts} +50 -5
- package/dist/shared/{ginko.BDF3bW0C.d.ts → ginko.EelR5dt9.d.ts} +50 -5
- package/dist/shared/ginko.ULKQnAWd.d.ts +91 -0
- package/dist/shared/ginko.loGIxGZg.d.mts +91 -0
- package/dist/shared/ginko.o1yIKlgj.d.mts +128 -0
- package/dist/shared/ginko.plW4dLmm.d.mts +1622 -0
- package/dist/shared/{ginko.Dht0xxE5.mjs → ginko.raCzOPYC.mjs} +1 -2
- package/dist/shared/ginko.yKMIjJ68.mjs +84 -0
- package/dist/vue.d.mts +5 -4
- package/dist/vue.d.ts +5 -4
- package/dist/vue.mjs +1 -1
- package/i18n/ar.json +212 -0
- package/i18n/de.json +9 -1
- package/i18n/en.json +9 -1
- package/i18n/es.json +12 -4
- package/i18n/fr.json +212 -0
- package/i18n/it.json +212 -0
- package/package.json +7 -3
- package/dist/shared/ginko.BTUfZCfa.d.mts +0 -172
- package/dist/shared/ginko.C-QjDn3O.mjs +0 -4944
- package/dist/shared/ginko.Dc0oNcDv.d.ts +0 -172
- package/dist/shared/ginko.Mn30dmlm.mjs +0 -20
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { readFileSync, mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
|
-
import { c as checkLinks, e as externalLinks } from './ginko.
|
|
4
|
-
import { m as msg } from './ginko.C-QjDn3O.mjs';
|
|
3
|
+
import { c as checkLinks, e as externalLinks, m as msg } from './ginko.BNVC-g9n.mjs';
|
|
5
4
|
|
|
6
5
|
const TIMEOUT_MS = 8e3;
|
|
7
6
|
const CONCURRENCY = 4;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { a as parseMarkdown } from './ginko.BNVC-g9n.mjs';
|
|
2
|
+
|
|
3
|
+
const BUNDLE_FORMAT = 3;
|
|
4
|
+
function entryTitle(item, fields) {
|
|
5
|
+
if (typeof item.data.title === "string") return item.data.title;
|
|
6
|
+
const slug = Object.values(fields ?? {}).find((field) => field.type === "slug");
|
|
7
|
+
const named = slug?.type === "slug" ? item.data[slug.from] : void 0;
|
|
8
|
+
return typeof named === "string" && named.trim() ? named : item.id;
|
|
9
|
+
}
|
|
10
|
+
function isBundle(value) {
|
|
11
|
+
if (!isRecord(value)) return false;
|
|
12
|
+
const b = value;
|
|
13
|
+
if (b.format !== BUNDLE_FORMAT || typeof b.site !== "string" || typeof b.locale !== "string") return false;
|
|
14
|
+
if (!Number.isInteger(b.schemaRev) || !Number.isInteger(b.contentRev) || !isRecord(b.bricks)) return false;
|
|
15
|
+
return Object.values(b.bricks).every(isBundleBrick);
|
|
16
|
+
}
|
|
17
|
+
function knownBricks(bundle, schema) {
|
|
18
|
+
return { ...bundle, bricks: Object.fromEntries(Object.entries(bundle.bricks).filter(([key]) => Object.hasOwn(schema.bricks, key))) };
|
|
19
|
+
}
|
|
20
|
+
function withFileBricks(platform, files, schema) {
|
|
21
|
+
const base = platform ?? files;
|
|
22
|
+
if (!base) throw new Error("withFileBricks: no bundle");
|
|
23
|
+
const fromPlatform = Object.entries(platform?.bricks ?? {}).filter(([key]) => schema.bricks[key]?.source !== "files");
|
|
24
|
+
return { ...base, bricks: { ...Object.fromEntries(fromPlatform), ...files?.bricks } };
|
|
25
|
+
}
|
|
26
|
+
async function markdownTrees(fields, data) {
|
|
27
|
+
const trees = {};
|
|
28
|
+
const parse = async (text) => (await parseMarkdown(text)).value;
|
|
29
|
+
const walk = async (inner, row, path) => {
|
|
30
|
+
for (const [name, field] of Object.entries(inner)) {
|
|
31
|
+
const value = row[name];
|
|
32
|
+
const leaf = path ? `${path}.${name}` : name;
|
|
33
|
+
if (field.type === "markdown" && typeof value === "string") trees[leaf] = await parse(value);
|
|
34
|
+
else if (field.type === "markdown" && isRecord(value)) {
|
|
35
|
+
const perLocale = {};
|
|
36
|
+
for (const [locale, text] of Object.entries(value)) if (typeof text === "string") perLocale[locale] = await parse(text);
|
|
37
|
+
trees[leaf] = perLocale;
|
|
38
|
+
} else if (field.type === "list" && Array.isArray(value)) {
|
|
39
|
+
for (const r of value) if (isRecord(r) && typeof r._id === "string") await walk(field.of, r, `${leaf}.${r._id}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
await walk(fields, data, "");
|
|
44
|
+
return trees;
|
|
45
|
+
}
|
|
46
|
+
async function withMarkdownTrees(bundle, schema) {
|
|
47
|
+
const fill = async (fields, data) => {
|
|
48
|
+
const out = { ...data };
|
|
49
|
+
for (const [key, field] of Object.entries(fields)) {
|
|
50
|
+
const value = out[key];
|
|
51
|
+
if (field.type === "markdown" && typeof value === "string") out[key] = (await parseMarkdown(value)).value;
|
|
52
|
+
else if (field.type === "list" && Array.isArray(value)) out[key] = await Promise.all(value.map((row) => isRecord(row) ? fill(field.of, row) : row));
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
};
|
|
56
|
+
const bricks = {};
|
|
57
|
+
for (const [key, brick] of Object.entries(bundle.bricks)) {
|
|
58
|
+
const fields = Object.hasOwn(schema.bricks, key) ? schema.bricks[key].fields : void 0;
|
|
59
|
+
if (!fields) bricks[key] = brick;
|
|
60
|
+
else if (brick.kind === "single") bricks[key] = { ...brick, data: await fill(fields, brick.data) };
|
|
61
|
+
else bricks[key] = { ...brick, items: await Promise.all(brick.items.map(async (item) => ({ ...item, data: await fill(fields, item.data) }))) };
|
|
62
|
+
}
|
|
63
|
+
return { ...bundle, bricks };
|
|
64
|
+
}
|
|
65
|
+
function bundleFits(bundle, schema) {
|
|
66
|
+
return Object.entries(schema.bricks).every(([key, brick]) => {
|
|
67
|
+
const have = Object.hasOwn(bundle.bricks, key) ? bundle.bricks[key] : void 0;
|
|
68
|
+
return have === void 0 || have.kind === (brick.kind === "single" ? "single" : "collection");
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function isBundleBrick(brick) {
|
|
72
|
+
if (!isRecord(brick)) return false;
|
|
73
|
+
if (brick.kind === "single") return isRecord(brick.data) && isStrings(brick.fallback);
|
|
74
|
+
if (brick.kind !== "collection" || !Array.isArray(brick.items)) return false;
|
|
75
|
+
return brick.items.every((item) => isRecord(item) && typeof item.id === "string" && isRecord(item.data) && isStrings(item.fallback) && (item.urls === void 0 || isRecord(item.urls) && Object.values(item.urls).every((u) => typeof u === "string")) && (item.updatedAt === void 0 || typeof item.updatedAt === "string") && (item.source === void 0 || typeof item.source === "string"));
|
|
76
|
+
}
|
|
77
|
+
function isStrings(value) {
|
|
78
|
+
return Array.isArray(value) && value.every((v) => typeof v === "string");
|
|
79
|
+
}
|
|
80
|
+
function isRecord(value) {
|
|
81
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { BUNDLE_FORMAT as B, withFileBricks as a, bundleFits as b, entryTitle as e, isBundle as i, knownBricks as k, markdownTrees as m, withMarkdownTrees as w };
|
package/dist/vue.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { PropType, Component } from 'vue';
|
|
3
|
-
import { MarkdownTree
|
|
3
|
+
import { MarkdownTree } from './index.mjs';
|
|
4
|
+
import { AttributeRegistry } from './internal.mjs';
|
|
4
5
|
import '@lupinum/ginko-i18n/core';
|
|
5
6
|
import 'comark';
|
|
6
7
|
|
|
@@ -16,7 +17,7 @@ declare const GinkoMarkdown: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
16
17
|
};
|
|
17
18
|
/** The site's component registry (`components` in ginko.config.ts): a component keeps the props it declares there. Without it a component gets only `title`, `lang`, `dir` and `aria-*`. */
|
|
18
19
|
registry: {
|
|
19
|
-
type: PropType<
|
|
20
|
+
type: PropType<AttributeRegistry>;
|
|
20
21
|
default: undefined;
|
|
21
22
|
};
|
|
22
23
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
@@ -33,13 +34,13 @@ declare const GinkoMarkdown: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
33
34
|
};
|
|
34
35
|
/** The site's component registry (`components` in ginko.config.ts): a component keeps the props it declares there. Without it a component gets only `title`, `lang`, `dir` and `aria-*`. */
|
|
35
36
|
registry: {
|
|
36
|
-
type: PropType<
|
|
37
|
+
type: PropType<AttributeRegistry>;
|
|
37
38
|
default: undefined;
|
|
38
39
|
};
|
|
39
40
|
}>> & Readonly<{}>, {
|
|
40
41
|
value: MarkdownTree | null | undefined;
|
|
41
42
|
components: Record<string, string | Component>;
|
|
42
|
-
registry:
|
|
43
|
+
registry: AttributeRegistry;
|
|
43
44
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
44
45
|
|
|
45
46
|
export { GinkoMarkdown };
|
package/dist/vue.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { PropType, Component } from 'vue';
|
|
3
|
-
import { MarkdownTree
|
|
3
|
+
import { MarkdownTree } from './index.js';
|
|
4
|
+
import { AttributeRegistry } from './internal.js';
|
|
4
5
|
import '@lupinum/ginko-i18n/core';
|
|
5
6
|
import 'comark';
|
|
6
7
|
|
|
@@ -16,7 +17,7 @@ declare const GinkoMarkdown: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
16
17
|
};
|
|
17
18
|
/** The site's component registry (`components` in ginko.config.ts): a component keeps the props it declares there. Without it a component gets only `title`, `lang`, `dir` and `aria-*`. */
|
|
18
19
|
registry: {
|
|
19
|
-
type: PropType<
|
|
20
|
+
type: PropType<AttributeRegistry>;
|
|
20
21
|
default: undefined;
|
|
21
22
|
};
|
|
22
23
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
@@ -33,13 +34,13 @@ declare const GinkoMarkdown: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
33
34
|
};
|
|
34
35
|
/** The site's component registry (`components` in ginko.config.ts): a component keeps the props it declares there. Without it a component gets only `title`, `lang`, `dir` and `aria-*`. */
|
|
35
36
|
registry: {
|
|
36
|
-
type: PropType<
|
|
37
|
+
type: PropType<AttributeRegistry>;
|
|
37
38
|
default: undefined;
|
|
38
39
|
};
|
|
39
40
|
}>> & Readonly<{}>, {
|
|
40
41
|
value: MarkdownTree | null | undefined;
|
|
41
42
|
components: Record<string, string | Component>;
|
|
42
|
-
registry:
|
|
43
|
+
registry: AttributeRegistry;
|
|
43
44
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
44
45
|
|
|
45
46
|
export { GinkoMarkdown };
|
package/dist/vue.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, h } from 'vue';
|
|
2
2
|
import { MarkdownDocument } from '@comark/vue';
|
|
3
|
-
import { B as BLOCKED_TAGS,
|
|
3
|
+
import { B as BLOCKED_TAGS, b as attributeProblem } from './shared/ginko.BNVC-g9n.mjs';
|
|
4
4
|
import 'comark';
|
|
5
5
|
import 'comark/plugins/alert';
|
|
6
6
|
import 'comark/plugins/attributes';
|
package/i18n/ar.json
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
{
|
|
2
|
+
"issues": {
|
|
3
|
+
"unknownBrick": "الكتلة «{brick}» غير موجودة.",
|
|
4
|
+
"markdown": "«{label}»: {problem}",
|
|
5
|
+
"markdownAt": "«{label}»، السطر {line}: {problem}",
|
|
6
|
+
"notObject": "يُتوقَّع كائن.",
|
|
7
|
+
"unknownField": "حقل غير معروف.",
|
|
8
|
+
"fieldMissing": "«{label}» مفقود.",
|
|
9
|
+
"notLocalized": "يجب حفظ «{label}» لكل لغة.",
|
|
10
|
+
"unknownLocale": "اللغة «{locale}» غير مُعدّة.",
|
|
11
|
+
"fieldEmpty": "«{label}» فارغ.",
|
|
12
|
+
"notText": "يجب أن يكون «{label}» نصًّا.",
|
|
13
|
+
"tooLong": "«{label}» طويل جدًّا (الحد الأقصى {max, plural, zero {# حرف} one {حرف واحد} two {حرفان} few {# أحرف} many {# حرفًا} other {# حرف}}).",
|
|
14
|
+
"controlChars": "يحتوي «{label}» على أحرف تحكّم غير مرئية.",
|
|
15
|
+
"badFormat": "تنسيق «{label}» غير صالح.",
|
|
16
|
+
"badSlug": "«{label}» ليس عنوانًا صالحًا.",
|
|
17
|
+
"notNumber": "يجب أن يكون «{label}» رقمًا.",
|
|
18
|
+
"outOfRange": "يجب أن تكون قيمة «{label}» بين {min} و{max}.",
|
|
19
|
+
"badStep": "لا تتوافق قيمة «{label}» مع حجم الخطوة {step}.",
|
|
20
|
+
"notMoney": "يجب أن يكون «{label}» مبلغًا بالسنتات.",
|
|
21
|
+
"moneyOutOfRange": "«{label}» خارج الحدود المسموح بها.",
|
|
22
|
+
"notBoolean": "يجب أن تكون قيمة «{label}» نعم أو لا.",
|
|
23
|
+
"badDate": "«{label}» ليس تاريخًا صالحًا.",
|
|
24
|
+
"badTime": "«{label}» ليس وقتًا صالحًا.",
|
|
25
|
+
"badDateRange": "«{label}» ليس فترة صالحة.",
|
|
26
|
+
"dateRangeOrder": "«{label}»: تاريخ «من» بعد تاريخ «إلى».",
|
|
27
|
+
"timeOrder": "يجب أن يكون «{end}» بعد «{start}».",
|
|
28
|
+
"notWeekStart": "يجب أن يكون «{label}» اليوم الأول من أسبوع.",
|
|
29
|
+
"badChoice": "قيمة «{label}» غير صالحة.",
|
|
30
|
+
"badChoices": "قيم «{label}» غير صالحة.",
|
|
31
|
+
"duplicateValues": "يحتوي «{label}» على قيم مكرّرة.",
|
|
32
|
+
"tooManyChosen": "«{label}»: الحد الأقصى {max}.",
|
|
33
|
+
"notIdList": "يجب أن يكون «{label}» قائمة بمعرّفات الإدخالات.",
|
|
34
|
+
"notId": "يجب أن يكون «{label}» معرّف إدخال.",
|
|
35
|
+
"duplicateEntries": "يحتوي «{label}» على إدخالات مكرّرة.",
|
|
36
|
+
"refGone": "«{label}»: الإدخال لم يعد موجودًا.",
|
|
37
|
+
"notList": "يجب أن يكون «{label}» قائمة.",
|
|
38
|
+
"tooManyRows": "يحتوي «{label}» على عناصر كثيرة جدًّا (الحد الأقصى {max}).",
|
|
39
|
+
"tooFewRows": "يحتاج «{label}» إلى {min, plural, zero {# عنصر} one {عنصر واحد} two {عنصرين} few {# عناصر} many {# عنصرًا} other {# عنصر}} على الأقل.",
|
|
40
|
+
"duplicateRowValue": "«{label}»: القيمة «{value}» تتكرّر أكثر من مرة.",
|
|
41
|
+
"badRowId": "«{label}»: معرّف الصف {row} غير صالح.",
|
|
42
|
+
"duplicateRowId": "«{label}»: معرّف الصف مكرّر.",
|
|
43
|
+
"notImage": "«{label}» ليس صورة صالحة.",
|
|
44
|
+
"altMissing": "«{label}»: وصف الصورة (النص البديل) مفقود.",
|
|
45
|
+
"fileRefMissing": "«{label}»: صورة في النص لم تعد في مكتبة الملفات. اخترها من جديد.",
|
|
46
|
+
"fileRefPdf": "لا يمكن عرض ملف PDF كصورة. أضِف رابطًا إليه بدلًا من ذلك: [النص]($file.…).",
|
|
47
|
+
"markdownImageAltMissing": "«{label}»: صورة في النص بلا وصف. صِفها بإيجاز لمن لا يستطيع رؤيتها.",
|
|
48
|
+
"altTooLong": "«{label}»: النص البديل طويل جدًّا.",
|
|
49
|
+
"notFile": "«{label}» ليس ملفًّا صالحًا."
|
|
50
|
+
},
|
|
51
|
+
"file": {
|
|
52
|
+
"typeNotAllowed": "نوع الملف هذا غير مسموح به (المسموح: {allowed}).",
|
|
53
|
+
"tooBig": "الملف كبير جدًّا (الحد الأقصى {max, number} ميغابايت)."
|
|
54
|
+
},
|
|
55
|
+
"markdown": {
|
|
56
|
+
"profile": {
|
|
57
|
+
"inline": "نص فقط مع الخط العريض والمائل والشيفرة والروابط",
|
|
58
|
+
"basic": "فقرات وعناوين وقوائم (مع مربعات اختيار أيضًا) واقتباسات وتنبيهات وحواشٍ سفلية",
|
|
59
|
+
"rich": "وكذلك الجداول والصور وكتل الشيفرة والمعادلات والمخططات",
|
|
60
|
+
"page": "وكذلك المكوّنات"
|
|
61
|
+
},
|
|
62
|
+
"tagBlocked": "«{tag}» غير مسموح به.",
|
|
63
|
+
"tagNotInProfile": "«{tag}» غير مسموح به هنا ({allowed}).",
|
|
64
|
+
"propBlocked": "الخاصية «{prop}» غير مسموح بها.",
|
|
65
|
+
"unsafeLink": "الرابط غير مسموح به (المسموح فقط: http أو https أو mailto أو tel أو /مسار).",
|
|
66
|
+
"oneParagraph": "يُسمح هنا بفقرة واحدة فقط.",
|
|
67
|
+
"tooComplex": "النص معقّد جدًّا (الحد الأقصى {max, plural, zero {# عنصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}).",
|
|
68
|
+
"componentNotClosed": "المكوّن «{tag}» غير مغلق: ينقص بعد محتواه سطر يحتوي على «{close}».",
|
|
69
|
+
"bracketText": "«[{text}» ليس رابطًا ولا صورة: ينقص «]» أو العنوان بين قوسين دائريين. لكتابة الأقواس المربعة كنص: \\[ و\\]."
|
|
70
|
+
},
|
|
71
|
+
"component": {
|
|
72
|
+
"or": "{first} أو {second}",
|
|
73
|
+
"and": "{first}، {second}",
|
|
74
|
+
"quoted": "«{name}»",
|
|
75
|
+
"unknown": "المكوّن «{tag}» غير موجود.",
|
|
76
|
+
"propUnknown": "المكوّن «{tag}»: الخاصية «{prop}» غير موجودة.",
|
|
77
|
+
"propInvalid": "المكوّن «{tag}»: الخاصية «{prop}» {problem}",
|
|
78
|
+
"propMissing": "المكوّن «{tag}»: الخاصية «{prop}» مفقودة.",
|
|
79
|
+
"propEmpty": "المكوّن «{tag}»: الخاصية «{prop}» فارغة.",
|
|
80
|
+
"blockInParagraph": "المكوّن «{tag}» كتلة ولا يصح وضعه داخل فقرة.",
|
|
81
|
+
"parentOnly": "يمكن أن يظهر المكوّن «{tag}» داخل {parents} فقط.",
|
|
82
|
+
"slotUnknown": "المكوّن «{tag}»: المنطقة «{slot}» غير موجودة (المسموح: {allowed}).",
|
|
83
|
+
"noSlots": "المكوّن «{tag}»: ليس له مناطق، و«{slot}» غير مسموح بها.",
|
|
84
|
+
"childNotAllowed": "يمكن أن يحتوي المكوّن «{tag}» على {children} فقط، وليس على «{child}».",
|
|
85
|
+
"prop": {
|
|
86
|
+
"notBoolean": "يجب أن تكون «true» أو «false».",
|
|
87
|
+
"notNumber": "يجب أن تكون رقمًا.",
|
|
88
|
+
"outOfRange": "يجب أن تكون بين {min} و{max}.",
|
|
89
|
+
"badStep": "لا تتوافق مع حجم الخطوة {step}.",
|
|
90
|
+
"notText": "يجب أن تكون نصًّا.",
|
|
91
|
+
"tooLong": "طويلة جدًّا (الحد الأقصى {max, plural, zero {# حرف} one {حرف واحد} two {حرفان} few {# أحرف} many {# حرفًا} other {# حرف}}).",
|
|
92
|
+
"badChoice": "قيمتها غير صالحة (المسموح: {allowed}).",
|
|
93
|
+
"badChoices": "قيمها غير صالحة (المسموح: {allowed}).",
|
|
94
|
+
"duplicateValues": "تحتوي على قيم مكرّرة.",
|
|
95
|
+
"tooManyChosen": "تقبل {max, plural, zero {# قيمة} one {قيمة واحدة} two {قيمتين} few {# قيم} many {# قيمة} other {# قيمة}} كحد أقصى.",
|
|
96
|
+
"badImage": "يجب أن تكون مسارًا أو عنوان ويب.",
|
|
97
|
+
"notId": "يجب أن تكون معرّف إدخال.",
|
|
98
|
+
"badType": "نوعها غير مسموح به."
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"links": {
|
|
102
|
+
"snippetMissing": "مقتطف النص «{name}» غير موجود (الإدخال snippets/{name} مع الحقل body).",
|
|
103
|
+
"linkBroken": "الرابط {href} لا يقود إلى أي إدخال أو صفحة.",
|
|
104
|
+
"linkRedirected": "الرابط {href} يقود إلى {to} عبر إعادة توجيه.",
|
|
105
|
+
"pathUnknown": "المسار {path} لا يطابق أي إدخال أو صفحة أو ملف في public/.",
|
|
106
|
+
"anchorMissing": "المرجع #{anchor} مفقود: لا يوجد عنوان بهذا المعرّف.",
|
|
107
|
+
"externalBroken": "الرابط الخارجي {href} معطّل ({reason})."
|
|
108
|
+
},
|
|
109
|
+
"editor": {
|
|
110
|
+
"component": {
|
|
111
|
+
"unknown": "«{tag}» غير موجود هنا.",
|
|
112
|
+
"more": "{first} تحقّق من {count, plural, zero {أي إعداد آخر} one {إعداد آخر} two {إعدادين آخرين} few {# إعدادات أخرى} many {# إعدادًا آخر} other {# إعداد آخر}}."
|
|
113
|
+
},
|
|
114
|
+
"prop": {
|
|
115
|
+
"missing": "{label} مفقود.",
|
|
116
|
+
"empty": "{label} فارغ.",
|
|
117
|
+
"invalid": "{label} {problem}"
|
|
118
|
+
},
|
|
119
|
+
"problem": {
|
|
120
|
+
"imageNoDescription": "الصورة بلا وصف."
|
|
121
|
+
},
|
|
122
|
+
"source": {
|
|
123
|
+
"unstable": "سيتغيّر النص عند الحفظ، لذلك يُحرَّر بصيغة Markdown.",
|
|
124
|
+
"lossy": "لا يمكن عرض النص في المحرّر دون فقدان شيء منه.",
|
|
125
|
+
"failed": "لا يمكن عرض النص في المحرّر ({reason})."
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"diff": {
|
|
129
|
+
"freshSetting": "{name}: {value}.",
|
|
130
|
+
"freshLocales": "اللغات: {locales}.",
|
|
131
|
+
"siteRenamed": "لا يمكن تغيير اسم الموقع (`site`).",
|
|
132
|
+
"currencyChanged": "لا يمكن تغيير عملة الموقع.",
|
|
133
|
+
"mainLocaleChanged": "لا يمكن تغيير اللغة الرئيسية.",
|
|
134
|
+
"localeRemoved": "لا يمكن حذف اللغة «{locale}».",
|
|
135
|
+
"localeOrder": "تُضاف اللغات الجديدة في نهاية القائمة.",
|
|
136
|
+
"localeAdded": "لغة جديدة «{locale}».",
|
|
137
|
+
"timezoneChanged": "لا يمكن تغيير المنطقة الزمنية.",
|
|
138
|
+
"valueChanged": "تغيّر {name}.",
|
|
139
|
+
"pagesChanged": "تغيّرت الصفحات الثابتة.",
|
|
140
|
+
"agentsChanged": "تغيّرت مراجعة تغييرات الذكاء الاصطناعي.",
|
|
141
|
+
"tasksChanged": "تغيّرت المهام.",
|
|
142
|
+
"retiredBack": "تم إيقاف «{path}» ولا يمكن إعادته.",
|
|
143
|
+
"unretired": "تم إيقاف «{path}».",
|
|
144
|
+
"retiredRuleChanged": "لا يمكن تغيير قاعدة «{path}».",
|
|
145
|
+
"retiredNow": "يجري إيقاف «{path}».",
|
|
146
|
+
"migrationChanged": "تغيّر الترحيل «{id}».",
|
|
147
|
+
"migrationFillsExisting": "الترحيل «{id}» يملأ «{target}» وهو موجود بالفعل.",
|
|
148
|
+
"migrationAdded": "ترحيل جديد «{id}».",
|
|
149
|
+
"migrationDropped": "الترحيل «{id}» لم يعد في الإعدادات.",
|
|
150
|
+
"brickRemoved": "الكتلة «{key}» مفقودة.",
|
|
151
|
+
"brickAdded": "كتلة جديدة «{key}».",
|
|
152
|
+
"singleWithoutDefault": "كتلة مفردة جديدة: الحقل المطلوب «{name}» يحتاج إلى قيمة افتراضية.",
|
|
153
|
+
"unknownChange": "«{at}»: تغيّرت الخاصية «{prop}» وهذا غير مسموح به.",
|
|
154
|
+
"kindChanged": "«{key}» ينتقل من كتلة مفردة إلى مجموعة أو العكس.",
|
|
155
|
+
"textChanged": "تغيّر النص.",
|
|
156
|
+
"maxLowered": "«{at}»: لا يمكن خفض max.",
|
|
157
|
+
"maxRaised": "تم رفع max.",
|
|
158
|
+
"routeAdded": "صفحات تفاصيل جديدة.",
|
|
159
|
+
"routeAddedLocale": "عنوان للغة الجديدة.",
|
|
160
|
+
"routeChanged": "«{key}»: لا يمكن تغيير العناوين (route).",
|
|
161
|
+
"fieldRemoved": "الحقل «{at}» مفقود.",
|
|
162
|
+
"fieldAdded": "حقل جديد «{at}».",
|
|
163
|
+
"fieldAddedDefault": "حقل مطلوب جديد «{at}» بقيمة افتراضية.",
|
|
164
|
+
"fieldAddedMigration": "حقل مطلوب جديد «{at}» يملؤه ترحيل.",
|
|
165
|
+
"requiredWithoutDefault": "حقل مطلوب جديد «{at}» بلا قيمة افتراضية أو ترحيل.",
|
|
166
|
+
"typeChanged": "«{at}»: النوع {from} → {to}.",
|
|
167
|
+
"retiredFieldChanged": "«{at}»: الحقل الموقوف يحتفظ بتعريفه في الإنتاج.",
|
|
168
|
+
"madeRequired": "«{at}»: اختياري ← مطلوب.",
|
|
169
|
+
"madeOptional": "«{at}» أصبح اختياريًّا.",
|
|
170
|
+
"translationChanged": "«{at}»: تغيّرت قابلية الترجمة.",
|
|
171
|
+
"defaultChanged": "«{at}»: لا يمكن تغيير القيمة الافتراضية.",
|
|
172
|
+
"minRaised": "«{at}»: لا يمكن رفع min.",
|
|
173
|
+
"minLowered": "تم خفض min.",
|
|
174
|
+
"minOffGrid": "«{at}»: يمكن خفض min بمضاعف حجم الخطوة {step} فقط.",
|
|
175
|
+
"propChanged": "«{at}»: لا يمكن تغيير {prop}.",
|
|
176
|
+
"optionRemoved": "«{at}»: الخيار «{option}» مفقود.",
|
|
177
|
+
"optionRenamed": "تمت إعادة تسمية الخيار.",
|
|
178
|
+
"optionAdded": "خيار جديد «{option}».",
|
|
179
|
+
"uniqueChanged": "«{at}»: لا يمكن تعيين unique أو تغييره.",
|
|
180
|
+
"uniqueDropped": "«{at}»: تمت إزالة unique.",
|
|
181
|
+
"fix": {
|
|
182
|
+
"newField": "أضِف حقلًا جديدًا، واملأه بترحيل، وأدرج الحقل القديم تحت `retired`.",
|
|
183
|
+
"newFieldOnly": "أضِف حقلًا جديدًا.",
|
|
184
|
+
"newSite": "أنشئ موقعًا جديدًا.",
|
|
185
|
+
"moneyFields": "أضِف حقول مال جديدة بعملة `currency` ثابتة.",
|
|
186
|
+
"planMigration": "خطّط لترحيل مع فريق التطوير لديك.",
|
|
187
|
+
"keepLocale": "أبقِ اللغة؛ يمكن إخفاء الصفحات بهذه اللغة.",
|
|
188
|
+
"keepLocaleOrder": "أبقِ ترتيب اللغات الحالية.",
|
|
189
|
+
"keepTimezone": "أبقِ المنطقة الزمنية.",
|
|
190
|
+
"keepRule": "اترك القاعدة كما هي.",
|
|
191
|
+
"newMigrationId": "يحصل الإصلاح على معرّف جديد.",
|
|
192
|
+
"fillNewFieldsOnly": "املأ الحقول الجديدة فقط؛ وللحقل الموجود أضِف حقلًا جديدًا.",
|
|
193
|
+
"retireBrick": "أدرج الكتلة تحت `retired` بدلًا من حذفها.",
|
|
194
|
+
"defaultOrOptional": "عيّن قيمة `default` أو اجعل الحقل اختياريًّا.",
|
|
195
|
+
"keepProperty": "أبقِ الخاصية.",
|
|
196
|
+
"keepMax": "أبقِ max.",
|
|
197
|
+
"keepRoute": "أبقِ العنوان (route).",
|
|
198
|
+
"defaultMigrationOrOptional": "عيّن قيمة `default` أو اكتب ترحيلًا أو اجعل الحقل اختياريًّا.",
|
|
199
|
+
"keepDefinition": "اترك التعريف كما هو؛ يمكن تغيير النصوص فقط.",
|
|
200
|
+
"keepDefault": "أبقِ القيمة الافتراضية.",
|
|
201
|
+
"keepMin": "أبقِ min.",
|
|
202
|
+
"minOnGrid": "اخفض min بحيث يكون الفرق مضاعفًا لـ step.",
|
|
203
|
+
"keepOption": "أبقِ الخيار؛ يمكن إعادة تسميته (label).",
|
|
204
|
+
"newList": "أضِف قائمة جديدة واملأها بترحيل."
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"preview": {
|
|
208
|
+
"notFound": "هذه الصفحة غير موجودة.",
|
|
209
|
+
"failed": "تعذّر تحميل المعاينة.",
|
|
210
|
+
"loading": "جارٍ تحميل المعاينة…"
|
|
211
|
+
}
|
|
212
|
+
}
|
package/i18n/de.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"issues": {
|
|
3
3
|
"unknownBrick": "Baustein „{brick}“ gibt es nicht.",
|
|
4
4
|
"markdown": "„{label}“: {problem}",
|
|
5
|
+
"markdownAt": "„{label}“, Zeile {line}: {problem}",
|
|
5
6
|
"notObject": "Erwartet ein Objekt.",
|
|
6
7
|
"unknownField": "Unbekanntes Feld.",
|
|
7
8
|
"fieldMissing": "„{label}“ fehlt.",
|
|
@@ -23,6 +24,8 @@
|
|
|
23
24
|
"badTime": "„{label}“ ist keine gültige Uhrzeit.",
|
|
24
25
|
"badDateRange": "„{label}“ ist kein gültiger Zeitraum.",
|
|
25
26
|
"dateRangeOrder": "„{label}“: „von“ liegt nach „bis“.",
|
|
27
|
+
"timeOrder": "„{end}“ muss nach „{start}“ liegen.",
|
|
28
|
+
"notWeekStart": "„{label}“ muss der erste Tag einer Woche sein.",
|
|
26
29
|
"badChoice": "„{label}“ hat einen ungültigen Wert.",
|
|
27
30
|
"badChoices": "„{label}“ hat ungültige Werte.",
|
|
28
31
|
"duplicateValues": "„{label}“ enthält Werte doppelt.",
|
|
@@ -39,6 +42,9 @@
|
|
|
39
42
|
"duplicateRowId": "„{label}“: Zeilen-ID doppelt.",
|
|
40
43
|
"notImage": "„{label}“ ist kein gültiges Bild.",
|
|
41
44
|
"altMissing": "„{label}“: Beschreibung des Bildes (Alt-Text) fehlt.",
|
|
45
|
+
"fileRefMissing": "„{label}“: Ein Bild im Text ist nicht mehr in der Dateibibliothek. Wähle es neu aus.",
|
|
46
|
+
"fileRefPdf": "Eine PDF-Datei lässt sich nicht als Bild zeigen. Verlinke sie stattdessen: [Text]($file.…).",
|
|
47
|
+
"markdownImageAltMissing": "„{label}“: Ein Bild im Text hat keine Beschreibung. Beschreibe es kurz für Menschen, die es nicht sehen.",
|
|
42
48
|
"altTooLong": "„{label}“: Alt-Text zu lang.",
|
|
43
49
|
"notFile": "„{label}“ ist keine gültige Datei."
|
|
44
50
|
},
|
|
@@ -58,7 +64,9 @@
|
|
|
58
64
|
"propBlocked": "Die Eigenschaft „{prop}“ ist nicht erlaubt.",
|
|
59
65
|
"unsafeLink": "Link ist nicht erlaubt (nur http, https, mailto, tel oder /pfad).",
|
|
60
66
|
"oneParagraph": "Hier ist nur ein Absatz erlaubt.",
|
|
61
|
-
"tooComplex": "Text ist zu komplex (höchstens {max} Elemente)."
|
|
67
|
+
"tooComplex": "Text ist zu komplex (höchstens {max} Elemente).",
|
|
68
|
+
"componentNotClosed": "Die Komponente „{tag}“ ist nicht geschlossen: Nach ihrem Inhalt fehlt eine Zeile mit „{close}“.",
|
|
69
|
+
"bracketText": "„[{text}“ ist weder Link noch Bild: Es fehlt „]“ oder die Adresse in runden Klammern. Eckige Klammern als Text: \\[ und \\]."
|
|
62
70
|
},
|
|
63
71
|
"component": {
|
|
64
72
|
"or": "{first} oder {second}",
|
package/i18n/en.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"issues": {
|
|
3
3
|
"unknownBrick": "There is no brick “{brick}”.",
|
|
4
4
|
"markdown": "“{label}”: {problem}",
|
|
5
|
+
"markdownAt": "“{label}”, line {line}: {problem}",
|
|
5
6
|
"notObject": "An object is expected.",
|
|
6
7
|
"unknownField": "Unknown field.",
|
|
7
8
|
"fieldMissing": "“{label}” is missing.",
|
|
@@ -23,6 +24,8 @@
|
|
|
23
24
|
"badTime": "“{label}” is not a valid time.",
|
|
24
25
|
"badDateRange": "“{label}” is not a valid period.",
|
|
25
26
|
"dateRangeOrder": "“{label}”: “from” is after “to”.",
|
|
27
|
+
"timeOrder": "“{end}” must be later than “{start}”.",
|
|
28
|
+
"notWeekStart": "“{label}” must be the first day of a week.",
|
|
26
29
|
"badChoice": "“{label}” has an invalid value.",
|
|
27
30
|
"badChoices": "“{label}” has invalid values.",
|
|
28
31
|
"duplicateValues": "“{label}” contains values twice.",
|
|
@@ -39,6 +42,9 @@
|
|
|
39
42
|
"duplicateRowId": "“{label}”: Row ID appears twice.",
|
|
40
43
|
"notImage": "“{label}” is not a valid image.",
|
|
41
44
|
"altMissing": "“{label}”: The image description (alt text) is missing.",
|
|
45
|
+
"fileRefMissing": "“{label}”: An image in the text is no longer in the Files library. Choose it again.",
|
|
46
|
+
"fileRefPdf": "A PDF cannot be shown as a picture. Link it instead: [text]($file.…).",
|
|
47
|
+
"markdownImageAltMissing": "“{label}”: An image in the text has no description. Describe it briefly for people who cannot see it.",
|
|
42
48
|
"altTooLong": "“{label}”: Alt text is too long.",
|
|
43
49
|
"notFile": "“{label}” is not a valid file."
|
|
44
50
|
},
|
|
@@ -58,7 +64,9 @@
|
|
|
58
64
|
"propBlocked": "The property “{prop}” is not allowed.",
|
|
59
65
|
"unsafeLink": "Link is not allowed (only http, https, mailto, tel or /path).",
|
|
60
66
|
"oneParagraph": "Only one paragraph is allowed here.",
|
|
61
|
-
"tooComplex": "Text is too complex (at most {max} elements)."
|
|
67
|
+
"tooComplex": "Text is too complex (at most {max} elements).",
|
|
68
|
+
"componentNotClosed": "The component “{tag}” is not closed: a line with “{close}” is missing after its content.",
|
|
69
|
+
"bracketText": "“[{text}” is neither a link nor an image: a “]” or the address in round brackets is missing. Square brackets as text: \\[ and \\]."
|
|
62
70
|
},
|
|
63
71
|
"component": {
|
|
64
72
|
"or": "{first} or {second}",
|
package/i18n/es.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"issues": {
|
|
3
3
|
"unknownBrick": "No existe el bloque “{brick}”.",
|
|
4
4
|
"markdown": "“{label}”: {problem}",
|
|
5
|
+
"markdownAt": "“{label}”, línea {line}: {problem}",
|
|
5
6
|
"notObject": "Se espera un objeto.",
|
|
6
7
|
"unknownField": "Campo desconocido.",
|
|
7
8
|
"fieldMissing": "Falta “{label}”.",
|
|
@@ -23,6 +24,8 @@
|
|
|
23
24
|
"badTime": "“{label}” no es una hora válida.",
|
|
24
25
|
"badDateRange": "“{label}” no es un período válido.",
|
|
25
26
|
"dateRangeOrder": "“{label}”: “desde” es posterior a “hasta”.",
|
|
27
|
+
"timeOrder": "“{end}” debe ser posterior a “{start}”.",
|
|
28
|
+
"notWeekStart": "“{label}” debe ser el primer día de una semana.",
|
|
26
29
|
"badChoice": "“{label}” tiene un valor no válido.",
|
|
27
30
|
"badChoices": "“{label}” tiene valores no válidos.",
|
|
28
31
|
"duplicateValues": "“{label}” contiene valores repetidos.",
|
|
@@ -39,6 +42,9 @@
|
|
|
39
42
|
"duplicateRowId": "“{label}”: el ID de fila aparece dos veces.",
|
|
40
43
|
"notImage": "“{label}” no es una imagen válida.",
|
|
41
44
|
"altMissing": "“{label}”: falta la descripción de la imagen (texto alternativo).",
|
|
45
|
+
"fileRefMissing": "“{label}”: una imagen del texto ya no está en la biblioteca de archivos. Vuelve a elegirla.",
|
|
46
|
+
"fileRefPdf": "Un PDF no se puede mostrar como imagen. Enlázalo en su lugar: [texto]($file.…).",
|
|
47
|
+
"markdownImageAltMissing": "“{label}”: una imagen del texto no tiene descripción. Descríbela brevemente para quien no puede verla.",
|
|
42
48
|
"altTooLong": "“{label}”: el texto alternativo es demasiado largo.",
|
|
43
49
|
"notFile": "“{label}” no es un archivo válido."
|
|
44
50
|
},
|
|
@@ -58,7 +64,9 @@
|
|
|
58
64
|
"propBlocked": "La propiedad “{prop}” no está permitida.",
|
|
59
65
|
"unsafeLink": "Enlace no permitido (solo http, https, mailto, tel o /ruta).",
|
|
60
66
|
"oneParagraph": "Aquí solo se permite un párrafo.",
|
|
61
|
-
"tooComplex": "El texto es demasiado complejo (máximo {max} elementos)."
|
|
67
|
+
"tooComplex": "El texto es demasiado complejo (máximo {max} elementos).",
|
|
68
|
+
"componentNotClosed": "El componente “{tag}” no está cerrado: falta una línea con “{close}” después de su contenido.",
|
|
69
|
+
"bracketText": "“[{text}” no es ni un enlace ni una imagen: falta “]” o la dirección entre paréntesis. Corchetes como texto: \\[ y \\]."
|
|
62
70
|
},
|
|
63
71
|
"component": {
|
|
64
72
|
"or": "{first} o {second}",
|
|
@@ -175,7 +183,7 @@
|
|
|
175
183
|
"newFieldOnly": "Añade un campo nuevo.",
|
|
176
184
|
"newSite": "Crea un sitio nuevo.",
|
|
177
185
|
"moneyFields": "Añade campos de dinero nuevos con una `currency` fija.",
|
|
178
|
-
"planMigration": "Planifica una migración con tu
|
|
186
|
+
"planMigration": "Planifica una migración con tu equipo de desarrollo.",
|
|
179
187
|
"keepLocale": "Conserva el idioma; las páginas en ese idioma se pueden ocultar.",
|
|
180
188
|
"keepLocaleOrder": "Conserva el orden de los idiomas existentes.",
|
|
181
189
|
"keepTimezone": "Conserva la zona horaria.",
|
|
@@ -186,7 +194,7 @@
|
|
|
186
194
|
"defaultOrOptional": "Define un valor `default` o haz el campo opcional.",
|
|
187
195
|
"keepProperty": "Conserva la propiedad.",
|
|
188
196
|
"keepMax": "Conserva max.",
|
|
189
|
-
"keepRoute": "Conserva la route.",
|
|
197
|
+
"keepRoute": "Conserva la dirección (route).",
|
|
190
198
|
"defaultMigrationOrOptional": "Define un valor `default`, escribe una migración o haz el campo opcional.",
|
|
191
199
|
"keepDefinition": "Deja la definición como está; solo pueden cambiar los textos.",
|
|
192
200
|
"keepDefault": "Conserva el valor predeterminado.",
|
|
@@ -199,6 +207,6 @@
|
|
|
199
207
|
"preview": {
|
|
200
208
|
"notFound": "Esta página no existe.",
|
|
201
209
|
"failed": "La vista previa no se carga.",
|
|
202
|
-
"loading": "Cargando la vista previa
|
|
210
|
+
"loading": "Cargando la vista previa…"
|
|
203
211
|
}
|
|
204
212
|
}
|