diff --git a/frontend/app/locales/ua.json b/frontend/app/locales/ua.json
new file mode 100644
index 00000000..75382438
--- /dev/null
+++ b/frontend/app/locales/ua.json
@@ -0,0 +1,170 @@
+{
+ "anonymousLoginForm.length-limit": "Довжина імені повинна бути більше 3 символів",
+ "anonymousLoginForm.log-in": "Увійти",
+ "anonymousLoginForm.symbol-limit": "Ім’я користувача повинно починатися з літери і містити тільки латинські букви,цифри,знаки підкреслення і прогалини",
+ "anonymousLoginForm.user-name": "Ім’я користувача",
+ "authPanel.anonymous-provider": "Анонімно",
+ "authPanel.disable-comments": "Вімкнути коментарі",
+ "authPanel.disabled-cookies": "Заборонені third-party cookies не дозволяють працювати коментарям",
+ "authPanel.enable-comments": "Увімкнути коментари",
+ "authPanel.enable-cookies": "Дозвольте Cookies",
+ "authPanel.hide-settings": "Заховати налаштування",
+ "authPanel.logged-as": "Ви увійшли як",
+ "authPanel.login": "Вхід:",
+ "authPanel.logout": "Вийти?",
+ "authPanel.new-page": "нова сторінка",
+ "authPanel.or-provider": "або",
+ "authPanel.other-provider": "Інший",
+ "authPanel.read-only": "Тільки для читання",
+ "authPanel.request-to-delete-data": "Запросити видалення моїх даних",
+ "authPanel.show-settings": "Показати налаштування",
+ "blockingDuration.day": "На день",
+ "blockingDuration.month": "На місяць",
+ "blockingDuration.permanently": "Назавжди",
+ "blockingDuration.week": "На неділю",
+ "comment.block": "Блокувати",
+ "comment.block-user": "Заблокувати користувача {userName} {duration}?",
+ "comment.blocked-user": "Заблокованний",
+ "comment.blocking-period": "Період блокування",
+ "comment.cancel": "Відмінити",
+ "comment.controversy": "Спірність: {value}",
+ "comment.copied": "Скопійовано!",
+ "comment.copy": "Скопіювати",
+ "comment.delete": "Видалити",
+ "comment.delete-message": "Видалити коментар?",
+ "comment.deleted-comment": "Коментар був видалений",
+ "comment.deleted-user": "Видален",
+ "comment.edit": "Редагувати",
+ "comment.expired-time": "Час редагування минув.",
+ "comment.go-to-parent": "До батьківського коментарю",
+ "comment.hide": "Заховати",
+ "comment.hide-user-comment": "Заховати коментар від користувача {userName}?",
+ "comment.pin": "Закріпити",
+ "comment.pin-comment": "Закріпити коментар?",
+ "comment.reply": "Відповісти",
+ "comment.time": "{day} в {time}",
+ "comment.toggle-verification": "Змінити статус справжності облікового запису",
+ "comment.unblock": "Розблокувати",
+ "comment.unblock-user": "Розблокувати користувача?",
+ "comment.unpin": "Відкріпити",
+ "comment.unpin-comment": "Відкріпити коментар?",
+ "comment.unverified-user": "Не перевірений на справжність обліковий запис",
+ "comment.unverify-user": "Прибрати статус справжності облікового запису для{userName}?",
+ "comment.verified-user": "Справжність облікового запису",
+ "comment.verify-user": "Підтвердити справжність облікового запису для{userName}?",
+ "comment.vote-error": "Помилка голосування: {voteErrorMessage}",
+ "commentForm.anonymous-uploading-disabled": "Завантаження зображень анонімними користувачами заборонена.Будь ласка увійдіть як не анонімний користувач.",
+ "commentForm.exceeded-size": "Розмір файла {fileName} повинен бути менший ніж {maxImageSize}",
+ "commentForm.input-placeholder": "Написати коментар",
+ "commentForm.new-comment": "Новий коментар",
+ "commentForm.notice-about-styling": "Підтримуеться
Markdown форматування",
+ "commentForm.preview": "Предперегляд",
+ "commentForm.reply": "Відповісти",
+ "commentForm.save": "Зберегти",
+ "commentForm.send": "Відправити",
+ "commentForm.subscribe-by": "Підписатися",
+ "commentForm.subscribe-or": "або",
+ "commentForm.unauthorized-uploading-disabled": "Завантаження зображень недоступна для неавторизованих користувачів. Авторизуйтесь як не анонімний користувач для завантаження зображень.",
+ "commentForm.unexpected-error": "Щось пішло не так, спробуйте ще раз пізніше.",
+ "commentForm.upload-file-fail": "{fileName} неможливо завантажити через помилку: \"{errorMessage}\"",
+ "commentForm.uploading": "Завантаження...",
+ "commentForm.uploading-file": "Завантаження {fileName}...",
+ "commentSort.sort-by": "Сортувати по",
+ "commentsSort.best": "Кращі",
+ "commentsSort.least-controversial": "Найменш спірні",
+ "commentsSort.least-recently-updated": "Давно оновлені",
+ "commentsSort.most-controversial": "Найбільш спірні",
+ "commentsSort.newest": "Нові",
+ "commentsSort.oldest": "Старі",
+ "commentsSort.recently-updated": "Нещодавно оновлені",
+ "commentsSort.worst": "Гірші",
+ "emailLoginForm.back": "Назад",
+ "emailLoginForm.confirm": "Підтвердити",
+ "emailLoginForm.email-address": "Email адрес",
+ "emailLoginForm.empty-token": "Поле введення токена не повинно бути порожнім",
+ "emailLoginForm.expired-token": "Час дії токена минув",
+ "emailLoginForm.invalid-email": "Введений некоректний email адрес",
+ "emailLoginForm.loading": "Завантаження...",
+ "emailLoginForm.send-verification": "Відправити перевірку",
+ "emailLoginForm.token": "Токен",
+ "emailLoginForm.user-not-found": "Користувач не знайдений",
+ "errors.0": "Щось пішло не так,спробуйте ще раз пізніше.",
+ "errors.1": "Коментар не знайдений. Перезавантажте сторінку і спробуйте ще раз.",
+ "errors.10": "Час редагування коментаря минув.",
+ "errors.11": "На ваш коментар вже відповіли, редагування недоступне.",
+ "errors.12": "Не вдалося проголосувати. Спробуйте ще раз пізніше.",
+ "errors.13": "Ви не можете голосувати за свій коментар.",
+ "errors.14": "Ви вже голосували за цей коментар.",
+ "errors.15": "Занадто багато голосів за коментар .",
+ "errors.16": "Коментар досяг мінімальної оцінки.",
+ "errors.17": "Дія відклонена. Спробуйте ще раз пізніше.",
+ "errors.18": "Запрашиваемый файл не найден.",
+ "errors.2": "Не вдалося обробити відповідь від сервера.",
+ "errors.3": "Недостатньо прав на здійснення цієї дії.",
+ "errors.4": "Неправильно відформатований коментар.",
+ "errors.5": "Коментар не знайдений. Перезавантажте сторінку і спробуйте ще раз.",
+ "errors.6": "Сайт не знайдено. Перезавантажте сторінку і спробуйте ще раз.",
+ "errors.7": "Користувач був заблокований.",
+ "errors.8": "Користувач був заблокований.",
+ "errors.9": "Не вдалося зберегти зміни.Спробуйте ще раз пізніше.",
+ "errors.failed-fetch": "Немає відповіді с сервера.Перевірте ваше з’єднання з інтернетом або спробуйте пізніше.",
+ "errors.forbidden": "Заборонено.",
+ "errors.not-authorized": "Не авторизований.",
+ "errors.to-many-request": "Занадто багато запитів.",
+ "errors.unexpected-error": "Щось пішло не так.",
+ "root.pinned-comments": "Закріпленні коментарі",
+ "root.powered-by": "Powered by
Remark42",
+ "root.show-more": "Показати ще",
+ "settings.block": "блокувати",
+ "settings.block-time": "до {day} в {time}",
+ "settings.block-user": "Заблокувати користувача {userName}?",
+ "settings.blocked-users-header": "Заблоковані користувачі:",
+ "settings.blocked-users-title": "Заблоковані користувачі",
+ "settings.hidden-user-header": "Приховані користувачі:",
+ "settings.hidden-users-title": "Приховані користувачі",
+ "settings.hide": "Приховати",
+ "settings.no-blocked-users": "Немає заблокованих користувачів.",
+ "settings.no-hidden-users": "Немає прихованих користувачів.",
+ "settings.permanently": "назавжди",
+ "settings.show": "Показати",
+ "settings.unblock": "розблокувати",
+ "settings.unblock-user": "Розблокувати користувача {userName}?",
+ "settings.unknown": "безіменний",
+ "subscribeByEmail.back": "Назад",
+ "subscribeByEmail.close": "Закрити",
+ "subscribeByEmail.email": "Email",
+ "subscribeByEmail.expired-token": "Час дії токена минув",
+ "subscribeByEmail.have-been-subscribed": "Ви були підписані на оновлення по email",
+ "subscribeByEmail.have-been-unsubscribed": "Ви були відписані від оновлень по email",
+ "subscribeByEmail.only-registered-users": "Доступно тільки для зареєстрованих користувачів",
+ "subscribeByEmail.submit": "Відправити",
+ "subscribeByEmail.subscribe": "Підписатися",
+ "subscribeByEmail.subscribe-by-email": "Підписатися по Email",
+ "subscribeByEmail.subscribe-to-replies": "Підписатися на відповіді",
+ "subscribeByEmail.subscribed": "Ви були підписані на оновлення по email",
+ "subscribeByEmail.token": "Токен",
+ "subscribeByEmail.unsubscribe": "Відмовитися від підписки",
+ "subscribeByRSS.button-title": "Підписатися по RSS",
+ "subscribeByRSS.replies": "Відповіді",
+ "subscribeByRSS.site": "Сайт",
+ "subscribeByRSS.thread": "Ветка",
+ "subscribeByRSS.title": "RSS",
+ "toolbar.attach-image": "Прикріпити зображення,перетягніть або вставте зображення з буфера обміну",
+ "toolbar.bold": "Жирний
",
+ "toolbar.code": "Код",
+ "toolbar.header": "Заголовок",
+ "toolbar.italic": "Курсив ",
+ "toolbar.link": "Посилання ",
+ "toolbar.ordered-list": "Упорядкованний список",
+ "toolbar.quote": "Цитата",
+ "toolbar.unordered-list": "Неупорядкованний список",
+ "user-info.last-comments": "Останні коментарі {userName}",
+ "user-info.unexpected-error": "Щось пішло не так",
+ "vote.anonymous": "Не можна голосувати анонімному користувачу",
+ "vote.deleted": "Не можна голосувати за видалений коментар",
+ "vote.guest": "Увійдіть в систему для голосування",
+ "vote.only-positive": "Дозволені тільки позитивні оцінки",
+ "vote.only-post-page": "Голосування можливо тільки для статей",
+ "vote.own-comment": "Ви не можете голосувати за свої коментарі",
+ "vote.readonly": "Не можна голосувати за коментарі, які в режимі тільки для читання"
+}
diff --git a/frontend/app/utils/loadLocale.ts b/frontend/app/utils/loadLocale.ts
index fcdac2c1..3174012c 100644
--- a/frontend/app/utils/loadLocale.ts
+++ b/frontend/app/utils/loadLocale.ts
@@ -43,6 +43,11 @@ export async function loadLocale(locale: string): Promise
.then(res => res.default)
.catch(() => enMessages);
}
+ if (locale === 'ua') {
+ return import(/* webpackChunkName: "ua" */ '../locales/ua.json')
+ .then(res => res.default)
+ .catch(() => enMessages);
+ }
return enMessages;
}
diff --git a/frontend/comments.ejs b/frontend/comments.ejs
index caba10fc..50af6a97 100644
--- a/frontend/comments.ejs
+++ b/frontend/comments.ejs
@@ -68,7 +68,7 @@
var remark_config = {
site_id: query.site_id,
- host: window.location.origin,
+ host: '<%= htmlWebpackPlugin.options.remarkUrl %>',
url: query.url
};
diff --git a/frontend/counter.ejs b/frontend/counter.ejs
index b0f63920..70234b83 100644
--- a/frontend/counter.ejs
+++ b/frontend/counter.ejs
@@ -39,7 +39,7 @@