| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- import json
- import os
- def fill_gaps():
- path = os.path.join("src", "locales", "translations.json")
- with open(path, "r", encoding="utf-8") as f:
- data = json.load(f)
- def set_translations(key_path, ru, ua):
- parts = key_path.split('.')
- curr = data
- for p in parts[:-1]:
- curr = curr.get(p, {})
- if parts[-1] in curr:
- curr[parts[-1]]["ru"] = ru
- curr[parts[-1]]["ua"] = ua
- # Admin Actions
- set_translations("admin.actions.cancel", "Отмена", "Скасувати")
- set_translations("admin.actions.create", "Создать", "Створити")
- set_translations("admin.actions.delete", "Удалить", "Видалити")
- set_translations("admin.actions.deleteFile", "Удалить файл", "Видалити файл")
- set_translations("admin.actions.edit", "Редактировать", "Редагувати")
- set_translations("admin.actions.printInvoice", "Печать счета", "Друк рахунку")
- set_translations("admin.actions.save", "Сохранить", "Зберегти")
- set_translations("admin.actions.savePrice", "Сохранить цену", "Зберегти ціну")
- set_translations("admin.actions.sending", "Отправка...", "Надсилання...")
- set_translations("admin.actions.toggleAdminRole", "Переключить роль админа", "Перемкнути роль адміна")
- set_translations("admin.actions.viewOriginal", "Оригинал", "Оригінал")
- set_translations("admin.addNew", "Добавить", "Додати")
- set_translations("admin.allStatuses", "Все статусы", "Усі статуси")
- set_translations("admin.dashboard", "Дэшборд", "Дешборд")
- # Admin Fields
- set_translations("admin.fields.active", "Активен", "Активний")
- set_translations("admin.fields.category", "Категория", "Категорія")
- set_translations("admin.fields.colors", "Цвета", "Кольори")
- set_translations("admin.fields.content", "Контент", "Контент")
- set_translations("admin.fields.customColorInfo", "Введите HEX или название", "Введіть HEX або назву")
- set_translations("admin.fields.defaultColor", "Цвет по умолчанию", "Колір за замовчуванням")
- set_translations("admin.fields.description", "Описание", "Опис")
- set_translations("admin.fields.email", "Email", "Email")
- set_translations("admin.fields.estimated", "Оценка", "Оцінка")
- set_translations("admin.fields.excerpt", "Краткое описание", "Короткий опис")
- set_translations("admin.fields.externalLink", "Внешняя ссылка", "Зовнішнє посилання")
- set_translations("admin.fields.finalPrice", "Финальная цена", "Фінальна ціна")
- set_translations("admin.fields.firstName", "Имя", "Ім'я")
- set_translations("admin.fields.imageUrl", "URL изображения", "URL зображення")
- set_translations("admin.fields.lastName", "Фамилия", "Прізвище")
- set_translations("admin.fields.name", "Название", "Назва")
- set_translations("admin.fields.noPhotos", "Нет фото", "Немає фото")
- set_translations("admin.fields.noPortfolio", "Портфолио пусто", "Портфоліо порожнє")
- set_translations("admin.fields.noUsers", "Пользователи не найдены", "Користувачів не знайдено")
- set_translations("admin.fields.notifyUser", "Уведомить клиента", "Повідомити клієнта")
- set_translations("admin.fields.originalSnapshot", "Снимок заказа", "Знімок замовлення")
- set_translations("admin.fields.password", "Пароль", "Пароль")
- set_translations("admin.fields.phone", "Телефон", "Телефон")
- set_translations("admin.fields.photoReport", "Фотоотчет", "Фотозвіт")
- set_translations("admin.fields.portfolioAllowed", "Разрешить в портфолио", "Дозволити в портфоліо")
- set_translations("admin.fields.price", "Цена", "Ціна")
- set_translations("admin.fields.pricePerCm3", "Цена за см³", "Ціна за см³")
- set_translations("admin.fields.projectNotes", "Заметки к проекту", "Нотатки до проєкту")
- set_translations("admin.fields.publishImmediately", "Опубликовать сразу", "Опублікувати відразу")
- set_translations("admin.fields.quantity", "Количество", "Кількість")
- set_translations("admin.fields.selectColorStrict", "Строгий выбор цвета", "Суворий вибір кольору")
- set_translations("admin.fields.selectMaterialStrict", "Строгий выбор материала", "Суворий вибір матеріалу")
- set_translations("admin.fields.shippingAddress", "Адрес доставки", "Адреса доставки")
- set_translations("admin.fields.slug", "Slug (URL)", "Slug (URL)")
- set_translations("admin.fields.snapshotInfo", "Состояние заказа на момент создания", "Стан замовлення на момент створення")
- set_translations("admin.fields.sourceFiles", "Исходные файлы", "Вихідні файли")
- set_translations("admin.fields.strictSelectionInfo", "Клиент может выбирать только из списка", "Клієнт може вибирати тільки зі списку")
- set_translations("admin.fields.techType", "Тип технологии", "Тип технології")
- set_translations("admin.fields.title", "Заголовок", "Заголовок")
- # Labels
- set_translations("admin.labels.actions", "Действия", "Дії")
- set_translations("admin.labels.chat", "Чат", "Чат")
- set_translations("admin.labels.contact", "Контакт", "Контакт")
- set_translations("admin.labels.registered", "Зарегистрирован", "Зареєстрований")
- set_translations("admin.labels.role", "Роль", "Роль")
- set_translations("admin.labels.user", "Пользователь", "Користувач")
- set_translations("admin.managementCenter", "Центр управления", "Центр управління")
- # Modals
- set_translations("admin.modals.createMaterial", "Добавить материал", "Додати матеріал")
- set_translations("admin.modals.createPost", "Новая запись", "Новий запис")
- set_translations("admin.modals.createService", "Новая услуга", "Нова послуга")
- set_translations("admin.modals.createUser", "Новый пользователь", "Новий користувач")
- set_translations("admin.modals.editMaterial", "Редактировать материал", "Редагувати матеріал")
- set_translations("admin.modals.editPost", "Редактировать запись", "Редагувати запис")
- set_translations("admin.modals.editService", "Редактировать услугу", "Редагувати послугу")
- set_translations("admin.modals.editUser", "Редактировать пользователя", "Редагувати користувача")
- set_translations("admin.searchPlaceholder", "Поиск...", "Пошук...")
- set_translations("admin.searchUsersPlaceholder", "Поиск пользователей...", "Пошук користувачів...")
- # Toasts
- set_translations("admin.toasts.chatDisabled", "Чат отключен", "Чат вимкнено")
- set_translations("admin.toasts.chatEnabled", "Чат включен", "Чат увімкнено")
- set_translations("admin.toasts.fileAttached", "Файл прикреплен", "Файл прикріплено")
- set_translations("admin.toasts.fileDeleted", "Файл удален", "Файл видалено")
- set_translations("admin.toasts.genericError", "Произошла ошибка", "Сталася помилка")
- set_translations("admin.toasts.loadError", "Ошибка загрузки", "Помилка завантаження")
- set_translations("admin.toasts.materialDeleted", "Материал удален", "Матеріал видалено")
- set_translations("admin.toasts.materialSaved", "Материал сохранен", "Матеріал збережено")
- set_translations("admin.toasts.noConsent", "Нет согласия", "Немає згоди")
- set_translations("admin.toasts.paramsUpdated", "Параметры обновлены", "Параметри оновлено")
- set_translations("admin.toasts.photoAdded", "Фото добавлено", "Фото додано")
- set_translations("admin.toasts.postDeleted", "Запись удалена", "Запис видалено")
- set_translations("admin.toasts.postSaved", "Запись сохранена", "Запис збережено")
- set_translations("admin.toasts.priceUpdated", "Цена обновлена", "Ціна оновлена")
- set_translations("admin.toasts.roleUpdated", "Роль обновлена", "Роль оновлена")
- set_translations("admin.toasts.serviceDeleted", "Услуга удалена", "Послуга видалена")
- set_translations("admin.toasts.serviceSaved", "Услуга сохранена", "Послугу збережено")
- set_translations("admin.toasts.statusUpdated", "Статус обновлен", "Статус оновлено")
- set_translations("admin.toasts.userCreated", "Пользователь создан", "Користувач створений")
- set_translations("admin.toasts.userSaved", "Пользователь сохранен", "Користувача збережено")
- set_translations("admin.total", "Всего", "Всього")
- # Auth
- set_translations("auth.fields.newPassword", "Новый пароль", "Новий пароль")
- set_translations("auth.studio", "Студия 3D Печати", "Студія 3D Друку")
- set_translations("auth.toasts.accountCreated", "Аккаунт создан! Теперь можно войти.", "Акаунт створено! Тепер можна увійти.")
- set_translations("auth.toasts.passwordChanged", "Пароль успешно изменен!", "Пароль успішно змінено!")
- set_translations("auth.toasts.passwordsNoMatch", "Пароли не совпадают", "Паролі не збігаються")
- set_translations("auth.toasts.resetLinkSent", "Ссылка на сброс пароля отправлена на почту.", "Посилання на скидання пароля надіслано на пошту.")
- set_translations("auth.toasts.socialSoon", "Вход через {provider} скоро появится!", "Вхід через {provider} скоро з'явиться!")
- set_translations("auth.toasts.welcomeBack", "С возвращением!", "З поверненням!")
- # Blog & Errors
- set_translations("blog.exploreOther", "Посмотреть другие", "Переглянути інші")
- set_translations("blog.loading", "Загрузка записей...", "Завантаження записів...")
- set_translations("blog.loadingSingle", "Загрузка записи...", "Завантаження запису...")
- set_translations("blog.notFound", "Запись не найдена", "Запис не знайдено")
- set_translations("errors.404.button", "Вернуться на главную", "Повернутися на головну")
- set_translations("errors.404.subtitle", "Страница не найдена", "Сторінка не знайдена")
- set_translations("errors.404.title", "Ошибка 404", "Помилка 404")
- # Footer & Nav
- set_translations("footer.location", "Херцег-Нови, Черногория", "Херцег-Нові, Чорногорія")
- set_translations("nav.admin", "Админ", "Адмін")
- set_translations("nav.adminPanel", "Панель управления", "Панель управління")
- set_translations("nav.loggedOut", "Вы успешно вышли", "Ви успішно вийшли")
- set_translations("nav.nuances", "Нюансы", "Нюанси")
- set_translations("nav.unreadMessages", "Непрочитанные сообщения", "Непрочитані повідомлення")
- set_translations("nav.unreadTooltip", "У вас есть непрочитанные сообщения", "У вас є непрочитані повідомлення")
- # Orders
- set_translations("orders.labels.estimate", "Расчет", "Розрахунок")
- set_translations("orders.labels.materialColor", "Материал и цвет", "Матеріал та колір")
- set_translations("orders.labels.myNotes", "Мои заметки", "Мої замітки")
- set_translations("orders.labels.progressReport", "Отчет о выполнении", "Звіт про виконання")
- set_translations("orders.labels.projectFiles", "Файлы проекта", "Файли проєкту")
- set_translations("orders.labels.quantity", "Кол-во", "К-сть")
- set_translations("orders.labels.status", "Статус", "Статус")
- # Portfolio & Privacy
- set_translations("portfolio.emptyDesc", "Здесь скоро появятся наши новые работы.", "Тут скоро з'являться наші нові роботи.")
- set_translations("portfolio.emptyTitle", "Портфолио пусто", "Портфоліо порожнє")
- set_translations("portfolio.loading", "Загрузка портфолио...", "Завантаження портфоліо...")
- set_translations("privacy.contactDesc", "Если у вас есть вопросы, наша команда всегда готова помочь.", "Якщо у вас є питання, наша команда завжди готова допомогти.")
- set_translations("privacy.contactTitle", "Нужна помощь?", "Потрібна допомога?")
- set_translations("privacy.responseNotice", "Мы отвечаем на все запросы в течение 48 часов.", "Ми відповідаємо на всі запити протягом 48 годин.")
- # Upload
- set_translations("upload.error", "Ошибка загрузки", "Помилка завантаження")
- set_translations("upload.estimatedTotal", "Приблизительный итог", "Орієнтовний підсумок")
- set_translations("upload.priceDisclaimer", "Финальная цена может измениться после проверки", "Фінальна ціна може змінитися після перевірки")
- set_translations("upload.selectColor", "Выберите цвет", "Виберіть колір")
- # Footer missing ones
- def set_simple(path, lang, val):
- parts = path.split('.')
- curr = data
- for p in parts[:-1]: curr = curr.get(p, {})
- if parts[-1] in curr:
- if isinstance(curr[parts[-1]], dict):
- curr[parts[-1]][lang] = val
- else:
- pass
- set_simple("footer.contactDesc", "me", "Ako imate bilo kakvih pitanja, slobodno nas kontaktirajte.")
- set_simple("footer.contactDesc", "ru", "Если у вас есть вопросы, свяжитесь с нами.")
- set_simple("footer.contactDesc", "ua", "Якщо у вас є питання, зв'яжіться з нами.")
- set_simple("footer.contactTitle", "me", "Kontakt")
- set_simple("footer.contactTitle", "ru", "Контакты")
- set_simple("footer.contactTitle", "ua", "Контакти")
- set_simple("footer.intro", "me", "Bavimo se digitalnom zanatom kroz 3D štampu u Crnoj Gori.")
- set_simple("footer.intro", "ru", "Мы занимаемся цифровым ремеслом через 3D-печать в Черногории.")
- set_simple("footer.intro", "ua", "Ми займаємося цифровим ремеслом через 3D-друк у Чорногорії.")
- # Fix Portfolio missing EN/ME
- set_simple("portfolio.empty", "en", "Portfolio is currently empty.")
- set_simple("portfolio.empty", "me", "Portfolio je trenutno prazan.")
-
- # Fix Upload Quantity missing EN
- set_simple("upload.quantity", "en", "Quantity")
- with open(path, "w", encoding="utf-8") as f:
- json.dump(data, f, ensure_ascii=False, indent=2)
- if __name__ == "__main__":
- fill_gaps()
|