i18n(work-order-edit): translate tab, tracking-link modal + widen for QR

- 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) <noreply@anthropic.com>
This commit is contained in:
2026-07-16 07:35:56 +00:00
parent ec25a351ad
commit e4e63a3a09
3 changed files with 24 additions and 15 deletions
@@ -20,7 +20,7 @@ class EditWorkOrder extends EditRecord
public function getContentTabLabel(): ?string public function getContentTabLabel(): ?string
{ {
return 'ⓘ Info & antet'; return 'ⓘ ' . __('Info & antet');
} }
public function getContentTabPosition(): ?\Filament\Resources\Pages\Enums\ContentTabPosition 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); $r = app(\App\Services\ServiceComposer::class)->applyTemplate($this->record, $template);
$this->fillForm(); $this->fillForm();
\Filament\Notifications\Notification::make() \Filament\Notifications\Notification::make()
->title("Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese") ->title(__('Șablon aplicat') . ": {$r['labor']} " . __('manopere') . ", {$r['parts']} " . __('piese'))
->success()->send(); ->success()->send();
}), }),
Actions\Action::make('ai_diagnose') Actions\Action::make('ai_diagnose')
@@ -59,7 +59,7 @@ class EditWorkOrder extends EditRecord
->visible(fn () => ! empty($this->record->complaint)) ->visible(fn () => ! empty($this->record->complaint))
->modalHeading(__('Diagnostic AI bazat pe plângerea clientului')) ->modalHeading(__('Diagnostic AI bazat pe plângerea clientului'))
->modalSubmitAction(false) ->modalSubmitAction(false)
->modalCancelActionLabel('Închide') ->modalCancelActionLabel(__('Închide'))
->modalContent(function () { ->modalContent(function () {
[$reply, $meta] = app(\App\Services\Ai\AiAssistantService::class) [$reply, $meta] = app(\App\Services\Ai\AiAssistantService::class)
->suggestDiagnosis($this->record); ->suggestDiagnosis($this->record);
@@ -69,9 +69,10 @@ class EditWorkOrder extends EditRecord
->label(__('Link client (QR)')) ->label(__('Link client (QR)'))
->icon('heroicon-m-qr-code') ->icon('heroicon-m-qr-code')
->color('primary') ->color('primary')
->modalHeading(fn () => 'Tracking client — WO #' . $this->record->number) ->modalHeading(fn () => __('Tracking client') . ' — WO #' . $this->record->number)
->modalSubmitAction(false) ->modalSubmitAction(false)
->modalCancelActionLabel('Închide') ->modalCancelActionLabel(__('Închide'))
->modalWidth('lg')
->modalContent(fn () => view('filament.tenant.tracking-qr', [ ->modalContent(fn () => view('filament.tenant.tracking-qr', [
'wo' => $this->record, 'wo' => $this->record,
])), ])),
+9 -5
View File
@@ -560,7 +560,7 @@
"Deschide fișa": "Open order", "Deschide fișa": "Open order",
"Deschide fișa pentru aprobare lucrare/piesă.": "Open the order to approve work/part.", "Deschide fișa pentru aprobare lucrare/piesă.": "Open the order to approve work/part.",
"Deschide tenantul": "Deschide tenantul", "Deschide tenantul": "Deschide tenantul",
"Deschide →": "Deschide →", "Deschide →": "Open →",
"Deschis": "Opened", "Deschis": "Opened",
"Deschis la": "Opened at", "Deschis la": "Opened at",
"Descrescător": "Descending", "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.", "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", "Diagnosis": "Diagnosis",
"Diagnostic": "Diagnostic", "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", "Diagnosticare": "Diagnosis",
"Diagnoza": "Diagnosis", "Diagnoza": "Diagnosis",
"Diagnoză": "Diagnosis", "Diagnoză": "Diagnosis",
@@ -815,6 +815,7 @@
"Importă lead-uri direct din Lead Ads forms.": "Import leads directly from Lead Ads forms.", "Importă lead-uri direct din Lead Ads forms.": "Import leads directly from Lead Ads forms.",
"Inactiv": "Inactive", "Inactiv": "Inactive",
"Inactive": "Inactive", "Inactive": "Inactive",
"Info & antet": "Info & header",
"Infopanel": "Dashboard", "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ț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", "Informație": "Info",
@@ -882,7 +883,7 @@
"Linia nu mai necesită aprobare.": "Line no longer needs approval.", "Linia nu mai necesită aprobare.": "Line no longer needs approval.",
"Linii": "Linii", "Linii": "Linii",
"Link": "Link", "Link": "Link",
"Link client (QR)": "Link client (QR)", "Link client (QR)": "Client link (QR)",
"Link tracking": "Tracking link", "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 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,", "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 mecanicii": "All mechanics",
"Toți utilizatorii": "All users", "Toți utilizatorii": "All users",
"Tracking & ETA": "Tracking & ETA", "Tracking & ETA": "Tracking & ETA",
"Tracking client": "Client tracking",
"Tracțiune": "Drive", "Tracțiune": "Drive",
"Trage fișierul aici": "Drop file here", "Trage fișierul aici": "Drop file here",
"Transfer": "Transfer", "Transfer": "Transfer",
@@ -1794,7 +1796,7 @@
"Trimite": "Send", "Trimite": "Send",
"Trimite SMS": "Send SMS", "Trimite SMS": "Send SMS",
"Trimite SMS-uri prin gateway local (Moldcell/Orange API).": "Trimite SMS-uri prin gateway local (Moldcell/Orange API).", "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 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 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", "Trimite factură": "Send invoice",
@@ -2000,6 +2002,7 @@
"lucrare terți": "subcontract job", "lucrare terți": "subcontract job",
"lucrări caroserie": "bodyshop jobs", "lucrări caroserie": "bodyshop jobs",
"lucrări terți": "subcontract jobs", "lucrări terți": "subcontract jobs",
"manopere": "labors",
"mașini": "vehicles", "mașini": "vehicles",
"mașină": "vehicle", "mașină": "vehicle",
"mediu": "medium", "mediu": "medium",
@@ -2011,7 +2014,7 @@
"normă": "labor", "normă": "labor",
"null = fără trial": "null = fără trial", "null = fără trial": "null = fără trial",
"pentru a alege": "to select", "pentru a alege": "to select",
"piese": "piese", "piese": "parts",
"piesă": "piesă", "piesă": "piesă",
"pk_test_...": "pk_test_...", "pk_test_...": "pk_test_...",
"plan": "plan", "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.", "Î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...", "Î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", "Ș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 aplicat: {$r['labor']} manopere, {$r['parts']} piese": "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese",
"Șablon serviciu": "Service template", "Șablon serviciu": "Service template",
"Șterge": "Delete", "Șterge": "Delete",
+9 -5
View File
@@ -560,7 +560,7 @@
"Deschide fișa": "Открыть наряд", "Deschide fișa": "Открыть наряд",
"Deschide fișa pentru aprobare lucrare/piesă.": "Откройте наряд для одобрения работы/запчасти.", "Deschide fișa pentru aprobare lucrare/piesă.": "Откройте наряд для одобрения работы/запчасти.",
"Deschide tenantul": "Deschide tenantul", "Deschide tenantul": "Deschide tenantul",
"Deschide →": "Deschide →", "Deschide →": "Открыть →",
"Deschis": "Открыт", "Deschis": "Открыт",
"Deschis la": "Открыт", "Deschis la": "Открыт",
"Descrescător": "По убыванию", "Descrescător": "По убыванию",
@@ -815,6 +815,7 @@
"Importă lead-uri direct din Lead Ads forms.": "Импорт лидов напрямую из форм Lead Ads.", "Importă lead-uri direct din Lead Ads forms.": "Импорт лидов напрямую из форм Lead Ads.",
"Inactiv": "Неактивно", "Inactiv": "Неактивно",
"Inactive": "Неактивный", "Inactive": "Неактивный",
"Info & antet": "Инфо и шапка",
"Infopanel": "Инфопанель", "Infopanel": "Инфопанель",
"Informația de bază — click pe titlul secțiunilor de mai jos pentru detalii.": "Основная информация — нажмите на заголовок секции ниже для деталей.", "Informația de bază — click pe titlul secțiunilor de mai jos pentru detalii.": "Основная информация — нажмите на заголовок секции ниже для деталей.",
"Informație": "Информация", "Informație": "Информация",
@@ -881,8 +882,8 @@
"Limite": "Limite", "Limite": "Limite",
"Linia nu mai necesită aprobare.": "Строка больше не требует одобрения.", "Linia nu mai necesită aprobare.": "Строка больше не требует одобрения.",
"Linii": "Linii", "Linii": "Linii",
"Link": "Link", "Link": "Ссылка",
"Link client (QR)": "Link client (QR)", "Link client (QR)": "Ссылка клиенту (QR)",
"Link tracking": "Ссылка отслеживания", "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 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,", "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 mecanicii": "Все механики",
"Toți utilizatorii": "Все пользователи", "Toți utilizatorii": "Все пользователи",
"Tracking & ETA": "Отслеживание и ETA", "Tracking & ETA": "Отслеживание и ETA",
"Tracking client": "Отслеживание клиента",
"Tracțiune": "Привод", "Tracțiune": "Привод",
"Trage fișierul aici": "Перетащите файл сюда", "Trage fișierul aici": "Перетащите файл сюда",
"Transfer": "Перевод", "Transfer": "Перевод",
@@ -1794,7 +1796,7 @@
"Trimite": "Отправить", "Trimite": "Отправить",
"Trimite SMS": "Отправить SMS", "Trimite SMS": "Отправить SMS",
"Trimite SMS-uri prin gateway local (Moldcell/Orange API).": "Trimite SMS-uri prin gateway local (Moldcell/Orange API).", "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 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 emailul standard de resetare a parolei către clientul magazinului.": "Trimite emailul standard de resetare a parolei către clientul magazinului.",
"Trimite factură": "Отправить счёт", "Trimite factură": "Отправить счёт",
@@ -2000,6 +2002,7 @@
"lucrare terți": "работа субподрядчика", "lucrare terți": "работа субподрядчика",
"lucrări caroserie": "кузовные работы", "lucrări caroserie": "кузовные работы",
"lucrări terți": "работы субподрядчиков", "lucrări terți": "работы субподрядчиков",
"manopere": "работ",
"mașini": "машины", "mașini": "машины",
"mașină": "машина", "mașină": "машина",
"mediu": "средняя", "mediu": "средняя",
@@ -2011,7 +2014,7 @@
"normă": "норма", "normă": "норма",
"null = fără trial": "null = fără trial", "null = fără trial": "null = fără trial",
"pentru a alege": "чтобы выбрать", "pentru a alege": "чтобы выбрать",
"piese": "piese", "piese": "запчастей",
"piesă": "piesă", "piesă": "piesă",
"pk_test_...": "pk_test_...", "pk_test_...": "pk_test_...",
"plan": "plan", "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.", "Î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...", "Î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": "Шаблоны услуг", "Șabloane servicii": "Шаблоны услуг",
"Șablon aplicat": "Шаблон применён",
"Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese": "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese", "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese": "Șablon aplicat: {$r['labor']} manopere, {$r['parts']} piese",
"Șablon serviciu": "Шаблон услуги", "Șablon serviciu": "Шаблон услуги",
"Șterge": "Удалить", "Șterge": "Удалить",