Files
autocrm/lang/ru/portal.php
T
Vasyka 57bdc1b594 feat: language switcher on portal + apply_margin re-added to Plată & total
Two fixes:

== 1. Language switcher (RO/RU/EN) in portal headers ==

New partial resources/views/partials/lang-switcher.blade.php with two
visual styles:
- style='chip' (default) — white-tinted glass for colored headers
  (shop nav bar, tracking page hero)
- style='light' — outlined buttons for pale backgrounds (invitation
  accept card)

Each button is a POST form to the existing /locale/{lang} route which:
- puts locale in session
- persists to user.locale if authenticated
- redirects back to the same page

Included in:
- resources/views/shop/layout.blade.php (right side of top nav,
  after login/register)
- resources/views/tracking/show.blade.php (top-right of hero header,
  absolutely positioned)
- resources/views/invitations/accept.blade.php (top-right of card,
  above welcome heading, light style)

Current locale button is highlighted (opaque white on colored bg /
blue on pale bg). Others are muted until hovered.

Two new translation keys:
- portal.common.language (RO: Limbă / RU: Язык)

== 2. apply_margin toggle back in "Plată & total" ==

Previous session's edit didn't persist to the file. Now confirmed in
place: WorkOrderResource form's "Plată & total" section shows a
"Aplică marjă internă" toggle between discount_pct and
override_margin_pct. Gated by FINANCE_VIEW_INTERNAL_MARGIN so only
owner / admin / manager / accountant see it. Default = true.

When toggled off on a Fișă, WorkOrderWork::saving hook writes
salary_base = total for every line on that WO (no reduction).
Backend logic already in place — this commit fixes the missing UI
control.

Suite: 303 passed (840 assertions). Unchanged — refactor + view only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-13 19:42:00 +00:00

157 lines
7.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
return [
// ─── Общие ───
'common' => [
'email' => 'Email',
'phone' => 'Телефон',
'name' => 'Имя',
'password' => 'Пароль',
'save' => 'Сохранить',
'cancel' => 'Отмена',
'back' => 'Назад',
'search' => 'Поиск',
'total' => 'Итого',
'yes' => 'Да',
'no' => 'Нет',
'required' => '*',
'currency_mdl' => 'MDL',
'powered_by' => 'Работает на AutoCRM',
'language' => 'Язык',
],
// ─── Приглашение ───
'invitation' => [
'title_accept' => 'Принять приглашение',
'welcome_name' => 'Добро пожаловать, :name!',
'welcome_body' => 'Вас пригласили в :company. Задайте пароль, чтобы активировать аккаунт.',
'new_password' => 'Новый пароль',
'confirm_password' => 'Подтвердите пароль',
'activate_account' => 'Активировать аккаунт',
'expired_title' => 'Приглашение просрочено',
'expired_body' => 'Срок действия ссылки истёк (максимум 7 дней). Попросите администратора выслать приглашение повторно.',
'invalid_title' => 'Недействительное приглашение',
'invalid_body' => 'Ссылка больше не действительна или уже была использована.',
],
// ─── Отслеживание заказ-наряда (публично) ───
'tracking' => [
'title_fisa' => 'Заказ-наряд #:number',
'ready_estimated' => 'Готово ориентировочно:',
'details' => 'Подробности',
'auto' => 'Автомобиль',
'mileage' => 'Пробег',
'opened' => 'Открыт',
'master' => 'Мастер',
'stages' => 'Этапы',
'what_asked' => 'Что вы просили',
'recommendations' => 'Рекомендации',
'photos' => 'Фотографии',
'approval_needed_title' => '⚠ Требуется ваше подтверждение',
'approval_needed_body' => 'Обнаружены дополнительные работы. Пожалуйста, примите решение ниже.',
'hours' => 'ч.',
'approve' => '✅ Согласен',
'decline' => '❌ Не согласен',
'unit_pcs' => 'шт.',
],
// ─── Магазин: навигация и лейаут ───
'shop' => [
'catalog' => 'Каталог',
'search_by_vin' => 'Поиск по VIN',
'cart' => '🛒 Корзина',
'login' => 'Войти',
'register' => 'Регистрация',
'logout' => 'Выйти',
// Каталог
'catalog_title' => 'Каталог запчастей',
'search_placeholder' => 'Найти по названию, коду, бренду, кросс-номеру…',
'all_categories' => 'Все категории',
'in_stock_only' => 'Только в наличии',
'no_parts_found' => 'Запчасти не найдены',
'no_parts_found_for' => 'Запчасти не найдены по запросу „:term"',
'in_stock' => '● В наличии',
'on_order' => '○ Под заказ',
'add_to_cart' => 'Добавить в корзину',
// Корзина
'cart_title' => 'Моя корзина',
'cart_empty' => 'Корзина пуста.',
'view_catalog' => 'Перейти в каталог',
'part' => 'Запчасть',
'price' => 'Цена',
'qty' => 'Кол-во',
'update_cart' => 'Обновить корзину',
'subtotal' => 'Промежуточный итог:',
'checkout_arrow' => 'Оформить заказ →',
// Оформление
'checkout_title' => 'Оформление заказа',
'full_name' => 'ФИО *',
'phone_req' => 'Телефон *',
'delivery_req' => 'Доставка *',
'address_delivery' => 'Адрес (для курьера/почты)',
'notes' => 'Комментарий',
'place_order' => 'Оформить заказ',
'summary' => 'Сводка',
'delivery_fee_note' => 'Стоимость доставки рассчитывается в зависимости от выбранного способа.',
// Статус заказа
'order_number' => 'Заказ',
'status' => 'Статус',
'products' => 'Товары',
'delivery' => 'Доставка',
'delivery_data' => 'Данные доставки',
'continue_shopping' => '← Продолжить покупки',
// Детали запчасти
'back_to_catalog' => '← Назад в каталог',
'brand_label' => 'Бренд:',
'code_label' => 'Код:',
'in_stock_qty' => '● В наличии (:qty :unit)',
'cross_refs_title' => 'Кросс-номера',
'description' => 'Описание',
// VIN
'vin_title' => 'Поиск запчастей по VIN',
'vin_intro' => 'Введите VIN-код (17 символов), чтобы мы определили автомобиль. Затем найдите запчасти в каталоге.',
'vin_decode' => 'Расшифровать',
'vin_invalid' => 'Неверный VIN — должно быть 17 символов.',
'vin_identified' => 'Автомобиль определён',
'vin_manufacturer' => 'Производитель',
'vin_year' => 'Год модели',
'vin_country' => 'Страна',
'vin_region' => 'Регион',
'vin_search_parts' => 'Найти запчасти для :maker →',
'vin_contact_note' => 'Для точного подбора по модели/двигателю свяжитесь с сервисом, указав этот VIN.',
'this_car' => 'этого автомобиля',
// Аккаунт
'my_account' => 'Мой аккаунт',
'hello_name' => 'Привет, :name!',
'contact_data' => 'Контактные данные',
'my_orders' => 'Мои заказы (:count)',
'no_orders_yet' => 'У вас пока нет заказов.',
'order_nr' => '№',
'order_date' => 'Дата',
'order_items' => 'Позиции',
'order_details_arrow' => 'Подробнее →',
// Аутентификация
'signin_title' => 'Войти в аккаунт',
'signin_button' => 'Войти',
'forgot_password' => 'Забыли пароль',
'no_account' => 'Нет аккаунта?',
'register_title' => 'Регистрация аккаунта',
'register_button' => 'Создать аккаунт',
'have_account' => 'Уже есть аккаунт?',
'forgot_title' => 'Забыли пароль',
'forgot_intro' => 'Введите email, с которым регистрировались — вышлем ссылку для сброса.',
'send_reset_link' => 'Выслать ссылку',
'back_to_login' => '← Вернуться ко входу',
'reset_title' => 'Задать новый пароль',
'reset_button' => 'Установить пароль',
],
];