i18n(scanner): translate full page (13 keys) + wrap inline blade + JS errors

- Wrap inline blade text ('Mod recepție'), placeholder, and JS error
  messages (via @json(__(...)) so they land as JS strings).
- +13 translations covering all UI text on /app/scanner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-16 11:15:12 +00:00
parent b937bc8e1d
commit 2831dbd1c1
3 changed files with 29 additions and 19 deletions
+12 -7
View File
@@ -174,6 +174,7 @@
"Anulează fișa": "Cancel order",
"Anvelope": "Tires",
"Apare în magazinul online public.": "Appears in the public online shop.",
"Apasă „Pornește\" pentru a deschide camera.": "Click \"Start\" to open the camera.",
"Apasă „Recepție\" pe lista de piese pentru a înregistra prima intrare în depozit.": "Click \"Receive\" on the parts list to record the first stock intake.",
"Apel": "Apel",
"Aplicat": "Aplicat",
@@ -1031,6 +1032,7 @@
"Minim": "Minim",
"Minute": "Minutes",
"Mod": "Mode",
"Mod recepție": "Receive mode",
"Mod stub:": "Mod stub:",
"Mod tarifare": "Pricing mode",
"Mod:": "Mode:",
@@ -1077,6 +1079,7 @@
"Neverificat": "Not verified",
"New client": "New client",
"New mașină": "New vehicle",
"Nicio cameră detectată.": "No camera detected.",
"Nicio cheltuială.": "No expenses.",
"Nicio comandă încă": "No orders yet",
"Nicio conversație": "No conversations",
@@ -1150,6 +1153,7 @@
"Nu am găsit linii valide — verifică maparea coloanelor": "No valid rows found — check column mapping",
"Nu există date": "No data",
"Nu există rezultate": "No results",
"Nu pot porni camera: ": "Cannot start camera: ",
"Nu re-trimite mai des de X zile": "Nu re-trimite mai des de X zile",
"Nu te poți șterge pe tine!": "You can't delete yourself!",
"Nu, renunță": "No, cancel",
@@ -1442,7 +1446,7 @@
"Recente": "Recent",
"Recente / restul": "Recente / restul",
"Recepție": "Receive",
"Recepție acum:": "Recepție acum:",
"Recepție acum:": "Received now:",
"Recepție completă — batch-uri create": "Recepție completă — batch-uri create",
"Recepție totală": "Full receipt",
"Recepționat": "Received",
@@ -1550,12 +1554,13 @@
"Sarcini restante": "Overdue tasks",
"Sarcină": "Task",
"Sau generează unul aici (recomandat pentru integrări permanente)": "Sau generează unul aici (recomandat pentru integrări permanente)",
"Sau introdu manual (cod articol / barcode)…": "Or enter manually (article / barcode)…",
"Save": "Save",
"Scade din stoc piesele legate de catalog (FIFO) și marchează comanda confirmată.": "Scade din stoc piesele legate de catalog (FIFO) și marchează comanda confirmată.",
"Scadent": "Scadent",
"Scadent la": "Scadent la",
"Scadență": "Due date",
"Scanează codurile pieselor pentru a marca ca recepționate.": "Scanează codurile pieselor pentru a marca ca recepționate.",
"Scanează codurile pieselor pentru a marca ca recepționate.": "Scan part codes to mark as received.",
"Scaner cod QR / Bare": "Scaner cod QR / Bare",
"Scheduled at": "Scheduled at",
"Schimb ulei + filtru": "Oil + filter change",
@@ -1848,7 +1853,7 @@
"Ultima logare": "Ultima logare",
"Ultima modificare": "Last modified",
"Ultima sincronizare": "Last synced",
"Ultimul cod citit:": "Ultimul cod citit:",
"Ultimul cod citit:": "Last code read:",
"Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).": "Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).",
"Updated at": "Updated at",
"Upgrade": "Upgrade",
@@ -2030,7 +2035,7 @@
"jurnal": "log",
"la fiecare request": "la fiecare request",
"liber/ușor": "free/light",
"linii neîncasate.": "linii neîncasate.",
"linii neîncasate.": "unreceived lines.",
"lucrare caroserie": "bodyshop job",
"lucrare terți": "subcontract job",
"lucrări caroserie": "bodyshop jobs",
@@ -2270,11 +2275,11 @@
"→ creează aplicație live → ia credentials": "→ creează aplicație live → ia credentials",
"→ ia keys → setează webhook la URL-ul de mai sus": "→ ia keys → setează webhook la URL-ul de mai sus",
"↗ Deschide Purchase": "↗ Deschide Purchase",
"↗ Deschide comanda în Filament": "↗ Deschide comanda în Filament",
"↗ Deschide comanda în Filament": "↗ Open order in Filament",
"↗ Editare": "↗ Editare",
"≥9h/10": "≥9h/10",
"⏰ Abonament expirat": "⏰ Abonament expirat",
"⏹ Oprește": "⏹ Oprește",
"⏹ Oprește": "⏹ Stop",
"◀ Luna precedentă": "◀ Previous month",
"⚖️ Balanță": "⚖️ Balanță",
"⚙ Configurare tenant": "⚙ Configurare tenant",
@@ -2323,7 +2328,7 @@
"📚 Cum se face plata în sistem:": "📚 Cum se face plata în sistem:",
"📦 Caută piesă în catalog": "📦 Caută piesă în catalog",
"📦 Export complet date tenant": "📦 Export complet date tenant",
"📷 Pornește scanner": "📷 Pornește scanner",
"📷 Pornește scanner": "📷 Start scanner",
"🔎 Decode VIN": "🔎 Decode VIN",
"🕒 Program de lucru": "🕒 Program de lucru",
"🖨 PDF programări": "🖨 PDF programări",
+13 -8
View File
@@ -174,6 +174,7 @@
"Anulează fișa": "Отменить наряд",
"Anvelope": "Шины",
"Apare în magazinul online public.": "Отображается в публичном интернет-магазине.",
"Apasă „Pornește\" pentru a deschide camera.": "Нажмите «Старт», чтобы включить камеру.",
"Apasă „Recepție\" pe lista de piese pentru a înregistra prima intrare în depozit.": "Нажмите «Приёмка» в списке запчастей, чтобы зарегистрировать первое поступление на склад.",
"Apel": "Apel",
"Aplicat": "Aplicat",
@@ -307,7 +308,7 @@
"Categorie implicită": "Категория по умолчанию",
"Categorii": "Categorii",
"Category": "Категория",
"Caută": "Поиск",
"Caută": "Найти",
"Caută client, mașină, număr...": "Поиск клиента, авто, номера...",
"Caută în tabel": "Поиск в таблице",
"Caz asigurare": "Caz asigurare",
@@ -1031,6 +1032,7 @@
"Minim": "Minim",
"Minute": "Минуты",
"Mod": "Режим",
"Mod recepție": "Режим приёмки",
"Mod stub:": "Mod stub:",
"Mod tarifare": "Тип тарифа",
"Mod:": "Режим:",
@@ -1077,6 +1079,7 @@
"Neverificat": "Не проверено",
"New client": "Новый клиент",
"New mașină": "Новое авто",
"Nicio cameră detectată.": "Камера не обнаружена.",
"Nicio cheltuială.": "Нет расходов.",
"Nicio comandă încă": "Пока нет заказов",
"Nicio conversație": "Нет диалогов",
@@ -1150,6 +1153,7 @@
"Nu am găsit linii valide — verifică maparea coloanelor": "Не найдено валидных строк — проверьте маппинг колонок",
"Nu există date": "Нет данных",
"Nu există rezultate": "Нет результатов",
"Nu pot porni camera: ": "Не удалось запустить камеру: ",
"Nu re-trimite mai des de X zile": "Nu re-trimite mai des de X zile",
"Nu te poți șterge pe tine!": "Нельзя удалить себя!",
"Nu, renunță": "Нет, отменить",
@@ -1442,7 +1446,7 @@
"Recente": "Недавние",
"Recente / restul": "Recente / restul",
"Recepție": "Приёмка",
"Recepție acum:": "Recepție acum:",
"Recepție acum:": "Приёмка сейчас:",
"Recepție completă — batch-uri create": "Recepție completă — batch-uri create",
"Recepție totală": "Полная приёмка",
"Recepționat": "Принято",
@@ -1550,12 +1554,13 @@
"Sarcini restante": "Просроченные задачи",
"Sarcină": "Задача",
"Sau generează unul aici (recomandat pentru integrări permanente)": "Sau generează unul aici (recomandat pentru integrări permanente)",
"Sau introdu manual (cod articol / barcode)…": "Или введите вручную (артикул / штрих-код)…",
"Save": "Сохранить",
"Scade din stoc piesele legate de catalog (FIFO) și marchează comanda confirmată.": "Scade din stoc piesele legate de catalog (FIFO) și marchează comanda confirmată.",
"Scadent": "Scadent",
"Scadent la": "Scadent la",
"Scadență": "Срок оплаты",
"Scanează codurile pieselor pentru a marca ca recepționate.": "Scanează codurile pieselor pentru a marca ca recepționate.",
"Scanează codurile pieselor pentru a marca ca recepționate.": "Сканируйте коды запчастей, чтобы отметить как принятые.",
"Scaner cod QR / Bare": "Scaner cod QR / Bare",
"Scheduled at": "Запланировано",
"Schimb ulei + filtru": "Замена масла + фильтр",
@@ -1848,7 +1853,7 @@
"Ultima logare": "Ultima logare",
"Ultima modificare": "Последнее изменение",
"Ultima sincronizare": "Последняя синхронизация",
"Ultimul cod citit:": "Ultimul cod citit:",
"Ultimul cod citit:": "Последний код:",
"Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).": "Un depozit implicit a fost creat la migrare. Adaugă altele dacă ai locații fizice separate (sucursală, hală, mobil).",
"Updated at": "Обновлён",
"Upgrade": "Обновление",
@@ -2030,7 +2035,7 @@
"jurnal": "журнал",
"la fiecare request": "la fiecare request",
"liber/ușor": "свободно/легко",
"linii neîncasate.": "linii neîncasate.",
"linii neîncasate.": "непринятых строк.",
"lucrare caroserie": "кузовная работа",
"lucrare terți": "работа субподрядчика",
"lucrări caroserie": "кузовные работы",
@@ -2270,11 +2275,11 @@
"→ creează aplicație live → ia credentials": "→ creează aplicație live → ia credentials",
"→ ia keys → setează webhook la URL-ul de mai sus": "→ ia keys → setează webhook la URL-ul de mai sus",
"↗ Deschide Purchase": "↗ Deschide Purchase",
"↗ Deschide comanda în Filament": "↗ Deschide comanda în Filament",
"↗ Deschide comanda în Filament": "↗ Открыть заказ в Filament",
"↗ Editare": "↗ Editare",
"≥9h/10": "≥9ч/10",
"⏰ Abonament expirat": "⏰ Abonament expirat",
"⏹ Oprește": "⏹ Oprește",
"⏹ Oprește": "⏹ Остановить",
"◀ Luna precedentă": "◀ Предыдущий месяц",
"⚖️ Balanță": "⚖️ Balanță",
"⚙ Configurare tenant": "⚙ Configurare tenant",
@@ -2323,7 +2328,7 @@
"📚 Cum se face plata în sistem:": "📚 Cum se face plata în sistem:",
"📦 Caută piesă în catalog": "📦 Caută piesă în catalog",
"📦 Export complet date tenant": "📦 Export complet date tenant",
"📷 Pornește scanner": "📷 Pornește scanner",
"📷 Pornește scanner": "📷 Запустить сканер",
"🔎 Decode VIN": "🔎 Decode VIN",
"🕒 Program de lucru": "🕒 Program de lucru",
"🖨 PDF programări": "🖨 PDF programări",
@@ -37,7 +37,7 @@
@if ($purchase = $this->getActivePurchase())
@php $pending = $this->getPendingItems(); @endphp
<div style="background:#ecfdf5;border-left:3px solid #10b981;padding:12px 14px;margin-bottom:12px;border-radius:6px;font-size:13px;">
<div style="font-weight:600;color:#065f46;margin-bottom:4px;">📦 Mod recepție {{ $purchase->number }}</div>
<div style="font-weight:600;color:#065f46;margin-bottom:4px;">📦 {{ __('Mod recepție') }} {{ $purchase->number }}</div>
<div style="color:#047857;">{{ __('Scanează codurile pieselor pentru a marca ca recepționate.') }} <strong>{{ count($pending) }}</strong> {{ __('linii neîncasate.') }}</div>
@if (! empty($receivedToasts))
<div style="margin-top:8px;font-size:12px;color:#065f46;">
@@ -75,7 +75,7 @@
<div class="sc-manual">
<form wire:submit="submitManual" style="display:flex;gap:8px;align-items:stretch;">
<input type="text" wire:model="manual" placeholder="Sau introdu manual (cod articol / barcode)…" />
<input type="text" wire:model="manual" placeholder="{{ __('Sau introdu manual (cod articol / barcode)…') }}" />
<button type="submit" class="sc-btn">{{ __('Caută') }}</button>
</form>
</div>
@@ -99,7 +99,7 @@
try {
this.scanner = new Html5Qrcode('reader');
const cams = await Html5Qrcode.getCameras();
if (!cams.length) { this.error = 'Nicio cameră detectată.'; return; }
if (!cams.length) { this.error = @json(__('Nicio cameră detectată.')); return; }
const camId = cams.find(c => /back|rear|environment/i.test(c.label))?.id || cams[0].id;
await this.scanner.start(
camId,
@@ -109,7 +109,7 @@
);
this.running = true;
} catch (e) {
this.error = 'Nu pot porni camera: ' + (e.message || e);
this.error = @json(__('Nu pot porni camera: ')) + (e.message || e);
}
},