feat(i18n): convert 38 hardcoded static labels + safe blade wrap + 226 keys

- Convert all remaining static \$modelLabel/\$pluralModelLabel to getter
  methods with __() (AppointmentResource, WorkOrderResource, MasterResource,
  ServiceTemplateResource, LaborResource, and 33 others)
- Safe blade wrap v2 (37 files, 201 wraps): fixed the regex to not match
  `->`, `=>`, `!<` — previous aggressive pass broke @if directives
- Bulk-translate lowercase model-label keys (programări, fișe lucru,
  tehnicieni, șabloane servicii, norme-ore, etc.) — these were the RO
  strings appearing in page titles/breadcrumbs
- Add human RU/EN for mechanic-kpi (Mecanic/Lucrări/Norma ore/etc.)
  and calendar-board words

Tests 306 green. Blade compiles cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-15 06:17:10 +00:00
parent 3911012c65
commit 7077fff3b3
63 changed files with 800 additions and 284 deletions
@@ -19,10 +19,10 @@
<div class="box">
<h1>{{ __('🏦 Instrucțiuni transfer bancar') }}</h1>
<div class="row"><span>Beneficiar:</span> <b>{{ $bank['beneficiary'] ?? '—' }}</b></div>
<div class="row"><span>IBAN:</span> <code onclick="navigator.clipboard.writeText(this.textContent)">{{ $bank['iban'] ?? '—' }}</code></div>
<div class="row"><span>BIC / SWIFT:</span> <code>{{ $bank['bic'] ?? '—' }}</code></div>
<div class="row"><span>Banca:</span> {{ $bank['bank_name'] ?? '—' }}</div>
<div class="row"><span>{{ __('Beneficiar:') }}</span> <b>{{ $bank['beneficiary'] ?? '—' }}</b></div>
<div class="row"><span>{{ __('IBAN:') }}</span> <code onclick="navigator.clipboard.writeText(this.textContent)">{{ $bank['iban'] ?? '—' }}</code></div>
<div class="row"><span>{{ __('BIC / SWIFT:') }}</span> <code>{{ $bank['bic'] ?? '—' }}</code></div>
<div class="row"><span>{{ __('Banca:') }}</span> {{ $bank['bank_name'] ?? '—' }}</div>
<div class="row"><span>{{ __('Sumă:') }}</span> <b>{{ number_format($sub->amount, 2) }} {{ $sub->currency }}</b></div>
<div class="ref-box">
@@ -40,7 +40,7 @@
<ul style="margin: 8px 0 0 20px;">
<li>{{ __('Plata apare în 1-3 zile lucrătoare') }}</li>
<li>{{ __('Operatorul confirmă manual factura ca plătită') }}</li>
<li>Abonamentul se extinde automat</li>
<li>{{ __('Abonamentul se extinde automat') }}</li>
</ul>
</div>
+8 -8
View File
@@ -57,7 +57,7 @@
<body>
<div class="wrap">
<a href="/app" class="nav-back">{{ __('← Înapoi la AutoCRM') }}</a>
<h1>Facturi & abonament</h1>
<h1>{{ __('Facturi & abonament') }}</h1>
<p class="sub">{{ $tenant->display_name ?? $tenant->name }} · {{ $tenant->slug }}.service.mir.md</p>
@if ($invoices->isEmpty())
@@ -116,8 +116,8 @@
<div class="method">
<div class="icon">💳</div>
<div>
<div class="label">Card bancar</div>
<div class="desc">Visa, Mastercard prin Stripe</div>
<div class="label">{{ __('Card bancar') }}</div>
<div class="desc">{{ __('Visa, Mastercard prin Stripe') }}</div>
</div>
</div>
</button>
@@ -132,8 +132,8 @@
<div class="method">
<div class="icon">🅿️</div>
<div>
<div class="label">PayPal</div>
<div class="desc">Cont PayPal sau card prin PayPal</div>
<div class="label">{{ __('PayPal') }}</div>
<div class="desc">{{ __('Cont PayPal sau card prin PayPal') }}</div>
</div>
</div>
</button>
@@ -148,8 +148,8 @@
<div class="method">
<div class="icon">🇲🇩</div>
<div>
<div class="label">Paynet</div>
<div class="desc">Card MAIB / MICB / Victoriabank, MD Cash, e-money</div>
<div class="label">{{ __('Paynet') }}</div>
<div class="desc">{{ __('Card MAIB / MICB / Victoriabank, MD Cash, e-money') }}</div>
</div>
</div>
</button>
@@ -164,7 +164,7 @@
<div class="method">
<div class="icon">🏦</div>
<div>
<div class="label">Transfer bancar</div>
<div class="label">{{ __('Transfer bancar') }}</div>
<div class="desc">{{ __('Plătește direct din bancă (1-3 zile)') }}</div>
</div>
</div>
+1 -1
View File
@@ -19,7 +19,7 @@
<p style="color:#6b7280;font-size:14px;">{{ __('Factură:') }} <b>{{ $sub->invoice_number ?? '#' . $sub->id }}</b> · {{ number_format($sub->amount, 2) }} {{ $sub->currency }}</p>
<div class="note">
<b>Mod stub:</b><br>
<b>{{ __('Mod stub:') }}</b><br>
{{ $note }}<br><br>
În prod, aici redirectează la pagina {{ $gateway }} Checkout cu sumele și metadatele facturii. La success, webhook-ul marchează automat factura ca plătită.
</div>
+6 -6
View File
@@ -60,14 +60,14 @@
<p>Autoservice profesional{{ $city ? ' — ' . $city : '' }}. Diagnostic, reparații, piese, ITP.</p>
@if (! empty($shopEnabled))
<a href="/shop" style="display:inline-block;margin-top:20px;background:#fff;color:{{ $themeColor }};padding:12px 28px;border-radius:8px;font-weight:700;text-decoration:none;">
🛒 Magazin piese online
{{ __('🛒 Magazin piese online') }}
</a>
@endif
</header>
@if (! empty($services))
<section class="section">
<h2>Servicii oferite</h2>
<h2>{{ __('Servicii oferite') }}</h2>
<div class="services-grid">
@foreach ($services as $s)
<div class="service-card">
@@ -84,12 +84,12 @@
<div class="info-block">
<h3>{{ __('📍 Locație & contact') }}</h3>
@if ($city) <p><b>{{ __('Oraș:') }}</b> {{ $city }}</p> @endif
@if ($phone) <p><b>Telefon:</b> <a href="tel:{{ $phone }}" style="color:inherit;">{{ $phone }}</a></p> @endif
@if ($email) <p><b>Email:</b> <a href="mailto:{{ $email }}" style="color:inherit;">{{ $email }}</a></p> @endif
@if ($phone) <p><b>{{ __('Telefon:') }}</b> <a href="tel:{{ $phone }}" style="color:inherit;">{{ $phone }}</a></p> @endif
@if ($email) <p><b>{{ __('Email:') }}</b> <a href="mailto:{{ $email }}" style="color:inherit;">{{ $email }}</a></p> @endif
</div>
<div class="info-block">
<h3>🕒 Program de lucru</h3>
<p>Luni Vineri: 08:00 18:00</p>
<h3>{{ __('🕒 Program de lucru') }}</h3>
<p>{{ __('Luni Vineri: 08:00 18:00') }}</p>
<p>{{ __('Sâmbătă: 09:00 14:00') }}</p>
<p>{{ __('Duminică: închis') }}</p>
</div>
@@ -16,7 +16,7 @@
<h1>{{ __('Plată reușită!') }}</h1>
<p style="color:#6b7280;">Factura {{ $sub->invoice_number ?? '#' . $sub->id }} a fost achitată.</p>
<p style="color:#6b7280;font-size:13px;margin-top:8px;">{{ __('Abonamentul tău a fost extins.') }}</p>
<a href="/app" class="btn"> Mergi la AutoCRM</a>
<a href="/app" class="btn">{{ __('→ Mergi la AutoCRM') }}</a>
</div>
</body>
</html>