From a6f21762fc665a2edc43a20e44f79ffa60f5368c Mon Sep 17 00:00:00 2001 From: Vasyka Date: Sat, 18 Jul 2026 11:33:52 +0000 Subject: [PATCH] i18n(settings): fix currency I18n::opts + push notification + closing-quote strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Currency Select ->options() had 4 raw entries (MDL/EUR/USD/UAH) and 2 wrapped (RON/RUB); consolidated all 6 under I18n::opts() - Push notification title 'Trimis pe N dispozitiv(e)' rebuilt with __(':n')-placeholder; empty state + helper now go through __() - Added 4 long helper description keys with the closing „…" Romanian quotation marks (the previous keys were missing the trailing quote and dot; now match Settings.php byte-for-byte) Co-Authored-By: Claude Opus 4.7 (1M context) --- app/Filament/Tenant/Pages/Settings.php | 12 ++++++------ lang/en.json | 16 ++++++++++++---- lang/ru.json | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/Filament/Tenant/Pages/Settings.php b/app/Filament/Tenant/Pages/Settings.php index 2e5e01d..bb3cf49 100644 --- a/app/Filament/Tenant/Pages/Settings.php +++ b/app/Filament/Tenant/Pages/Settings.php @@ -103,14 +103,14 @@ class Settings extends Page ->required(), Forms\Components\Select::make('currency') ->label(__('Monedă')) - ->options([ + ->options(\App\Support\I18n::opts([ 'MDL' => 'MDL — Leu moldovenesc', 'EUR' => 'EUR — Euro', 'USD' => 'USD — US Dollar', - 'RON' => __('RON — Leu românesc'), + 'RON' => 'RON — Leu românesc', 'UAH' => 'UAH — Hryvnia', - 'RUB' => __('RUB — Rublă'), - ]) + 'RUB' => 'RUB — Rublă', + ])) ->required() ->searchable(), Forms\Components\ColorPicker::make('theme_color')->label(__('Culoare brand')), @@ -343,8 +343,8 @@ class Settings extends Page '/app', ); Notification::make() - ->title($r['sent'] > 0 ? "Trimis pe {$r['sent']} dispozitiv(e)" : 'Niciun dispozitiv abonat') - ->body($r['sent'] > 0 ? null : 'Deschide panoul pe telefon și acceptă notificările întâi.') + ->title($r['sent'] > 0 ? __('Trimis pe :n dispozitiv(e)', ['n' => $r['sent']]) : __('Niciun dispozitiv abonat')) + ->body($r['sent'] > 0 ? null : __('Deschide panoul pe telefon și acceptă notificările întâi.')) ->{$r['sent'] > 0 ? 'success' : 'warning'}() ->send(); }), diff --git a/lang/en.json b/lang/en.json index 934ebb5..27e875c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -75,7 +75,7 @@ "Activează Stripe": "Enable Stripe", "Activează coeficienții de preț VIP pe fișele acestui client.": "Enables VIP pricing coefficients on this client's orders.", "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat": "Enables the public shop at .service.mir.md/shop. Parts appear only if marked \"Published\".", - "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".", + "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Enables the public shop at .service.mir.md/shop. Parts appear only if marked \"Published\".", "Activează plata prin transfer": "Enable bank transfer", "Activi": "Active", "Activitate recentă": "Recent activity", @@ -510,7 +510,7 @@ "Creează comandă de aprovizionare": "Create purchase order", "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.": "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.", "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook": "Create a bot with @BotFather, paste the token here and click \"Set webhook\".", - "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.", + "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Create a bot with @BotFather, paste the token here and click \"Set webhook\". Clients write to the bot, share their phone, and the code auto-links to their order.", "Crescător": "Ascending", "Critic": "Critical", "Cronologic": "Chronologically", @@ -621,6 +621,7 @@ "Deschide fișa": "Open order", "Deschide fișa pentru aprobare lucrare/piesă.": "Open the order to approve work/part.", "Deschide fișă nouă": "Open new order", + "Deschide panoul pe telefon și acceptă notificările întâi.": "Open the panel on the phone and accept notifications first.", "Deschide tenantul": "Deschide tenantul", "Deschide →": "Open →", "Deschis": "Opened", @@ -690,6 +691,7 @@ "E timpul să schimbi anvelopele ": "Time to change tires ", "EJk...": "EJk...", "ETA": "ETA", + "EUR — Euro": "EUR — Euro", "Echipament defect": "Broken equipment", "Edit": "Edit", "Editare": "Edit", @@ -1036,6 +1038,7 @@ "MD00 AG00 0000 ...": "MD00 AG00 0000 ...", "MDL pipeline total": "MDL pipeline total", "MDL închise azi": "MDL closed today", + "MDL — Leu moldovenesc": "MDL — Moldovan leu", "MRR realizat": "Realized MRR", "Magazin": "Magazin", "Magazin activ": "Shop enabled", @@ -1196,6 +1199,7 @@ "Niciun coeficient": "No coefficients", "Niciun coeficient contextual nu se aplică (preț de bază).": "No contextual coefficient applies (base price).", "Niciun depozit": "No warehouses", + "Niciun dispozitiv abonat": "No subscribed devices", "Niciun istoric": "No history", "Niciun lead.": "No leads.", "Niciun lot înregistrat": "No batches recorded", @@ -1276,7 +1280,7 @@ "Ocupat": "Busy", "Ok": "OK", "On = arată „Bază salariu: X · marjă Y%": "On = show \"Salary base: X · margin Y%\"", - "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).": "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).", + "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).": "On = show \"Salary base: X · margin Y%\" under Total in the Labor table. Off = only Total (useful when reviewing an order with the client present).", "On = din prețul manoperelor se scade marja pentru salariu. Off = manopere la cost (salariu pe Total integral).": "On = margin is deducted from labor price for salary. Off = labor at cost (salary from full Total).", "Onboarded": "Onboarded", "Only trashed": "Only trashed", @@ -1475,7 +1479,7 @@ "Prioritate": "Priority", "Privat": "Private", "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin": "Default percentage applied to labor. Deducted from the labor price to determine the mechanic's salary base. Visible only to roles with the \"finance.view_internal_margin\" permission.", - "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".": "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".", + "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".": "Default percentage applied to labor. Deducted from the labor price to determine the mechanic's salary base. Visible only to roles with the \"finance.view_internal_margin\" permission.", "Procentaj": "Markup", "Procesare carduri online. Funcționează în 30+ țări. Comision ~2.9% + 0.30€/tranzacție.": "Procesare carduri online. Funcționează în 30+ țări. Comision ~2.9% + 0.30€/tranzacție.", "Procesator de plăți Moldova. Acceptă carduri MAIB, MICB, Victoriabank, OTP, MD Cash, Bitcoin, e-money. Comision negociabil ~1.8-2.5%.": "Procesator de plăți Moldova. Acceptă carduri MAIB, MICB, Victoriabank, OTP, MD Cash, Bitcoin, e-money. Comision negociabil ~1.8-2.5%.", @@ -1871,6 +1875,7 @@ "Terminal": "Terminal", "Termină": "Finish", "Terț": "Subcontractor", + "Test AutoCRM": "AutoCRM test", "Test notificare push": "Test push notification", "Testează bot Telegram": "Test Telegram bot", "Theme color": "Theme color", @@ -1948,6 +1953,7 @@ "Trashed": "Trashed", "Trial expiră la": "Trial expires at", "Trimis": "Sent", + "Trimis pe :n dispozitiv(e)": "Sent to :n device(s)", "Trimis · fără răspuns": "Sent · no response", "Trimite": "Send", "Trimite SMS": "Send SMS", @@ -1966,8 +1972,10 @@ "Trimite reset parolă": "Send password reset", "Turbo": "Turbo", "Type": "Type", + "UAH — Hryvnia": "UAH — Hryvnia", "UM": "Unit", "URL secret pentru POST direct cu lead-uri din site-ul tău.": "Secret URL for direct POST with leads from your site.", + "USD — US Dollar": "USD — US Dollar", "Ulei": "Oil", "Ultim login": "Last login", "Ultima actualizare": "Last updated", diff --git a/lang/ru.json b/lang/ru.json index 620b27f..8a2e131 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -75,7 +75,7 @@ "Activează Stripe": "Включить Stripe", "Activează coeficienții de preț VIP pe fișele acestui client.": "Активирует VIP-коэффициенты цен на наряды этого клиента.", "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat": "Активирует публичный магазин на .service.mir.md/shop. Запчасти появляются только если отмечены как «Опубликовано».", - "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".", + "Activează magazinul public la .service.mir.md/shop. Piesele apar doar dacă sunt marcate „Publicat\".": "Активирует публичный магазин на .service.mir.md/shop. Запчасти появляются только если отмечены как «Опубликовано».", "Activează plata prin transfer": "Включить оплату переводом", "Activi": "Активные", "Activitate recentă": "Недавняя активность", @@ -510,7 +510,7 @@ "Creează comandă de aprovizionare": "Создать заказ на закупку", "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.": "Creează planuri (ex: Free, Basic, Pro) și atribuie-le companiilor.", "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook": "Создайте бота у @BotFather, вставьте токен здесь и нажмите «Настроить webhook».", - "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.", + "Creează un bot la @BotFather, lipește token-ul aici și apasă „Setează webhook\". Clienții îți scriu la bot, partajează telefonul, iar codul se leagă automat de fișa lor.": "Создайте бота у @BotFather, вставьте токен здесь и нажмите «Настроить webhook». Клиенты пишут боту, делятся номером, и код автоматически связывается с их нарядом.", "Crescător": "По возрастанию", "Critic": "Критическое", "Cronologic": "Хронологически", @@ -621,6 +621,7 @@ "Deschide fișa": "Открыть наряд", "Deschide fișa pentru aprobare lucrare/piesă.": "Откройте наряд для одобрения работы/запчасти.", "Deschide fișă nouă": "Открыть новый наряд", + "Deschide panoul pe telefon și acceptă notificările întâi.": "Сначала откройте панель на телефоне и разрешите уведомления.", "Deschide tenantul": "Deschide tenantul", "Deschide →": "Открыть →", "Deschis": "Открыт", @@ -690,6 +691,7 @@ "E timpul să schimbi anvelopele ": "Пора менять шины ", "EJk...": "EJk...", "ETA": "ETA", + "EUR — Euro": "EUR — Евро", "Echipament defect": "Неисправное оборудование", "Edit": "Изменить", "Editare": "Изменить", @@ -1036,6 +1038,7 @@ "MD00 AG00 0000 ...": "MD00 AG00 0000 ...", "MDL pipeline total": "MDL всего в воронке", "MDL închise azi": "MDL закрыто сегодня", + "MDL — Leu moldovenesc": "MDL — Молдавский лей", "MRR realizat": "Реализованный MRR", "Magazin": "Magazin", "Magazin activ": "Магазин активен", @@ -1196,6 +1199,7 @@ "Niciun coeficient": "Нет коэффициентов", "Niciun coeficient contextual nu se aplică (preț de bază).": "Контекстные коэффициенты не применяются (базовая цена).", "Niciun depozit": "Нет складов", + "Niciun dispozitiv abonat": "Нет подписанных устройств", "Niciun istoric": "Нет истории", "Niciun lead.": "Нет заявок.", "Niciun lot înregistrat": "Партии не зарегистрированы", @@ -1276,7 +1280,7 @@ "Ocupat": "Занято", "Ok": "Ок", "On = arată „Bază salariu: X · marjă Y%": "On = показывать «База зарплаты: X · маржа Y%»", - "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).": "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).", + "On = arată „Bază salariu: X · marjă Y%\" sub Total în tabelul Manopere. Off = doar Total (util când review-uiești o Fișă cu clientul de față).": "On = показывать «База зарплаты: X · маржа Y%» под Итого в таблице Работы. Off = только Итого (удобно при просмотре наряда с клиентом).", "On = din prețul manoperelor se scade marja pentru salariu. Off = manopere la cost (salariu pe Total integral).": "On = из цены работ вычитается маржа для зарплаты. Off = работы по себестоимости (зарплата от полной суммы).", "Onboarded": "Onboarded", "Only trashed": "Только удалённые", @@ -1475,7 +1479,7 @@ "Prioritate": "Приоритет", "Privat": "Приватно", "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin": "Процент по умолчанию для работ. Вычитается из цены работы для определения базы зарплаты механика. Виден только ролям с правом «finance.view_internal_margin».", - "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".": "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".", + "Procent implicit aplicat la manopere. Se scade din prețul de manoperă pentru a determina baza salariului mecanicului. Vizibilă doar rolurilor cu drept „finance.view_internal_margin\".": "Процент по умолчанию для работ. Вычитается из цены работы для определения базы зарплаты механика. Виден только ролям с правом «finance.view_internal_margin».", "Procentaj": "Наценка", "Procesare carduri online. Funcționează în 30+ țări. Comision ~2.9% + 0.30€/tranzacție.": "Procesare carduri online. Funcționează în 30+ țări. Comision ~2.9% + 0.30€/tranzacție.", "Procesator de plăți Moldova. Acceptă carduri MAIB, MICB, Victoriabank, OTP, MD Cash, Bitcoin, e-money. Comision negociabil ~1.8-2.5%.": "Procesator de plăți Moldova. Acceptă carduri MAIB, MICB, Victoriabank, OTP, MD Cash, Bitcoin, e-money. Comision negociabil ~1.8-2.5%.", @@ -1871,6 +1875,7 @@ "Terminal": "Терминал", "Termină": "Завершить", "Terț": "Субподрядчик", + "Test AutoCRM": "Тест AutoCRM", "Test notificare push": "Тест push-уведомления", "Testează bot Telegram": "Тест Telegram-бота", "Theme color": "Theme color", @@ -1948,6 +1953,7 @@ "Trashed": "Удалённые", "Trial expiră la": "Пробный истекает", "Trimis": "Отправлено", + "Trimis pe :n dispozitiv(e)": "Отправлено на :n устройств", "Trimis · fără răspuns": "Отправлено · без ответа", "Trimite": "Отправить", "Trimite SMS": "Отправить SMS", @@ -1966,8 +1972,10 @@ "Trimite reset parolă": "Отправить сброс пароля", "Turbo": "Турбина", "Type": "Тип", + "UAH — Hryvnia": "UAH — Гривна", "UM": "Ед.", "URL secret pentru POST direct cu lead-uri din site-ul tău.": "Секретный URL для POST-запросов с заявками с вашего сайта.", + "USD — US Dollar": "USD — Доллар США", "Ulei": "Масло", "Ultim login": "Последний вход", "Ultima actualizare": "Последнее обновление",