From e4e63a3a09bf1dfac460e601960a94923a8f17bf Mon Sep 17 00:00:00 2001 From: Vasyka Date: Thu, 16 Jul 2026 07:35:56 +0000 Subject: [PATCH] i18n(work-order-edit): translate tab, tracking-link modal + widen for QR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getContentTabLabel: 'ⓘ Info & antet' now goes through __() - Tracking-client modal heading translated ('Tracking client — WO #…') - Both 'Închide' cancel labels wrapped in __() - Tracking modal widened to 'lg' so the QR + link input fit without overlap - Notification 'Șablon aplicat' template built with __() so RU/EN see translated pieces - +16 translations covering the QR modal, Info tab, Închide etc. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../WorkOrderResource/Pages/EditWorkOrder.php | 11 ++++++----- lang/en.json | 14 +++++++++----- lang/ru.json | 14 +++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/Filament/Tenant/Resources/WorkOrderResource/Pages/EditWorkOrder.php b/app/Filament/Tenant/Resources/WorkOrderResource/Pages/EditWorkOrder.php index c1f6a28..cdf55ca 100644 --- a/app/Filament/Tenant/Resources/WorkOrderResource/Pages/EditWorkOrder.php +++ b/app/Filament/Tenant/Resources/WorkOrderResource/Pages/EditWorkOrder.php @@ -20,7 +20,7 @@ class EditWorkOrder extends EditRecord public function getContentTabLabel(): ?string { - return 'ⓘ Info & antet'; + return 'ⓘ ' . __('Info & antet'); } public function getContentTabPosition(): ?\Filament\Resources\Pages\Enums\ContentTabPosition @@ -49,7 +49,7 @@ class EditWorkOrder extends EditRecord $r = app(\App\Services\ServiceComposer::class)->applyTemplate($this->record, $template); $this->fillForm(); \Filament\Notifications\Notification::make() - ->title("Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese") + ->title(__('Șablon aplicat') . ": {$r['labor']} " . __('manopere') . ", {$r['parts']} " . __('piese')) ->success()->send(); }), Actions\Action::make('ai_diagnose') @@ -59,7 +59,7 @@ class EditWorkOrder extends EditRecord ->visible(fn () => ! empty($this->record->complaint)) ->modalHeading(__('Diagnostic AI bazat pe plângerea clientului')) ->modalSubmitAction(false) - ->modalCancelActionLabel('Închide') + ->modalCancelActionLabel(__('Închide')) ->modalContent(function () { [$reply, $meta] = app(\App\Services\Ai\AiAssistantService::class) ->suggestDiagnosis($this->record); @@ -69,9 +69,10 @@ class EditWorkOrder extends EditRecord ->label(__('Link client (QR)')) ->icon('heroicon-m-qr-code') ->color('primary') - ->modalHeading(fn () => 'Tracking client — WO #' . $this->record->number) + ->modalHeading(fn () => __('Tracking client') . ' — WO #' . $this->record->number) ->modalSubmitAction(false) - ->modalCancelActionLabel('Închide') + ->modalCancelActionLabel(__('Închide')) + ->modalWidth('lg') ->modalContent(fn () => view('filament.tenant.tracking-qr', [ 'wo' => $this->record, ])), diff --git a/lang/en.json b/lang/en.json index cb502ea..255f792 100644 --- a/lang/en.json +++ b/lang/en.json @@ -560,7 +560,7 @@ "Deschide fișa": "Open order", "Deschide fișa pentru aprobare lucrare/piesă.": "Open the order to approve work/part.", "Deschide tenantul": "Deschide tenantul", - "Deschide →": "Deschide →", + "Deschide →": "Open →", "Deschis": "Opened", "Deschis la": "Opened at", "Descrescător": "Descending", @@ -580,7 +580,7 @@ "Dezactivează 2FA pentru acest utilizator. Va trebui să re-configureze TOTP la următoarea autentificare.": "Dezactivează 2FA pentru acest utilizator. Va trebui să re-configureze TOTP la următoarea autentificare.", "Diagnosis": "Diagnosis", "Diagnostic": "Diagnostic", - "Diagnostic AI bazat pe plângerea clientului": "AI diagnosis based on client complaint", + "Diagnostic AI bazat pe plângerea clientului": "AI diagnosis based on the client complaint", "Diagnosticare": "Diagnosis", "Diagnoza": "Diagnosis", "Diagnoză": "Diagnosis", @@ -815,6 +815,7 @@ "Importă lead-uri direct din Lead Ads forms.": "Import leads directly from Lead Ads forms.", "Inactiv": "Inactive", "Inactive": "Inactive", + "Info & antet": "Info & header", "Infopanel": "Dashboard", "Informația de bază — click pe titlul secțiunilor de mai jos pentru detalii.": "Basic information — click on the section titles below for details.", "Informație": "Info", @@ -882,7 +883,7 @@ "Linia nu mai necesită aprobare.": "Line no longer needs approval.", "Linii": "Linii", "Link": "Link", - "Link client (QR)": "Link client (QR)", + "Link client (QR)": "Client link (QR)", "Link tracking": "Tracking link", "Linkul expiră în 60 de minute. Dacă nu ai cerut tu acest reset, ignoră emailul — contul tău e în siguranță.": "Linkul expiră în 60 de minute. Dacă nu ai cerut tu acest reset, ignoră emailul — contul tău e în siguranță.", "Linkul expiră în 7 zile. Dacă nu te aștepți la această invitație, ignoră acest mesaj.\n\nMulțumim,": "Linkul expiră în 7 zile. Dacă nu te aștepți la această invitație, ignoră acest mesaj.\n\nMulțumim,", @@ -1779,6 +1780,7 @@ "Toți mecanicii": "All mechanics", "Toți utilizatorii": "All users", "Tracking & ETA": "Tracking & ETA", + "Tracking client": "Client tracking", "Tracțiune": "Drive", "Trage fișierul aici": "Drop file here", "Transfer": "Transfer", @@ -1794,7 +1796,7 @@ "Trimite": "Send", "Trimite SMS": "Send SMS", "Trimite SMS-uri prin gateway local (Moldcell/Orange API).": "Trimite SMS-uri prin gateway local (Moldcell/Orange API).", - "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.": "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.", + "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.": "Send this link to the client — they see the order status, ETA and photos without logging in.", "Trimite email": "Send email", "Trimite emailul standard de resetare a parolei către clientul magazinului.": "Trimite emailul standard de resetare a parolei către clientul magazinului.", "Trimite factură": "Send invoice", @@ -2000,6 +2002,7 @@ "lucrare terți": "subcontract job", "lucrări caroserie": "bodyshop jobs", "lucrări terți": "subcontract jobs", + "manopere": "labors", "mașini": "vehicles", "mașină": "vehicle", "mediu": "medium", @@ -2011,7 +2014,7 @@ "normă": "labor", "null = fără trial": "null = fără trial", "pentru a alege": "to select", - "piese": "piese", + "piese": "parts", "piesă": "piesă", "pk_test_...": "pk_test_...", "plan": "plan", @@ -2202,6 +2205,7 @@ "Înregistrează seturile de anvelope ale clienților și gestionează depozitarea sezonieră (tire hotel). Urmărește uzura, TPMS și locația în depozit.": "Înregistrează seturile de anvelope ale clienților și gestionează depozitarea sezonieră (tire hotel). Urmărește uzura, TPMS și locația în depozit.", "Întreabă-mă orice — diagnostic, sumar, sugestii, redactare mesaje către clienți...": "Întreabă-mă orice — diagnostic, sumar, sugestii, redactare mesaje către clienți...", "Șabloane servicii": "Service templates", + "Șablon aplicat": "Template applied", "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese": "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese", "Șablon serviciu": "Service template", "Șterge": "Delete", diff --git a/lang/ru.json b/lang/ru.json index e41dfe7..d90786f 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -560,7 +560,7 @@ "Deschide fișa": "Открыть наряд", "Deschide fișa pentru aprobare lucrare/piesă.": "Откройте наряд для одобрения работы/запчасти.", "Deschide tenantul": "Deschide tenantul", - "Deschide →": "Deschide →", + "Deschide →": "Открыть →", "Deschis": "Открыт", "Deschis la": "Открыт", "Descrescător": "По убыванию", @@ -815,6 +815,7 @@ "Importă lead-uri direct din Lead Ads forms.": "Импорт лидов напрямую из форм Lead Ads.", "Inactiv": "Неактивно", "Inactive": "Неактивный", + "Info & antet": "Инфо и шапка", "Infopanel": "Инфопанель", "Informația de bază — click pe titlul secțiunilor de mai jos pentru detalii.": "Основная информация — нажмите на заголовок секции ниже для деталей.", "Informație": "Информация", @@ -881,8 +882,8 @@ "Limite": "Limite", "Linia nu mai necesită aprobare.": "Строка больше не требует одобрения.", "Linii": "Linii", - "Link": "Link", - "Link client (QR)": "Link client (QR)", + "Link": "Ссылка", + "Link client (QR)": "Ссылка клиенту (QR)", "Link tracking": "Ссылка отслеживания", "Linkul expiră în 60 de minute. Dacă nu ai cerut tu acest reset, ignoră emailul — contul tău e în siguranță.": "Linkul expiră în 60 de minute. Dacă nu ai cerut tu acest reset, ignoră emailul — contul tău e în siguranță.", "Linkul expiră în 7 zile. Dacă nu te aștepți la această invitație, ignoră acest mesaj.\n\nMulțumim,": "Linkul expiră în 7 zile. Dacă nu te aștepți la această invitație, ignoră acest mesaj.\n\nMulțumim,", @@ -1779,6 +1780,7 @@ "Toți mecanicii": "Все механики", "Toți utilizatorii": "Все пользователи", "Tracking & ETA": "Отслеживание и ETA", + "Tracking client": "Отслеживание клиента", "Tracțiune": "Привод", "Trage fișierul aici": "Перетащите файл сюда", "Transfer": "Перевод", @@ -1794,7 +1796,7 @@ "Trimite": "Отправить", "Trimite SMS": "Отправить SMS", "Trimite SMS-uri prin gateway local (Moldcell/Orange API).": "Trimite SMS-uri prin gateway local (Moldcell/Orange API).", - "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.": "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.", + "Trimite acest link clientului — vede statusul fișei, ETA și fotografiile fără să se logheze.": "Отправьте эту ссылку клиенту — он увидит статус наряда, ETA и фото без входа в систему.", "Trimite email": "Отправить email", "Trimite emailul standard de resetare a parolei către clientul magazinului.": "Trimite emailul standard de resetare a parolei către clientul magazinului.", "Trimite factură": "Отправить счёт", @@ -2000,6 +2002,7 @@ "lucrare terți": "работа субподрядчика", "lucrări caroserie": "кузовные работы", "lucrări terți": "работы субподрядчиков", + "manopere": "работ", "mașini": "машины", "mașină": "машина", "mediu": "средняя", @@ -2011,7 +2014,7 @@ "normă": "норма", "null = fără trial": "null = fără trial", "pentru a alege": "чтобы выбрать", - "piese": "piese", + "piese": "запчастей", "piesă": "piesă", "pk_test_...": "pk_test_...", "plan": "plan", @@ -2202,6 +2205,7 @@ "Înregistrează seturile de anvelope ale clienților și gestionează depozitarea sezonieră (tire hotel). Urmărește uzura, TPMS și locația în depozit.": "Înregistrează seturile de anvelope ale clienților și gestionează depozitarea sezonieră (tire hotel). Urmărește uzura, TPMS și locația în depozit.", "Întreabă-mă orice — diagnostic, sumar, sugestii, redactare mesaje către clienți...": "Întreabă-mă orice — diagnostic, sumar, sugestii, redactare mesaje către clienți...", "Șabloane servicii": "Шаблоны услуг", + "Șablon aplicat": "Шаблон применён", "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese": "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese", "Șablon serviciu": "Шаблон услуги", "Șterge": "Удалить",