feat: i18n on Filament admin sidebar — 54 resources/pages translated

User screenshots showed the tenant admin panel (Filament) had sidebar
labels stuck in Romanian even when switching to Russian: 'Cereri',
'Calendar vizual', 'Atelierul meu', 'KPI mecanici', 'Fișe lucru',
'Norme-ore', 'Tehnicieni', 'Șabloane servicii', 'Depozite', 'Scaner',
'Depozit', 'VIN-căutare', 'Furnizori', 'Achiziții', 'Procentaj',
'Coeficienți preț', plus all group headers.

Root cause: every Filament Resource and Page had static properties
'protected static ?string $navigationLabel = "Fișe lucru"' — string
literals baked into class definitions. Static properties don't run
through the translation layer.

Fix in two parts:

1. New translation files with 52 label keys + 12 group keys:
   - lang/ro/nav.php — Romanian (identity)
   - lang/ru/nav.php — full Russian translations (Заказ-наряды,
     Автомобили, Клиенты, Календарь, Моя мастерская, Механики KPI,
     Настройки, etc.)
   - lang/en/nav.php — English translations (Work orders, Vehicles,
     Clients, Calendar, My workshop, Mechanic KPI, Settings, etc.)

   Keyed by the Romanian original so lookups map 1:1 —
   'nav.label.Fișe lucru' returns 'Заказ-наряды' in RU, 'Work orders'
   in EN, 'Fișe lucru' in RO.

2. Python transformer converted 54 files:
   - 33 Filament Tenant Resources
   - 15 Filament Tenant Pages
   - 4 Filament Central Resources
   - 1 Filament Central Page
   - 1 Widget

   Each 'protected static ?string $navigationLabel = "X";' became
   'public static function getNavigationLabel(): string { return
   __("nav.label.X"); }'. Same treatment for $navigationGroup.

Cleanup: 6 resources already had manually-added getNavigationLabel
methods from an earlier partial effort — those used flat JSON keys
(__("Cereri")) that never resolved. Deduped so only the nav.label.*
version remains.

Untouched (intentional):
- $modelLabel / $pluralModelLabel (used in breadcrumbs and headings —
  still hardcoded, next tier of work)
- Section titles, column headers, form field labels (medium priority)
- $navigationSort (numeric, no translation needed)
- $navigationIcon (icon reference)

Suite: 306 passed (853 assertions). Unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-13 20:41:55 +00:00
parent 4f06223d2b
commit 78ff8d4b43
57 changed files with 630 additions and 167 deletions
@@ -14,7 +14,10 @@ class PaymentSettings extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card';
protected static ?string $navigationLabel = 'Setări plăți'; public static function getNavigationLabel(): string
{
return __('nav.label.Setări plăți');
}
protected static ?string $title = 'Integrări de plată'; protected static ?string $title = 'Integrări de plată';
@@ -19,7 +19,10 @@ class CompanyResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-office-2'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-office-2';
protected static ?string $navigationLabel = 'Companii'; public static function getNavigationLabel(): string
{
return __('nav.label.Companii');
}
protected static ?string $modelLabel = 'companie'; protected static ?string $modelLabel = 'companie';
@@ -19,7 +19,10 @@ class PlanResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-stack'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationLabel = 'Planuri'; public static function getNavigationLabel(): string
{
return __('nav.label.Planuri');
}
protected static ?string $modelLabel = 'plan'; protected static ?string $modelLabel = 'plan';
@@ -23,7 +23,10 @@ class SubscriptionResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-credit-card';
protected static ?string $navigationLabel = 'Facturi & abonamente'; public static function getNavigationLabel(): string
{
return __('nav.label.Facturi & abonamente');
}
protected static ?string $modelLabel = 'factură'; protected static ?string $modelLabel = 'factură';
@@ -20,7 +20,10 @@ class SuperAdminResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-users'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-users';
protected static ?string $navigationLabel = 'Utilizatori'; public static function getNavigationLabel(): string
{
return __('nav.label.Utilizatori');
}
protected static ?string $modelLabel = 'utilizator'; protected static ?string $modelLabel = 'utilizator';
+8 -2
View File
@@ -12,9 +12,15 @@ class AiAssistant extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-sparkles'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-sparkles';
protected static ?string $navigationLabel = 'Asistent AI'; public static function getNavigationLabel(): string
{
return __('nav.label.Asistent AI');
}
protected static string|\UnitEnum|null $navigationGroup = 'Analiză'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Analiză');
}
protected static ?int $navigationSort = 71; protected static ?int $navigationSort = 71;
+8 -2
View File
@@ -11,9 +11,15 @@ class ApiTokens extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-key'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-key';
protected static ?string $navigationLabel = 'API Tokens'; public static function getNavigationLabel(): string
{
return __('nav.label.API Tokens');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?int $navigationSort = 95; protected static ?int $navigationSort = 95;
+8 -2
View File
@@ -12,9 +12,15 @@ class Backup extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-archive-box-arrow-down'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-archive-box-arrow-down';
protected static ?string $navigationLabel = 'Backup'; public static function getNavigationLabel(): string
{
return __('nav.label.Backup');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?int $navigationSort = 96; protected static ?int $navigationSort = 96;
+8 -2
View File
@@ -15,9 +15,15 @@ class CalendarBoard extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-calendar-days'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-calendar-days';
protected static ?string $navigationLabel = 'Calendar vizual'; public static function getNavigationLabel(): string
{
return __('nav.label.Calendar vizual');
}
protected static string|\UnitEnum|null $navigationGroup = 'CRM'; public static function getNavigationGroup(): ?string
{
return __('nav.group.CRM');
}
protected static ?int $navigationSort = 8; protected static ?int $navigationSort = 8;
@@ -15,9 +15,15 @@ class ExcelImportWizard extends Page
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-up-tray'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-up-tray';
protected static ?string $navigationLabel = 'Import factură Excel'; public static function getNavigationLabel(): string
{
return __('nav.label.Import factură Excel');
}
protected static string|\UnitEnum|null $navigationGroup = 'Stoc & Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Stoc & Finanțe');
}
protected static ?int $navigationSort = 65; protected static ?int $navigationSort = 65;
+8 -2
View File
@@ -14,9 +14,15 @@ class Finance extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-currency-dollar'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-currency-dollar';
protected static ?string $navigationLabel = 'Finanțe (consolidat)'; public static function getNavigationLabel(): string
{
return __('nav.label.Finanțe (consolidat)');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?int $navigationSort = 49; protected static ?int $navigationSort = 49;
+8 -2
View File
@@ -10,9 +10,15 @@ class Integrations extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-puzzle-piece'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-puzzle-piece';
protected static ?string $navigationLabel = 'Integrări'; public static function getNavigationLabel(): string
{
return __('nav.label.Integrări');
}
protected static string|\UnitEnum|null $navigationGroup = 'Marketing'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Marketing');
}
protected static ?int $navigationSort = 63; protected static ?int $navigationSort = 63;
+8 -2
View File
@@ -16,9 +16,15 @@ class MechanicBoard extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench';
protected static ?string $navigationLabel = 'Atelierul meu'; public static function getNavigationLabel(): string
{
return __('nav.label.Atelierul meu');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?int $navigationSort = 25; protected static ?int $navigationSort = 25;
+8 -2
View File
@@ -16,9 +16,15 @@ class MechanicKpi extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chart-bar'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chart-bar';
protected static ?string $navigationLabel = 'KPI mecanici'; public static function getNavigationLabel(): string
{
return __('nav.label.KPI mecanici');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?int $navigationSort = 28; protected static ?int $navigationSort = 28;
+8 -2
View File
@@ -15,9 +15,15 @@ class PipelineBoard extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-funnel'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-funnel';
protected static ?string $navigationLabel = 'Pipeline'; public static function getNavigationLabel(): string
{
return __('nav.label.Pipeline');
}
protected static string|\UnitEnum|null $navigationGroup = 'CRM'; public static function getNavigationGroup(): ?string
{
return __('nav.group.CRM');
}
protected static ?int $navigationSort = 5; protected static ?int $navigationSort = 5;
@@ -11,9 +11,15 @@ class Recommendations extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-light-bulb'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-light-bulb';
protected static ?string $navigationLabel = 'Recomandări'; public static function getNavigationLabel(): string
{
return __('nav.label.Recomandări');
}
protected static string|\UnitEnum|null $navigationGroup = 'Analiză'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Analiză');
}
protected static ?int $navigationSort = 72; protected static ?int $navigationSort = 72;
+8 -2
View File
@@ -18,9 +18,15 @@ class Reports extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chart-bar'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chart-bar';
protected static ?string $navigationLabel = 'Rapoarte'; public static function getNavigationLabel(): string
{
return __('nav.label.Rapoarte');
}
protected static string|\UnitEnum|null $navigationGroup = 'Analiză'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Analiză');
}
protected static ?int $navigationSort = 70; protected static ?int $navigationSort = 70;
+8 -2
View File
@@ -21,9 +21,15 @@ class Scanner extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-qr-code'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-qr-code';
protected static ?string $navigationLabel = 'Scaner'; public static function getNavigationLabel(): string
{
return __('nav.label.Scaner');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?int $navigationSort = 39; protected static ?int $navigationSort = 39;
+8 -2
View File
@@ -15,9 +15,15 @@ class Settings extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cog-6-tooth'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cog-6-tooth';
protected static ?string $navigationLabel = 'Setări'; public static function getNavigationLabel(): string
{
return __('nav.label.Setări');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?int $navigationSort = 90; protected static ?int $navigationSort = 90;
+8 -2
View File
@@ -11,9 +11,15 @@ class VinSearch extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-magnifying-glass'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-magnifying-glass';
protected static ?string $navigationLabel = 'VIN-căutare'; public static function getNavigationLabel(): string
{
return __('nav.label.VIN-căutare');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?int $navigationSort = 41; protected static ?int $navigationSort = 41;
+8 -2
View File
@@ -11,9 +11,15 @@ class Workload extends Page
{ {
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-fire'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-fire';
protected static ?string $navigationLabel = 'Încărcare STO'; public static function getNavigationLabel(): string
{
return __('nav.label.Încărcare STO');
}
protected static string|\UnitEnum|null $navigationGroup = 'Analiză'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Analiză');
}
protected static ?int $navigationSort = 73; protected static ?int $navigationSort = 73;
@@ -16,9 +16,15 @@ class ActivityResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-list-bullet'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-list-bullet';
protected static ?string $navigationLabel = 'Jurnal activitate'; public static function getNavigationLabel(): string
{
return __('nav.label.Jurnal activitate');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?string $modelLabel = 'eveniment'; protected static ?string $modelLabel = 'eveniment';
@@ -22,9 +22,15 @@ class AppointmentResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-calendar-days'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-calendar-days';
protected static ?string $navigationLabel = 'Calendar'; public static function getNavigationLabel(): string
{
return __('nav.label.Calendar');
}
protected static string|\UnitEnum|null $navigationGroup = 'CRM'; public static function getNavigationGroup(): ?string
{
return __('nav.group.CRM');
}
protected static ?string $modelLabel = 'programare'; protected static ?string $modelLabel = 'programare';
@@ -22,9 +22,15 @@ class BodyshopJobResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-paint-brush'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-paint-brush';
protected static ?string $navigationLabel = 'Tinichigerie / Detailing'; public static function getNavigationLabel(): string
{
return __('nav.label.Tinichigerie / Detailing');
}
protected static string|\UnitEnum|null $navigationGroup = 'Tinichigerie'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Tinichigerie');
}
protected static ?string $modelLabel = 'lucrare caroserie'; protected static ?string $modelLabel = 'lucrare caroserie';
@@ -134,17 +140,6 @@ class BodyshopJobResource extends Resource
]; ];
} }
public static function getNavigationLabel(): string
{
return __('Tinichigerie / Detailing');
}
public static function getNavigationGroup(): ?string
{
return __('Tinichigerie');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('lucrare caroserie'); return __('lucrare caroserie');
@@ -19,9 +19,15 @@ class CallResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-phone'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-phone';
protected static ?string $navigationLabel = 'Apeluri'; public static function getNavigationLabel(): string
{
return __('nav.label.Apeluri');
}
protected static string|\UnitEnum|null $navigationGroup = 'Marketing'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Marketing');
}
protected static ?string $modelLabel = 'apel'; protected static ?string $modelLabel = 'apel';
@@ -18,7 +18,10 @@ class ClientResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-users'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-users';
protected static ?string $navigationLabel = 'Clienți'; public static function getNavigationLabel(): string
{
return __('nav.label.Clienți');
}
protected static ?string $modelLabel = 'client'; protected static ?string $modelLabel = 'client';
@@ -22,9 +22,15 @@ class DealResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-funnel'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-funnel';
protected static ?string $navigationLabel = 'Pipeline (tabel)'; public static function getNavigationLabel(): string
{
return __('nav.label.Pipeline (tabel)');
}
protected static string|\UnitEnum|null $navigationGroup = 'CRM'; public static function getNavigationGroup(): ?string
{
return __('nav.group.CRM');
}
public static function shouldRegisterNavigation(): bool public static function shouldRegisterNavigation(): bool
{ {
@@ -19,9 +19,15 @@ class EmployeeProfileResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-identification'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-identification';
protected static ?string $navigationLabel = 'Angajați'; public static function getNavigationLabel(): string
{
return __('nav.label.Angajați');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?string $modelLabel = 'angajat'; protected static ?string $modelLabel = 'angajat';
@@ -19,9 +19,15 @@ class ExpenseResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-trending-down'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-trending-down';
protected static ?string $navigationLabel = 'Cheltuieli'; public static function getNavigationLabel(): string
{
return __('nav.label.Cheltuieli');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?string $modelLabel = 'cheltuială'; protected static ?string $modelLabel = 'cheltuială';
@@ -19,9 +19,15 @@ class LaborResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-clock'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-clock';
protected static ?string $navigationLabel = 'Norme-ore'; public static function getNavigationLabel(): string
{
return __('nav.label.Norme-ore');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?string $modelLabel = 'normă'; protected static ?string $modelLabel = 'normă';
@@ -20,9 +20,15 @@ class LeadResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-inbox-arrow-down'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-inbox-arrow-down';
protected static ?string $navigationLabel = 'Cereri'; public static function getNavigationLabel(): string
{
return __('nav.label.Cereri');
}
protected static string|\UnitEnum|null $navigationGroup = 'CRM'; public static function getNavigationGroup(): ?string
{
return __('nav.group.CRM');
}
protected static ?string $modelLabel = 'cerere'; protected static ?string $modelLabel = 'cerere';
@@ -18,9 +18,15 @@ class MarketingChannelResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-megaphone'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-megaphone';
protected static ?string $navigationLabel = 'Canale marketing'; public static function getNavigationLabel(): string
{
return __('nav.label.Canale marketing');
}
protected static string|\UnitEnum|null $navigationGroup = 'Marketing'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Marketing');
}
protected static ?string $modelLabel = 'canal'; protected static ?string $modelLabel = 'canal';
@@ -21,9 +21,15 @@ class MarkupRuleResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-percent-badge'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-percent-badge';
protected static ?string $navigationLabel = 'Procentaj'; public static function getNavigationLabel(): string
{
return __('nav.label.Procentaj');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'regulă'; protected static ?string $modelLabel = 'regulă';
@@ -23,9 +23,15 @@ class MasterResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench';
protected static ?string $navigationLabel = 'Tehnicieni'; public static function getNavigationLabel(): string
{
return __('nav.label.Tehnicieni');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?string $modelLabel = 'tehnician'; protected static ?string $modelLabel = 'tehnician';
@@ -18,9 +18,15 @@ class MessageTemplateResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chat-bubble-left-right'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chat-bubble-left-right';
protected static ?string $navigationLabel = 'Template-uri mesaje'; public static function getNavigationLabel(): string
{
return __('nav.label.Template-uri mesaje');
}
protected static string|\UnitEnum|null $navigationGroup = 'Marketing'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Marketing');
}
protected static ?string $modelLabel = 'template'; protected static ?string $modelLabel = 'template';
@@ -20,9 +20,15 @@ class OnlineOrderResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shopping-bag'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shopping-bag';
protected static ?string $navigationLabel = 'Comenzi online'; public static function getNavigationLabel(): string
{
return __('nav.label.Comenzi online');
}
protected static string|\UnitEnum|null $navigationGroup = 'Magazin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Magazin');
}
protected static ?string $modelLabel = 'comandă'; protected static ?string $modelLabel = 'comandă';
@@ -20,9 +20,15 @@ class PartResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cube'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cube';
protected static ?string $navigationLabel = 'Depozit'; public static function getNavigationLabel(): string
{
return __('nav.label.Depozit');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'piesă'; protected static ?string $modelLabel = 'piesă';
@@ -20,9 +20,15 @@ class PaymentResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-banknotes'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-banknotes';
protected static ?string $navigationLabel = 'Plăți'; public static function getNavigationLabel(): string
{
return __('nav.label.Plăți');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?string $modelLabel = 'plată'; protected static ?string $modelLabel = 'plată';
@@ -19,9 +19,15 @@ class PayrollAdjustmentResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-adjustments-horizontal'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-adjustments-horizontal';
protected static ?string $navigationLabel = 'Bonusuri & avansuri'; public static function getNavigationLabel(): string
{
return __('nav.label.Bonusuri & avansuri');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?string $modelLabel = 'ajustare'; protected static ?string $modelLabel = 'ajustare';
@@ -21,9 +21,15 @@ class PayrollRunResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-banknotes'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-banknotes';
protected static ?string $navigationLabel = 'Salarii'; public static function getNavigationLabel(): string
{
return __('nav.label.Salarii');
}
protected static string|\UnitEnum|null $navigationGroup = 'Finanțe'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Finanțe');
}
protected static ?string $modelLabel = 'salariu'; protected static ?string $modelLabel = 'salariu';
@@ -20,9 +20,15 @@ class PostResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench-screwdriver'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench-screwdriver';
protected static ?string $navigationLabel = 'Posturi de lucru'; public static function getNavigationLabel(): string
{
return __('nav.label.Posturi de lucru');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?string $modelLabel = 'pod'; protected static ?string $modelLabel = 'pod';
@@ -18,9 +18,15 @@ class PricingCoefficientResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-adjustments-horizontal'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-adjustments-horizontal';
protected static ?string $navigationLabel = 'Coeficienți preț'; public static function getNavigationLabel(): string
{
return __('nav.label.Coeficienți preț');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'coeficient'; protected static ?string $modelLabel = 'coeficient';
@@ -107,17 +113,6 @@ class PricingCoefficientResource extends Resource
->defaultSort('priority'); ->defaultSort('priority');
} }
public static function getNavigationLabel(): string
{
return __('Coeficienți preț');
}
public static function getNavigationGroup(): ?string
{
return __('Depozit');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('coeficient'); return __('coeficient');
@@ -22,9 +22,15 @@ class PurchaseResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shopping-cart'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shopping-cart';
protected static ?string $navigationLabel = 'Achiziții'; public static function getNavigationLabel(): string
{
return __('nav.label.Achiziții');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'achiziție'; protected static ?string $modelLabel = 'achiziție';
@@ -19,9 +19,15 @@ class RoleResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shield-check'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-shield-check';
protected static ?string $navigationLabel = 'Roluri & Drepturi'; public static function getNavigationLabel(): string
{
return __('nav.label.Roluri & Drepturi');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?string $modelLabel = 'rol'; protected static ?string $modelLabel = 'rol';
@@ -20,9 +20,15 @@ class ServiceTemplateResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-clipboard-document-list'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-clipboard-document-list';
protected static ?string $navigationLabel = 'Șabloane servicii'; public static function getNavigationLabel(): string
{
return __('nav.label.Șabloane servicii');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?string $modelLabel = 'șablon'; protected static ?string $modelLabel = 'șablon';
@@ -22,9 +22,15 @@ class ShopCustomerResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-circle'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-circle';
protected static ?string $navigationLabel = 'Clienți magazin'; public static function getNavigationLabel(): string
{
return __('nav.label.Clienți magazin');
}
protected static string|\UnitEnum|null $navigationGroup = 'Magazin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Magazin');
}
protected static ?string $modelLabel = 'client magazin'; protected static ?string $modelLabel = 'client magazin';
@@ -93,17 +99,6 @@ class ShopCustomerResource extends Resource
]; ];
} }
public static function getNavigationLabel(): string
{
return __('Clienți magazin');
}
public static function getNavigationGroup(): ?string
{
return __('Magazin');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('client magazin'); return __('client magazin');
@@ -20,9 +20,15 @@ class SubcontractJobResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-top-right-on-square'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-arrow-top-right-on-square';
protected static ?string $navigationLabel = 'Lucrări terți'; public static function getNavigationLabel(): string
{
return __('nav.label.Lucrări terți');
}
protected static string|\UnitEnum|null $navigationGroup = 'Subcontractare'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Subcontractare');
}
protected static ?string $modelLabel = 'lucrare terți'; protected static ?string $modelLabel = 'lucrare terți';
@@ -122,17 +128,6 @@ class SubcontractJobResource extends Resource
->defaultSort('created_at', 'desc'); ->defaultSort('created_at', 'desc');
} }
public static function getNavigationLabel(): string
{
return __('Lucrări terți');
}
public static function getNavigationGroup(): ?string
{
return __('Subcontractare');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('lucrare terți'); return __('lucrare terți');
@@ -18,9 +18,15 @@ class SubcontractorResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-group'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-group';
protected static ?string $navigationLabel = 'Subcontractori'; public static function getNavigationLabel(): string
{
return __('nav.label.Subcontractori');
}
protected static string|\UnitEnum|null $navigationGroup = 'Subcontractare'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Subcontractare');
}
protected static ?string $modelLabel = 'subcontractor'; protected static ?string $modelLabel = 'subcontractor';
@@ -73,17 +79,6 @@ class SubcontractorResource extends Resource
->defaultSort('name'); ->defaultSort('name');
} }
public static function getNavigationLabel(): string
{
return __('Subcontractori');
}
public static function getNavigationGroup(): ?string
{
return __('Subcontractare');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('subcontractor'); return __('subcontractor');
@@ -18,9 +18,15 @@ class SupplierResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-storefront'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-storefront';
protected static ?string $navigationLabel = 'Furnizori'; public static function getNavigationLabel(): string
{
return __('nav.label.Furnizori');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'furnizor'; protected static ?string $modelLabel = 'furnizor';
@@ -22,9 +22,15 @@ class TireSetResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-lifebuoy'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-lifebuoy';
protected static ?string $navigationLabel = 'Seturi anvelope'; public static function getNavigationLabel(): string
{
return __('nav.label.Seturi anvelope');
}
protected static string|\UnitEnum|null $navigationGroup = 'Anvelope'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Anvelope');
}
protected static ?string $modelLabel = 'set anvelope'; protected static ?string $modelLabel = 'set anvelope';
@@ -185,17 +191,6 @@ class TireSetResource extends Resource
]; ];
} }
public static function getNavigationLabel(): string
{
return __('Seturi anvelope');
}
public static function getNavigationGroup(): ?string
{
return __('Anvelope');
}
public static function getModelLabel(): string public static function getModelLabel(): string
{ {
return __('set anvelope'); return __('set anvelope');
@@ -20,9 +20,15 @@ class UserResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-group'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-user-group';
protected static ?string $navigationLabel = 'Utilizatori'; public static function getNavigationLabel(): string
{
return __('nav.label.Utilizatori');
}
protected static string|\UnitEnum|null $navigationGroup = 'Admin'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Admin');
}
protected static ?string $modelLabel = 'utilizator'; protected static ?string $modelLabel = 'utilizator';
@@ -19,7 +19,10 @@ class VehicleResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-truck'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-truck';
protected static ?string $navigationLabel = 'Automobile'; public static function getNavigationLabel(): string
{
return __('nav.label.Automobile');
}
protected static ?string $modelLabel = 'mașină'; protected static ?string $modelLabel = 'mașină';
@@ -18,9 +18,15 @@ class WarehouseResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-storefront'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-building-storefront';
protected static ?string $navigationLabel = 'Depozite'; public static function getNavigationLabel(): string
{
return __('nav.label.Depozite');
}
protected static string|\UnitEnum|null $navigationGroup = 'Depozit'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Depozit');
}
protected static ?string $modelLabel = 'depozit'; protected static ?string $modelLabel = 'depozit';
@@ -24,9 +24,15 @@ class WorkOrderResource extends Resource
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench-screwdriver'; protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-wrench-screwdriver';
protected static ?string $navigationLabel = 'Fișe lucru'; public static function getNavigationLabel(): string
{
return __('nav.label.Fișe lucru');
}
protected static string|\UnitEnum|null $navigationGroup = 'Service'; public static function getNavigationGroup(): ?string
{
return __('nav.group.Service');
}
protected static ?string $modelLabel = 'fișă'; protected static ?string $modelLabel = 'fișă';
+74
View File
@@ -0,0 +1,74 @@
<?php
return [
'group' => [
'Admin' => 'Admin',
'Analiză' => 'Analytics',
'Anvelope' => 'Tires',
'CRM' => 'CRM',
'Depozit' => 'Warehouse',
'Finanțe' => 'Finance',
'Magazin' => 'Shop',
'Marketing' => 'Marketing',
'Service' => 'Service',
'Stoc & Finanțe' => 'Stock & Finance',
'Subcontractare' => 'Subcontracting',
'Tinichigerie' => 'Bodyshop',
],
'label' => [
'API Tokens' => 'API Tokens',
'Achiziții' => 'Purchases',
'Angajați' => 'Employees',
'Apeluri' => 'Calls',
'Asistent AI' => 'AI Assistant',
'Atelierul meu' => 'My workshop',
'Automobile' => 'Vehicles',
'Backup' => 'Backup',
'Bonusuri & avansuri' => 'Bonuses & advances',
'Calendar' => 'Calendar',
'Calendar vizual' => 'Visual calendar',
'Canale marketing' => 'Marketing channels',
'Cereri' => 'Leads',
'Cheltuieli' => 'Expenses',
'Clienți' => 'Clients',
'Clienți magazin' => 'Shop customers',
'Coeficienți preț' => 'Price coefficients',
'Comenzi online' => 'Online orders',
'Companii' => 'Companies',
'Depozit' => 'Warehouse',
'Depozite' => 'Warehouses',
'Facturi & abonamente' => 'Invoices & subscriptions',
'Finanțe (consolidat)' => 'Finance (consolidated)',
'Fișe lucru' => 'Work orders',
'Furnizori' => 'Suppliers',
'Import factură Excel' => 'Excel invoice import',
'Integrări' => 'Integrations',
'Jurnal activitate' => 'Activity log',
'KPI mecanici' => 'Mechanic KPI',
'Lucrări terți' => 'Subcontractor jobs',
'Norme-ore' => 'Labor catalog',
'Pipeline' => 'Pipeline',
'Pipeline (tabel)' => 'Pipeline (table)',
'Planuri' => 'Plans',
'Plăți' => 'Payments',
'Posturi de lucru' => 'Work bays',
'Procentaj' => 'Commission',
'Rapoarte' => 'Reports',
'Recomandări' => 'Recommendations',
'Roluri & Drepturi' => 'Roles & permissions',
'Salarii' => 'Salaries',
'Scaner' => 'Scanner',
'Seturi anvelope' => 'Tire sets',
'Setări' => 'Settings',
'Setări plăți' => 'Payment settings',
'Subcontractori' => 'Subcontractors',
'Tehnicieni' => 'Technicians',
'Template-uri mesaje' => 'Message templates',
'Tinichigerie / Detailing' => 'Bodyshop / Detailing',
'Utilizatori' => 'Users',
'VIN-căutare' => 'VIN search',
'Încărcare STO' => 'Workshop load',
'Șabloane servicii' => 'Service templates',
],
];
+76
View File
@@ -0,0 +1,76 @@
<?php
return [
// ── Groups (sidebar section headers) ──
'group' => [
'Admin' => 'Admin',
'Analiză' => 'Analiză',
'Anvelope' => 'Anvelope',
'CRM' => 'CRM',
'Depozit' => 'Depozit',
'Finanțe' => 'Finanțe',
'Magazin' => 'Magazin',
'Marketing' => 'Marketing',
'Service' => 'Service',
'Stoc & Finanțe' => 'Stoc & Finanțe',
'Subcontractare' => 'Subcontractare',
'Tinichigerie' => 'Tinichigerie',
],
// ── Individual navigation labels ──
'label' => [
'API Tokens' => 'API Tokens',
'Achiziții' => 'Achiziții',
'Angajați' => 'Angajați',
'Apeluri' => 'Apeluri',
'Asistent AI' => 'Asistent AI',
'Atelierul meu' => 'Atelierul meu',
'Automobile' => 'Automobile',
'Backup' => 'Backup',
'Bonusuri & avansuri' => 'Bonusuri & avansuri',
'Calendar' => 'Calendar',
'Calendar vizual' => 'Calendar vizual',
'Canale marketing' => 'Canale marketing',
'Cereri' => 'Cereri',
'Cheltuieli' => 'Cheltuieli',
'Clienți' => 'Clienți',
'Clienți magazin' => 'Clienți magazin',
'Coeficienți preț' => 'Coeficienți preț',
'Comenzi online' => 'Comenzi online',
'Companii' => 'Companii',
'Depozit' => 'Depozit',
'Depozite' => 'Depozite',
'Facturi & abonamente' => 'Facturi & abonamente',
'Finanțe (consolidat)' => 'Finanțe (consolidat)',
'Fișe lucru' => 'Fișe lucru',
'Furnizori' => 'Furnizori',
'Import factură Excel' => 'Import factură Excel',
'Integrări' => 'Integrări',
'Jurnal activitate' => 'Jurnal activitate',
'KPI mecanici' => 'KPI mecanici',
'Lucrări terți' => 'Lucrări terți',
'Norme-ore' => 'Norme-ore',
'Pipeline' => 'Pipeline',
'Pipeline (tabel)' => 'Pipeline (tabel)',
'Planuri' => 'Planuri',
'Plăți' => 'Plăți',
'Posturi de lucru' => 'Posturi de lucru',
'Procentaj' => 'Procentaj',
'Rapoarte' => 'Rapoarte',
'Recomandări' => 'Recomandări',
'Roluri & Drepturi' => 'Roluri & Drepturi',
'Salarii' => 'Salarii',
'Scaner' => 'Scaner',
'Seturi anvelope' => 'Seturi anvelope',
'Setări' => 'Setări',
'Setări plăți' => 'Setări plăți',
'Subcontractori' => 'Subcontractori',
'Tehnicieni' => 'Tehnicieni',
'Template-uri mesaje' => 'Template-uri mesaje',
'Tinichigerie / Detailing' => 'Tinichigerie / Detailing',
'Utilizatori' => 'Utilizatori',
'VIN-căutare' => 'VIN-căutare',
'Încărcare STO' => 'Încărcare STO',
'Șabloane servicii' => 'Șabloane servicii',
],
];
+76
View File
@@ -0,0 +1,76 @@
<?php
return [
// ── Группы (заголовки разделов сайдбара) ──
'group' => [
'Admin' => 'Администрирование',
'Analiză' => 'Аналитика',
'Anvelope' => 'Шины',
'CRM' => 'CRM',
'Depozit' => 'Склад',
'Finanțe' => 'Финансы',
'Magazin' => 'Магазин',
'Marketing' => 'Маркетинг',
'Service' => 'Сервис',
'Stoc & Finanțe' => 'Склад и финансы',
'Subcontractare' => 'Субподряд',
'Tinichigerie' => 'Кузовной цех',
],
// ── Пункты навигации ──
'label' => [
'API Tokens' => 'API токены',
'Achiziții' => 'Закупки',
'Angajați' => 'Сотрудники',
'Apeluri' => 'Звонки',
'Asistent AI' => 'AI-ассистент',
'Atelierul meu' => 'Моя мастерская',
'Automobile' => 'Автомобили',
'Backup' => 'Резервные копии',
'Bonusuri & avansuri' => 'Премии и авансы',
'Calendar' => 'Календарь',
'Calendar vizual' => 'Визуальный календарь',
'Canale marketing' => 'Маркетинговые каналы',
'Cereri' => 'Заявки',
'Cheltuieli' => 'Расходы',
'Clienți' => 'Клиенты',
'Clienți magazin' => 'Клиенты магазина',
'Coeficienți preț' => 'Ценовые коэффициенты',
'Comenzi online' => 'Онлайн-заказы',
'Companii' => 'Компании',
'Depozit' => 'Склад',
'Depozite' => 'Склады',
'Facturi & abonamente' => 'Счета и подписки',
'Finanțe (consolidat)' => 'Финансы (сводно)',
'Fișe lucru' => 'Заказ-наряды',
'Furnizori' => 'Поставщики',
'Import factură Excel' => 'Импорт счёта Excel',
'Integrări' => 'Интеграции',
'Jurnal activitate' => 'Журнал действий',
'KPI mecanici' => 'KPI механиков',
'Lucrări terți' => 'Работы субподрядчиков',
'Norme-ore' => 'Нормо-часы',
'Pipeline' => 'Воронка',
'Pipeline (tabel)' => 'Воронка (таблица)',
'Planuri' => 'Тарифы',
'Plăți' => 'Платежи',
'Posturi de lucru' => 'Рабочие места',
'Procentaj' => 'Проценты',
'Rapoarte' => 'Отчёты',
'Recomandări' => 'Рекомендации',
'Roluri & Drepturi' => 'Роли и права',
'Salarii' => 'Зарплаты',
'Scaner' => 'Сканер',
'Seturi anvelope' => 'Комплекты шин',
'Setări' => 'Настройки',
'Setări plăți' => 'Настройки платежей',
'Subcontractori' => 'Субподрядчики',
'Tehnicieni' => 'Техники',
'Template-uri mesaje' => 'Шаблоны сообщений',
'Tinichigerie / Detailing' => 'Кузов / Детейлинг',
'Utilizatori' => 'Пользователи',
'VIN-căutare' => 'Поиск по VIN',
'Încărcare STO' => 'Загрузка СТО',
'Șabloane servicii' => 'Шаблоны услуг',
],
];