diff --git a/src/components/Canvas/LabelCanvas.tsx b/src/components/Canvas/LabelCanvas.tsx
index e9f3204d..63dff325 100644
--- a/src/components/Canvas/LabelCanvas.tsx
+++ b/src/components/Canvas/LabelCanvas.tsx
@@ -21,6 +21,7 @@ import { Ruler, RULER_SIZE } from "./Ruler";
import { ObjectRegistry } from "../../registry";
import type { LabelObject } from "../../registry";
import { useColorScheme } from "../../lib/useColorScheme";
+import { useT } from "../../lib/useT";
import { useCanvasPanZoom } from "./hooks/useCanvasPanZoom";
import { useCanvasLasso } from "./hooks/useCanvasLasso";
import { useKonvaTransformer } from "./hooks/useKonvaTransformer";
@@ -83,6 +84,7 @@ export function LabelCanvas({
}, []);
const colors = useColorScheme();
+ const t = useT();
const {
label,
@@ -459,6 +461,12 @@ export function LabelCanvas({
>
+ {label.printOrientation === "I" && (
+
+ {t.label.printOrientationIndicator}
+
+ )}
+
{/* Bottom-right controls: view options + zoom */}
+
+
+
+ {t.label.printerSettingsHeading}
+
+
+
+
+ onUpdate({ printSpeed: parseIntOrUndef(e.target.value) })
+ }
+ />
+
{t.label.printSpeedHint}
+
+
+
+
+
+ onUpdate({ darkness: parseIntOrUndef(e.target.value) })
+ }
+ />
+
{t.label.darknessHint}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
+
+function parseIntOrUndef(raw: string): number | undefined {
+ if (raw.trim() === "") return undefined;
+ const n = parseInt(raw, 10);
+ return isNaN(n) ? undefined : n;
+}
diff --git a/src/lib/zplGenerator.test.ts b/src/lib/zplGenerator.test.ts
index 9a703355..5f8c2fc3 100644
--- a/src/lib/zplGenerator.test.ts
+++ b/src/lib/zplGenerator.test.ts
@@ -54,6 +54,88 @@ describe('generateZPL — structure', () => {
});
});
+describe('generateZPL — printer params', () => {
+ it('emits ^PR when printSpeed is set', () => {
+ const zpl = generateZPL({ ...BASE_LABEL, printSpeed: 6 }, []);
+ expect(zpl).toContain('^PR6');
+ });
+
+ it('omits ^PR when printSpeed is absent', () => {
+ expect(generateZPL(BASE_LABEL, [])).not.toContain('^PR');
+ });
+
+ it('emits ^MD for darkness boundaries including 0', () => {
+ expect(generateZPL({ ...BASE_LABEL, darkness: 0 }, [])).toContain('^MD0');
+ expect(generateZPL({ ...BASE_LABEL, darkness: 30 }, [])).toContain('^MD30');
+ expect(generateZPL({ ...BASE_LABEL, darkness: -30 }, [])).toContain('^MD-30');
+ });
+
+ it('omits ^MD when darkness is absent', () => {
+ expect(generateZPL(BASE_LABEL, [])).not.toContain('^MD');
+ });
+
+ it('emits ^MT for thermal transfer and direct thermal', () => {
+ expect(generateZPL({ ...BASE_LABEL, mediaType: 'T' }, [])).toContain('^MTT');
+ expect(generateZPL({ ...BASE_LABEL, mediaType: 'D' }, [])).toContain('^MTD');
+ });
+
+ it('emits ^PO for both orientations when explicitly set', () => {
+ expect(generateZPL({ ...BASE_LABEL, printOrientation: 'I' }, [])).toContain('^POI');
+ expect(generateZPL({ ...BASE_LABEL, printOrientation: 'N' }, [])).toContain('^PON');
+ });
+
+ it('omits ^PO when print orientation is absent', () => {
+ expect(generateZPL(BASE_LABEL, [])).not.toContain('^PO');
+ });
+
+ it('emits ^CF when both defaultFontId and defaultFontHeight are set', () => {
+ const zpl = generateZPL(
+ { ...BASE_LABEL, defaultFontId: '0', defaultFontHeight: 30 },
+ [],
+ );
+ expect(zpl).toContain('^CF0,30');
+ });
+
+ it('emits ^CF{id} when only defaultFontId is set', () => {
+ const zpl = generateZPL({ ...BASE_LABEL, defaultFontId: '0' }, []);
+ expect(zpl).toContain('^CF0');
+ expect(zpl).not.toContain('^CF0,');
+ });
+
+ it('emits ^CF,{height} when only defaultFontHeight is set', () => {
+ expect(generateZPL({ ...BASE_LABEL, defaultFontHeight: 30 }, []))
+ .toContain('^CF,30');
+ });
+
+ it('omits ^CF when neither defaultFont field is set', () => {
+ expect(generateZPL(BASE_LABEL, [])).not.toContain('^CF');
+ });
+
+ it('emits printer params in canonical header order before ^LS', () => {
+ const zpl = generateZPL(
+ {
+ ...BASE_LABEL,
+ mediaMode: 'T',
+ mediaType: 'T',
+ printSpeed: 6,
+ darkness: 10,
+ printOrientation: 'I',
+ defaultFontId: '0',
+ defaultFontHeight: 30,
+ labelShift: 5,
+ },
+ [],
+ );
+ const idx = (cmd: string) => zpl.indexOf(cmd);
+ expect(idx('^MMT')).toBeLessThan(idx('^MTT'));
+ 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'));
+ });
+});
+
describe('generateZPL — text object', () => {
it('emits ^FO, ^A0 and ^FD for a text object', () => {
const { objects } = parseZPL('^XA^FO10,20^A0N,30,0^FDHello^FS^XZ', 8);
@@ -141,4 +223,38 @@ describe('generateZPL — parse/generate roundtrip', () => {
expect(props(barcode).content).toBe('987654');
expect(props(barcode).height).toBe(150);
});
+
+ it('preserves printer params through generate -> parse', () => {
+ const label: LabelConfig = {
+ ...BASE_LABEL,
+ printSpeed: 8,
+ darkness: 0,
+ mediaType: 'D',
+ printOrientation: 'I',
+ defaultFontId: '0',
+ defaultFontHeight: 30,
+ };
+ const regenerated = generateZPL(label, []);
+ const { labelConfig } = parseZPL(regenerated, BASE_LABEL.dpmm);
+ expect(labelConfig.printSpeed).toBe(8);
+ expect(labelConfig.darkness).toBe(0);
+ expect(labelConfig.mediaType).toBe('D');
+ expect(labelConfig.printOrientation).toBe('I');
+ expect(labelConfig.defaultFontId).toBe('0');
+ expect(labelConfig.defaultFontHeight).toBe(30);
+ });
+
+ it('preserves partial ^CF (id only) through generate -> parse', () => {
+ const regenerated = generateZPL({ ...BASE_LABEL, defaultFontId: 'A' }, []);
+ const { labelConfig } = parseZPL(regenerated, BASE_LABEL.dpmm);
+ expect(labelConfig.defaultFontId).toBe('A');
+ expect(labelConfig.defaultFontHeight).toBeUndefined();
+ });
+
+ it('preserves partial ^CF (height only) through generate -> parse', () => {
+ const regenerated = generateZPL({ ...BASE_LABEL, defaultFontHeight: 25 }, []);
+ const { labelConfig } = parseZPL(regenerated, BASE_LABEL.dpmm);
+ expect(labelConfig.defaultFontId).toBeUndefined();
+ expect(labelConfig.defaultFontHeight).toBe(25);
+ });
});
diff --git a/src/lib/zplGenerator.ts b/src/lib/zplGenerator.ts
index 1018038b..f489d1fd 100644
--- a/src/lib/zplGenerator.ts
+++ b/src/lib/zplGenerator.ts
@@ -25,6 +25,20 @@ export function generateZPL(label: LabelConfig, objects: LabelObject[]): string
];
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}`);
+ // 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.labelShift) lines.push(`^LS${label.labelShift}`);
lines.push(...objects.map((obj) => {
diff --git a/src/lib/zplParser.test.ts b/src/lib/zplParser.test.ts
index 3bd09f60..d54a3ced 100644
--- a/src/lib/zplParser.test.ts
+++ b/src/lib/zplParser.test.ts
@@ -514,6 +514,45 @@ describe('parseZPL — ^MM and ^LS', () => {
});
});
+describe('parseZPL — printer params', () => {
+ it('parses ^PR print speed within range', () => {
+ const { labelConfig } = parseZPL('^XA^PR6^XZ', 8);
+ expect(labelConfig.printSpeed).toBe(6);
+ });
+
+ it('ignores ^PR with out-of-range value', () => {
+ const { labelConfig } = parseZPL('^XA^PR1^XZ', 8);
+ expect(labelConfig.printSpeed).toBeUndefined();
+ });
+
+ 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);
+ expect(parseZPL('^XA^MD-10^XZ', 8).labelConfig.darkness).toBe(-10);
+ });
+
+ it('ignores ^MD outside the supported range', () => {
+ const { labelConfig } = parseZPL('^XA^MD99^XZ', 8);
+ expect(labelConfig.darkness).toBeUndefined();
+ });
+
+ it('parses ^MT media type', () => {
+ expect(parseZPL('^XA^MTT^XZ', 8).labelConfig.mediaType).toBe('T');
+ expect(parseZPL('^XA^MTD^XZ', 8).labelConfig.mediaType).toBe('D');
+ });
+
+ it('parses ^PO print orientation', () => {
+ expect(parseZPL('^XA^PON^XZ', 8).labelConfig.printOrientation).toBe('N');
+ expect(parseZPL('^XA^POI^XZ', 8).labelConfig.printOrientation).toBe('I');
+ });
+
+ it('parses ^CF into defaultFontId and defaultFontHeight', () => {
+ const { labelConfig } = parseZPL('^XA^CF0,40^XZ', 8);
+ expect(labelConfig.defaultFontId).toBe('0');
+ expect(labelConfig.defaultFontHeight).toBe(40);
+ });
+});
+
// ── edge cases ────────────────────────────────────────────────────────────────
describe('parseZPL — edge cases', () => {
diff --git a/src/lib/zplParser.ts b/src/lib/zplParser.ts
index 078b6d22..d6050562 100644
--- a/src/lib/zplParser.ts
+++ b/src/lib/zplParser.ts
@@ -645,8 +645,14 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL {
// ── Change alphanumeric default font ────────────────────────────────────
// ^CF{font},{height},{width} → sets default for fields without ^A
CF(p) {
- cfHeight = int(p[1], cfHeight);
+ const fontId = (p[0] ?? "").trim();
+ const explicitHeight = parseInt(p[1] ?? "", 10);
+ cfHeight = isNaN(explicitHeight) ? cfHeight : explicitHeight;
cfWidth = int(p[2], cfWidth);
+ if (fontId) labelConfig.defaultFontId = fontId;
+ if (!isNaN(explicitHeight) && explicitHeight > 0) {
+ labelConfig.defaultFontHeight = explicitHeight;
+ }
},
// ── Field-wide default rotation ─────────────────────────────────────────
@@ -1097,6 +1103,26 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL {
const shift = int(rest, 0);
if (shift !== 0) labelConfig.labelShift = shift;
},
+ PR(p) {
+ const speed = int(p[0], 0);
+ if (speed >= 2 && speed <= 14) labelConfig.printSpeed = speed;
+ },
+ MD(_, rest) {
+ // Direct parse: int() falls back to 0 on NaN, which would conflate
+ // "absent" with the valid darkness value 0.
+ const parsed = parseInt(rest, 10);
+ if (!isNaN(parsed) && parsed >= -30 && parsed <= 30) {
+ labelConfig.darkness = parsed;
+ }
+ },
+ MT(_, rest) {
+ const mt = (rest[0] ?? "").toUpperCase();
+ if (mt === "T" || mt === "D") labelConfig.mediaType = mt;
+ },
+ PO(_, rest) {
+ const po = (rest[0] ?? "").toUpperCase();
+ if (po === "N" || po === "I") labelConfig.printOrientation = po;
+ },
// ── Browser-limit: printer-specific features ────────────────────────────
CW: mkBrowserLimit("CW"), // font identifier — assigns alias to printer-resident font
@@ -1153,7 +1179,6 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL {
FE: noop, // field concatenation — appends data to current field
FM: noop, // multiple field origin locations
FP: noop, // field parameter — per-character text direction
- MT: noop, // media type
MN: noop, // media handling / notch tracking
JA: noop, // applicator / configuration recall
JM: noop, // darkness / print settings
@@ -1164,7 +1189,6 @@ export function parseZPL(zpl: string, dpmm = 8): ParsedZPL {
JR: noop, // restore factory defaults
JS: noop, // change darkness
JU: noop, // update firmware
- PR: noop, // print rate / speed
PM: noop, // part of message
PP: noop, // presentation position
};
diff --git a/src/locales/ar.ts b/src/locales/ar.ts
index f5da316e..7c2c52d1 100644
--- a/src/locales/ar.ts
+++ b/src/locales/ar.ts
@@ -68,6 +68,22 @@ const ar = {
mediaModeD: 'D — قاطع',
mediaModeK: 'K — كشك',
labelShift: 'إزاحة الملصق (dots)',
+ printerDefault: 'الإعداد الافتراضي للطابعة',
+ printerSettingsHeading: 'إعدادات الطابعة (اختياري)',
+ printSpeed: 'سرعة الطباعة (ips، 2-14)',
+ printSpeedHint: 'خاص بالطابعة. اتركه فارغًا لاستخدام القيمة الافتراضية.',
+ darkness: 'الكثافة (-30 إلى +30)',
+ darknessHint: 'خاص بالطابعة. اتركه فارغًا لاستخدام القيمة الافتراضية.',
+ mediaType: 'نوع الوسائط',
+ mediaTypeT: 'نقل حراري',
+ mediaTypeD: 'حراري مباشر',
+ printOrientation: 'اتجاه الطباعة',
+ printOrientationN: 'عادي',
+ printOrientationI: 'مقلوب (180°)',
+ printOrientationIndicator: 'مقلوب',
+ defaultFont: 'نمط النص الافتراضي',
+ defaultFontId: 'الخط',
+ defaultFontHeight: 'الارتفاع (نقاط)',
},
app: {
diff --git a/src/locales/bg.ts b/src/locales/bg.ts
index 799b2079..af9ac738 100644
--- a/src/locales/bg.ts
+++ b/src/locales/bg.ts
@@ -68,6 +68,22 @@ const bg = {
mediaModeD: 'D — Резач',
mediaModeK: 'K — Киоск',
labelShift: 'Отместване на етикета (dots)',
+ printerDefault: 'По подразбиране на принтера',
+ printerSettingsHeading: 'Настройки на принтера (по избор)',
+ printSpeed: 'Скорост на печат (ips, 2-14)',
+ printSpeedHint: 'Специфично за принтера. Оставете празно за стойност по подразбиране.',
+ darkness: 'Плътност (-30 до +30)',
+ darknessHint: 'Специфично за принтера. Оставете празно за стойност по подразбиране.',
+ mediaType: 'Тип носител',
+ mediaTypeT: 'Термотрансферен',
+ mediaTypeD: 'Директен термичен',
+ printOrientation: 'Ориентация на печат',
+ printOrientationN: 'Нормален',
+ printOrientationI: 'Обърнато (180°)',
+ printOrientationIndicator: 'Обърнато',
+ defaultFont: 'Стил на текст по подразбиране',
+ defaultFontId: 'Шрифт',
+ defaultFontHeight: 'Височина (точки)',
},
app: {
diff --git a/src/locales/cs.ts b/src/locales/cs.ts
index 1df1d3e9..032386b1 100644
--- a/src/locales/cs.ts
+++ b/src/locales/cs.ts
@@ -68,6 +68,22 @@ const cs = {
mediaModeD: 'D — Řezačka',
mediaModeK: 'K — Kiosek',
labelShift: 'Posun štítku (dots)',
+ printerDefault: 'Výchozí tiskárny',
+ printerSettingsHeading: 'Nastavení tiskárny (volitelné)',
+ printSpeed: 'Rychlost tisku (ips, 2-14)',
+ printSpeedHint: 'Specifické pro tiskárnu. Ponechte prázdné pro výchozí hodnotu tiskárny.',
+ darkness: 'Sytost tisku (-30 až +30)',
+ darknessHint: 'Specifické pro tiskárnu. Ponechte prázdné pro výchozí hodnotu tiskárny.',
+ mediaType: 'Typ média',
+ mediaTypeT: 'Termotransferový',
+ mediaTypeD: 'Přímý termotisk',
+ printOrientation: 'Orientace tisku',
+ printOrientationN: 'Normální',
+ printOrientationI: 'Vzhůru nohama (180°)',
+ printOrientationIndicator: 'Vzhůru nohama',
+ defaultFont: 'Výchozí styl textu',
+ defaultFontId: 'Písmo',
+ defaultFontHeight: 'Výška (body)',
},
app: {
diff --git a/src/locales/da.ts b/src/locales/da.ts
index b554b5bc..83b16463 100644
--- a/src/locales/da.ts
+++ b/src/locales/da.ts
@@ -68,6 +68,22 @@ const da = {
mediaModeD: 'D — Skærer',
mediaModeK: 'K — Kiosk',
labelShift: 'Etiketforskydning (dots)',
+ printerDefault: 'Printerens standard',
+ printerSettingsHeading: 'Printerindstillinger (valgfrit)',
+ printSpeed: 'Udskrivningshastighed (ips, 2-14)',
+ printSpeedHint: 'Printerspecifik. Lad stå tom for printerens standardværdi.',
+ darkness: 'Svarthed (-30 til +30)',
+ darknessHint: 'Printerspecifik. Lad stå tom for printerens standardværdi.',
+ mediaType: 'Materialetype',
+ mediaTypeT: 'Termotransfer',
+ mediaTypeD: 'Direkte termisk',
+ printOrientation: 'Udskriftsretning',
+ printOrientationN: 'Normal',
+ printOrientationI: 'På hovedet (180°)',
+ printOrientationIndicator: 'På hovedet',
+ defaultFont: 'Standardtekststil',
+ defaultFontId: 'Skrifttype',
+ defaultFontHeight: 'Højde (punkter)',
},
app: {
diff --git a/src/locales/de.ts b/src/locales/de.ts
index 0347dded..0313d557 100644
--- a/src/locales/de.ts
+++ b/src/locales/de.ts
@@ -68,6 +68,22 @@ const de = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Kiosk',
labelShift: 'Label-Versatz (Punkte)',
+ printerDefault: 'Drucker-Standard',
+ printerSettingsHeading: 'Druckereinstellungen (optional)',
+ printSpeed: 'Druckgeschwindigkeit (ips, 2-14)',
+ printSpeedHint: 'Druckerspezifisch. Leer lassen für Drucker-Standard.',
+ darkness: 'Druckdichte (-30 bis +30)',
+ darknessHint: 'Druckerspezifisch. Leer lassen für Drucker-Standard.',
+ mediaType: 'Medientyp',
+ mediaTypeT: 'Thermotransfer',
+ mediaTypeD: 'Direkter Thermodruck',
+ printOrientation: 'Druckorientierung',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Kopfüber (180°)',
+ printOrientationIndicator: 'Kopfüber',
+ defaultFont: 'Standard-Textstil',
+ defaultFontId: 'Schriftart',
+ defaultFontHeight: 'Höhe (Punkte)',
},
app: {
diff --git a/src/locales/el.ts b/src/locales/el.ts
index 5c73c04b..94ce4ced 100644
--- a/src/locales/el.ts
+++ b/src/locales/el.ts
@@ -68,6 +68,22 @@ const el = {
mediaModeD: 'D — Κοπτικό',
mediaModeK: 'K — Κιόσκι',
labelShift: 'Μετατόπιση ετικέτας (dots)',
+ printerDefault: 'Προεπιλογή εκτυπωτή',
+ printerSettingsHeading: 'Ρυθμίσεις εκτυπωτή (προαιρετικό)',
+ printSpeed: 'Ταχύτητα εκτύπωσης (ips, 2-14)',
+ printSpeedHint: 'Ειδικό για τον εκτυπωτή. Αφήστε κενό για την προεπιλογή.',
+ darkness: 'Πυκνότητα (-30 έως +30)',
+ darknessHint: 'Ειδικό για τον εκτυπωτή. Αφήστε κενό για την προεπιλογή.',
+ mediaType: 'Τύπος μέσου',
+ mediaTypeT: 'Θερμικής μεταφοράς',
+ mediaTypeD: 'Άμεση θερμική',
+ printOrientation: 'Προσανατολισμός εκτύπωσης',
+ printOrientationN: 'Κανονικός',
+ printOrientationI: 'Ανάποδα (180°)',
+ printOrientationIndicator: 'Ανάποδα',
+ defaultFont: 'Προεπιλεγμένο στυλ κειμένου',
+ defaultFontId: 'Γραμματοσειρά',
+ defaultFontHeight: 'Ύψος (κουκκίδες)',
},
app: {
diff --git a/src/locales/en.ts b/src/locales/en.ts
index add2b87a..1edb0d32 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -68,6 +68,22 @@ const en = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Kiosk',
labelShift: 'Label shift (dots)',
+ printerDefault: 'Printer default',
+ printerSettingsHeading: 'Printer settings (optional)',
+ printSpeed: 'Print speed (ips, 2-14)',
+ printSpeedHint: 'Printer-specific. Leave empty to use the printer default.',
+ darkness: 'Darkness (-30 to +30)',
+ darknessHint: 'Printer-specific. Leave empty to use the printer default.',
+ mediaType: 'Media type',
+ mediaTypeT: 'Thermal transfer',
+ mediaTypeD: 'Direct thermal',
+ printOrientation: 'Print orientation',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Upside down (180°)',
+ printOrientationIndicator: 'Upside down',
+ defaultFont: 'Default text style',
+ defaultFontId: 'Font',
+ defaultFontHeight: 'Height (dots)',
},
app: {
diff --git a/src/locales/es.ts b/src/locales/es.ts
index 328dc1b5..946509b1 100644
--- a/src/locales/es.ts
+++ b/src/locales/es.ts
@@ -68,6 +68,22 @@ const es = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Kiosco',
labelShift: 'Desplazamiento de etiqueta (dots)',
+ printerDefault: 'Predeterminado de la impresora',
+ printerSettingsHeading: 'Ajustes de impresora (opcional)',
+ printSpeed: 'Velocidad de impresión (ips, 2-14)',
+ printSpeedHint: 'Específico de la impresora. Dejar vacío para usar el valor predeterminado.',
+ darkness: 'Densidad de impresión (-30 a +30)',
+ darknessHint: 'Específico de la impresora. Dejar vacío para usar el valor predeterminado.',
+ mediaType: 'Tipo de medio',
+ mediaTypeT: 'Transferencia térmica',
+ mediaTypeD: 'Térmica directa',
+ printOrientation: 'Orientación de impresión',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Boca abajo (180°)',
+ printOrientationIndicator: 'Boca abajo',
+ defaultFont: 'Estilo de texto predeterminado',
+ defaultFontId: 'Fuente',
+ defaultFontHeight: 'Altura (puntos)',
},
app: {
diff --git a/src/locales/et.ts b/src/locales/et.ts
index 9e4fcff0..57947bfb 100644
--- a/src/locales/et.ts
+++ b/src/locales/et.ts
@@ -68,6 +68,22 @@ const et = {
mediaModeD: 'D — Lõikur',
mediaModeK: 'K — Kiosk',
labelShift: 'Etiketi nihe (dots)',
+ printerDefault: 'Printeri vaikeväärtus',
+ printerSettingsHeading: 'Printeri sätted (valikuline)',
+ printSpeed: 'Trükikiirus (ips, 2-14)',
+ printSpeedHint: 'Printerispetsiifiline. Vaikeväärtuse kasutamiseks jäta tühjaks.',
+ darkness: 'Tumedus (-30 kuni +30)',
+ darknessHint: 'Printerispetsiifiline. Vaikeväärtuse kasutamiseks jäta tühjaks.',
+ mediaType: 'Meedialiik',
+ mediaTypeT: 'Termoülekanne',
+ mediaTypeD: 'Otsetermaal',
+ printOrientation: 'Trükisuund',
+ printOrientationN: 'Tavaline',
+ printOrientationI: 'Tagurpidi (180°)',
+ printOrientationIndicator: 'Tagurpidi',
+ defaultFont: 'Vaikimisi teksti stiil',
+ defaultFontId: 'Font',
+ defaultFontHeight: 'Kõrgus (punktid)',
},
app: {
diff --git a/src/locales/fa.ts b/src/locales/fa.ts
index cff7a944..b2d1dcce 100644
--- a/src/locales/fa.ts
+++ b/src/locales/fa.ts
@@ -68,6 +68,22 @@ const fa = {
mediaModeD: 'D — برش',
mediaModeK: 'K — کیوسک',
labelShift: 'جابجایی برچسب (dots)',
+ printerDefault: 'پیشفرض چاپگر',
+ printerSettingsHeading: 'تنظیمات چاپگر (اختیاری)',
+ printSpeed: 'سرعت چاپ (ips, 2-14)',
+ printSpeedHint: 'مختص چاپگر. برای استفاده از پیشفرض خالی بگذارید.',
+ darkness: 'تیرگی (-30 تا +30)',
+ darknessHint: 'مختص چاپگر. برای استفاده از پیشفرض خالی بگذارید.',
+ mediaType: 'نوع رسانه',
+ mediaTypeT: 'انتقال حرارتی',
+ mediaTypeD: 'حرارتی مستقیم',
+ printOrientation: 'جهت چاپ',
+ printOrientationN: 'عادی',
+ printOrientationI: 'وارونه (180°)',
+ printOrientationIndicator: 'وارونه',
+ defaultFont: 'سبک متن پیشفرض',
+ defaultFontId: 'قلم',
+ defaultFontHeight: 'ارتفاع (نقطه)',
},
app: {
diff --git a/src/locales/fi.ts b/src/locales/fi.ts
index d7b76289..51fd3101 100644
--- a/src/locales/fi.ts
+++ b/src/locales/fi.ts
@@ -68,6 +68,22 @@ const fi = {
mediaModeD: 'D — Leikkuri',
mediaModeK: 'K — Kioski',
labelShift: 'Tarrasiirtymä (dots)',
+ printerDefault: 'Tulostimen oletus',
+ printerSettingsHeading: 'Tulostimen asetukset (valinnainen)',
+ printSpeed: 'Tulostusnopeus (ips, 2-14)',
+ printSpeedHint: 'Tulostinkohtainen. Jätä tyhjäksi käyttääksesi oletusarvoa.',
+ darkness: 'Tummuus (-30 - +30)',
+ darknessHint: 'Tulostinkohtainen. Jätä tyhjäksi käyttääksesi oletusarvoa.',
+ mediaType: 'Materiaalityyppi',
+ mediaTypeT: 'Lämpösiirto',
+ mediaTypeD: 'Suora lämpö',
+ printOrientation: 'Tulostussuunta',
+ printOrientationN: 'Normaali',
+ printOrientationI: 'Ylösalaisin (180°)',
+ printOrientationIndicator: 'Ylösalaisin',
+ defaultFont: 'Oletustekstityyli',
+ defaultFontId: 'Fontti',
+ defaultFontHeight: 'Korkeus (pisteet)',
},
app: {
diff --git a/src/locales/fr.ts b/src/locales/fr.ts
index bff24116..9e7f086b 100644
--- a/src/locales/fr.ts
+++ b/src/locales/fr.ts
@@ -68,6 +68,22 @@ const fr = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Kiosque',
labelShift: 'Décalage d\'étiquette (dots)',
+ printerDefault: 'Valeur par défaut de l\'imprimante',
+ printerSettingsHeading: 'Paramètres d\'imprimante (facultatif)',
+ printSpeed: 'Vitesse d\'impression (ips, 2-14)',
+ printSpeedHint: 'Spécifique à l\'imprimante. Laisser vide pour la valeur par défaut.',
+ darkness: 'Densité d\'impression (-30 à +30)',
+ darknessHint: 'Spécifique à l\'imprimante. Laisser vide pour la valeur par défaut.',
+ mediaType: 'Type de support',
+ mediaTypeT: 'Transfert thermique',
+ mediaTypeD: 'Thermique direct',
+ printOrientation: 'Orientation d\'impression',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Tête en bas (180°)',
+ printOrientationIndicator: 'Tête en bas',
+ defaultFont: 'Style de texte par défaut',
+ defaultFontId: 'Police',
+ defaultFontHeight: 'Hauteur (points)',
},
app: {
diff --git a/src/locales/he.ts b/src/locales/he.ts
index fbcce6e8..eb7d01d8 100644
--- a/src/locales/he.ts
+++ b/src/locales/he.ts
@@ -68,6 +68,22 @@ const he = {
mediaModeD: 'D — חותך',
mediaModeK: 'K — קיוסק',
labelShift: 'הסטת תווית (dots)',
+ printerDefault: 'ברירת מחדל של המדפסת',
+ printerSettingsHeading: 'הגדרות מדפסת (אופציונלי)',
+ printSpeed: 'מהירות הדפסה (ips, 2-14)',
+ printSpeedHint: 'ספציפי למדפסת. השאר ריק לערך ברירת המחדל.',
+ darkness: 'כהות (-30 עד +30)',
+ darknessHint: 'ספציפי למדפסת. השאר ריק לערך ברירת המחדל.',
+ mediaType: 'סוג המדיה',
+ mediaTypeT: 'העברה תרמית',
+ mediaTypeD: 'תרמי ישיר',
+ printOrientation: 'כיוון הדפסה',
+ printOrientationN: 'רגיל',
+ printOrientationI: 'הפוך (180°)',
+ printOrientationIndicator: 'הפוך',
+ defaultFont: 'סגנון טקסט ברירת מחדל',
+ defaultFontId: 'גופן',
+ defaultFontHeight: 'גובה (נקודות)',
},
app: {
diff --git a/src/locales/hr.ts b/src/locales/hr.ts
index 9c9b4e7b..be9d2e4c 100644
--- a/src/locales/hr.ts
+++ b/src/locales/hr.ts
@@ -68,6 +68,22 @@ const hr = {
mediaModeD: 'D — Rezač',
mediaModeK: 'K — Kiosk',
labelShift: 'Pomak naljepnice (dots)',
+ printerDefault: 'Zadano za pisač',
+ printerSettingsHeading: 'Postavke pisača (neobavezno)',
+ printSpeed: 'Brzina ispisa (ips, 2-14)',
+ printSpeedHint: 'Specifično za pisač. Ostavite prazno za zadanu vrijednost.',
+ darkness: 'Zacrnjenje (-30 do +30)',
+ darknessHint: 'Specifično za pisač. Ostavite prazno za zadanu vrijednost.',
+ mediaType: 'Vrsta medija',
+ mediaTypeT: 'Toplinski prijenos',
+ mediaTypeD: 'Izravni termalni',
+ printOrientation: 'Orijentacija ispisa',
+ printOrientationN: 'Normalno',
+ printOrientationI: 'Naopako (180°)',
+ printOrientationIndicator: 'Naopako',
+ defaultFont: 'Zadani stil teksta',
+ defaultFontId: 'Font',
+ defaultFontHeight: 'Visina (točke)',
},
app: {
diff --git a/src/locales/hu.ts b/src/locales/hu.ts
index 243c1b97..bdcc01ce 100644
--- a/src/locales/hu.ts
+++ b/src/locales/hu.ts
@@ -68,6 +68,22 @@ const hu = {
mediaModeD: 'D — Vágó',
mediaModeK: 'K — Kioszk',
labelShift: 'Címke eltolás (dots)',
+ printerDefault: 'Nyomtató alapértelmezett',
+ printerSettingsHeading: 'Nyomtatóbeállítások (opcionális)',
+ printSpeed: 'Nyomtatási sebesség (ips, 2-14)',
+ printSpeedHint: 'Nyomtatófüggő. Hagyja üresen a nyomtató alapértelmezett értékéhez.',
+ darkness: 'Nyomtatási sűrűség (-30 - +30)',
+ darknessHint: 'Nyomtatófüggő. Hagyja üresen a nyomtató alapértelmezett értékéhez.',
+ mediaType: 'Hordozó típusa',
+ mediaTypeT: 'Hőtranszfer',
+ mediaTypeD: 'Direkt termál',
+ printOrientation: 'Nyomtatási tájolás',
+ printOrientationN: 'Normál',
+ printOrientationI: 'Fejjel lefelé (180°)',
+ printOrientationIndicator: 'Fejjel lefelé',
+ defaultFont: 'Alapértelmezett szövegstílus',
+ defaultFontId: 'Betűtípus',
+ defaultFontHeight: 'Magasság (pontok)',
},
app: {
diff --git a/src/locales/it.ts b/src/locales/it.ts
index ffe40947..d5816a5c 100644
--- a/src/locales/it.ts
+++ b/src/locales/it.ts
@@ -68,6 +68,22 @@ const it = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Chiosco',
labelShift: 'Spostamento etichetta (dots)',
+ printerDefault: 'Predefinito stampante',
+ printerSettingsHeading: 'Impostazioni stampante (opzionale)',
+ printSpeed: 'Velocità di stampa (ips, 2-14)',
+ printSpeedHint: 'Specifico per stampante. Lascia vuoto per usare il valore predefinito.',
+ darkness: 'Densità di stampa (-30 a +30)',
+ darknessHint: 'Specifico per stampante. Lascia vuoto per usare il valore predefinito.',
+ mediaType: 'Tipo di supporto',
+ mediaTypeT: 'Trasferimento termico',
+ mediaTypeD: 'Termica diretta',
+ printOrientation: 'Orientamento di stampa',
+ printOrientationN: 'Normale',
+ printOrientationI: 'Capovolto (180°)',
+ printOrientationIndicator: 'Capovolto',
+ defaultFont: 'Stile di testo predefinito',
+ defaultFontId: 'Carattere',
+ defaultFontHeight: 'Altezza (punti)',
},
app: {
diff --git a/src/locales/ja.ts b/src/locales/ja.ts
index 5e3dffc1..d5bcc6e8 100644
--- a/src/locales/ja.ts
+++ b/src/locales/ja.ts
@@ -68,6 +68,22 @@ const ja = {
mediaModeD: 'D — カッター',
mediaModeK: 'K — キオスク',
labelShift: 'ラベルシフト (dots)',
+ printerDefault: 'プリンターの既定値',
+ printerSettingsHeading: 'プリンター設定(オプション)',
+ printSpeed: '印刷速度 (ips, 2-14)',
+ printSpeedHint: 'プリンター固有。デフォルト値を使用するには空のままにします。',
+ darkness: '濃度 (-30 ~ +30)',
+ darknessHint: 'プリンター固有。デフォルト値を使用するには空のままにします。',
+ mediaType: 'メディアタイプ',
+ mediaTypeT: '熱転写',
+ mediaTypeD: 'ダイレクトサーマル',
+ printOrientation: '印刷方向',
+ printOrientationN: '通常',
+ printOrientationI: '上下逆 (180°)',
+ printOrientationIndicator: '上下逆',
+ defaultFont: '既定のテキストスタイル',
+ defaultFontId: 'フォント',
+ defaultFontHeight: '高さ (ドット)',
},
app: {
diff --git a/src/locales/ko.ts b/src/locales/ko.ts
index eb286deb..857446c9 100644
--- a/src/locales/ko.ts
+++ b/src/locales/ko.ts
@@ -68,6 +68,22 @@ const ko = {
mediaModeD: 'D — 커터',
mediaModeK: 'K — 키오스크',
labelShift: '라벨 이동 (dots)',
+ printerDefault: '프린터 기본값',
+ printerSettingsHeading: '프린터 설정 (선택 사항)',
+ printSpeed: '인쇄 속도 (ips, 2-14)',
+ printSpeedHint: '프린터별로 다릅니다. 기본값을 사용하려면 비워 두세요.',
+ darkness: '농도 (-30 ~ +30)',
+ darknessHint: '프린터별로 다릅니다. 기본값을 사용하려면 비워 두세요.',
+ mediaType: '미디어 유형',
+ mediaTypeT: '열전사',
+ mediaTypeD: '감열식',
+ printOrientation: '인쇄 방향',
+ printOrientationN: '일반',
+ printOrientationI: '거꾸로 (180°)',
+ printOrientationIndicator: '거꾸로',
+ defaultFont: '기본 텍스트 스타일',
+ defaultFontId: '글꼴',
+ defaultFontHeight: '높이 (도트)',
},
app: {
diff --git a/src/locales/lt.ts b/src/locales/lt.ts
index a59b1621..89ba678a 100644
--- a/src/locales/lt.ts
+++ b/src/locales/lt.ts
@@ -68,6 +68,22 @@ const lt = {
mediaModeD: 'D — Pjaustuvas',
mediaModeK: 'K — Kioskas',
labelShift: 'Etiketės poslinkis (dots)',
+ printerDefault: 'Spausdintuvo numatytasis',
+ printerSettingsHeading: 'Spausdintuvo nustatymai (neprivaloma)',
+ printSpeed: 'Spausdinimo greitis (ips, 2-14)',
+ printSpeedHint: 'Priklauso nuo spausdintuvo. Palikite tuščią numatytąjai reikšmei.',
+ darkness: 'Tamsumas (-30 iki +30)',
+ darknessHint: 'Priklauso nuo spausdintuvo. Palikite tuščią numatytąjai reikšmei.',
+ mediaType: 'Laikmenos tipas',
+ mediaTypeT: 'Šiluminis perdavimas',
+ mediaTypeD: 'Tiesioginis terminis',
+ printOrientation: 'Spausdinimo orientacija',
+ printOrientationN: 'Įprasta',
+ printOrientationI: 'Apsuktai (180°)',
+ printOrientationIndicator: 'Apsuktai',
+ defaultFont: 'Numatytasis teksto stilius',
+ defaultFontId: 'Šriftas',
+ defaultFontHeight: 'Aukštis (taškai)',
},
app: {
diff --git a/src/locales/lv.ts b/src/locales/lv.ts
index 845d3627..5fe0c76c 100644
--- a/src/locales/lv.ts
+++ b/src/locales/lv.ts
@@ -68,6 +68,22 @@ const lv = {
mediaModeD: 'D — Griezējs',
mediaModeK: 'K — Kiosks',
labelShift: 'Etiķetes nobīde (dots)',
+ printerDefault: 'Printera noklusējums',
+ printerSettingsHeading: 'Printera iestatījumi (neobligāti)',
+ printSpeed: 'Drukāšanas ātrums (ips, 2-14)',
+ printSpeedHint: 'Atkarīgs no printera. Atstājiet tukšu, lai izmantotu noklusējumu.',
+ darkness: 'Tumšums (-30 līdz +30)',
+ darknessHint: 'Atkarīgs no printera. Atstājiet tukšu, lai izmantotu noklusējumu.',
+ mediaType: 'Materiāla veids',
+ mediaTypeT: 'Termopārnese',
+ mediaTypeD: 'Tiešais termālais',
+ printOrientation: 'Drukāšanas orientācija',
+ printOrientationN: 'Parasta',
+ printOrientationI: 'Otrādi (180°)',
+ printOrientationIndicator: 'Otrādi',
+ defaultFont: 'Noklusējuma teksta stils',
+ defaultFontId: 'Fonts',
+ defaultFontHeight: 'Augstums (punkti)',
},
app: {
diff --git a/src/locales/nl.ts b/src/locales/nl.ts
index 586dd2ec..0079d09c 100644
--- a/src/locales/nl.ts
+++ b/src/locales/nl.ts
@@ -68,6 +68,22 @@ const nl = {
mediaModeD: 'D — Snijder',
mediaModeK: 'K — Kiosk',
labelShift: 'Etiketverschuiving (dots)',
+ printerDefault: 'Printerstandaard',
+ printerSettingsHeading: 'Printerinstellingen (optioneel)',
+ printSpeed: 'Afdruksnelheid (ips, 2-14)',
+ printSpeedHint: 'Printerspecifiek. Laat leeg om de standaardwaarde te gebruiken.',
+ darkness: 'Drukdichtheid (-30 tot +30)',
+ darknessHint: 'Printerspecifiek. Laat leeg om de standaardwaarde te gebruiken.',
+ mediaType: 'Mediumtype',
+ mediaTypeT: 'Thermische transfer',
+ mediaTypeD: 'Direct thermisch',
+ printOrientation: 'Afdrukrichting',
+ printOrientationN: 'Normaal',
+ printOrientationI: 'Ondersteboven (180°)',
+ printOrientationIndicator: 'Ondersteboven',
+ defaultFont: 'Standaard tekststijl',
+ defaultFontId: 'Lettertype',
+ defaultFontHeight: 'Hoogte (dots)',
},
app: {
diff --git a/src/locales/no.ts b/src/locales/no.ts
index faf571eb..0fbceff6 100644
--- a/src/locales/no.ts
+++ b/src/locales/no.ts
@@ -68,6 +68,22 @@ const no = {
mediaModeD: 'D — Kutter',
mediaModeK: 'K — Kiosk',
labelShift: 'Etikettforskyvning (dots)',
+ printerDefault: 'Skriverens standard',
+ printerSettingsHeading: 'Skriverinnstillinger (valgfritt)',
+ printSpeed: 'Utskriftshastighet (ips, 2-14)',
+ printSpeedHint: 'Skriverspesifikk. La stå tom for skriverens standardverdi.',
+ darkness: 'Svarthet (-30 til +30)',
+ darknessHint: 'Skriverspesifikk. La stå tom for skriverens standardverdi.',
+ mediaType: 'Materialtype',
+ mediaTypeT: 'Termotransfer',
+ mediaTypeD: 'Direkte termisk',
+ printOrientation: 'Utskriftsretning',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Opp ned (180°)',
+ printOrientationIndicator: 'Opp ned',
+ defaultFont: 'Standardtekststil',
+ defaultFontId: 'Skrift',
+ defaultFontHeight: 'Høyde (punkter)',
},
app: {
diff --git a/src/locales/pl.ts b/src/locales/pl.ts
index c6375bac..955eadc3 100644
--- a/src/locales/pl.ts
+++ b/src/locales/pl.ts
@@ -68,6 +68,22 @@ const pl = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Kiosk',
labelShift: 'Przesunięcie etykiety (dots)',
+ printerDefault: 'Domyślne drukarki',
+ printerSettingsHeading: 'Ustawienia drukarki (opcjonalne)',
+ printSpeed: 'Prędkość drukowania (ips, 2-14)',
+ printSpeedHint: 'Specyficzne dla drukarki. Pozostaw puste, aby użyć wartości domyślnej.',
+ darkness: 'Gęstość druku (-30 do +30)',
+ darknessHint: 'Specyficzne dla drukarki. Pozostaw puste, aby użyć wartości domyślnej.',
+ mediaType: 'Typ nośnika',
+ mediaTypeT: 'Termotransferowy',
+ mediaTypeD: 'Termiczny bezpośredni',
+ printOrientation: 'Orientacja druku',
+ printOrientationN: 'Normalna',
+ printOrientationI: 'Do góry nogami (180°)',
+ printOrientationIndicator: 'Do góry nogami',
+ defaultFont: 'Domyślny styl tekstu',
+ defaultFontId: 'Czcionka',
+ defaultFontHeight: 'Wysokość (punkty)',
},
app: {
diff --git a/src/locales/pt.ts b/src/locales/pt.ts
index 764af39b..60550b23 100644
--- a/src/locales/pt.ts
+++ b/src/locales/pt.ts
@@ -68,6 +68,22 @@ const pt = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Quiosque',
labelShift: 'Deslocamento da etiqueta (dots)',
+ printerDefault: 'Predefinição da impressora',
+ printerSettingsHeading: 'Definições da impressora (opcional)',
+ printSpeed: 'Velocidade de impressão (ips, 2-14)',
+ printSpeedHint: 'Específico da impressora. Deixe vazio para usar o padrão da impressora.',
+ darkness: 'Densidade de impressão (-30 a +30)',
+ darknessHint: 'Específico da impressora. Deixe vazio para usar o padrão da impressora.',
+ mediaType: 'Tipo de suporte',
+ mediaTypeT: 'Transferência térmica',
+ mediaTypeD: 'Térmica direta',
+ printOrientation: 'Orientação de impressão',
+ printOrientationN: 'Normal',
+ printOrientationI: 'De cabeça para baixo (180°)',
+ printOrientationIndicator: 'De cabeça para baixo',
+ defaultFont: 'Estilo de texto predefinido',
+ defaultFontId: 'Fonte',
+ defaultFontHeight: 'Altura (pontos)',
},
app: {
diff --git a/src/locales/ro.ts b/src/locales/ro.ts
index d8e8a132..34eee4d9 100644
--- a/src/locales/ro.ts
+++ b/src/locales/ro.ts
@@ -68,6 +68,22 @@ const ro = {
mediaModeD: 'D — Cutter',
mediaModeK: 'K — Chioșc',
labelShift: 'Deplasare etichetă (dots)',
+ printerDefault: 'Implicit imprimantă',
+ printerSettingsHeading: 'Setări imprimantă (opțional)',
+ printSpeed: 'Viteza de imprimare (ips, 2-14)',
+ printSpeedHint: 'Specific imprimantei. Lăsați gol pentru valoarea implicită.',
+ darkness: 'Densitate imprimare (-30 până la +30)',
+ darknessHint: 'Specific imprimantei. Lăsați gol pentru valoarea implicită.',
+ mediaType: 'Tip mediu',
+ mediaTypeT: 'Transfer termic',
+ mediaTypeD: 'Termic direct',
+ printOrientation: 'Orientare imprimare',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Cu susul în jos (180°)',
+ printOrientationIndicator: 'Cu susul în jos',
+ defaultFont: 'Stil text implicit',
+ defaultFontId: 'Font',
+ defaultFontHeight: 'Înălțime (puncte)',
},
app: {
diff --git a/src/locales/sk.ts b/src/locales/sk.ts
index 1b683dc2..4390cceb 100644
--- a/src/locales/sk.ts
+++ b/src/locales/sk.ts
@@ -68,6 +68,22 @@ const sk = {
mediaModeD: 'D — Rezačka',
mediaModeK: 'K — Kiosk',
labelShift: 'Posun štítka (dots)',
+ printerDefault: 'Predvolené tlačiarne',
+ printerSettingsHeading: 'Nastavenia tlačiarne (voliteľné)',
+ printSpeed: 'Rýchlosť tlače (ips, 2-14)',
+ printSpeedHint: 'Špecifické pre tlačiareň. Ponechajte prázdne pre predvolenú hodnotu.',
+ darkness: 'Sýtosť tlače (-30 až +30)',
+ darknessHint: 'Špecifické pre tlačiareň. Ponechajte prázdne pre predvolenú hodnotu.',
+ mediaType: 'Typ média',
+ mediaTypeT: 'Termotransferový',
+ mediaTypeD: 'Priamy termotisk',
+ printOrientation: 'Orientácia tlače',
+ printOrientationN: 'Normálne',
+ printOrientationI: 'Hore nohami (180°)',
+ printOrientationIndicator: 'Hore nohami',
+ defaultFont: 'Predvolený štýl textu',
+ defaultFontId: 'Písmo',
+ defaultFontHeight: 'Výška (body)',
},
app: {
diff --git a/src/locales/sl.ts b/src/locales/sl.ts
index e8d7391a..fb7b8866 100644
--- a/src/locales/sl.ts
+++ b/src/locales/sl.ts
@@ -68,6 +68,22 @@ const sl = {
mediaModeD: 'D — Rezalnik',
mediaModeK: 'K — Kiosk',
labelShift: 'Zamik nalepke (dots)',
+ printerDefault: 'Privzeto tiskalnika',
+ printerSettingsHeading: 'Nastavitve tiskalnika (izbirno)',
+ printSpeed: 'Hitrost tiskanja (ips, 2-14)',
+ printSpeedHint: 'Specifično za tiskalnik. Pustite prazno za privzeto vrednost.',
+ darkness: 'Temnost (-30 do +30)',
+ darknessHint: 'Specifično za tiskalnik. Pustite prazno za privzeto vrednost.',
+ mediaType: 'Vrsta medija',
+ mediaTypeT: 'Termalni prenos',
+ mediaTypeD: 'Neposredno termalno',
+ printOrientation: 'Usmerjenost tiskanja',
+ printOrientationN: 'Normalno',
+ printOrientationI: 'Obrnjeno (180°)',
+ printOrientationIndicator: 'Obrnjeno',
+ defaultFont: 'Privzeti slog besedila',
+ defaultFontId: 'Pisava',
+ defaultFontHeight: 'Višina (točke)',
},
app: {
diff --git a/src/locales/sr.ts b/src/locales/sr.ts
index ce43c7ab..1f9e3e1b 100644
--- a/src/locales/sr.ts
+++ b/src/locales/sr.ts
@@ -68,6 +68,22 @@ const sr = {
mediaModeD: 'D — Секач',
mediaModeK: 'K — Киоск',
labelShift: 'Померај етикете (dots)',
+ printerDefault: 'Подразумевано за штампач',
+ printerSettingsHeading: 'Подешавања штампача (опционално)',
+ printSpeed: 'Брзина штампе (ips, 2-14)',
+ printSpeedHint: 'Специфично за штампач. Оставите празно за подразумевану вредност.',
+ darkness: 'Затамњење (-30 до +30)',
+ darknessHint: 'Специфично за штампач. Оставите празно за подразумевану вредност.',
+ mediaType: 'Тип медија',
+ mediaTypeT: 'Топлотни пренос',
+ mediaTypeD: 'Директни термални',
+ printOrientation: 'Оријентација штампе',
+ printOrientationN: 'Нормално',
+ printOrientationI: 'Наопако (180°)',
+ printOrientationIndicator: 'Наопако',
+ defaultFont: 'Подразумевани стил текста',
+ defaultFontId: 'Фонт',
+ defaultFontHeight: 'Висина (тачке)',
},
app: {
diff --git a/src/locales/sv.ts b/src/locales/sv.ts
index 15022c1f..8a13cac4 100644
--- a/src/locales/sv.ts
+++ b/src/locales/sv.ts
@@ -68,6 +68,22 @@ const sv = {
mediaModeD: 'D — Skärare',
mediaModeK: 'K — Kiosk',
labelShift: 'Etikettförskjutning (dots)',
+ printerDefault: 'Skrivarens standard',
+ printerSettingsHeading: 'Skrivarinställningar (valfritt)',
+ printSpeed: 'Utskriftshastighet (ips, 2-14)',
+ printSpeedHint: 'Skrivarspecifik. Lämna tom för skrivarens standardvärde.',
+ darkness: 'Svärta (-30 till +30)',
+ darknessHint: 'Skrivarspecifik. Lämna tom för skrivarens standardvärde.',
+ mediaType: 'Materialtyp',
+ mediaTypeT: 'Termotransfer',
+ mediaTypeD: 'Direkttermisk',
+ printOrientation: 'Utskriftsorientering',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Upp och ner (180°)',
+ printOrientationIndicator: 'Upp och ner',
+ defaultFont: 'Standardtextstil',
+ defaultFontId: 'Typsnitt',
+ defaultFontHeight: 'Höjd (punkter)',
},
app: {
diff --git a/src/locales/tr.ts b/src/locales/tr.ts
index 116427f3..d31a24d8 100644
--- a/src/locales/tr.ts
+++ b/src/locales/tr.ts
@@ -68,6 +68,22 @@ const tr = {
mediaModeD: 'D — Kesici',
mediaModeK: 'K — Kiosk',
labelShift: 'Etiket kaydırma (dots)',
+ printerDefault: 'Yazıcı varsayılanı',
+ printerSettingsHeading: 'Yazıcı ayarları (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.',
+ darkness: 'Koyuluk (-30 ile +30 arası)',
+ darknessHint: 'Yazıcıya özel. Varsayılan için boş bırakın.',
+ mediaType: 'Medya türü',
+ mediaTypeT: 'Termal transfer',
+ mediaTypeD: 'Doğrudan termal',
+ printOrientation: 'Yazdırma yönü',
+ printOrientationN: 'Normal',
+ printOrientationI: 'Baş aşağı (180°)',
+ printOrientationIndicator: 'Baş aşağı',
+ defaultFont: 'Varsayılan metin stili',
+ defaultFontId: 'Yazı tipi',
+ defaultFontHeight: 'Yükseklik (nokta)',
},
app: {
diff --git a/src/locales/zh-hans.ts b/src/locales/zh-hans.ts
index a6dee33c..37fa2b55 100644
--- a/src/locales/zh-hans.ts
+++ b/src/locales/zh-hans.ts
@@ -68,6 +68,22 @@ const zhHans = {
mediaModeD: 'D — 切刀',
mediaModeK: 'K — 自助终端',
labelShift: '标签偏移 (dots)',
+ printerDefault: '打印机默认值',
+ printerSettingsHeading: '打印机设置(可选)',
+ printSpeed: '打印速度 (ips, 2-14)',
+ printSpeedHint: '与打印机相关。留空使用打印机默认值。',
+ darkness: '打印浓度 (-30 至 +30)',
+ darknessHint: '与打印机相关。留空使用打印机默认值。',
+ mediaType: '介质类型',
+ mediaTypeT: '热转印',
+ mediaTypeD: '直接热敏',
+ printOrientation: '打印方向',
+ printOrientationN: '正常',
+ printOrientationI: '倒置 (180°)',
+ printOrientationIndicator: '倒置',
+ defaultFont: '默认文本样式',
+ defaultFontId: '字体',
+ defaultFontHeight: '高度 (点)',
},
app: {
diff --git a/src/locales/zh-hant.ts b/src/locales/zh-hant.ts
index d04a2a5f..6cc82cc4 100644
--- a/src/locales/zh-hant.ts
+++ b/src/locales/zh-hant.ts
@@ -68,6 +68,22 @@ const zhHant = {
mediaModeD: 'D — 裁刀',
mediaModeK: 'K — 自助終端',
labelShift: '標籤偏移 (dots)',
+ printerDefault: '印表機預設值',
+ printerSettingsHeading: '印表機設定(可選)',
+ printSpeed: '列印速度 (ips, 2-14)',
+ printSpeedHint: '與印表機相關。留空使用印表機預設值。',
+ darkness: '列印濃度 (-30 至 +30)',
+ darknessHint: '與印表機相關。留空使用印表機預設值。',
+ mediaType: '介質類型',
+ mediaTypeT: '熱轉印',
+ mediaTypeD: '直接熱感',
+ printOrientation: '列印方向',
+ printOrientationN: '正常',
+ printOrientationI: '倒置 (180°)',
+ printOrientationIndicator: '倒置',
+ defaultFont: '預設文字樣式',
+ defaultFontId: '字型',
+ defaultFontHeight: '高度 (點)',
},
app: {
diff --git a/src/test/zplRoundtrip.test.ts b/src/test/zplRoundtrip.test.ts
index 82341345..1f344ace 100644
--- a/src/test/zplRoundtrip.test.ts
+++ b/src/test/zplRoundtrip.test.ts
@@ -307,7 +307,7 @@ describe('parseZPL — real-world structural commands are silently ignored', ()
'^MNY', // media handling
'^MTT', // media type
'^JMA', // applicator / configuration recall
- '^PON', // this is unknown – will test it IS in unknown
+ '^XF', // genuinely unknown – will test it IS in unknown
'^PW600',
'^LL400',
'^FO50,50^A0N,30,0^FDReal Label^FS',
@@ -331,7 +331,6 @@ describe('parseZPL — real-world structural commands are silently ignored', ()
it('genuinely unknown commands still appear in importReport.unknown', () => {
const { importReport } = parseZPL(ZEBRA_HEADER_ZPL, 8);
- // ^PO is not in the structural list — should surface as unknown
- expect(importReport.unknown.some((s) => s.startsWith('^PO'))).toBe(true);
+ expect(importReport.unknown.some((s) => s.startsWith('^XF'))).toBe(true);
});
});
diff --git a/src/types/ObjectType.ts b/src/types/ObjectType.ts
index 6bbec1c3..929d18ff 100644
--- a/src/types/ObjectType.ts
+++ b/src/types/ObjectType.ts
@@ -8,6 +8,12 @@ export const labelConfigSchema = z.object({
printQuantity: z.number().optional(),
mediaMode: z.enum(['T', 'V', 'D', 'K']).optional(),
labelShift: z.number().optional(),
+ printSpeed: z.number().int().min(2).max(14).optional(),
+ darkness: z.number().int().min(-30).max(30).optional(),
+ mediaType: z.enum(['T', 'D']).optional(),
+ printOrientation: z.enum(['N', 'I']).optional(),
+ defaultFontId: z.string().min(1).optional(),
+ defaultFontHeight: z.number().int().positive().optional(),
});
export type LabelConfig = z.infer;