Translate UI and user-facing messages to Ukrainian (#5)

- All frontend pages, labels, notices and errors; html lang=uk, uk-UA money format
- Brand "Assistant System" in the top bar and page title
- Backend error details returned to the UI (auth, orders, receipts,
  cash registers, Checkbox/CRM/NP errors) and CLI output
- Tests updated for the new messages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 15:27:39 +03:00
co-authored by Claude Opus 5.5
parent 47df3a78dc
commit b8f2fe6b6e
38 changed files with 232 additions and 230 deletions
+4 -4
View File
@@ -216,7 +216,7 @@ async def sync_np_statuses(session: AsyncSession, np: NovaPoshtaClient) -> None:
"""
accounts = await _np_accounts(session)
if not accounts:
log.warning("np_no_api_keys", hint="Укажите ключ API Новой Почты у кассы")
log.warning("np_no_api_keys", hint="Вкажіть ключ API Нової Пошти в касі")
return
orders = await session.scalars(
@@ -327,7 +327,7 @@ def _build_goods(data: OrderUpdateIn) -> tuple[list[dict[str, Any]], int]:
gross = int((price * good.quantity).to_integral_value(ROUND_HALF_UP))
net = gross - discount
if net < 0:
raise OrderEditError(f"Товар «{good.name}»: скидка больше суммы строки")
raise OrderEditError(f"Товар «{good.name}»: знижка більша за суму рядка")
goods.append(
{
"id": good.id or f"new-{uuid.uuid4().hex[:8]}",
@@ -357,13 +357,13 @@ async def update_order(
if order is None or order.is_deleted:
return None
if order.receipt_created_at is not None:
raise OrderEditError("По заказу уже создан чек — редактирование недоступно")
raise OrderEditError("За замовленням уже створено чек — редагування недоступне")
goods, goods_total = _build_goods(data)
total = _to_kopecks(str(data.total_amount))
if total > goods_total:
raise OrderEditError(
f"Сумма заказа {total / 100:.2f} ₴ больше суммы товаров {goods_total / 100:.2f} ₴"
f"Сума замовлення {total / 100:.2f} ₴ більша за суму товарів {goods_total / 100:.2f} ₴"
)
changed = [