fill_admin_locales.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import json
  2. import os
  3. def fill_gaps():
  4. path = os.path.join("src", "locales", "translations.json")
  5. with open(path, "r", encoding="utf-8") as f:
  6. data = json.load(f)
  7. def set_translations(key_path, ru, ua):
  8. parts = key_path.split('.')
  9. curr = data
  10. for p in parts[:-1]:
  11. curr = curr.get(p, {})
  12. if parts[-1] in curr:
  13. curr[parts[-1]]["ru"] = ru
  14. curr[parts[-1]]["ua"] = ua
  15. # Admin Actions
  16. set_translations("admin.actions.cancel", "Отмена", "Скасувати")
  17. set_translations("admin.actions.create", "Создать", "Створити")
  18. set_translations("admin.actions.delete", "Удалить", "Видалити")
  19. set_translations("admin.actions.deleteFile", "Удалить файл", "Видалити файл")
  20. set_translations("admin.actions.edit", "Редактировать", "Редагувати")
  21. set_translations("admin.actions.printInvoice", "Печать счета", "Друк рахунку")
  22. set_translations("admin.actions.save", "Сохранить", "Зберегти")
  23. set_translations("admin.actions.savePrice", "Сохранить цену", "Зберегти ціну")
  24. set_translations("admin.actions.sending", "Отправка...", "Надсилання...")
  25. set_translations("admin.actions.toggleAdminRole", "Переключить роль админа", "Перемкнути роль адміна")
  26. set_translations("admin.actions.viewOriginal", "Оригинал", "Оригінал")
  27. set_translations("admin.addNew", "Добавить", "Додати")
  28. set_translations("admin.allStatuses", "Все статусы", "Усі статуси")
  29. set_translations("admin.dashboard", "Дэшборд", "Дешборд")
  30. # Admin Fields
  31. set_translations("admin.fields.active", "Активен", "Активний")
  32. set_translations("admin.fields.category", "Категория", "Категорія")
  33. set_translations("admin.fields.colors", "Цвета", "Кольори")
  34. set_translations("admin.fields.content", "Контент", "Контент")
  35. set_translations("admin.fields.customColorInfo", "Введите HEX или название", "Введіть HEX або назву")
  36. set_translations("admin.fields.defaultColor", "Цвет по умолчанию", "Колір за замовчуванням")
  37. set_translations("admin.fields.description", "Описание", "Опис")
  38. set_translations("admin.fields.email", "Email", "Email")
  39. set_translations("admin.fields.estimated", "Оценка", "Оцінка")
  40. set_translations("admin.fields.excerpt", "Краткое описание", "Короткий опис")
  41. set_translations("admin.fields.externalLink", "Внешняя ссылка", "Зовнішнє посилання")
  42. set_translations("admin.fields.finalPrice", "Финальная цена", "Фінальна ціна")
  43. set_translations("admin.fields.firstName", "Имя", "Ім'я")
  44. set_translations("admin.fields.imageUrl", "URL изображения", "URL зображення")
  45. set_translations("admin.fields.lastName", "Фамилия", "Прізвище")
  46. set_translations("admin.fields.name", "Название", "Назва")
  47. set_translations("admin.fields.noPhotos", "Нет фото", "Немає фото")
  48. set_translations("admin.fields.noPortfolio", "Портфолио пусто", "Портфоліо порожнє")
  49. set_translations("admin.fields.noUsers", "Пользователи не найдены", "Користувачів не знайдено")
  50. set_translations("admin.fields.notifyUser", "Уведомить клиента", "Повідомити клієнта")
  51. set_translations("admin.fields.originalSnapshot", "Снимок заказа", "Знімок замовлення")
  52. set_translations("admin.fields.password", "Пароль", "Пароль")
  53. set_translations("admin.fields.phone", "Телефон", "Телефон")
  54. set_translations("admin.fields.photoReport", "Фотоотчет", "Фотозвіт")
  55. set_translations("admin.fields.portfolioAllowed", "Разрешить в портфолио", "Дозволити в портфоліо")
  56. set_translations("admin.fields.price", "Цена", "Ціна")
  57. set_translations("admin.fields.pricePerCm3", "Цена за см³", "Ціна за см³")
  58. set_translations("admin.fields.projectNotes", "Заметки к проекту", "Нотатки до проєкту")
  59. set_translations("admin.fields.publishImmediately", "Опубликовать сразу", "Опублікувати відразу")
  60. set_translations("admin.fields.quantity", "Количество", "Кількість")
  61. set_translations("admin.fields.selectColorStrict", "Строгий выбор цвета", "Суворий вибір кольору")
  62. set_translations("admin.fields.selectMaterialStrict", "Строгий выбор материала", "Суворий вибір матеріалу")
  63. set_translations("admin.fields.shippingAddress", "Адрес доставки", "Адреса доставки")
  64. set_translations("admin.fields.slug", "Slug (URL)", "Slug (URL)")
  65. set_translations("admin.fields.snapshotInfo", "Состояние заказа на момент создания", "Стан замовлення на момент створення")
  66. set_translations("admin.fields.sourceFiles", "Исходные файлы", "Вихідні файли")
  67. set_translations("admin.fields.strictSelectionInfo", "Клиент может выбирать только из списка", "Клієнт може вибирати тільки зі списку")
  68. set_translations("admin.fields.techType", "Тип технологии", "Тип технології")
  69. set_translations("admin.fields.title", "Заголовок", "Заголовок")
  70. # Labels
  71. set_translations("admin.labels.actions", "Действия", "Дії")
  72. set_translations("admin.labels.chat", "Чат", "Чат")
  73. set_translations("admin.labels.contact", "Контакт", "Контакт")
  74. set_translations("admin.labels.registered", "Зарегистрирован", "Зареєстрований")
  75. set_translations("admin.labels.role", "Роль", "Роль")
  76. set_translations("admin.labels.user", "Пользователь", "Користувач")
  77. set_translations("admin.managementCenter", "Центр управления", "Центр управління")
  78. # Modals
  79. set_translations("admin.modals.createMaterial", "Добавить материал", "Додати матеріал")
  80. set_translations("admin.modals.createPost", "Новая запись", "Новий запис")
  81. set_translations("admin.modals.createService", "Новая услуга", "Нова послуга")
  82. set_translations("admin.modals.createUser", "Новый пользователь", "Новий користувач")
  83. set_translations("admin.modals.editMaterial", "Редактировать материал", "Редагувати матеріал")
  84. set_translations("admin.modals.editPost", "Редактировать запись", "Редагувати запис")
  85. set_translations("admin.modals.editService", "Редактировать услугу", "Редагувати послугу")
  86. set_translations("admin.modals.editUser", "Редактировать пользователя", "Редагувати користувача")
  87. set_translations("admin.searchPlaceholder", "Поиск...", "Пошук...")
  88. set_translations("admin.searchUsersPlaceholder", "Поиск пользователей...", "Пошук користувачів...")
  89. # Toasts
  90. set_translations("admin.toasts.chatDisabled", "Чат отключен", "Чат вимкнено")
  91. set_translations("admin.toasts.chatEnabled", "Чат включен", "Чат увімкнено")
  92. set_translations("admin.toasts.fileAttached", "Файл прикреплен", "Файл прикріплено")
  93. set_translations("admin.toasts.fileDeleted", "Файл удален", "Файл видалено")
  94. set_translations("admin.toasts.genericError", "Произошла ошибка", "Сталася помилка")
  95. set_translations("admin.toasts.loadError", "Ошибка загрузки", "Помилка завантаження")
  96. set_translations("admin.toasts.materialDeleted", "Материал удален", "Матеріал видалено")
  97. set_translations("admin.toasts.materialSaved", "Материал сохранен", "Матеріал збережено")
  98. set_translations("admin.toasts.noConsent", "Нет согласия", "Немає згоди")
  99. set_translations("admin.toasts.paramsUpdated", "Параметры обновлены", "Параметри оновлено")
  100. set_translations("admin.toasts.photoAdded", "Фото добавлено", "Фото додано")
  101. set_translations("admin.toasts.postDeleted", "Запись удалена", "Запис видалено")
  102. set_translations("admin.toasts.postSaved", "Запись сохранена", "Запис збережено")
  103. set_translations("admin.toasts.priceUpdated", "Цена обновлена", "Ціна оновлена")
  104. set_translations("admin.toasts.roleUpdated", "Роль обновлена", "Роль оновлена")
  105. set_translations("admin.toasts.serviceDeleted", "Услуга удалена", "Послуга видалена")
  106. set_translations("admin.toasts.serviceSaved", "Услуга сохранена", "Послугу збережено")
  107. set_translations("admin.toasts.statusUpdated", "Статус обновлен", "Статус оновлено")
  108. set_translations("admin.toasts.userCreated", "Пользователь создан", "Користувач створений")
  109. set_translations("admin.toasts.userSaved", "Пользователь сохранен", "Користувача збережено")
  110. set_translations("admin.total", "Всего", "Всього")
  111. # Auth
  112. set_translations("auth.fields.newPassword", "Новый пароль", "Новий пароль")
  113. set_translations("auth.studio", "Студия 3D Печати", "Студія 3D Друку")
  114. set_translations("auth.toasts.accountCreated", "Аккаунт создан! Теперь можно войти.", "Акаунт створено! Тепер можна увійти.")
  115. set_translations("auth.toasts.passwordChanged", "Пароль успешно изменен!", "Пароль успішно змінено!")
  116. set_translations("auth.toasts.passwordsNoMatch", "Пароли не совпадают", "Паролі не збігаються")
  117. set_translations("auth.toasts.resetLinkSent", "Ссылка на сброс пароля отправлена на почту.", "Посилання на скидання пароля надіслано на пошту.")
  118. set_translations("auth.toasts.socialSoon", "Вход через {provider} скоро появится!", "Вхід через {provider} скоро з'явиться!")
  119. set_translations("auth.toasts.welcomeBack", "С возвращением!", "З поверненням!")
  120. # Blog & Errors
  121. set_translations("blog.exploreOther", "Посмотреть другие", "Переглянути інші")
  122. set_translations("blog.loading", "Загрузка записей...", "Завантаження записів...")
  123. set_translations("blog.loadingSingle", "Загрузка записи...", "Завантаження запису...")
  124. set_translations("blog.notFound", "Запись не найдена", "Запис не знайдено")
  125. set_translations("errors.404.button", "Вернуться на главную", "Повернутися на головну")
  126. set_translations("errors.404.subtitle", "Страница не найдена", "Сторінка не знайдена")
  127. set_translations("errors.404.title", "Ошибка 404", "Помилка 404")
  128. # Footer & Nav
  129. set_translations("footer.location", "Херцег-Нови, Черногория", "Херцег-Нові, Чорногорія")
  130. set_translations("nav.admin", "Админ", "Адмін")
  131. set_translations("nav.adminPanel", "Панель управления", "Панель управління")
  132. set_translations("nav.loggedOut", "Вы успешно вышли", "Ви успішно вийшли")
  133. set_translations("nav.nuances", "Нюансы", "Нюанси")
  134. set_translations("nav.unreadMessages", "Непрочитанные сообщения", "Непрочитані повідомлення")
  135. set_translations("nav.unreadTooltip", "У вас есть непрочитанные сообщения", "У вас є непрочитані повідомлення")
  136. # Orders
  137. set_translations("orders.labels.estimate", "Расчет", "Розрахунок")
  138. set_translations("orders.labels.materialColor", "Материал и цвет", "Матеріал та колір")
  139. set_translations("orders.labels.myNotes", "Мои заметки", "Мої замітки")
  140. set_translations("orders.labels.progressReport", "Отчет о выполнении", "Звіт про виконання")
  141. set_translations("orders.labels.projectFiles", "Файлы проекта", "Файли проєкту")
  142. set_translations("orders.labels.quantity", "Кол-во", "К-сть")
  143. set_translations("orders.labels.status", "Статус", "Статус")
  144. # Portfolio & Privacy
  145. set_translations("portfolio.emptyDesc", "Здесь скоро появятся наши новые работы.", "Тут скоро з'являться наші нові роботи.")
  146. set_translations("portfolio.emptyTitle", "Портфолио пусто", "Портфоліо порожнє")
  147. set_translations("portfolio.loading", "Загрузка портфолио...", "Завантаження портфоліо...")
  148. set_translations("privacy.contactDesc", "Если у вас есть вопросы, наша команда всегда готова помочь.", "Якщо у вас є питання, наша команда завжди готова допомогти.")
  149. set_translations("privacy.contactTitle", "Нужна помощь?", "Потрібна допомога?")
  150. set_translations("privacy.responseNotice", "Мы отвечаем на все запросы в течение 48 часов.", "Ми відповідаємо на всі запити протягом 48 годин.")
  151. # Upload
  152. set_translations("upload.error", "Ошибка загрузки", "Помилка завантаження")
  153. set_translations("upload.estimatedTotal", "Приблизительный итог", "Орієнтовний підсумок")
  154. set_translations("upload.priceDisclaimer", "Финальная цена может измениться после проверки", "Фінальна ціна може змінитися після перевірки")
  155. set_translations("upload.selectColor", "Выберите цвет", "Виберіть колір")
  156. # Footer missing ones
  157. def set_simple(path, lang, val):
  158. parts = path.split('.')
  159. curr = data
  160. for p in parts[:-1]: curr = curr.get(p, {})
  161. if parts[-1] in curr:
  162. if isinstance(curr[parts[-1]], dict):
  163. curr[parts[-1]][lang] = val
  164. else:
  165. pass
  166. set_simple("footer.contactDesc", "me", "Ako imate bilo kakvih pitanja, slobodno nas kontaktirajte.")
  167. set_simple("footer.contactDesc", "ru", "Если у вас есть вопросы, свяжитесь с нами.")
  168. set_simple("footer.contactDesc", "ua", "Якщо у вас є питання, зв'яжіться з нами.")
  169. set_simple("footer.contactTitle", "me", "Kontakt")
  170. set_simple("footer.contactTitle", "ru", "Контакты")
  171. set_simple("footer.contactTitle", "ua", "Контакти")
  172. set_simple("footer.intro", "me", "Bavimo se digitalnom zanatom kroz 3D štampu u Crnoj Gori.")
  173. set_simple("footer.intro", "ru", "Мы занимаемся цифровым ремеслом через 3D-печать в Черногории.")
  174. set_simple("footer.intro", "ua", "Ми займаємося цифровим ремеслом через 3D-друк у Чорногорії.")
  175. # Fix Portfolio missing EN/ME
  176. set_simple("portfolio.empty", "en", "Portfolio is currently empty.")
  177. set_simple("portfolio.empty", "me", "Portfolio je trenutno prazan.")
  178. # Fix Upload Quantity missing EN
  179. set_simple("upload.quantity", "en", "Quantity")
  180. with open(path, "w", encoding="utf-8") as f:
  181. json.dump(data, f, ensure_ascii=False, indent=2)
  182. if __name__ == "__main__":
  183. fill_gaps()