diff --git a/src/components/Properties/PropertiesPanel.tsx b/src/components/Properties/PropertiesPanel.tsx index 993e08d0..8321244d 100644 --- a/src/components/Properties/PropertiesPanel.tsx +++ b/src/components/Properties/PropertiesPanel.tsx @@ -23,6 +23,11 @@ import { AlignButtons } from "./AlignButtons"; import { inputCls, labelCls } from "./styles"; import type { LabelConfig } from "../../types/ObjectType"; +/** Built-in alphanumeric font IDs the Zebra firmware ships with. Used as + * suggestions for ^CF — the input stays free-text so user-defined ^CW + * aliases (single letters) can still be entered. */ +const ZPL_BUILTIN_FONT_IDS = ['0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] as const; + interface PropertiesPanelProps { /** Imperative handle on the canvas — used for actions that need live render * bboxes (alignment, future zoom-to-selection, etc.). Required so the @@ -430,7 +435,9 @@ function LabelConfigPanel({ +
+ onUpdate({ labelHomeX: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ + + onUpdate({ labelHomeY: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ + + onUpdate({ labelTop: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ +
+ + +
+ + +
+
+ + + onUpdate({ pauseCount: parseIntOrUndef(e.target.value) }) + } + /> +
+ +
+ + + onUpdate({ replicates: parseIntOrUndef(e.target.value) }) + } + /> +
+ + +
+
- - onUpdate({ printSpeed: parseIntOrUndef(e.target.value) }) - } - /> +
+
+ + + onUpdate({ printSpeed: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ + + onUpdate({ slewSpeed: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ + + onUpdate({ backfeedSpeed: parseIntOrUndef(e.target.value) }) + } + /> +
+
- - onUpdate({ darkness: parseIntOrUndef(e.target.value) }) - } - /> +
+
+ + + onUpdate({ darkness: parseIntOrUndef(e.target.value) }) + } + /> +
+
+ + + onUpdate({ instantDarkness: parseIntOrUndef(e.target.value) }) + } + /> +
+
@@ -562,11 +738,21 @@ function LabelConfigPanel({ +
-
+
+
+ + + onUpdate({ + defaultFontWidth: parseIntOrUndef(e.target.value), + }) + } + /> +
+
+ + {ZPL_BUILTIN_FONT_IDS.map((id) => ( + ); } diff --git a/src/lib/zplGenerator.test.ts b/src/lib/zplGenerator.test.ts index 8b664ad6..3d87b4fe 100644 --- a/src/lib/zplGenerator.test.ts +++ b/src/lib/zplGenerator.test.ts @@ -103,6 +103,172 @@ describe('generateZPL — printer params', () => { expect(generateZPL(BASE_LABEL, [])).not.toContain('^PO'); }); + const boxAt = (x: number, y: number): LabelObject => ({ + id: '1', + type: 'box', + x, + y, + rotation: 0, + props: { width: 50, height: 20, thickness: 1, filled: false, color: 'B', rounding: 0 }, + }); + + it('emits ^LH and shifts field FOs to compensate', () => { + const zpl = generateZPL( + { ...BASE_LABEL, labelHomeX: 20, labelHomeY: 10 }, + [boxAt(50, 80)], + ); + expect(zpl).toContain('^LH20,10'); + expect(zpl).toContain('^FO30,70'); + }); + + it('emits ^LT and shifts field Y to compensate', () => { + const zpl = generateZPL({ ...BASE_LABEL, labelTop: 15 }, [boxAt(50, 80)]); + expect(zpl).toContain('^LT15'); + expect(zpl).toContain('^FO50,65'); + }); + + it('drops fields whose offset-adjusted origin would be negative', () => { + // Clamping would silently relocate the box into the visible area, + // breaking WYSIWYG; emitting negative ^FO is undefined per ZPL spec + // and printer-dependent. The conservative choice is to omit the + // field — analogous to a layer outside the artboard in a design tool. + const zpl = generateZPL( + { ...BASE_LABEL, labelHomeX: 30, labelHomeY: 20 }, + [boxAt(10, 5)], + ); + expect(zpl).not.toContain('^GB'); + expect(zpl).not.toContain('^FO'); + }); + + it('drops a field when only one axis would go negative', () => { + // labelHomeY exceeds obj.y → y < 0 alone is enough to drop the leaf. + const zpl = generateZPL( + { ...BASE_LABEL, labelHomeX: 0, labelHomeY: 50 }, + [boxAt(100, 10)], + ); + expect(zpl).not.toContain('^GB'); + }); + + it('drops only the clipped children of a group, keeping the rest', () => { + const group: GroupObject = { + id: 'g1', + type: 'group', + x: 0, + y: 0, + rotation: 0, + children: [boxAt(10, 5), boxAt(100, 100)], + }; + const zpl = generateZPL( + { ...BASE_LABEL, labelHomeX: 30, labelHomeY: 20 }, + [group], + ); + // First child clips out, second survives at shifted FO. + expect(zpl).toContain('^FO70,80'); + expect(zpl.match(/\^FO/g)?.length).toBe(1); + }); + + it('emits ^CF with width as third positional param', () => { + expect( + generateZPL( + { ...BASE_LABEL, defaultFontId: 'A', defaultFontHeight: 30, defaultFontWidth: 20 }, + [], + ), + ).toContain('^CFA,30,20'); + }); + + it('emits ^CF with empty middle slot when only id + width are set', () => { + expect( + generateZPL( + { ...BASE_LABEL, defaultFontId: 'A', defaultFontWidth: 20 }, + [], + ), + ).toContain('^CFA,,20'); + }); + + it('emits ^CF with two empty slots when only width is set', () => { + expect( + generateZPL({ ...BASE_LABEL, defaultFontWidth: 20 }, []), + ).toContain('^CF,,20'); + }); + + it('trims trailing empty ^CF slots', () => { + const zpl = generateZPL({ ...BASE_LABEL, defaultFontId: 'A' }, []); + expect(zpl).toContain('^CFA'); + expect(zpl).not.toContain('^CFA,'); + }); + + it('emits ^PM when mirror is set', () => { + expect(generateZPL({ ...BASE_LABEL, mirror: 'Y' }, [])).toContain('^PMY'); + expect(generateZPL({ ...BASE_LABEL, mirror: 'N' }, [])).toContain('^PMN'); + expect(generateZPL(BASE_LABEL, [])).not.toContain('^PM'); + }); + + it('emits ~SD before ^XA with zero-padded value', () => { + const zpl = generateZPL({ ...BASE_LABEL, instantDarkness: 7 }, []); + expect(zpl.startsWith('~SD07\n^XA')).toBe(true); + expect(generateZPL({ ...BASE_LABEL, instantDarkness: 30 }, [])) + .toContain('~SD30'); + }); + + it('emits ^PR when only slew or backfeed is set (printSpeed undefined)', () => { + expect(generateZPL({ ...BASE_LABEL, slewSpeed: 8 }, [])).toContain('^PR8'); + // backfeed-only: ZPL has no positional skip, so slew slot repeats the + // (defaulted) print speed. Documented asymmetry — see roundtrip test. + expect( + generateZPL({ ...BASE_LABEL, backfeedSpeed: 4 }, []), + ).toContain('^PR4,4,4'); + }); + + it('emits ^PR with slew and backfeed when set', () => { + expect( + generateZPL({ ...BASE_LABEL, printSpeed: 6, slewSpeed: 8 }, []), + ).toContain('^PR6,8'); + // backfeed without slew → slew defaults to printSpeed so position is + // preserved. + expect( + generateZPL({ ...BASE_LABEL, printSpeed: 6, backfeedSpeed: 4 }, []), + ).toContain('^PR6,6,4'); + expect( + generateZPL( + { ...BASE_LABEL, printSpeed: 6, slewSpeed: 8, backfeedSpeed: 4 }, + [], + ), + ).toContain('^PR6,8,4'); + }); + + it('^PR backfeed-only does not roundtrip cleanly (slew gets populated)', () => { + // Documented asymmetry: ZPL has no positional skip, so on emit the slew + // slot is filled with the print speed. On reparse, slewSpeed becomes + // defined even though it was undefined in the source. If this is ever + // changed to a normaliser-on-input approach, update both the generator + // and this test. + const original: LabelConfig = { + ...BASE_LABEL, + printSpeed: 6, + backfeedSpeed: 4, + }; + const zpl = generateZPL(original, []); + const { labelConfig } = parseZPL(zpl, 8); + expect(labelConfig.printSpeed).toBe(6); + expect(labelConfig.slewSpeed).toBe(6); + expect(labelConfig.backfeedSpeed).toBe(4); + }); + + it('emits ^PQ with extended params when any are set', () => { + expect( + generateZPL({ ...BASE_LABEL, printQuantity: 5, pauseCount: 2 }, []), + ).toContain('^PQ5,2,0,N'); + expect( + generateZPL( + { ...BASE_LABEL, printQuantity: 1, replicates: 3 }, + [], + ), + ).toContain('^PQ1,0,3,N'); + expect( + generateZPL({ ...BASE_LABEL, overridePauseCount: 'Y' }, []), + ).toContain('^PQ1,0,0,Y'); + }); + it('emits ^CF when both defaultFontId and defaultFontHeight are set', () => { const zpl = generateZPL( { ...BASE_LABEL, defaultFontId: '0', defaultFontHeight: 30 }, @@ -146,8 +312,10 @@ describe('generateZPL — printer params', () => { expect(idx('^MTT')).toBeLessThan(idx('^PR6')); expect(idx('^PR6')).toBeLessThan(idx('^MD10')); expect(idx('^MD10')).toBeLessThan(idx('^POI')); - expect(idx('^POI')).toBeLessThan(idx('^CF0,30')); - expect(idx('^CF0,30')).toBeLessThan(idx('^LS5')); + // Geometry offsets (^LH/^LT/^LS) group before the default font (^CF) + // so the header reads media → printer params → geometry → font. + expect(idx('^POI')).toBeLessThan(idx('^LS5')); + expect(idx('^LS5')).toBeLessThan(idx('^CF0,30')); }); }); diff --git a/src/lib/zplGenerator.ts b/src/lib/zplGenerator.ts index cb3c19c1..ed1b7a83 100644 --- a/src/lib/zplGenerator.ts +++ b/src/lib/zplGenerator.ts @@ -17,30 +17,86 @@ export function generateZPL(label: LabelConfig, objects: LabelObject[]): string const widthDots = mmToDots(label.widthMm, label.dpmm); const heightDots = mmToDots(label.heightMm, label.dpmm); - const lines: string[] = [ + const lines: string[] = []; + + // ~SD is a tilde-prefix command that takes effect immediately on receipt, + // independently of the label block. Emit it before ^XA so the darkness + // change applies to the label that follows. + if (label.instantDarkness !== undefined) { + const v = String(label.instantDarkness).padStart(2, '0'); + lines.push(`~SD${v}`); + } + + lines.push( '^XA', `^PW${widthDots}`, `^LL${heightDots}`, '^CI28', - ]; + ); if (label.mediaMode) lines.push(`^MM${label.mediaMode}`); if (label.mediaType) lines.push(`^MT${label.mediaType}`); - if (label.printSpeed !== undefined) lines.push(`^PR${label.printSpeed}`); + // ^PR print,slew,backfeed — any of the three triggers emission. Slew and + // backfeed default to the print speed per Zebra spec; ZPL has no way to + // skip a positional param, so backfeed-only still has to repeat the print + // speed in the slew slot. + const fallback = label.printSpeed ?? label.slewSpeed ?? label.backfeedSpeed; + if (fallback !== undefined) { + const parts = [fallback]; + if (label.slewSpeed !== undefined || label.backfeedSpeed !== undefined) { + parts.push(label.slewSpeed ?? fallback); + } + if (label.backfeedSpeed !== undefined) parts.push(label.backfeedSpeed); + lines.push(`^PR${parts.join(',')}`); + } // darkness=0 is a valid value (printer baseline), so check undefined explicitly. if (label.darkness !== undefined) lines.push(`^MD${label.darkness}`); if (label.printOrientation) lines.push(`^PO${label.printOrientation}`); - // ^CF parameters are individually optional per Zebra spec: ^CF0 sets the - // font only, ^CF,30 sets the height only. Preserves round-trip fidelity - // when an imported label used a partial command. - if (label.defaultFontId || label.defaultFontHeight !== undefined) { - const id = label.defaultFontId ?? ""; - const height = - label.defaultFontHeight !== undefined ? `,${label.defaultFontHeight}` : ""; - lines.push(`^CF${id}${height}`); - } + if (label.mirror) lines.push(`^PM${label.mirror}`); + // Geometry offsets ──────────────────────────────────────────────────────── + // ^LH / ^LT — origin offsets. The internal model stores absolute field + // coords; the emit path below subtracts the offsets from each field's + // (x, y) so the printed result matches what the user sees in the editor. + const homeX = label.labelHomeX ?? 0; + const homeY = label.labelHomeY ?? 0; + const top = label.labelTop ?? 0; + if (homeX !== 0 || homeY !== 0) lines.push(`^LH${homeX},${homeY}`); + if (top !== 0) lines.push(`^LT${top}`); if (label.labelShift) lines.push(`^LS${label.labelShift}`); + // Default font ──────────────────────────────────────────────────────────── + // ^CF f,h,w — positional. Empty slots stay empty (^CFA,,20 sets font A + // and width 20, leaving height untouched). Trailing empty slots are + // trimmed for a tidier emit. + if ( + label.defaultFontId || + label.defaultFontHeight !== undefined || + label.defaultFontWidth !== undefined + ) { + const slots = [ + label.defaultFontId ?? "", + label.defaultFontHeight !== undefined ? String(label.defaultFontHeight) : "", + label.defaultFontWidth !== undefined ? String(label.defaultFontWidth) : "", + ]; + while (slots.length > 1 && slots[slots.length - 1] === "") slots.pop(); + lines.push(`^CF${slots.join(",")}`); + } + + // Apply ^LH/^LT compensation: subtract the offsets from each leaf's + // (x, y) before delegating to the registry. Leaves whose origin would + // land negative are dropped from emission — Zebra rejects negative ^FO + // and clamping would silently relocate them into the visible area, + // breaking the editor's WYSIWYG promise. Groups recurse; their children + // store absolute coords so the same shift applies per leaf. + const shiftOrDrop = (obj: LabelObject): LabelObject[] => { + if (isGroup(obj)) { + return [{ ...obj, children: obj.children.flatMap(shiftOrDrop) }]; + } + const x = obj.x - homeX; + const y = obj.y - homeY - top; + return x < 0 || y < 0 ? [] : [{ ...obj, x, y }]; + }; + // Groups are structural only — they emit no ZPL of their own. A group // with includeInExport=false cascades the skip to its whole subtree; // otherwise we recurse and let each leaf decide. @@ -52,10 +108,23 @@ export function generateZPL(label: LabelConfig, objects: LabelObject[]): string ? [`^FX${stripZplCommandChars(obj.comment)}\n${zpl}`] : [zpl]; }; - lines.push(...objects.flatMap(emitLeaf)); + const shifted = + homeX !== 0 || homeY !== 0 || top !== 0 + ? objects.flatMap(shiftOrDrop) + : objects; + lines.push(...shifted.flatMap(emitLeaf)); - if (label.printQuantity && label.printQuantity > 1) { - lines.push(`^PQ${label.printQuantity}`); + // ^PQ q,p,r,o — emit if quantity > 1 OR any extended param is set. + // Defaults follow the Zebra spec: q=1, p=0, r=0, o=N. + const pq = label.printQuantity ?? 1; + const pause = label.pauseCount ?? 0; + const reps = label.replicates ?? 0; + const override = label.overridePauseCount ?? 'N'; + const pqExtended = pause !== 0 || reps !== 0 || override !== 'N'; + if (pqExtended) { + lines.push(`^PQ${pq},${pause},${reps},${override}`); + } else if (pq > 1) { + lines.push(`^PQ${pq}`); } lines.push('^XZ'); diff --git a/src/lib/zplParser.test.ts b/src/lib/zplParser.test.ts index 8642cd9c..3665acb9 100644 --- a/src/lib/zplParser.test.ts +++ b/src/lib/zplParser.test.ts @@ -604,6 +604,38 @@ describe('parseZPL — printer params', () => { expect(labelConfig.printSpeed).toBeUndefined(); }); + it('parses ^PR with slew and backfeed', () => { + const { labelConfig } = parseZPL('^XA^PR6,8,4^XZ', 8); + expect(labelConfig.printSpeed).toBe(6); + expect(labelConfig.slewSpeed).toBe(8); + expect(labelConfig.backfeedSpeed).toBe(4); + }); + + it('parses extended ^PQ params', () => { + const { labelConfig } = parseZPL('^XA^PQ5,2,3,Y^XZ', 8); + expect(labelConfig.printQuantity).toBe(5); + expect(labelConfig.pauseCount).toBe(2); + expect(labelConfig.replicates).toBe(3); + expect(labelConfig.overridePauseCount).toBe('Y'); + }); + + it('parses ^PM mirror', () => { + expect(parseZPL('^XA^PMY^XZ', 8).labelConfig.mirror).toBe('Y'); + expect(parseZPL('^XA^PMN^XZ', 8).labelConfig.mirror).toBe('N'); + }); + + it('parses ^CF width into defaultFontWidth', () => { + const { labelConfig } = parseZPL('^XA^CFA,30,20^XZ', 8); + expect(labelConfig.defaultFontId).toBe('A'); + expect(labelConfig.defaultFontHeight).toBe(30); + expect(labelConfig.defaultFontWidth).toBe(20); + }); + + it('parses ~SD instant darkness', () => { + expect(parseZPL('~SD07^XA^XZ', 8).labelConfig.instantDarkness).toBe(7); + expect(parseZPL('~SD30^XA^XZ', 8).labelConfig.instantDarkness).toBe(30); + }); + it('parses ^MD darkness including 0', () => { expect(parseZPL('^XA^MD0^XZ', 8).labelConfig.darkness).toBe(0); expect(parseZPL('^XA^MD15^XZ', 8).labelConfig.darkness).toBe(15); diff --git a/src/lib/zplParser.ts b/src/lib/zplParser.ts index 653bb180..19d3392a 100644 --- a/src/lib/zplParser.ts +++ b/src/lib/zplParser.ts @@ -756,12 +756,16 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL { CF(p) { const fontId = (p[0] ?? "").trim(); const explicitHeight = parseInt(p[1] ?? "", 10); + const explicitWidth = parseInt(p[2] ?? "", 10); cfHeight = isNaN(explicitHeight) ? cfHeight : explicitHeight; - cfWidth = int(p[2], cfWidth); + cfWidth = isNaN(explicitWidth) ? cfWidth : explicitWidth; if (fontId) labelConfig.defaultFontId = fontId; if (!isNaN(explicitHeight) && explicitHeight > 0) { labelConfig.defaultFontHeight = explicitHeight; } + if (!isNaN(explicitWidth) && explicitWidth >= 0) { + labelConfig.defaultFontWidth = explicitWidth; + } }, // ── Field-wide default rotation ───────────────────────────────────────── @@ -1219,6 +1223,19 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL { PQ(p) { const qty = int(p[0], 0); if (qty > 0) labelConfig.printQuantity = qty; + // ^PQ q,p,r,o — preserve extended params when present. + if (p.length > 1) { + const pause = int(p[1], 0); + if (pause >= 0 && pause <= 99999999) labelConfig.pauseCount = pause; + } + if (p.length > 2) { + const reps = int(p[2], 0); + if (reps >= 0 && reps <= 99999999) labelConfig.replicates = reps; + } + if (p.length > 3) { + const o = (p[3] ?? "").toUpperCase(); + if (o === "Y" || o === "N") labelConfig.overridePauseCount = o; + } }, MM(_, rest) { const mode = (rest[0] ?? "").toUpperCase() as LabelConfig["mediaMode"]; @@ -1231,6 +1248,14 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL { PR(p) { const speed = int(p[0], 0); if (speed >= 2 && speed <= 14) labelConfig.printSpeed = speed; + if (p.length > 1) { + const slew = int(p[1], 0); + if (slew >= 2 && slew <= 14) labelConfig.slewSpeed = slew; + } + if (p.length > 2) { + const bf = int(p[2], 0); + if (bf >= 2 && bf <= 14) labelConfig.backfeedSpeed = bf; + } }, MD(_, rest) { // Direct parse: int() falls back to 0 on NaN, which would conflate @@ -1248,6 +1273,18 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL { const po = (rest[0] ?? "").toUpperCase(); if (po === "N" || po === "I") labelConfig.printOrientation = po; }, + PM(_, rest) { + const m = (rest[0] ?? "").toUpperCase(); + if (m === "Y" || m === "N") labelConfig.mirror = m; + }, + // ~SD — instant darkness set (00..30). Tilde-prefix; the tokenizer + // drops the delimiter, so we accept this as the canonical SD handler. + SD(_, rest) { + const parsed = parseInt(rest, 10); + if (!isNaN(parsed) && parsed >= 0 && parsed <= 30) { + labelConfig.instantDarkness = parsed; + } + }, // ── Browser-limit: printer-specific features ──────────────────────────── CW: mkBrowserLimit("CW"), // font identifier — assigns alias to printer-resident font @@ -1322,7 +1359,6 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL { JR: noop, // restore factory defaults JS: noop, // change darkness JU: noop, // update firmware - PM: noop, // part of message PP: noop, // presentation position }; diff --git a/src/locales/ar.ts b/src/locales/ar.ts index 98fa8b8b..5cbc3888 100644 --- a/src/locales/ar.ts +++ b/src/locales/ar.ts @@ -76,6 +76,11 @@ const ar = { dpmm12: '12 نقطة/مم — 300 dpi', dpmm24: '24 نقطة/مم — 600 dpi', printQuantity: 'كمية الطباعة', + quantityAdvancedHeading: 'الكمية (متقدم)', + pauseCount: 'إيقاف مؤقت كل N ملصق', + replicates: 'نسخ لكل ملصق', + overridePauseCount: 'تجاوز عدد التوقف', + overridePauseCountHint: 'قص الملصق الأخير فقط في الدفعة بدلاً من كل حد توقف.', mediaMode: 'وضع الوسائط', outputHeading: 'الإخراج', mediaModeT: 'T — تمزيق', @@ -83,12 +88,27 @@ const ar = { mediaModeD: 'D — قاطع', mediaModeK: 'K — كشك', labelShift: 'إزاحة الملصق (dots)', + offsetsHeading: 'الإزاحات', + offsetsHint: 'يزيح أصل الطباعة. تبقى مواضع الحقول في المحرر مطلقة.', + labelHomeX: 'البداية X', + labelHomeY: 'البداية Y', + labelTop: 'إزاحة علوية', printerDefault: 'الإعداد الافتراضي للطابعة', printerSettingsHeading: 'الطابعة (اختياري)', printSpeed: 'سرعة الطباعة (ips، 2-14)', printSpeedHint: 'خاص بالطابعة. اتركه فارغًا لاستخدام القيمة الافتراضية.', + speedHeading: 'السرعة (ips، 2-14)', + speedPrint: 'طباعة', + speedSlew: 'تحريك', + speedBackfeed: 'إرجاع', + slewSpeed: 'سرعة التحريك (ips، 2-14)', + backfeedSpeed: 'سرعة الإرجاع (ips، 2-14)', darkness: 'الكثافة (-30 إلى +30)', darknessHint: 'خاص بالطابعة. اتركه فارغًا لاستخدام القيمة الافتراضية.', + instantDarkness: 'إعتام فوري (0-30)', + darknessHeading: 'الإعتام', + darknessPermanent: 'دائم (-30..30)', + darknessInstant: 'فوري (0..30)', mediaType: 'نوع الوسائط', mediaTypeT: 'نقل حراري', mediaTypeD: 'حراري مباشر', @@ -96,9 +116,11 @@ const ar = { printOrientationN: 'عادي', printOrientationI: 'مقلوب (180°)', printOrientationIndicator: 'مقلوب', + mirror: 'صورة معكوسة', defaultFont: 'نمط النص الافتراضي', defaultFontId: 'الخط', defaultFontHeight: 'الارتفاع (نقاط)', + defaultFontWidth: 'العرض (dots)', }, app: { diff --git a/src/locales/bg.ts b/src/locales/bg.ts index c885f736..417cce78 100644 --- a/src/locales/bg.ts +++ b/src/locales/bg.ts @@ -76,6 +76,11 @@ const bg = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Количество за печат', + quantityAdvancedHeading: 'Количество (разширени)', + pauseCount: 'Пауза на всеки N етикета', + replicates: 'Реплики на етикет', + overridePauseCount: 'Замени брояча на пауза', + overridePauseCountHint: 'Отрязва само последния етикет от партидата вместо при всяка граница на пауза.', mediaMode: 'Режим на носителя', outputHeading: 'Изход', mediaModeT: 'T — Откъсване', @@ -83,12 +88,27 @@ const bg = { mediaModeD: 'D — Резач', mediaModeK: 'K — Киоск', labelShift: 'Отместване на етикета (dots)', + offsetsHeading: 'Отмествания', + offsetsHint: 'Премества началото на печат. Позициите на полетата в редактора остават абсолютни.', + labelHomeX: 'Начало X', + labelHomeY: 'Начало Y', + labelTop: 'Изм. горе', printerDefault: 'По подразбиране на принтера', printerSettingsHeading: 'Принтер (по избор)', printSpeed: 'Скорост на печат (ips, 2-14)', printSpeedHint: 'Специфично за принтера. Оставете празно за стойност по подразбиране.', + speedHeading: 'Скорост (ips, 2-14)', + speedPrint: 'Печат', + speedSlew: 'Придвижване', + speedBackfeed: 'Връщане', + slewSpeed: 'Скорост на придвижване (ips, 2-14)', + backfeedSpeed: 'Скорост на връщане (ips, 2-14)', darkness: 'Плътност (-30 до +30)', darknessHint: 'Специфично за принтера. Оставете празно за стойност по подразбиране.', + darknessHeading: 'Тъмнина', + darknessPermanent: 'Постоянно (-30..30)', + darknessInstant: 'Незабавно (0..30)', + instantDarkness: 'Незабавна тъмнина (0-30)', mediaType: 'Тип носител', mediaTypeT: 'Термотрансферен', mediaTypeD: 'Директен термичен', @@ -96,9 +116,11 @@ const bg = { printOrientationN: 'Нормален', printOrientationI: 'Обърнато (180°)', printOrientationIndicator: 'Обърнато', + mirror: 'Огледален образ', defaultFont: 'Стил на текст по подразбиране', defaultFontId: 'Шрифт', defaultFontHeight: 'Височина (точки)', + defaultFontWidth: 'Ширина (dots)', }, app: { diff --git a/src/locales/cs.ts b/src/locales/cs.ts index 811ff1c9..24fc2fd3 100644 --- a/src/locales/cs.ts +++ b/src/locales/cs.ts @@ -76,6 +76,11 @@ const cs = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Počet výtisků', + quantityAdvancedHeading: 'Množství (pokročilé)', + pauseCount: 'Pauza každých N štítků', + replicates: 'Replikace na štítek', + overridePauseCount: 'Přepsat počet pauz', + overridePauseCountHint: 'Řezat pouze poslední štítek dávky místo na každé hranici pauzy.', mediaMode: 'Režim média', outputHeading: 'Výstup', mediaModeT: 'T — Odtržení', @@ -83,12 +88,27 @@ const cs = { mediaModeD: 'D — Řezačka', mediaModeK: 'K — Kiosek', labelShift: 'Posun štítku (dots)', + offsetsHeading: 'Posuny', + offsetsHint: 'Posune počátek tisku. Pozice polí v editoru zůstávají absolutní.', + labelHomeX: 'Počátek X', + labelHomeY: 'Počátek Y', + labelTop: 'Posun horní', printerDefault: 'Výchozí tiskárny', printerSettingsHeading: 'Tiskárna (volitelné)', printSpeed: 'Rychlost tisku (ips, 2-14)', printSpeedHint: 'Specifické pro tiskárnu. Ponechte prázdné pro výchozí hodnotu tiskárny.', + speedHeading: 'Rychlost (ips, 2-14)', + speedPrint: 'Tisk', + speedSlew: 'Posuv', + speedBackfeed: 'Zpětný posuv', + slewSpeed: 'Rychlost posuvu (ips, 2-14)', + backfeedSpeed: 'Rychlost zpětného posuvu (ips, 2-14)', darkness: 'Sytost tisku (-30 až +30)', darknessHint: 'Specifické pro tiskárnu. Ponechte prázdné pro výchozí hodnotu tiskárny.', + darknessHeading: 'Sytost', + darknessPermanent: 'Trvalé (-30..30)', + darknessInstant: 'Okamžitě (0..30)', + instantDarkness: 'Okamžitá sytost (0-30)', mediaType: 'Typ média', mediaTypeT: 'Termotransferový', mediaTypeD: 'Přímý termotisk', @@ -96,9 +116,11 @@ const cs = { printOrientationN: 'Normální', printOrientationI: 'Vzhůru nohama (180°)', printOrientationIndicator: 'Vzhůru nohama', + mirror: 'Zrcadlový obraz', defaultFont: 'Výchozí styl textu', defaultFontId: 'Písmo', defaultFontHeight: 'Výška (body)', + defaultFontWidth: 'Šířka (dots)', }, app: { diff --git a/src/locales/da.ts b/src/locales/da.ts index 447ecba2..8a1183a5 100644 --- a/src/locales/da.ts +++ b/src/locales/da.ts @@ -76,6 +76,11 @@ const da = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Udskriftsmængde', + quantityAdvancedHeading: 'Antal (avanceret)', + pauseCount: 'Pause hver N etiket', + replicates: 'Replikeringer pr. etiket', + overridePauseCount: 'Tilsidesæt pausetæller', + overridePauseCountHint: 'Skær kun den sidste etiket i batchen i stedet for ved hver pausegrænse.', mediaMode: 'Medietilstand', outputHeading: 'Output', mediaModeT: 'T — Afriv', @@ -83,12 +88,27 @@ const da = { mediaModeD: 'D — Skærer', mediaModeK: 'K — Kiosk', labelShift: 'Etiketforskydning (dots)', + offsetsHeading: 'Forskydninger', + offsetsHint: 'Forskyder udskriftens origo. Feltpositioner i editoren forbliver absolutte.', + labelHomeX: 'Origo X', + labelHomeY: 'Origo Y', + labelTop: 'Topforskyv.', printerDefault: 'Printerens standard', printerSettingsHeading: 'Printer (valgfrit)', printSpeed: 'Udskrivningshastighed (ips, 2-14)', printSpeedHint: 'Printerspecifik. Lad stå tom for printerens standardværdi.', + speedHeading: 'Hastighed (ips, 2-14)', + speedPrint: 'Udskrift', + speedSlew: 'Fremføring', + speedBackfeed: 'Tilbageføring', + slewSpeed: 'Fremføringshastighed (ips, 2-14)', + backfeedSpeed: 'Tilbageføringshastighed (ips, 2-14)', darkness: 'Svarthed (-30 til +30)', darknessHint: 'Printerspecifik. Lad stå tom for printerens standardværdi.', + darknessHeading: 'Sværte', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Øjeblikkelig (0..30)', + instantDarkness: 'Øjeblikkelig sværte (0-30)', mediaType: 'Materialetype', mediaTypeT: 'Termotransfer', mediaTypeD: 'Direkte termisk', @@ -96,9 +116,11 @@ const da = { printOrientationN: 'Normal', printOrientationI: 'På hovedet (180°)', printOrientationIndicator: 'På hovedet', + mirror: 'Spejlbillede', defaultFont: 'Standardtekststil', defaultFontId: 'Skrifttype', defaultFontHeight: 'Højde (punkter)', + defaultFontWidth: 'Bredde (dots)', }, app: { diff --git a/src/locales/de.ts b/src/locales/de.ts index aa241d5b..5630b156 100644 --- a/src/locales/de.ts +++ b/src/locales/de.ts @@ -76,6 +76,11 @@ const de = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Druckanzahl', + quantityAdvancedHeading: 'Menge (erweitert)', + pauseCount: 'Pause nach N Etiketten', + replicates: 'Wiederholungen pro Etikett', + overridePauseCount: 'Pausenanzahl überschreiben', + overridePauseCountHint: 'Nur das letzte Etikett der Charge schneiden, statt an jeder Pausengrenze.', mediaMode: 'Medien-Modus', outputHeading: 'Ausgabe', mediaModeT: 'T — Abriss', @@ -83,12 +88,27 @@ const de = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Kiosk', labelShift: 'Label-Versatz (Punkte)', + offsetsHeading: 'Offsets', + offsetsHint: 'Verschiebt den Druckursprung. Feldpositionen im Editor bleiben absolut.', + labelHomeX: 'Home X', + labelHomeY: 'Home Y', + labelTop: 'Top-Versatz', printerDefault: 'Drucker-Standard', printerSettingsHeading: 'Drucker (optional)', printSpeed: 'Druckgeschwindigkeit (ips, 2-14)', printSpeedHint: 'Druckerspezifisch. Leer lassen für Drucker-Standard.', + speedHeading: 'Geschwindigkeit (ips, 2-14)', + speedPrint: 'Druck', + speedSlew: 'Vorschub', + speedBackfeed: 'Rücklauf', + slewSpeed: 'Vorschubgeschwindigkeit (ips, 2-14)', + backfeedSpeed: 'Rücklaufgeschwindigkeit (ips, 2-14)', darkness: 'Druckdichte (-30 bis +30)', darknessHint: 'Druckerspezifisch. Leer lassen für Drucker-Standard.', + darknessHeading: 'Schwärzung', + darknessPermanent: 'Dauerhaft (-30..30)', + darknessInstant: 'Sofort (0..30)', + instantDarkness: 'Sofortige Schwärzung (0-30)', mediaType: 'Medientyp', mediaTypeT: 'Thermotransfer', mediaTypeD: 'Direkter Thermodruck', @@ -96,9 +116,11 @@ const de = { printOrientationN: 'Normal', printOrientationI: 'Kopfüber (180°)', printOrientationIndicator: 'Kopfüber', + mirror: 'Spiegelbild', defaultFont: 'Standard-Textstil', defaultFontId: 'Schriftart', defaultFontHeight: 'Höhe (Punkte)', + defaultFontWidth: 'Breite (dots)', }, app: { diff --git a/src/locales/el.ts b/src/locales/el.ts index e187f44c..972f6fd8 100644 --- a/src/locales/el.ts +++ b/src/locales/el.ts @@ -76,6 +76,11 @@ const el = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Ποσότητα εκτύπωσης', + quantityAdvancedHeading: 'Ποσότητα (για προχωρημένους)', + pauseCount: 'Παύση κάθε Ν ετικέτες', + replicates: 'Αντίγραφα ανά ετικέτα', + overridePauseCount: 'Παράκαμψη μετρητή παύσης', + overridePauseCountHint: 'Κόψτε μόνο την τελευταία ετικέτα της παρτίδας αντί σε κάθε όριο παύσης.', mediaMode: 'Λειτουργία μέσου', outputHeading: 'Έξοδος', mediaModeT: 'T — Σκίσιμο', @@ -83,12 +88,27 @@ const el = { mediaModeD: 'D — Κοπτικό', mediaModeK: 'K — Κιόσκι', labelShift: 'Μετατόπιση ετικέτας (dots)', + offsetsHeading: 'Μετατοπίσεις', + offsetsHint: 'Μετατοπίζει την αρχή εκτύπωσης. Οι θέσεις των πεδίων στον επεξεργαστή παραμένουν απόλυτες.', + labelHomeX: 'Αρχή X', + labelHomeY: 'Αρχή Y', + labelTop: 'Μετατ. κορυφής', printerDefault: 'Προεπιλογή εκτυπωτή', printerSettingsHeading: 'Εκτυπωτής (προαιρετικό)', printSpeed: 'Ταχύτητα εκτύπωσης (ips, 2-14)', printSpeedHint: 'Ειδικό για τον εκτυπωτή. Αφήστε κενό για την προεπιλογή.', + speedHeading: 'Ταχύτητα (ips, 2-14)', + speedPrint: 'Εκτύπωση', + speedSlew: 'Μετάβαση', + speedBackfeed: 'Επιστροφή', + slewSpeed: 'Ταχύτητα μετάβασης (ips, 2-14)', + backfeedSpeed: 'Ταχύτητα επιστροφής (ips, 2-14)', darkness: 'Πυκνότητα (-30 έως +30)', darknessHint: 'Ειδικό για τον εκτυπωτή. Αφήστε κενό για την προεπιλογή.', + darknessHeading: 'Σκουρότητα', + darknessPermanent: 'Μόνιμο (-30..30)', + darknessInstant: 'Άμεσο (0..30)', + instantDarkness: 'Άμεση σκουρότητα (0-30)', mediaType: 'Τύπος μέσου', mediaTypeT: 'Θερμικής μεταφοράς', mediaTypeD: 'Άμεση θερμική', @@ -96,9 +116,11 @@ const el = { printOrientationN: 'Κανονικός', printOrientationI: 'Ανάποδα (180°)', printOrientationIndicator: 'Ανάποδα', + mirror: 'Καθρεπτική εικόνα', defaultFont: 'Προεπιλεγμένο στυλ κειμένου', defaultFontId: 'Γραμματοσειρά', defaultFontHeight: 'Ύψος (κουκκίδες)', + defaultFontWidth: 'Πλάτος (dots)', }, app: { diff --git a/src/locales/en.ts b/src/locales/en.ts index 04e1230a..c41c99fd 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -76,6 +76,11 @@ const en = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Print quantity', + quantityAdvancedHeading: 'Quantity (advanced)', + pauseCount: 'Pause every N labels', + replicates: 'Replicates per label', + overridePauseCount: 'Override pause count', + overridePauseCountHint: 'Cut only the last label in the batch instead of every pause-count boundary.', mediaMode: 'Media mode', outputHeading: 'Output', mediaModeT: 'T — Tear-off', @@ -83,12 +88,27 @@ const en = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Kiosk', labelShift: 'Label shift (dots)', + offsetsHeading: 'Offsets', + offsetsHint: 'Shifts the print origin. Field positions in the editor stay absolute.', + labelHomeX: 'Home X', + labelHomeY: 'Home Y', + labelTop: 'Top shift', printerDefault: 'Printer default', printerSettingsHeading: 'Printer (optional)', printSpeed: 'Print speed (ips, 2-14)', printSpeedHint: 'Printer-specific. Leave empty to use the printer default.', + speedHeading: 'Speed (ips, 2-14)', + speedPrint: 'Print', + speedSlew: 'Slew', + speedBackfeed: 'Backfeed', + slewSpeed: 'Slew speed (ips, 2-14)', + backfeedSpeed: 'Backfeed speed (ips, 2-14)', darkness: 'Darkness (-30 to +30)', darknessHint: 'Printer-specific. Leave empty to use the printer default.', + darknessHeading: 'Darkness', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Instant (0..30)', + instantDarkness: 'Instant darkness (0-30)', mediaType: 'Media type', mediaTypeT: 'Thermal transfer', mediaTypeD: 'Direct thermal', @@ -96,9 +116,11 @@ const en = { printOrientationN: 'Normal', printOrientationI: 'Upside down (180°)', printOrientationIndicator: 'Upside down', + mirror: 'Mirror image', defaultFont: 'Default text style', defaultFontId: 'Font', defaultFontHeight: 'Height (dots)', + defaultFontWidth: 'Width (dots)', }, app: { diff --git a/src/locales/es.ts b/src/locales/es.ts index 5c9c6657..8058feb2 100644 --- a/src/locales/es.ts +++ b/src/locales/es.ts @@ -76,6 +76,11 @@ const es = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Cantidad de impresión', + quantityAdvancedHeading: 'Cantidad (avanzado)', + pauseCount: 'Pausa cada N etiquetas', + replicates: 'Repeticiones por etiqueta', + overridePauseCount: 'Anular conteo de pausa', + overridePauseCountHint: 'Cortar solo la última etiqueta del lote en lugar de cada límite de pausa.', mediaMode: 'Modo de medio', outputHeading: 'Salida', mediaModeT: 'T — Desgarro', @@ -83,12 +88,27 @@ const es = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Kiosco', labelShift: 'Desplazamiento de etiqueta (dots)', + offsetsHeading: 'Desplazamientos', + offsetsHint: 'Desplaza el origen de impresión. Las posiciones de campo en el editor permanecen absolutas.', + labelHomeX: 'Origen X', + labelHomeY: 'Origen Y', + labelTop: 'Despl. arriba', printerDefault: 'Predeterminado de la impresora', printerSettingsHeading: 'Impresora (opcional)', printSpeed: 'Velocidad de impresión (ips, 2-14)', printSpeedHint: 'Específico de la impresora. Dejar vacío para usar el valor predeterminado.', + speedHeading: 'Velocidad (ips, 2-14)', + speedPrint: 'Impresión', + speedSlew: 'Avance', + speedBackfeed: 'Retroceso', + slewSpeed: 'Velocidad de avance (ips, 2-14)', + backfeedSpeed: 'Velocidad de retroceso (ips, 2-14)', darkness: 'Densidad de impresión (-30 a +30)', darknessHint: 'Específico de la impresora. Dejar vacío para usar el valor predeterminado.', + darknessHeading: 'Oscuridad', + darknessPermanent: 'Permanente (-30..30)', + darknessInstant: 'Inmediato (0..30)', + instantDarkness: 'Oscuridad inmediata (0-30)', mediaType: 'Tipo de medio', mediaTypeT: 'Transferencia térmica', mediaTypeD: 'Térmica directa', @@ -96,9 +116,11 @@ const es = { printOrientationN: 'Normal', printOrientationI: 'Boca abajo (180°)', printOrientationIndicator: 'Boca abajo', + mirror: 'Imagen reflejada', defaultFont: 'Estilo de texto predeterminado', defaultFontId: 'Fuente', defaultFontHeight: 'Altura (puntos)', + defaultFontWidth: 'Ancho (dots)', }, app: { diff --git a/src/locales/et.ts b/src/locales/et.ts index e58469e0..8cb64a16 100644 --- a/src/locales/et.ts +++ b/src/locales/et.ts @@ -76,6 +76,11 @@ const et = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Trükikogus', + quantityAdvancedHeading: 'Kogus (täpsem)', + pauseCount: 'Paus iga N sildi järel', + replicates: 'Korduvad sildi kohta', + overridePauseCount: 'Tühista pausi loendur', + overridePauseCountHint: 'Lõika ainult partii viimane silt iga pausi piiri asemel.', mediaMode: 'Kandja režiim', outputHeading: 'Väljund', mediaModeT: 'T — Rebimine', @@ -83,12 +88,27 @@ const et = { mediaModeD: 'D — Lõikur', mediaModeK: 'K — Kiosk', labelShift: 'Etiketi nihe (dots)', + offsetsHeading: 'Nihked', + offsetsHint: 'Nihutab trükikoha alguspunkti. Väljade asukohad redaktoris jäävad absoluutseks.', + labelHomeX: 'Alguspunkt X', + labelHomeY: 'Alguspunkt Y', + labelTop: 'Ülanihe', printerDefault: 'Printeri vaikeväärtus', printerSettingsHeading: 'Printer (valikuline)', printSpeed: 'Trükikiirus (ips, 2-14)', printSpeedHint: 'Printerispetsiifiline. Vaikeväärtuse kasutamiseks jäta tühjaks.', + speedHeading: 'Kiirus (ips, 2-14)', + speedPrint: 'Trükk', + speedSlew: 'Edasiliikumine', + speedBackfeed: 'Tagasiliikumine', + slewSpeed: 'Edasiliikumiskiirus (ips, 2-14)', + backfeedSpeed: 'Tagasiliikumiskiirus (ips, 2-14)', darkness: 'Tumedus (-30 kuni +30)', darknessHint: 'Printerispetsiifiline. Vaikeväärtuse kasutamiseks jäta tühjaks.', + instantDarkness: 'Kohene tumedus (0-30)', + darknessHeading: 'Tumedus', + darknessPermanent: 'Püsiv (-30..30)', + darknessInstant: 'Kohene (0..30)', mediaType: 'Meedialiik', mediaTypeT: 'Termoülekanne', mediaTypeD: 'Otsetermaal', @@ -96,9 +116,11 @@ const et = { printOrientationN: 'Tavaline', printOrientationI: 'Tagurpidi (180°)', printOrientationIndicator: 'Tagurpidi', + mirror: 'Peegelpilt', defaultFont: 'Vaikimisi teksti stiil', defaultFontId: 'Font', defaultFontHeight: 'Kõrgus (punktid)', + defaultFontWidth: 'Laius (dots)', }, app: { diff --git a/src/locales/fa.ts b/src/locales/fa.ts index 703e7946..68d47b57 100644 --- a/src/locales/fa.ts +++ b/src/locales/fa.ts @@ -76,6 +76,11 @@ const fa = { dpmm12: '12 نقطه/میلی‌متر — 300 dpi', dpmm24: '24 نقطه/میلی‌متر — 600 dpi', printQuantity: 'تعداد چاپ', + quantityAdvancedHeading: 'مقدار (پیشرفته)', + pauseCount: 'توقف هر N برچسب', + replicates: 'تکرار در هر برچسب', + overridePauseCount: 'نادیده گرفتن شمارش توقف', + overridePauseCountHint: 'فقط آخرین برچسب دسته را برش بزن، نه در هر مرز توقف.', mediaMode: 'حالت رسانه', outputHeading: 'خروجی', mediaModeT: 'T — پاره کردن', @@ -83,12 +88,27 @@ const fa = { mediaModeD: 'D — برش', mediaModeK: 'K — کیوسک', labelShift: 'جابجایی برچسب (dots)', + offsetsHeading: 'افست‌ها', + offsetsHint: 'مبدا چاپ را جابجا می‌کند. موقعیت فیلدها در ویرایشگر مطلق باقی می‌ماند.', + labelHomeX: 'مبدا X', + labelHomeY: 'مبدا Y', + labelTop: 'افست بالا', printerDefault: 'پیش‌فرض چاپگر', printerSettingsHeading: 'چاپگر (اختیاری)', printSpeed: 'سرعت چاپ (ips, 2-14)', printSpeedHint: 'مختص چاپگر. برای استفاده از پیش‌فرض خالی بگذارید.', + speedHeading: 'سرعت (ips، ۲-۱۴)', + speedPrint: 'چاپ', + speedSlew: 'حرکت', + speedBackfeed: 'بازگشت', + slewSpeed: 'سرعت حرکت (ips، ۲-۱۴)', + backfeedSpeed: 'سرعت بازگشت (ips، ۲-۱۴)', darkness: 'تیرگی (-30 تا +30)', darknessHint: 'مختص چاپگر. برای استفاده از پیش‌فرض خالی بگذارید.', + instantDarkness: 'تیرگی فوری (۰-۳۰)', + darknessHeading: 'تیرگی', + darknessPermanent: 'دائمی (-۳۰..۳۰)', + darknessInstant: 'فوری (۰..۳۰)', mediaType: 'نوع رسانه', mediaTypeT: 'انتقال حرارتی', mediaTypeD: 'حرارتی مستقیم', @@ -96,9 +116,11 @@ const fa = { printOrientationN: 'عادی', printOrientationI: 'وارونه (180°)', printOrientationIndicator: 'وارونه', + mirror: 'تصویر آینه‌ای', defaultFont: 'سبک متن پیش‌فرض', defaultFontId: 'قلم', defaultFontHeight: 'ارتفاع (نقطه)', + defaultFontWidth: 'عرض (dots)', }, app: { diff --git a/src/locales/fi.ts b/src/locales/fi.ts index c3137871..10b1f4f8 100644 --- a/src/locales/fi.ts +++ b/src/locales/fi.ts @@ -76,6 +76,11 @@ const fi = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Tulostusmäärä', + quantityAdvancedHeading: 'Määrä (lisäasetukset)', + pauseCount: 'Tauko joka N. etiketti', + replicates: 'Replikoinnit per etiketti', + overridePauseCount: 'Ohita taukolaskuri', + overridePauseCountHint: 'Leikkaa vain erän viimeinen etiketti jokaisen taukorajan sijaan.', mediaMode: 'Mediatila', outputHeading: 'Tuloste', mediaModeT: 'T — Repäisy', @@ -83,12 +88,27 @@ const fi = { mediaModeD: 'D — Leikkuri', mediaModeK: 'K — Kioski', labelShift: 'Tarrasiirtymä (dots)', + offsetsHeading: 'Siirtymät', + offsetsHint: 'Siirtää tulostuksen origoa. Kenttien sijainnit editorissa pysyvät absoluuttisina.', + labelHomeX: 'Origo X', + labelHomeY: 'Origo Y', + labelTop: 'Yläsiirtymä', printerDefault: 'Tulostimen oletus', printerSettingsHeading: 'Tulostin (valinnainen)', printSpeed: 'Tulostusnopeus (ips, 2-14)', printSpeedHint: 'Tulostinkohtainen. Jätä tyhjäksi käyttääksesi oletusarvoa.', + speedHeading: 'Nopeus (ips, 2-14)', + speedPrint: 'Tulostus', + speedSlew: 'Syöttö', + speedBackfeed: 'Takaisinsyöttö', + slewSpeed: 'Syöttönopeus (ips, 2-14)', + backfeedSpeed: 'Takaisinsyöttönopeus (ips, 2-14)', darkness: 'Tummuus (-30 - +30)', darknessHint: 'Tulostinkohtainen. Jätä tyhjäksi käyttääksesi oletusarvoa.', + darknessHeading: 'Tummuus', + darknessPermanent: 'Pysyvä (-30..30)', + darknessInstant: 'Välitön (0..30)', + instantDarkness: 'Välitön tummuus (0-30)', mediaType: 'Materiaalityyppi', mediaTypeT: 'Lämpösiirto', mediaTypeD: 'Suora lämpö', @@ -96,9 +116,11 @@ const fi = { printOrientationN: 'Normaali', printOrientationI: 'Ylösalaisin (180°)', printOrientationIndicator: 'Ylösalaisin', + mirror: 'Peilikuva', defaultFont: 'Oletustekstityyli', defaultFontId: 'Fontti', defaultFontHeight: 'Korkeus (pisteet)', + defaultFontWidth: 'Leveys (dots)', }, app: { diff --git a/src/locales/fr.ts b/src/locales/fr.ts index ddb238a1..a6abdddb 100644 --- a/src/locales/fr.ts +++ b/src/locales/fr.ts @@ -76,6 +76,11 @@ const fr = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Quantité d\'impression', + quantityAdvancedHeading: 'Quantité (avancé)', + pauseCount: 'Pause toutes les N étiquettes', + replicates: 'Réplications par étiquette', + overridePauseCount: 'Remplacer le nombre de pauses', + overridePauseCountHint: 'Couper uniquement la dernière étiquette du lot au lieu de chaque limite de pause.', mediaMode: 'Mode média', outputHeading: 'Sortie', mediaModeT: 'T — Déchirement', @@ -83,12 +88,27 @@ const fr = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Kiosque', labelShift: 'Décalage d\'étiquette (dots)', + offsetsHeading: 'Décalages', + offsetsHint: 'Décale l\'origine d\'impression. Les positions des champs dans l\'éditeur restent absolues.', + labelHomeX: 'Origine X', + labelHomeY: 'Origine Y', + labelTop: 'Décalage haut', printerDefault: 'Valeur par défaut de l\'imprimante', printerSettingsHeading: 'Imprimante (facultatif)', printSpeed: 'Vitesse d\'impression (ips, 2-14)', printSpeedHint: 'Spécifique à l\'imprimante. Laisser vide pour la valeur par défaut.', + speedHeading: 'Vitesse (ips, 2-14)', + speedPrint: 'Impression', + speedSlew: 'Avance', + speedBackfeed: 'Retour', + slewSpeed: 'Vitesse de défilement (ips, 2-14)', + backfeedSpeed: 'Vitesse de retour (ips, 2-14)', darkness: 'Densité d\'impression (-30 à +30)', darknessHint: 'Spécifique à l\'imprimante. Laisser vide pour la valeur par défaut.', + darknessHeading: 'Noirceur', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Instantané (0..30)', + instantDarkness: 'Noirceur immédiate (0-30)', mediaType: 'Type de support', mediaTypeT: 'Transfert thermique', mediaTypeD: 'Thermique direct', @@ -96,9 +116,11 @@ const fr = { printOrientationN: 'Normal', printOrientationI: 'Tête en bas (180°)', printOrientationIndicator: 'Tête en bas', + mirror: 'Image miroir', defaultFont: 'Style de texte par défaut', defaultFontId: 'Police', defaultFontHeight: 'Hauteur (points)', + defaultFontWidth: 'Largeur (dots)', }, app: { diff --git a/src/locales/he.ts b/src/locales/he.ts index 16c9b6e9..423d8d3e 100644 --- a/src/locales/he.ts +++ b/src/locales/he.ts @@ -76,6 +76,11 @@ const he = { dpmm12: '12 נקודות/מ"מ — 300 dpi', dpmm24: '24 נקודות/מ"מ — 600 dpi', printQuantity: 'כמות הדפסה', + quantityAdvancedHeading: 'כמות (מתקדם)', + pauseCount: 'השהיה כל N תוויות', + replicates: 'שכפולים לכל תווית', + overridePauseCount: 'עקוף ספירת השהיה', + overridePauseCountHint: 'חתוך רק את התווית האחרונה באצווה במקום בכל גבול השהיה.', mediaMode: 'מצב מדיה', outputHeading: 'פלט', mediaModeT: 'T — קריעה', @@ -83,12 +88,27 @@ const he = { mediaModeD: 'D — חותך', mediaModeK: 'K — קיוסק', labelShift: 'הסטת תווית (dots)', + offsetsHeading: 'היסטים', + offsetsHint: 'מזיז את ראשית ההדפסה. מיקומי השדות בעורך נשארים מוחלטים.', + labelHomeX: 'מוצא X', + labelHomeY: 'מוצא Y', + labelTop: 'היסט עליון', printerDefault: 'ברירת מחדל של המדפסת', printerSettingsHeading: 'מדפסת (אופציונלי)', printSpeed: 'מהירות הדפסה (ips, 2-14)', printSpeedHint: 'ספציפי למדפסת. השאר ריק לערך ברירת המחדל.', + speedHeading: 'מהירות (ips, 2-14)', + speedPrint: 'הדפסה', + speedSlew: 'הזנה', + speedBackfeed: 'הזנה לאחור', + slewSpeed: 'מהירות הזנה (ips, 2-14)', + backfeedSpeed: 'מהירות הזנה לאחור (ips, 2-14)', darkness: 'כהות (-30 עד +30)', darknessHint: 'ספציפי למדפסת. השאר ריק לערך ברירת המחדל.', + instantDarkness: 'כהות מיידית (0-30)', + darknessHeading: 'כהות', + darknessPermanent: 'קבוע (-30..30)', + darknessInstant: 'מיידי (0..30)', mediaType: 'סוג המדיה', mediaTypeT: 'העברה תרמית', mediaTypeD: 'תרמי ישיר', @@ -96,9 +116,11 @@ const he = { printOrientationN: 'רגיל', printOrientationI: 'הפוך (180°)', printOrientationIndicator: 'הפוך', + mirror: 'תמונת ראי', defaultFont: 'סגנון טקסט ברירת מחדל', defaultFontId: 'גופן', defaultFontHeight: 'גובה (נקודות)', + defaultFontWidth: 'רוחב (dots)', }, app: { diff --git a/src/locales/hr.ts b/src/locales/hr.ts index a9c82cfd..161488aa 100644 --- a/src/locales/hr.ts +++ b/src/locales/hr.ts @@ -76,6 +76,11 @@ const hr = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Količina ispisa', + quantityAdvancedHeading: 'Količina (napredno)', + pauseCount: 'Pauza svakih N etiketa', + replicates: 'Replike po etiketi', + overridePauseCount: 'Premosti brojač pauze', + overridePauseCountHint: 'Reže samo posljednju etiketu serije umjesto na svakoj granici pauze.', mediaMode: 'Način medija', outputHeading: 'Izlaz', mediaModeT: 'T — Otkidanje', @@ -83,12 +88,27 @@ const hr = { mediaModeD: 'D — Rezač', mediaModeK: 'K — Kiosk', labelShift: 'Pomak naljepnice (dots)', + offsetsHeading: 'Pomaci', + offsetsHint: 'Pomiče ishodište ispisa. Pozicije polja u uredniku ostaju apsolutne.', + labelHomeX: 'Ishodište X', + labelHomeY: 'Ishodište Y', + labelTop: 'Pomak gore', printerDefault: 'Zadano za pisač', printerSettingsHeading: 'Pisač (neobavezno)', printSpeed: 'Brzina ispisa (ips, 2-14)', printSpeedHint: 'Specifično za pisač. Ostavite prazno za zadanu vrijednost.', + speedHeading: 'Brzina (ips, 2-14)', + speedPrint: 'Ispis', + speedSlew: 'Pomak', + speedBackfeed: 'Povratni pomak', + slewSpeed: 'Brzina pomaka (ips, 2-14)', + backfeedSpeed: 'Brzina povratnog pomaka (ips, 2-14)', darkness: 'Zacrnjenje (-30 do +30)', darknessHint: 'Specifično za pisač. Ostavite prazno za zadanu vrijednost.', + darknessHeading: 'Tamnoća', + darknessPermanent: 'Trajno (-30..30)', + darknessInstant: 'Trenutno (0..30)', + instantDarkness: 'Trenutna tamnoća (0-30)', mediaType: 'Vrsta medija', mediaTypeT: 'Toplinski prijenos', mediaTypeD: 'Izravni termalni', @@ -96,9 +116,11 @@ const hr = { printOrientationN: 'Normalno', printOrientationI: 'Naopako (180°)', printOrientationIndicator: 'Naopako', + mirror: 'Zrcalna slika', defaultFont: 'Zadani stil teksta', defaultFontId: 'Font', defaultFontHeight: 'Visina (točke)', + defaultFontWidth: 'Širina (dots)', }, app: { diff --git a/src/locales/hu.ts b/src/locales/hu.ts index d3a3ac11..b21d30a4 100644 --- a/src/locales/hu.ts +++ b/src/locales/hu.ts @@ -76,6 +76,11 @@ const hu = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Nyomtatási mennyiség', + quantityAdvancedHeading: 'Mennyiség (haladó)', + pauseCount: 'Szünet N címkénként', + replicates: 'Ismétlés címkénként', + overridePauseCount: 'Szünetszám felülbírálása', + overridePauseCountHint: 'Csak a köteg utolsó címkéjét vágja minden szünethatár helyett.', mediaMode: 'Média mód', outputHeading: 'Kimenet', mediaModeT: 'T — Letépés', @@ -83,12 +88,27 @@ const hu = { mediaModeD: 'D — Vágó', mediaModeK: 'K — Kioszk', labelShift: 'Címke eltolás (dots)', + offsetsHeading: 'Eltolások', + offsetsHint: 'Eltolja a nyomtatás origóját. A mezők pozíciói a szerkesztőben abszolútak maradnak.', + labelHomeX: 'Origo X', + labelHomeY: 'Origo Y', + labelTop: 'Felső eltolás', printerDefault: 'Nyomtató alapértelmezett', printerSettingsHeading: 'Nyomtató (opcionális)', printSpeed: 'Nyomtatási sebesség (ips, 2-14)', printSpeedHint: 'Nyomtatófüggő. Hagyja üresen a nyomtató alapértelmezett értékéhez.', + speedHeading: 'Sebesség (ips, 2-14)', + speedPrint: 'Nyomtatás', + speedSlew: 'Továbbítás', + speedBackfeed: 'Visszacsévélés', + slewSpeed: 'Továbbítási sebesség (ips, 2-14)', + backfeedSpeed: 'Visszacsévélési sebesség (ips, 2-14)', darkness: 'Nyomtatási sűrűség (-30 - +30)', darknessHint: 'Nyomtatófüggő. Hagyja üresen a nyomtató alapértelmezett értékéhez.', + darknessHeading: 'Sötétség', + darknessPermanent: 'Állandó (-30..30)', + darknessInstant: 'Azonnali (0..30)', + instantDarkness: 'Azonnali sötétség (0-30)', mediaType: 'Hordozó típusa', mediaTypeT: 'Hőtranszfer', mediaTypeD: 'Direkt termál', @@ -96,9 +116,11 @@ const hu = { printOrientationN: 'Normál', printOrientationI: 'Fejjel lefelé (180°)', printOrientationIndicator: 'Fejjel lefelé', + mirror: 'Tükörkép', defaultFont: 'Alapértelmezett szövegstílus', defaultFontId: 'Betűtípus', defaultFontHeight: 'Magasság (pontok)', + defaultFontWidth: 'Szélesség (dots)', }, app: { diff --git a/src/locales/it.ts b/src/locales/it.ts index 98ec3c53..536f6bfd 100644 --- a/src/locales/it.ts +++ b/src/locales/it.ts @@ -76,6 +76,11 @@ const it = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Quantità di stampa', + quantityAdvancedHeading: 'Quantità (avanzato)', + pauseCount: 'Pausa ogni N etichette', + replicates: 'Repliche per etichetta', + overridePauseCount: 'Sostituisci conteggio pause', + overridePauseCountHint: 'Taglia solo l\'ultima etichetta del lotto invece di ogni limite di pausa.', mediaMode: 'Modalità supporto', outputHeading: 'Output', mediaModeT: 'T — Strappo', @@ -83,12 +88,27 @@ const it = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Chiosco', labelShift: 'Spostamento etichetta (dots)', + offsetsHeading: 'Offset', + offsetsHint: 'Sposta l\'origine di stampa. Le posizioni dei campi nell\'editor restano assolute.', + labelHomeX: 'Origine X', + labelHomeY: 'Origine Y', + labelTop: 'Spost. alto', printerDefault: 'Predefinito stampante', printerSettingsHeading: 'Stampante (opzionale)', printSpeed: 'Velocità di stampa (ips, 2-14)', printSpeedHint: 'Specifico per stampante. Lascia vuoto per usare il valore predefinito.', + speedHeading: 'Velocità (ips, 2-14)', + speedPrint: 'Stampa', + speedSlew: 'Avanzamento', + speedBackfeed: 'Ritorno', + slewSpeed: 'Velocità di avanzamento (ips, 2-14)', + backfeedSpeed: 'Velocità di ritorno (ips, 2-14)', darkness: 'Densità di stampa (-30 a +30)', darknessHint: 'Specifico per stampante. Lascia vuoto per usare il valore predefinito.', + darknessHeading: 'Scurezza', + darknessPermanent: 'Permanente (-30..30)', + darknessInstant: 'Immediato (0..30)', + instantDarkness: 'Scurezza immediata (0-30)', mediaType: 'Tipo di supporto', mediaTypeT: 'Trasferimento termico', mediaTypeD: 'Termica diretta', @@ -96,9 +116,11 @@ const it = { printOrientationN: 'Normale', printOrientationI: 'Capovolto (180°)', printOrientationIndicator: 'Capovolto', + mirror: 'Immagine speculare', defaultFont: 'Stile di testo predefinito', defaultFontId: 'Carattere', defaultFontHeight: 'Altezza (punti)', + defaultFontWidth: 'Larghezza (dots)', }, app: { diff --git a/src/locales/ja.ts b/src/locales/ja.ts index 9b42046a..0f742b8e 100644 --- a/src/locales/ja.ts +++ b/src/locales/ja.ts @@ -76,6 +76,11 @@ const ja = { dpmm12: '12 ドット/mm — 300 dpi', dpmm24: '24 ドット/mm — 600 dpi', printQuantity: '印刷枚数', + quantityAdvancedHeading: '数量(詳細)', + pauseCount: 'N枚ごとに一時停止', + replicates: 'ラベルごとの複製数', + overridePauseCount: '一時停止カウントを上書き', + overridePauseCountHint: '各一時停止境界ではなく、バッチの最後のラベルのみカットします。', mediaMode: 'メディアモード', outputHeading: '出力', mediaModeT: 'T — ティアオフ', @@ -83,12 +88,27 @@ const ja = { mediaModeD: 'D — カッター', mediaModeK: 'K — キオスク', labelShift: 'ラベルシフト (dots)', + offsetsHeading: 'オフセット', + offsetsHint: '印刷原点をずらします。エディタ内のフィールド位置は絶対のまま。', + labelHomeX: '原点 X', + labelHomeY: '原点 Y', + labelTop: '上部シフト', printerDefault: 'プリンターの既定値', printerSettingsHeading: 'プリンター(オプション)', printSpeed: '印刷速度 (ips, 2-14)', printSpeedHint: 'プリンター固有。デフォルト値を使用するには空のままにします。', + speedHeading: '速度 (ips, 2-14)', + speedPrint: '印刷', + speedSlew: 'スリュー', + speedBackfeed: 'バックフィード', + slewSpeed: 'スリュー速度 (ips, 2-14)', + backfeedSpeed: 'バックフィード速度 (ips, 2-14)', darkness: '濃度 (-30 ~ +30)', darknessHint: 'プリンター固有。デフォルト値を使用するには空のままにします。', + instantDarkness: '即時濃度 (0-30)', + darknessHeading: '濃度', + darknessPermanent: '永続 (-30..30)', + darknessInstant: '即時 (0..30)', mediaType: 'メディアタイプ', mediaTypeT: '熱転写', mediaTypeD: 'ダイレクトサーマル', @@ -96,9 +116,11 @@ const ja = { printOrientationN: '通常', printOrientationI: '上下逆 (180°)', printOrientationIndicator: '上下逆', + mirror: '鏡像', defaultFont: '既定のテキストスタイル', defaultFontId: 'フォント', defaultFontHeight: '高さ (ドット)', + defaultFontWidth: '幅 (dots)', }, app: { diff --git a/src/locales/ko.ts b/src/locales/ko.ts index bcb2a5bb..5ed28fc0 100644 --- a/src/locales/ko.ts +++ b/src/locales/ko.ts @@ -76,6 +76,11 @@ const ko = { dpmm12: '12 점/mm — 300 dpi', dpmm24: '24 점/mm — 600 dpi', printQuantity: '인쇄 수량', + quantityAdvancedHeading: '수량 (고급)', + pauseCount: 'N개 라벨마다 일시정지', + replicates: '라벨당 복제 수', + overridePauseCount: '일시정지 카운트 재정의', + overridePauseCountHint: '각 일시정지 경계가 아닌 배치의 마지막 라벨만 자릅니다.', mediaMode: '미디어 모드', outputHeading: '출력', mediaModeT: 'T — 찢어 분리', @@ -83,12 +88,27 @@ const ko = { mediaModeD: 'D — 커터', mediaModeK: 'K — 키오스크', labelShift: '라벨 이동 (dots)', + offsetsHeading: '오프셋', + offsetsHint: '인쇄 원점을 이동합니다. 편집기의 필드 위치는 절대값으로 유지됩니다.', + labelHomeX: '원점 X', + labelHomeY: '원점 Y', + labelTop: '상단 이동', printerDefault: '프린터 기본값', printerSettingsHeading: '프린터 (선택 사항)', printSpeed: '인쇄 속도 (ips, 2-14)', printSpeedHint: '프린터별로 다릅니다. 기본값을 사용하려면 비워 두세요.', + speedHeading: '속도 (ips, 2-14)', + speedPrint: '인쇄', + speedSlew: '이송', + speedBackfeed: '역이송', + slewSpeed: '이송 속도 (ips, 2-14)', + backfeedSpeed: '역이송 속도 (ips, 2-14)', darkness: '농도 (-30 ~ +30)', darknessHint: '프린터별로 다릅니다. 기본값을 사용하려면 비워 두세요.', + instantDarkness: '즉시 농도 (0-30)', + darknessHeading: '농도', + darknessPermanent: '영구 (-30..30)', + darknessInstant: '즉시 (0..30)', mediaType: '미디어 유형', mediaTypeT: '열전사', mediaTypeD: '감열식', @@ -96,9 +116,11 @@ const ko = { printOrientationN: '일반', printOrientationI: '거꾸로 (180°)', printOrientationIndicator: '거꾸로', + mirror: '거울 이미지', defaultFont: '기본 텍스트 스타일', defaultFontId: '글꼴', defaultFontHeight: '높이 (도트)', + defaultFontWidth: '너비 (dots)', }, app: { diff --git a/src/locales/lt.ts b/src/locales/lt.ts index 78c1e021..daf18a7f 100644 --- a/src/locales/lt.ts +++ b/src/locales/lt.ts @@ -76,6 +76,11 @@ const lt = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Spausdinimo kiekis', + quantityAdvancedHeading: 'Kiekis (išplėstinis)', + pauseCount: 'Pauzė kas N etikečių', + replicates: 'Pakartojimai etiketei', + overridePauseCount: 'Nepaisyti pauzės skaitiklio', + overridePauseCountHint: 'Kirpti tik paskutinę partijos etiketę vietoj kiekvienos pauzės ribos.', mediaMode: 'Laikmenos režimas', outputHeading: 'Išvestis', mediaModeT: 'T — Nuplėšimas', @@ -83,12 +88,27 @@ const lt = { mediaModeD: 'D — Pjaustuvas', mediaModeK: 'K — Kioskas', labelShift: 'Etiketės poslinkis (dots)', + offsetsHeading: 'Poslinkiai', + offsetsHint: 'Perkelia spaudos pradžios tašką. Laukų pozicijos redaktoriuje lieka absoliučios.', + labelHomeX: 'Pradžia X', + labelHomeY: 'Pradžia Y', + labelTop: 'Viršaus posl.', printerDefault: 'Spausdintuvo numatytasis', printerSettingsHeading: 'Spausdintuvas (neprivaloma)', printSpeed: 'Spausdinimo greitis (ips, 2-14)', printSpeedHint: 'Priklauso nuo spausdintuvo. Palikite tuščią numatytąjai reikšmei.', + speedHeading: 'Greitis (ips, 2-14)', + speedPrint: 'Spausdinimas', + speedSlew: 'Postūmis', + speedBackfeed: 'Atgalinis postūmis', + slewSpeed: 'Postūmio greitis (ips, 2-14)', + backfeedSpeed: 'Atgalinio postūmio greitis (ips, 2-14)', darkness: 'Tamsumas (-30 iki +30)', darknessHint: 'Priklauso nuo spausdintuvo. Palikite tuščią numatytąjai reikšmei.', + instantDarkness: 'Momentinis tamsumas (0-30)', + darknessHeading: 'Tamsumas', + darknessPermanent: 'Nuolatinis (-30..30)', + darknessInstant: 'Momentinis (0..30)', mediaType: 'Laikmenos tipas', mediaTypeT: 'Šiluminis perdavimas', mediaTypeD: 'Tiesioginis terminis', @@ -96,9 +116,11 @@ const lt = { printOrientationN: 'Įprasta', printOrientationI: 'Apsuktai (180°)', printOrientationIndicator: 'Apsuktai', + mirror: 'Veidrodinis vaizdas', defaultFont: 'Numatytasis teksto stilius', defaultFontId: 'Šriftas', defaultFontHeight: 'Aukštis (taškai)', + defaultFontWidth: 'Plotis (dots)', }, app: { diff --git a/src/locales/lv.ts b/src/locales/lv.ts index 2f63af7e..6fe5430a 100644 --- a/src/locales/lv.ts +++ b/src/locales/lv.ts @@ -76,6 +76,11 @@ const lv = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Drukāšanas daudzums', + quantityAdvancedHeading: 'Daudzums (paplašināti)', + pauseCount: 'Pauze ik pēc N etiķetēm', + replicates: 'Atkārtojumi uz etiķeti', + overridePauseCount: 'Pārrakstīt pauzes skaitītāju', + overridePauseCountHint: 'Griezt tikai pēdējo partijas etiķeti, nevis pie katras pauzes robežas.', mediaMode: 'Nesēja režīms', outputHeading: 'Izvade', mediaModeT: 'T — Noplēšana', @@ -83,12 +88,27 @@ const lv = { mediaModeD: 'D — Griezējs', mediaModeK: 'K — Kiosks', labelShift: 'Etiķetes nobīde (dots)', + offsetsHeading: 'Nobīdes', + offsetsHint: 'Pārvieto druku sākumpunktu. Lauku pozīcijas redaktorā paliek absolūtas.', + labelHomeX: 'Sākumpunkts X', + labelHomeY: 'Sākumpunkts Y', + labelTop: 'Augšas nob.', printerDefault: 'Printera noklusējums', printerSettingsHeading: 'Printeris (neobligāti)', printSpeed: 'Drukāšanas ātrums (ips, 2-14)', printSpeedHint: 'Atkarīgs no printera. Atstājiet tukšu, lai izmantotu noklusējumu.', + speedHeading: 'Ātrums (ips, 2-14)', + speedPrint: 'Druka', + speedSlew: 'Pārvietošana', + speedBackfeed: 'Atgaita', + slewSpeed: 'Pārvietošanās ātrums (ips, 2-14)', + backfeedSpeed: 'Atgaitas ātrums (ips, 2-14)', darkness: 'Tumšums (-30 līdz +30)', darknessHint: 'Atkarīgs no printera. Atstājiet tukšu, lai izmantotu noklusējumu.', + instantDarkness: 'Tūlītēja tumšums (0-30)', + darknessHeading: 'Tumšums', + darknessPermanent: 'Pastāvīgi (-30..30)', + darknessInstant: 'Tūlītēji (0..30)', mediaType: 'Materiāla veids', mediaTypeT: 'Termopārnese', mediaTypeD: 'Tiešais termālais', @@ -96,9 +116,11 @@ const lv = { printOrientationN: 'Parasta', printOrientationI: 'Otrādi (180°)', printOrientationIndicator: 'Otrādi', + mirror: 'Spoguļattēls', defaultFont: 'Noklusējuma teksta stils', defaultFontId: 'Fonts', defaultFontHeight: 'Augstums (punkti)', + defaultFontWidth: 'Platums (dots)', }, app: { diff --git a/src/locales/nl.ts b/src/locales/nl.ts index 5abbef27..2fcbc9b6 100644 --- a/src/locales/nl.ts +++ b/src/locales/nl.ts @@ -76,6 +76,11 @@ const nl = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Afdrukoplage', + quantityAdvancedHeading: 'Aantal (geavanceerd)', + pauseCount: 'Pauze elke N labels', + replicates: 'Replicaties per label', + overridePauseCount: 'Pauzeteller overschrijven', + overridePauseCountHint: 'Snijdt alleen het laatste label van de batch in plaats van bij elke pauzegrens.', mediaMode: 'Mediamodus', outputHeading: 'Uitvoer', mediaModeT: 'T — Afscheuren', @@ -83,12 +88,27 @@ const nl = { mediaModeD: 'D — Snijder', mediaModeK: 'K — Kiosk', labelShift: 'Etiketverschuiving (dots)', + offsetsHeading: 'Offsets', + offsetsHint: 'Verschuift de afdrukoorsprong. Veldposities in de editor blijven absoluut.', + labelHomeX: 'Oorsprong X', + labelHomeY: 'Oorsprong Y', + labelTop: 'Verschuiv. boven', printerDefault: 'Printerstandaard', printerSettingsHeading: 'Printer (optioneel)', printSpeed: 'Afdruksnelheid (ips, 2-14)', printSpeedHint: 'Printerspecifiek. Laat leeg om de standaardwaarde te gebruiken.', + speedHeading: 'Snelheid (ips, 2-14)', + speedPrint: 'Afdruk', + speedSlew: 'Doorvoer', + speedBackfeed: 'Terugvoer', + slewSpeed: 'Doorvoersnelheid (ips, 2-14)', + backfeedSpeed: 'Terugvoersnelheid (ips, 2-14)', darkness: 'Drukdichtheid (-30 tot +30)', darknessHint: 'Printerspecifiek. Laat leeg om de standaardwaarde te gebruiken.', + darknessHeading: 'Zwartheid', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Direct (0..30)', + instantDarkness: 'Directe zwartheid (0-30)', mediaType: 'Mediumtype', mediaTypeT: 'Thermische transfer', mediaTypeD: 'Direct thermisch', @@ -96,9 +116,11 @@ const nl = { printOrientationN: 'Normaal', printOrientationI: 'Ondersteboven (180°)', printOrientationIndicator: 'Ondersteboven', + mirror: 'Spiegelbeeld', defaultFont: 'Standaard tekststijl', defaultFontId: 'Lettertype', defaultFontHeight: 'Hoogte (dots)', + defaultFontWidth: 'Breedte (dots)', }, app: { diff --git a/src/locales/no.ts b/src/locales/no.ts index 291dec3f..ab822d33 100644 --- a/src/locales/no.ts +++ b/src/locales/no.ts @@ -76,6 +76,11 @@ const no = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Utskriftsmengde', + quantityAdvancedHeading: 'Antall (avansert)', + pauseCount: 'Pause hver N etikett', + replicates: 'Replikeringer per etikett', + overridePauseCount: 'Overstyr pauseteller', + overridePauseCountHint: 'Kutt kun siste etikett i partiet i stedet for ved hver pausegrense.', mediaMode: 'Mediemodus', outputHeading: 'Utdata', mediaModeT: 'T — Avrivning', @@ -83,12 +88,27 @@ const no = { mediaModeD: 'D — Kutter', mediaModeK: 'K — Kiosk', labelShift: 'Etikettforskyvning (dots)', + offsetsHeading: 'Forskyvninger', + offsetsHint: 'Forskyver utskriftsorigo. Feltposisjoner i editoren forblir absolutte.', + labelHomeX: 'Origo X', + labelHomeY: 'Origo Y', + labelTop: 'Toppforskyv.', printerDefault: 'Skriverens standard', printerSettingsHeading: 'Skriver (valgfritt)', printSpeed: 'Utskriftshastighet (ips, 2-14)', printSpeedHint: 'Skriverspesifikk. La stå tom for skriverens standardverdi.', + speedHeading: 'Hastighet (ips, 2-14)', + speedPrint: 'Utskrift', + speedSlew: 'Matefart', + speedBackfeed: 'Tilbakemating', + slewSpeed: 'Matehastighet (ips, 2-14)', + backfeedSpeed: 'Tilbakematingshastighet (ips, 2-14)', darkness: 'Svarthet (-30 til +30)', darknessHint: 'Skriverspesifikk. La stå tom for skriverens standardverdi.', + darknessHeading: 'Svarthet', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Umiddelbar (0..30)', + instantDarkness: 'Umiddelbar svarthet (0-30)', mediaType: 'Materialtype', mediaTypeT: 'Termotransfer', mediaTypeD: 'Direkte termisk', @@ -96,9 +116,11 @@ const no = { printOrientationN: 'Normal', printOrientationI: 'Opp ned (180°)', printOrientationIndicator: 'Opp ned', + mirror: 'Speilbilde', defaultFont: 'Standardtekststil', defaultFontId: 'Skrift', defaultFontHeight: 'Høyde (punkter)', + defaultFontWidth: 'Bredde (dots)', }, app: { diff --git a/src/locales/pl.ts b/src/locales/pl.ts index 9db166ee..e9fca70b 100644 --- a/src/locales/pl.ts +++ b/src/locales/pl.ts @@ -76,6 +76,11 @@ const pl = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Ilość wydruków', + quantityAdvancedHeading: 'Ilość (zaawansowane)', + pauseCount: 'Pauza co N etykiet', + replicates: 'Replikacje na etykietę', + overridePauseCount: 'Zastąp licznik pauzy', + overridePauseCountHint: 'Przytnij tylko ostatnią etykietę partii zamiast przy każdej granicy pauzy.', mediaMode: 'Tryb nośnika', outputHeading: 'Wyjście', mediaModeT: 'T — Odrywanie', @@ -83,12 +88,27 @@ const pl = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Kiosk', labelShift: 'Przesunięcie etykiety (dots)', + offsetsHeading: 'Przesunięcia', + offsetsHint: 'Przesuwa początek wydruku. Pozycje pól w edytorze pozostają absolutne.', + labelHomeX: 'Origin X', + labelHomeY: 'Origin Y', + labelTop: 'Przes. góry', printerDefault: 'Domyślne drukarki', printerSettingsHeading: 'Drukarka (opcjonalne)', printSpeed: 'Prędkość drukowania (ips, 2-14)', printSpeedHint: 'Specyficzne dla drukarki. Pozostaw puste, aby użyć wartości domyślnej.', + speedHeading: 'Prędkość (ips, 2-14)', + speedPrint: 'Druk', + speedSlew: 'Przesuw', + speedBackfeed: 'Cofanie', + slewSpeed: 'Prędkość przesuwu (ips, 2-14)', + backfeedSpeed: 'Prędkość cofania (ips, 2-14)', darkness: 'Gęstość druku (-30 do +30)', darknessHint: 'Specyficzne dla drukarki. Pozostaw puste, aby użyć wartości domyślnej.', + darknessHeading: 'Zaczernienie', + darknessPermanent: 'Stałe (-30..30)', + darknessInstant: 'Natychmiast (0..30)', + instantDarkness: 'Natychmiastowe zaczernienie (0-30)', mediaType: 'Typ nośnika', mediaTypeT: 'Termotransferowy', mediaTypeD: 'Termiczny bezpośredni', @@ -96,9 +116,11 @@ const pl = { printOrientationN: 'Normalna', printOrientationI: 'Do góry nogami (180°)', printOrientationIndicator: 'Do góry nogami', + mirror: 'Lustrzane odbicie', defaultFont: 'Domyślny styl tekstu', defaultFontId: 'Czcionka', defaultFontHeight: 'Wysokość (punkty)', + defaultFontWidth: 'Szerokość (dots)', }, app: { diff --git a/src/locales/pt.ts b/src/locales/pt.ts index 592562e2..1d269a5d 100644 --- a/src/locales/pt.ts +++ b/src/locales/pt.ts @@ -76,6 +76,11 @@ const pt = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Quantidade de impressão', + quantityAdvancedHeading: 'Quantidade (avançado)', + pauseCount: 'Pausa a cada N etiquetas', + replicates: 'Réplicas por etiqueta', + overridePauseCount: 'Substituir contagem de pausa', + overridePauseCountHint: 'Cortar apenas a última etiqueta do lote em vez de cada limite de pausa.', mediaMode: 'Modo de mídia', outputHeading: 'Saída', mediaModeT: 'T — Destacar', @@ -83,12 +88,27 @@ const pt = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Quiosque', labelShift: 'Deslocamento da etiqueta (dots)', + offsetsHeading: 'Deslocamentos', + offsetsHint: 'Desloca a origem de impressão. As posições dos campos no editor permanecem absolutas.', + labelHomeX: 'Origem X', + labelHomeY: 'Origem Y', + labelTop: 'Desloc. topo', printerDefault: 'Predefinição da impressora', printerSettingsHeading: 'Impressora (opcional)', printSpeed: 'Velocidade de impressão (ips, 2-14)', printSpeedHint: 'Específico da impressora. Deixe vazio para usar o padrão da impressora.', + speedHeading: 'Velocidade (ips, 2-14)', + speedPrint: 'Impressão', + speedSlew: 'Avanço', + speedBackfeed: 'Retorno', + slewSpeed: 'Velocidade de avanço (ips, 2-14)', + backfeedSpeed: 'Velocidade de retorno (ips, 2-14)', darkness: 'Densidade de impressão (-30 a +30)', darknessHint: 'Específico da impressora. Deixe vazio para usar o padrão da impressora.', + darknessHeading: 'Escurecimento', + darknessPermanent: 'Permanente (-30..30)', + darknessInstant: 'Imediato (0..30)', + instantDarkness: 'Escurecimento imediato (0-30)', mediaType: 'Tipo de suporte', mediaTypeT: 'Transferência térmica', mediaTypeD: 'Térmica direta', @@ -96,9 +116,11 @@ const pt = { printOrientationN: 'Normal', printOrientationI: 'De cabeça para baixo (180°)', printOrientationIndicator: 'De cabeça para baixo', + mirror: 'Imagem espelhada', defaultFont: 'Estilo de texto predefinido', defaultFontId: 'Fonte', defaultFontHeight: 'Altura (pontos)', + defaultFontWidth: 'Largura (dots)', }, app: { diff --git a/src/locales/ro.ts b/src/locales/ro.ts index c8c0fa4b..426fcc85 100644 --- a/src/locales/ro.ts +++ b/src/locales/ro.ts @@ -76,6 +76,11 @@ const ro = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Cantitate imprimare', + quantityAdvancedHeading: 'Cantitate (avansat)', + pauseCount: 'Pauză la fiecare N etichete', + replicates: 'Replicări pe etichetă', + overridePauseCount: 'Suprascrie nr. pauze', + overridePauseCountHint: 'Taie doar ultima etichetă din lot în loc de fiecare limită de pauză.', mediaMode: 'Mod media', outputHeading: 'Ieșire', mediaModeT: 'T — Rupere', @@ -83,12 +88,27 @@ const ro = { mediaModeD: 'D — Cutter', mediaModeK: 'K — Chioșc', labelShift: 'Deplasare etichetă (dots)', + offsetsHeading: 'Decalaje', + offsetsHint: 'Mută originea de tipărire. Pozițiile câmpurilor în editor rămân absolute.', + labelHomeX: 'Origine X', + labelHomeY: 'Origine Y', + labelTop: 'Decalaj sus', printerDefault: 'Implicit imprimantă', printerSettingsHeading: 'Imprimantă (opțional)', printSpeed: 'Viteza de imprimare (ips, 2-14)', printSpeedHint: 'Specific imprimantei. Lăsați gol pentru valoarea implicită.', + speedHeading: 'Viteză (ips, 2-14)', + speedPrint: 'Tipărire', + speedSlew: 'Avansare', + speedBackfeed: 'Retragere', + slewSpeed: 'Viteză de avansare (ips, 2-14)', + backfeedSpeed: 'Viteză de retragere (ips, 2-14)', darkness: 'Densitate imprimare (-30 până la +30)', darknessHint: 'Specific imprimantei. Lăsați gol pentru valoarea implicită.', + darknessHeading: 'Întunecare', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Imediat (0..30)', + instantDarkness: 'Întunecare imediată (0-30)', mediaType: 'Tip mediu', mediaTypeT: 'Transfer termic', mediaTypeD: 'Termic direct', @@ -96,9 +116,11 @@ const ro = { printOrientationN: 'Normal', printOrientationI: 'Cu susul în jos (180°)', printOrientationIndicator: 'Cu susul în jos', + mirror: 'Imagine în oglindă', defaultFont: 'Stil text implicit', defaultFontId: 'Font', defaultFontHeight: 'Înălțime (puncte)', + defaultFontWidth: 'Lățime (dots)', }, app: { diff --git a/src/locales/sk.ts b/src/locales/sk.ts index 2947df81..48d83555 100644 --- a/src/locales/sk.ts +++ b/src/locales/sk.ts @@ -76,6 +76,11 @@ const sk = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Počet výtlačkov', + quantityAdvancedHeading: 'Množstvo (pokročilé)', + pauseCount: 'Pauza každých N štítkov', + replicates: 'Replikácie na štítok', + overridePauseCount: 'Prepísať počet páuz', + overridePauseCountHint: 'Rezať iba posledný štítok dávky namiesto pri každej hranici pauzy.', mediaMode: 'Režim média', outputHeading: 'Výstup', mediaModeT: 'T — Odtrhávanie', @@ -83,12 +88,27 @@ const sk = { mediaModeD: 'D — Rezačka', mediaModeK: 'K — Kiosk', labelShift: 'Posun štítka (dots)', + offsetsHeading: 'Posuny', + offsetsHint: 'Posunie počiatok tlače. Pozície polí v editore zostávajú absolútne.', + labelHomeX: 'Počiatok X', + labelHomeY: 'Počiatok Y', + labelTop: 'Posun horný', printerDefault: 'Predvolené tlačiarne', printerSettingsHeading: 'Tlačiareň (voliteľné)', printSpeed: 'Rýchlosť tlače (ips, 2-14)', printSpeedHint: 'Špecifické pre tlačiareň. Ponechajte prázdne pre predvolenú hodnotu.', + speedHeading: 'Rýchlosť (ips, 2-14)', + speedPrint: 'Tlač', + speedSlew: 'Posuv', + speedBackfeed: 'Spätný posuv', + slewSpeed: 'Rýchlosť posuvu (ips, 2-14)', + backfeedSpeed: 'Rýchlosť spätného posuvu (ips, 2-14)', darkness: 'Sýtosť tlače (-30 až +30)', darknessHint: 'Špecifické pre tlačiareň. Ponechajte prázdne pre predvolenú hodnotu.', + darknessHeading: 'Sýtosť', + darknessPermanent: 'Trvalé (-30..30)', + darknessInstant: 'Okamžite (0..30)', + instantDarkness: 'Okamžitá sýtosť (0-30)', mediaType: 'Typ média', mediaTypeT: 'Termotransferový', mediaTypeD: 'Priamy termotisk', @@ -96,9 +116,11 @@ const sk = { printOrientationN: 'Normálne', printOrientationI: 'Hore nohami (180°)', printOrientationIndicator: 'Hore nohami', + mirror: 'Zrkadlový obraz', defaultFont: 'Predvolený štýl textu', defaultFontId: 'Písmo', defaultFontHeight: 'Výška (body)', + defaultFontWidth: 'Šírka (dots)', }, app: { diff --git a/src/locales/sl.ts b/src/locales/sl.ts index 6607836b..95e39544 100644 --- a/src/locales/sl.ts +++ b/src/locales/sl.ts @@ -76,6 +76,11 @@ const sl = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Količina tiskanja', + quantityAdvancedHeading: 'Količina (napredno)', + pauseCount: 'Premor vsakih N etiket', + replicates: 'Replike na etiketo', + overridePauseCount: 'Razveljavi števec premorov', + overridePauseCountHint: 'Reže le zadnjo etiketo serije namesto pri vsaki meji premora.', mediaMode: 'Način medija', outputHeading: 'Izhod', mediaModeT: 'T — Odtrganje', @@ -83,12 +88,27 @@ const sl = { mediaModeD: 'D — Rezalnik', mediaModeK: 'K — Kiosk', labelShift: 'Zamik nalepke (dots)', + offsetsHeading: 'Odmiki', + offsetsHint: 'Premakne izhodišče tiska. Položaji polj v urejevalniku ostanejo absolutni.', + labelHomeX: 'Izhodišče X', + labelHomeY: 'Izhodišče Y', + labelTop: 'Zg. odmik', printerDefault: 'Privzeto tiskalnika', printerSettingsHeading: 'Tiskalnik (izbirno)', printSpeed: 'Hitrost tiskanja (ips, 2-14)', printSpeedHint: 'Specifično za tiskalnik. Pustite prazno za privzeto vrednost.', + speedHeading: 'Hitrost (ips, 2-14)', + speedPrint: 'Tisk', + speedSlew: 'Pomik', + speedBackfeed: 'Povratni pomik', + slewSpeed: 'Hitrost pomika (ips, 2-14)', + backfeedSpeed: 'Hitrost povratnega pomika (ips, 2-14)', darkness: 'Temnost (-30 do +30)', darknessHint: 'Specifično za tiskalnik. Pustite prazno za privzeto vrednost.', + instantDarkness: 'Takojšnja temnost (0-30)', + darknessHeading: 'Temnost', + darknessPermanent: 'Trajno (-30..30)', + darknessInstant: 'Takojšnje (0..30)', mediaType: 'Vrsta medija', mediaTypeT: 'Termalni prenos', mediaTypeD: 'Neposredno termalno', @@ -96,9 +116,11 @@ const sl = { printOrientationN: 'Normalno', printOrientationI: 'Obrnjeno (180°)', printOrientationIndicator: 'Obrnjeno', + mirror: 'Zrcalna slika', defaultFont: 'Privzeti slog besedila', defaultFontId: 'Pisava', defaultFontHeight: 'Višina (točke)', + defaultFontWidth: 'Širina (dots)', }, app: { diff --git a/src/locales/sr.ts b/src/locales/sr.ts index c382fd19..3042623c 100644 --- a/src/locales/sr.ts +++ b/src/locales/sr.ts @@ -76,6 +76,11 @@ const sr = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Количина штампе', + quantityAdvancedHeading: 'Количина (напредно)', + pauseCount: 'Пауза сваких N етикета', + replicates: 'Реплике по етикети', + overridePauseCount: 'Премости бројач паузе', + overridePauseCountHint: 'Сече само последњу етикету серије уместо на свакој граници паузе.', mediaMode: 'Режим медија', outputHeading: 'Излаз', mediaModeT: 'T — Откидање', @@ -83,12 +88,27 @@ const sr = { mediaModeD: 'D — Секач', mediaModeK: 'K — Киоск', labelShift: 'Померај етикете (dots)', + offsetsHeading: 'Помераји', + offsetsHint: 'Помера исходиште штампе. Позиције поља у уреднику остају апсолутне.', + labelHomeX: 'Исходиште X', + labelHomeY: 'Исходиште Y', + labelTop: 'Помак горе', printerDefault: 'Подразумевано за штампач', printerSettingsHeading: 'Штампач (опционално)', printSpeed: 'Брзина штампе (ips, 2-14)', printSpeedHint: 'Специфично за штампач. Оставите празно за подразумевану вредност.', + speedHeading: 'Брзина (ips, 2-14)', + speedPrint: 'Штампа', + speedSlew: 'Помак', + speedBackfeed: 'Повратни помак', + slewSpeed: 'Брзина помераја (ips, 2-14)', + backfeedSpeed: 'Брзина повратног помераја (ips, 2-14)', darkness: 'Затамњење (-30 до +30)', darknessHint: 'Специфично за штампач. Оставите празно за подразумевану вредност.', + instantDarkness: 'Тренутна тамноћа (0-30)', + darknessHeading: 'Тамноћа', + darknessPermanent: 'Трајно (-30..30)', + darknessInstant: 'Тренутно (0..30)', mediaType: 'Тип медија', mediaTypeT: 'Топлотни пренос', mediaTypeD: 'Директни термални', @@ -96,9 +116,11 @@ const sr = { printOrientationN: 'Нормално', printOrientationI: 'Наопако (180°)', printOrientationIndicator: 'Наопако', + mirror: 'Огледална слика', defaultFont: 'Подразумевани стил текста', defaultFontId: 'Фонт', defaultFontHeight: 'Висина (тачке)', + defaultFontWidth: 'Ширина (dots)', }, app: { diff --git a/src/locales/sv.ts b/src/locales/sv.ts index d9ddcb73..15ac834a 100644 --- a/src/locales/sv.ts +++ b/src/locales/sv.ts @@ -76,6 +76,11 @@ const sv = { dpmm12: '12 dpmm — 300 dpi', dpmm24: '24 dpmm — 600 dpi', printQuantity: 'Utskriftsmängd', + quantityAdvancedHeading: 'Antal (avancerat)', + pauseCount: 'Paus var N:e etikett', + replicates: 'Repliker per etikett', + overridePauseCount: 'Åsidosätt pausräknare', + overridePauseCountHint: 'Klipp endast den sista etiketten i partiet istället för vid varje pausgräns.', mediaMode: 'Medieläge', outputHeading: 'Utmatning', mediaModeT: 'T — Avrivning', @@ -83,12 +88,27 @@ const sv = { mediaModeD: 'D — Skärare', mediaModeK: 'K — Kiosk', labelShift: 'Etikettförskjutning (dots)', + offsetsHeading: 'Förskjutningar', + offsetsHint: 'Förskjuter utskriftens ursprung. Fältpositioner i redigeraren förblir absoluta.', + labelHomeX: 'Origo X', + labelHomeY: 'Origo Y', + labelTop: 'Toppförskj.', printerDefault: 'Skrivarens standard', printerSettingsHeading: 'Skrivare (valfritt)', printSpeed: 'Utskriftshastighet (ips, 2-14)', printSpeedHint: 'Skrivarspecifik. Lämna tom för skrivarens standardvärde.', + speedHeading: 'Hastighet (ips, 2-14)', + speedPrint: 'Utskrift', + speedSlew: 'Frammatning', + speedBackfeed: 'Återmatning', + slewSpeed: 'Frammatningshastighet (ips, 2-14)', + backfeedSpeed: 'Återmatningshastighet (ips, 2-14)', darkness: 'Svärta (-30 till +30)', darknessHint: 'Skrivarspecifik. Lämna tom för skrivarens standardvärde.', + darknessHeading: 'Svärta', + darknessPermanent: 'Permanent (-30..30)', + darknessInstant: 'Direkt (0..30)', + instantDarkness: 'Omedelbar svärta (0-30)', mediaType: 'Materialtyp', mediaTypeT: 'Termotransfer', mediaTypeD: 'Direkttermisk', @@ -96,9 +116,11 @@ const sv = { printOrientationN: 'Normal', printOrientationI: 'Upp och ner (180°)', printOrientationIndicator: 'Upp och ner', + mirror: 'Spegelbild', defaultFont: 'Standardtextstil', defaultFontId: 'Typsnitt', defaultFontHeight: 'Höjd (punkter)', + defaultFontWidth: 'Bredd (dots)', }, app: { diff --git a/src/locales/tr.ts b/src/locales/tr.ts index 2a20accd..3c186cab 100644 --- a/src/locales/tr.ts +++ b/src/locales/tr.ts @@ -76,6 +76,11 @@ const tr = { dpmm12: '12 nokta/mm — 300 dpi', dpmm24: '24 nokta/mm — 600 dpi', printQuantity: 'Baskı miktarı', + quantityAdvancedHeading: 'Miktar (gelişmiş)', + pauseCount: 'Her N etikette duraklat', + replicates: 'Etiket başına kopya', + overridePauseCount: 'Duraklatma sayısını geçersiz kıl', + overridePauseCountHint: 'Her duraklatma sınırında değil, partinin yalnızca son etiketini kes.', mediaMode: 'Ortam modu', outputHeading: 'Çıktı', mediaModeT: 'T — Koparma', @@ -83,12 +88,27 @@ const tr = { mediaModeD: 'D — Kesici', mediaModeK: 'K — Kiosk', labelShift: 'Etiket kaydırma (dots)', + offsetsHeading: 'Ofsetler', + offsetsHint: 'Yazdırma orijinini kaydırır. Düzenleyicideki alan konumları mutlak kalır.', + labelHomeX: 'Başlangıç X', + labelHomeY: 'Başlangıç Y', + labelTop: 'Üst kayd.', printerDefault: 'Yazıcı varsayılanı', printerSettingsHeading: 'Yazıcı (isteğe bağlı)', printSpeed: 'Yazdırma hızı (ips, 2-14)', printSpeedHint: 'Yazıcıya özel. Varsayılan için boş bırakın.', + speedHeading: 'Hız (ips, 2-14)', + speedPrint: 'Baskı', + speedSlew: 'İlerletme', + speedBackfeed: 'Geri besleme', + slewSpeed: 'İlerletme hızı (ips, 2-14)', + backfeedSpeed: 'Geri besleme hızı (ips, 2-14)', darkness: 'Koyuluk (-30 ile +30 arası)', darknessHint: 'Yazıcıya özel. Varsayılan için boş bırakın.', + instantDarkness: 'Anlık koyuluk (0-30)', + darknessHeading: 'Koyuluk', + darknessPermanent: 'Kalıcı (-30..30)', + darknessInstant: 'Anlık (0..30)', mediaType: 'Medya türü', mediaTypeT: 'Termal transfer', mediaTypeD: 'Doğrudan termal', @@ -96,9 +116,11 @@ const tr = { printOrientationN: 'Normal', printOrientationI: 'Baş aşağı (180°)', printOrientationIndicator: 'Baş aşağı', + mirror: 'Ayna görüntüsü', defaultFont: 'Varsayılan metin stili', defaultFontId: 'Yazı tipi', defaultFontHeight: 'Yükseklik (nokta)', + defaultFontWidth: 'Genişlik (dots)', }, app: { diff --git a/src/locales/zh-hans.ts b/src/locales/zh-hans.ts index e6237271..bf373ee7 100644 --- a/src/locales/zh-hans.ts +++ b/src/locales/zh-hans.ts @@ -76,6 +76,11 @@ const zhHans = { dpmm12: '12 点/毫米 — 300 dpi', dpmm24: '24 点/毫米 — 600 dpi', printQuantity: '打印数量', + quantityAdvancedHeading: '数量(高级)', + pauseCount: '每 N 个标签暂停', + replicates: '每个标签的副本数', + overridePauseCount: '覆盖暂停计数', + overridePauseCountHint: '仅切批次最后一个标签,而不是每个暂停边界。', mediaMode: '介质模式', outputHeading: '输出', mediaModeT: 'T — 撕离', @@ -83,12 +88,27 @@ const zhHans = { mediaModeD: 'D — 切刀', mediaModeK: 'K — 自助终端', labelShift: '标签偏移 (dots)', + offsetsHeading: '偏移', + offsetsHint: '偏移打印原点。编辑器中字段位置保持绝对。', + labelHomeX: '原点 X', + labelHomeY: '原点 Y', + labelTop: '顶部偏移', printerDefault: '打印机默认值', printerSettingsHeading: '打印机(可选)', printSpeed: '打印速度 (ips, 2-14)', printSpeedHint: '与打印机相关。留空使用打印机默认值。', + speedHeading: '速度 (ips, 2-14)', + speedPrint: '打印', + speedSlew: '走纸', + speedBackfeed: '回退', + slewSpeed: '走纸速度 (ips, 2-14)', + backfeedSpeed: '回退速度 (ips, 2-14)', darkness: '打印浓度 (-30 至 +30)', darknessHint: '与打印机相关。留空使用打印机默认值。', + instantDarkness: '即时浓度 (0-30)', + darknessHeading: '浓度', + darknessPermanent: '持久 (-30..30)', + darknessInstant: '即时 (0..30)', mediaType: '介质类型', mediaTypeT: '热转印', mediaTypeD: '直接热敏', @@ -96,9 +116,11 @@ const zhHans = { printOrientationN: '正常', printOrientationI: '倒置 (180°)', printOrientationIndicator: '倒置', + mirror: '镜像', defaultFont: '默认文本样式', defaultFontId: '字体', defaultFontHeight: '高度 (点)', + defaultFontWidth: '宽度 (dots)', }, app: { diff --git a/src/locales/zh-hant.ts b/src/locales/zh-hant.ts index 6532528f..202e3c2b 100644 --- a/src/locales/zh-hant.ts +++ b/src/locales/zh-hant.ts @@ -76,6 +76,11 @@ const zhHant = { dpmm12: '12 點/公釐 — 300 dpi', dpmm24: '24 點/公釐 — 600 dpi', printQuantity: '列印數量', + quantityAdvancedHeading: '數量(進階)', + pauseCount: '每 N 個標籤暫停', + replicates: '每個標籤的副本數', + overridePauseCount: '覆寫暫停計數', + overridePauseCountHint: '僅切批次最後一個標籤,而不是每個暫停邊界。', mediaMode: '介質模式', outputHeading: '輸出', mediaModeT: 'T — 撕離', @@ -83,12 +88,27 @@ const zhHant = { mediaModeD: 'D — 裁刀', mediaModeK: 'K — 自助終端', labelShift: '標籤偏移 (dots)', + offsetsHeading: '偏移', + offsetsHint: '偏移列印原點。編輯器中欄位位置保持絕對。', + labelHomeX: '原點 X', + labelHomeY: '原點 Y', + labelTop: '頂部偏移', printerDefault: '印表機預設值', printerSettingsHeading: '印表機(可選)', printSpeed: '列印速度 (ips, 2-14)', printSpeedHint: '與印表機相關。留空使用印表機預設值。', + speedHeading: '速度 (ips, 2-14)', + speedPrint: '列印', + speedSlew: '走紙', + speedBackfeed: '回退', + slewSpeed: '走紙速度 (ips, 2-14)', + backfeedSpeed: '回退速度 (ips, 2-14)', darkness: '列印濃度 (-30 至 +30)', darknessHint: '與印表機相關。留空使用印表機預設值。', + instantDarkness: '即時濃度 (0-30)', + darknessHeading: '濃度', + darknessPermanent: '持久 (-30..30)', + darknessInstant: '即時 (0..30)', mediaType: '介質類型', mediaTypeT: '熱轉印', mediaTypeD: '直接熱感', @@ -96,9 +116,11 @@ const zhHant = { printOrientationN: '正常', printOrientationI: '倒置 (180°)', printOrientationIndicator: '倒置', + mirror: '鏡像', defaultFont: '預設文字樣式', defaultFontId: '字型', defaultFontHeight: '高度 (點)', + defaultFontWidth: '寬度 (dots)', }, app: { diff --git a/src/types/ObjectType.ts b/src/types/ObjectType.ts index 3c0cc216..bbc4baaf 100644 --- a/src/types/ObjectType.ts +++ b/src/types/ObjectType.ts @@ -6,14 +6,38 @@ export const labelConfigSchema = z.object({ heightMm: z.number(), dpmm: z.number(), printQuantity: z.number().optional(), + /** ^PQ p2: pause every N labels (0 = none). */ + pauseCount: z.number().int().min(0).max(99999999).optional(), + /** ^PQ p3: replicates of each serialised label. */ + replicates: z.number().int().min(0).max(99999999).optional(), + /** ^PQ p4: override pause count (cutter behaviour). */ + overridePauseCount: z.enum(['Y', 'N']).optional(), mediaMode: z.enum(['T', 'V', 'D', 'K']).optional(), labelShift: z.number().optional(), + /** ^LH x: horizontal origin offset emitted at export. Field FOs are + * shifted accordingly so the on-screen layout equals the print result. */ + labelHomeX: z.number().int().min(0).optional(), + /** ^LH y: vertical origin offset emitted at export. See labelHomeX. */ + labelHomeY: z.number().int().min(0).optional(), + /** ^LT y: label top shift emitted at export. Same compensation semantics + * as labelHomeY. Zebra supports -120..+120. */ + labelTop: z.number().int().min(-120).max(120).optional(), printSpeed: z.number().int().min(2).max(14).optional(), + /** ^PR p2: slew (inter-label) speed. */ + slewSpeed: z.number().int().min(2).max(14).optional(), + /** ^PR p3: backfeed speed. */ + backfeedSpeed: z.number().int().min(2).max(14).optional(), darkness: z.number().int().min(-30).max(30).optional(), + /** ~SD: instant darkness set, emitted before ^XA. 0-30. */ + instantDarkness: z.number().int().min(0).max(30).optional(), mediaType: z.enum(['T', 'D']).optional(), printOrientation: z.enum(['N', 'I']).optional(), + /** ^PM: mirror image (left/right flip). */ + mirror: z.enum(['Y', 'N']).optional(), defaultFontId: z.string().min(1).optional(), defaultFontHeight: z.number().int().positive().optional(), + /** ^CF width param. Spec allows 0 → printer auto-derives from height. */ + defaultFontWidth: z.number().int().min(0).optional(), }); export type LabelConfig = z.infer;