From 65e9fdead16da66c06f2c20a3326ca24d238195e Mon Sep 17 00:00:00 2001 From: Ivan <58773130+iFaustov@users.noreply.github.com> Date: Sat, 31 Dec 2022 04:02:14 +0300 Subject: [PATCH] feat: add russian locale (#879) --- api/user_setting.go | 2 +- web/src/components/LocaleSelect.tsx | 1 + web/src/i18n.ts | 4 + web/src/locales/ru.json | 256 ++++++++++++++++++++++++++++ web/src/types/i18n.d.ts | 2 +- 5 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 web/src/locales/ru.json diff --git a/api/user_setting.go b/api/user_setting.go index f3b272f4..3eaff207 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", "uk"} + UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk", "ru"} 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 2b7e6460..f48f6a60 100644 --- a/web/src/components/LocaleSelect.tsx +++ b/web/src/components/LocaleSelect.tsx @@ -31,6 +31,7 @@ const LocaleSelect: FC = (props: Props) => { + ); }; diff --git a/web/src/i18n.ts b/web/src/i18n.ts index b0649c16..9000a979 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -9,6 +9,7 @@ import svLocale from "./locales/sv.json"; import deLocale from "./locales/de.json"; import esLocale from "./locales/es.json"; import ukLocale from "./locales/uk.json"; +import ruLocale from "./locales/ru.json"; i18n.use(initReactI18next).init({ resources: { @@ -39,6 +40,9 @@ i18n.use(initReactI18next).init({ uk: { translation: ukLocale, }, + ru: { + translation: ruLocale, + }, }, lng: "nl", fallbackLng: "en", diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json new file mode 100644 index 00000000..3685075d --- /dev/null +++ b/web/src/locales/ru.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 платформа с открытым исходным кодом для заметок и управления записями с поддержкой социальных функций.", + "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 a8771e89..d1be9be8 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" | "uk"; +type Locale = "en" | "zh" | "vi" | "fr" | "nl" | "sv" | "de" | "es" | "uk" | "ru";