Files
Vasyka 0e3f9e8bca feat: AI model selector + i18n nav labels (RU/EN) on new modules
AI model selector:
- AiAssistantService::MODEL_DEFAULTS and MODEL_OPTIONS const tables (3 picks per
  provider: Claude Opus 4.7 / Sonnet 4.6 / Haiku 4.5, OpenAI 4o / 4o-mini,
  Gemini 1.5 Pro / Flash). Default upgraded from Sonnet 4.5 → Sonnet 4.6.
- modelFor(provider, company?) resolves tenant override > global default.
- All 8 hardcoded model strings replaced with modelFor() across callClaude
  (chat with tool-use), callOpenAI, callGemini (chat), postClaude/postOpenAI/
  postGemini (single-shot), and OcrInvoiceService.
- Settings page adds 3 model selectors per provider with persistence at
  settings.ai.models.{claude,gpt,gemini}.

i18n nav labels:
- TireSet / Bodyshop / Subcontractor / SubcontractJob / PricingCoefficient /
  ShopCustomer resources: getNavigationLabel / getNavigationGroup /
  getModelLabel / getPluralModelLabel return __()-wrapped strings.
- 20 keys added to lang/ru.json and lang/en.json.

Tests (4 new): default model, tenant override wins, unknown provider falls
back to claude default, options dictionary contains each default key.

Full suite: 134 passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 06:23:21 +00:00

77 lines
2.2 KiB
JSON

{
"Dashboard": "Dashboard",
"Save": "Save",
"Cancel": "Cancel",
"Delete": "Delete",
"Edit": "Edit",
"Create": "Create",
"Search": "Search",
"Filters": "Filters",
"Reset": "Reset",
"Yes": "Yes",
"No": "No",
"Loading": "Loading...",
"Empty": "No results",
"Settings": "Settings",
"Profile": "Profile",
"Logout": "Logout",
"Welcome": "Welcome",
"Total": "Total",
"Date": "Date",
"Status": "Status",
"Actions": "Actions",
"Notifications": "Notifications",
"Clienți": "Clients",
"Mașini": "Vehicles",
"Cereri": "Leads",
"Pâlnie": "Pipeline",
"Calendar": "Calendar",
"Programări": "Appointments",
"Fișe lucru": "Work orders",
"Kanban": "Kanban",
"Norme-ore": "Labor times",
"Depozit": "Inventory",
"Furnizori": "Suppliers",
"Achiziții": "Purchases",
"Plăți": "Payments",
"Cheltuieli": "Expenses",
"Salarii": "Payroll",
"Tehnicieni": "Technicians",
"Marketing": "Marketing",
"Mesaje": "Messages",
"Rapoarte": "Reports",
"Recomandări": "Recommendations",
"Încărcare STO": "Workshop load",
"Procentaj": "Markup",
"VIN-căutare": "VIN search",
"Integrări": "Integrations",
"Backup": "Backup",
"Asistent AI": "AI Assistant",
"Setări companie": "Company settings",
"Utilizatori": "Users",
"Jurnal": "Audit log",
"Telefonie": "Calls",
"Finanțe": "Finance",
"Site PSauto": "Public site",
"Seturi anvelope": "Tire sets",
"Anvelope": "Tires",
"set anvelope": "tire set",
"seturi anvelope": "tire sets",
"Tinichigerie / Detailing": "Body / Detailing",
"Tinichigerie": "Body shop",
"lucrare caroserie": "body job",
"lucrări caroserie": "body jobs",
"Subcontractori": "Subcontractors",
"Subcontractare": "Subcontracting",
"subcontractor": "subcontractor",
"Lucrări terți": "Outsourced jobs",
"lucrare terți": "outsourced job",
"lucrări terți": "outsourced jobs",
"Coeficienți preț": "Pricing coefficients",
"coeficient": "coefficient",
"Magazin": "Shop",
"Clienți magazin": "Shop customers",
"client magazin": "shop customer",
"clienți magazin": "shop customers"
}