diff --git a/api/user_setting.go b/api/user_setting.go index 89ee852d..6c7ff698 100644 --- a/api/user_setting.go +++ b/api/user_setting.go @@ -36,7 +36,7 @@ func (key UserSettingKey) String() string { } var ( - UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es"} + UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk"} UserSettingAppearanceValue = []string{"system", "light", "dark"} UserSettingMemoVisibilityValue = []Visibility{Private, Protected, Public} UserSettingMemoDisplayTsOptionKeyValue = []string{"created_ts", "updated_ts"} diff --git a/web/src/components/LocaleSelect.tsx b/web/src/components/LocaleSelect.tsx index 790ee641..2b7e6460 100644 --- a/web/src/components/LocaleSelect.tsx +++ b/web/src/components/LocaleSelect.tsx @@ -30,6 +30,7 @@ const LocaleSelect: FC = (props: Props) => { + ); }; diff --git a/web/src/i18n.ts b/web/src/i18n.ts index 06978041..b0649c16 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -8,6 +8,7 @@ import nlLocale from "./locales/nl.json"; import svLocale from "./locales/sv.json"; import deLocale from "./locales/de.json"; import esLocale from "./locales/es.json"; +import ukLocale from "./locales/uk.json"; i18n.use(initReactI18next).init({ resources: { @@ -35,6 +36,9 @@ i18n.use(initReactI18next).init({ es: { translation: esLocale, }, + uk: { + translation: ukLocale, + }, }, lng: "nl", fallbackLng: "en", diff --git a/web/src/locales/uk.json b/web/src/locales/uk.json new file mode 100644 index 00000000..b88fb8ec --- /dev/null +++ b/web/src/locales/uk.json @@ -0,0 +1,256 @@ +{ + "common": { + "about": "Про Memos", + "email": "Емейл", + "password": "Пароль", + "repeat-password-short": "Повторіть", + "repeat-password": "Повторіть пароль", + "new-password": "Новий парль", + "repeat-new-password": "Повторіть новий пароль", + "username": "Ім'я користувача", + "nickname": "Нікнейм", + "save": "Зберегти", + "close": "Закрити", + "cancel": "Скасувати", + "create": "Створити", + "change": "Змінити", + "confirm": "Підтвердити", + "reset": "Стерти", + "language": "Мова", + "version": "Версія", + "pin": "Закріпити", + "unpin": "Відкріпити", + "edit": "Редагувати", + "restore": "Відновити", + "delete": "Видалити", + "null": "Пусто", + "share": "Поділитися", + "archive": "Архівувати", + "basic": "Базові", + "admin": "Адміністратор", + "explore": "Більше", + "sign-in": "Увійти", + "sign-up": "Зареєструватися", + "sign-out": "Вийти", + "back-to-home": "Повернутися на головну", + "type": "Типу", + "shortcuts": "Ярлики", + "title": "Заголовок", + "filter": "Фільтр", + "tags": "Теги", + "yourself": "Ви", + "archived-at": "Заархівовано", + "changed": "змінено", + "update-on": "Оновлено", + "fold": "Згорнути", + "expand": "Розгорнути", + "image": "Світлина", + "link": "Посилання", + "vacuum": "Стиснути", + "select": "Вибрати" + }, + "slogan": "Self-hosted платформа для записок та соціалізації з відкритим кодом An open-source.", + "auth": { + "signup-as-host": "Зареєструватися як власник", + "host-tip": "Ви реєструєте власника сайту.", + "not-host-tip": "Якщо ви не маєте акаунту, зверніться до власника сайту." + }, + "sidebar": { + "daily-review": "По днях", + "resources": "Ресурси", + "setting": "Налаштування", + "archived": "Заархівовані" + }, + "daily-review": { + "oops-nothing": "Ой, тут нічого немає." + }, + "resources": { + "description": "Переглянути ваші статичні ресурси в Memos (світлини)", + "no-resources": "Немає ресурсів.", + "fetching-data": "завантаження даних...", + "upload": "Вивантажити", + "preview": "Попередній перегляд", + "copy-link": "Копіювати посилання", + "delete-resource": "Видалити ресурс", + "warning-text": "Ви впевнені що хочете видалити цей ресурс? ЦЮ ДІЮ НЕМОЖЛИВО СКАСУВАТИ❗", + "linked-amount": "Кількість нотаток", + "rename": "Переіменувати", + "clear-unused-resources": "Видалити невикористовувані ресурси", + "warning-text-unused": "Ви впенвені що хочете видалити невикористовувані ресурси? ЦЮ ДІЮ НЕМОЖЛИВО СКАСУВАТИ❗", + "no-unused-resources": "Немає невикористаних ресурсів", + "name": "Назва" + }, + "archived": { + "archived-memos": "Заархівовані нотатки", + "no-archived-memos": "Немає заархівованих нотаток.", + "fetching-data": "завантаження даних..." + }, + "editor": { + "editing": "Редагування...", + "cancel-edit": "Скасувати", + "save": "Зберегти", + "placeholder": "Ваші думки...", + "only-image-supported": "Тільки файли-світлини підтримуються.", + "cant-empty": "Текст не може бути порожнім", + "local": "З комп'ютера", + "resources": "Завантажені" + }, + "memo": { + "view-detail": "Деталі", + "copy": "Копіювати", + "visibility": { + "private": "Видимий тільки вам", + "protected": "Видимий тільки користувачам", + "public": "Видимий усім" + } + }, + "memo-list": { + "fetching-data": "завантаження даних...", + "fetch-more": "Завантажити більше" + }, + "shortcut-list": { + "shortcut-title": "назва ярлика", + "create-shortcut": "Створити ярлик", + "edit-shortcut": "Редагувати ярлик", + "eligible-memo": "пов'язані нотатки", + "fill-previous": "Будь ласка заповніть значення фільтра", + "title-required": "Назва обов'язкова", + "value-required": "Значення фільтра обов'язкове" + }, + "filter": { + "new-filter": "Новий фільтр", + "type": { + "tag": "Тег", + "type": "Тип", + "text": "Текст", + "display-time": "Час відображення", + "visibility": "Видимість" + }, + "operator": { + "contains": "Містить", + "not-contains": "Не містить", + "is": "Є", + "is-not": "Не є", + "before": "До", + "after": "Після" + }, + "value": { + "not-tagged": "Немає тегів", + "linked": "Має посилання" + }, + "text-placeholder": "Почніть з ^ щоб використовувати регулярні вирази" + }, + "tag-list": { + "tip-text": "Введіть `#tag` щоб створити" + }, + "search": { + "quickly-filter": "Швидкий фільтр" + }, + "setting": { + "my-account": "Мій аккаунт", + "preference": "Налаштування", + "member": "Користувачі", + "member-list": "Список користувачів", + "system": "Системні", + "account-section": { + "title": "Інформація про акаунт", + "update-information": "Оновити інформацію", + "change-password": "Змінити пароль" + }, + "preference-section": { + "theme": "Тема", + "default-memo-visibility": "Стандартна видимість нотаток", + "enable-folding-memo": "Згортати нотатки", + "enable-powerful-editor": "Увімкнути потужний редактор", + "editor-font-style": "Стиль шрифта", + "mobile-editor-style": "Стиль мобільного редактора", + "default-memo-sort-option": "Час відображення закладки", + "created_ts": "Час створення", + "updated_ts": "Час оновлення" + }, + "member-section": { + "create-a-member": "Створити користувача" + }, + "system-section": { + "server-name": "Назва додатка", + "customize-server": { + "title": "Налаштувати додаток", + "default": "За замовчуванням: memos", + "icon-url": "URL іконки" + }, + "database-file-size": "Розмір файлу бази даних", + "allow-user-signup": "Дозволити реєстрацію користувачів", + "additional-style": "Кастомні стилі", + "additional-script": "Кастомні скрипти", + "additional-style-placeholder": "Додатковий CSS", + "additional-script-placeholder": "Додатковий JavaScript" + }, + "apperance-option": { + "system": "Автоматично", + "light": "Завжди світла", + "dark": "Завжди темна" + } + }, + "amount-text": { + "memo_one": "НОТАТКА", + "memo_other": "НОТАТОК", + "tag_one": "ТЕГ", + "tag_other": "ТЕГІВ", + "day_one": "ДЕНЬ", + "day_other": "ДНІВ" + }, + "message": { + "no-memos": "немає нотаток 🌃", + "memos-ready": "більше нотаток немає 🎉", + "restored-successfully": "Відновлення успішне.", + "memo-updated-datetime": "Час створення змінено.", + "invalid-created-datetime": "Невірний час створення.", + "change-memo-created-time": "Змінити час створення нотатки", + "memo-not-found": "Нотатку не знайдено.", + "fill-all": "Будь ласка заповність усі поля.", + "password-not-match": "Паролі не співпадають.", + "new-password-not-match": "Нові паролі не співпадають.", + "image-load-failed": "Помилка завантаження зображення", + "fill-form": "Будь ласка заповніть форму", + "login-failed": "Помилка входу", + "signup-failed": "Помилка реєстрації", + "user-not-found": "Користувача не знайдено", + "password-changed": "Пароль змінено", + "private-only": "Ця нотатка приватна.", + "copied": "Скопійовано", + "succeed-copy-content": "Скопійовано текст в буфер обміну.", + "succeed-copy-link": "Скопійовано посилання в буфер обміну.", + "change-resource-filename": "Змінити назву файла", + "resource-filename-updated": "Назву файла змінено.", + "invalid-resource-filename": "Невірна назва файла.", + "click-to-save-the-image": "Натисніть щоб зберегти світлину", + "generating-the-screenshot": "Створюємо знімок...", + "count-selected-resources": "Всього вибрано", + "too-short": "Занадто коротке", + "too-long": "Занадто довге", + "not-allow-space": "Пробіл не дозволено", + "not-allow-chinese": "Китайські символи не дозволено", + "succeed-vacuum-database": "БД стиснуто", + "succeed-update-additional-style": "Успішно додано стилі", + "succeed-copy-resource-link": "Посилання на ресурс скопійовано в буфер обміну", + "succeed-update-customized-profile": "Успішно збережено власний профіль", + "succeed-update-additional-script": "Успішно додано скрипти", + "update-succeed": "Збережно" + }, + "days": { + "monday": "Понеділок", + "mon": "Пон.", + "tuesday": "Вівторок", + "tue": "Вів.", + "wednesday": "Середа", + "wed": "Сер.", + "thursday": "Четвер", + "thu": "Чет.", + "friday": "П'ятниця", + "fri": "П'ят.", + "saturday": "Субота", + "sat": "Суб.", + "sunday": "Неділя", + "sun": "Нед." + } +} diff --git a/web/src/types/i18n.d.ts b/web/src/types/i18n.d.ts index 445546a2..a8771e89 100644 --- a/web/src/types/i18n.d.ts +++ b/web/src/types/i18n.d.ts @@ -1 +1 @@ -type Locale = "en" | "zh" | "vi" | "fr" | "nl" | "sv" | "de" | "es"; +type Locale = "en" | "zh" | "vi" | "fr" | "nl" | "sv" | "de" | "es" | "uk";