1.0.0 (#26)
Build / Build [amd64] (push) Has been cancelled
Build / Build [arm64] (push) Has been cancelled
Build / Publish (push) Has been cancelled

* bump outline to 1.0.0-2

* update translation.json

* update readme.*

* update Dockerfile*

* bump outline to 1.0.0-test8

* reorganize repo, add git hook

* bump version to 1.0.0

* update translations
This commit is contained in:
Evgeny
2025-10-27 17:47:11 +05:00
committed by GitHub
parent 7bcf8279e2
commit daa7561aff
12 changed files with 210 additions and 99 deletions
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
WORKDIR="$(dirname "$(readlink -f "${0}")")"
if ! git diff --cached --quiet --submodule=diff -- ./outline; then
python "$WORKDIR/update_readme.py"
git add ./README.md
exit 0
else
exit 0
fi
@@ -19,13 +19,13 @@ def get_version(path):
def replace_version(path, version): def replace_version(path, version):
with open(path, 'r') as file: with open(path, 'r') as file:
content = file.read() content = file.read()
pattern = re.compile(r'(\d+\.\d+\.\d+)') pattern = re.compile(r'(\d+\.\d+\.\d+(-\w+)?)')
check = lambda x: ignore if ignore == x.group(0) else version check = lambda x: ignore if ignore == x.group(0) else version
with open(path, 'w') as file: with open(path, 'w') as file:
file.write(pattern.sub(check, content)) file.write(pattern.sub(check, content))
version = get_version(resolve('../outline/package.json')) version = get_version(resolve('../../outline/package.json'))
replace_version(resolve('../README.md'), version) replace_version(resolve('../../README.md'), version)
+2 -2
View File
@@ -1,2 +1,2 @@
tools/*.json translation/*.json
!tools/translation.json !translation/ru.json
+2 -2
View File
@@ -1,4 +1,4 @@
FROM node:20 AS base FROM node:22 AS base
ARG APP_PATH ARG APP_PATH
ARG SRC_PATH ARG SRC_PATH
WORKDIR $APP_PATH WORKDIR $APP_PATH
@@ -19,7 +19,7 @@ RUN yarn install --no-optional --frozen-lockfile --network-timeout 1000000 && \
yarn cache clean yarn cache clean
COPY ${SRC_PATH} . COPY ${SRC_PATH} .
COPY --from=deps $APP_PATH/node_modules ./node_modules COPY --from=deps $APP_PATH/node_modules ./node_modules
COPY ./tools/patches/* . COPY ./patches/* .
RUN for patch in $(ls *.patch); do patch -p1 < $patch; done RUN for patch in $(ls *.patch); do patch -p1 < $patch; done
RUN cat <<EOF > /entrypoint.sh RUN cat <<EOF > /entrypoint.sh
npx yarn concurrently -n "dev,i18n" \ npx yarn concurrently -n "dev,i18n" \
+7 -7
View File
@@ -1,4 +1,4 @@
FROM node:20 AS base FROM node:22 AS base
ARG APP_PATH ARG APP_PATH
ARG SRC_PATH ARG SRC_PATH
WORKDIR $APP_PATH WORKDIR $APP_PATH
@@ -18,9 +18,9 @@ ENV NODE_OPTIONS="--max-old-space-size=24000"
RUN yarn install --no-optional --frozen-lockfile --network-timeout 1000000 && \ RUN yarn install --no-optional --frozen-lockfile --network-timeout 1000000 && \
yarn cache clean yarn cache clean
COPY ${SRC_PATH} . COPY ${SRC_PATH} .
COPY ./tools/patches/lang.patch . COPY ./patches/lang.patch .
RUN for patch in $(ls *.patch); do patch -p1 < $patch; done RUN patch -p1 < lang.patch
COPY ./tools/translation.json ./shared/i18n/locales/ru_RU/translation.json COPY ./translation/ru.json ./shared/i18n/locales/ru_RU/translation.json
ARG CDN_URL ARG CDN_URL
RUN yarn build && rm -rf node_modules RUN yarn build && rm -rf node_modules
@@ -32,10 +32,10 @@ ARG DATA_PATH=/var/lib/outline/data
ARG USER=nodejs ARG USER=nodejs
ARG APP_PATH ARG APP_PATH
WORKDIR $APP_PATH WORKDIR $APP_PATH
RUN useradd -m -U ${USER} && \ RUN addgroup --gid 1001 ${USER} && \
adduser --uid 1001 --ingroup ${USER} ${USER} && \
mkdir -p ${DATA_PATH} && \ mkdir -p ${DATA_PATH} && \
chown -R ${USER}:${USER} ${APP_PATH} ${DATA_PATH}/.. && \ chown -R ${USER}:${USER} ${DATA_PATH}/..
chmod 1777 ${DATA_PATH}
COPY --chown=${USER} --from=deps $APP_PATH/node_modules ./node_modules COPY --chown=${USER} --from=deps $APP_PATH/node_modules ./node_modules
COPY --chown=${USER} --from=build $APP_PATH/build ./build COPY --chown=${USER} --from=build $APP_PATH/build ./build
COPY --chown=${USER} --from=build $APP_PATH/server ./server COPY --chown=${USER} --from=build $APP_PATH/server ./server
+53 -41
View File
@@ -20,8 +20,8 @@
```yaml ```yaml
services: services:
outline: outline:
image: flameshikari/outline-ru:0.87.3 image: flameshikari/outline-ru:1.0.0
# image: ghcr.io/flameshikari/outline-ru:0.87.3 # image: ghcr.io/flameshikari/outline-ru:1.0.0
env_file: ./docker.env env_file: ./docker.env
expose: expose:
- 3000 - 3000
@@ -38,60 +38,72 @@ services:
### Ключевые файлы ### Ключевые файлы
- русский перевод — [tools/translation.json](./tools/translation.json) - русский перевод — [translation/ru.json](./translation/ru.json)
- английский перевод — [outline/shared/i18n/locales/en_US/translation.json](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json) - английский перевод — [outline/shared/i18n/locales/en_US/translation.json](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json)
- временный файл — [tools/translation.tmp.json]() (существует только локально) - временный файл — [translation/tmp.json]() (существует только локально)
### Быстрый старт ### Описание работы скрипта
0. Клонирование репозитория с подмодулем: Скрипт [translation/merge.py](./translation/merge.py) используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
```sh
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
```
1. Пулл изменений в подмодуле и переключение на коммит с целевой версией:
```sh
cd outline
git pull --rebase --tags
git checkout v0.87.3
cd -
```
2. Запуск контейнеров:
```sh
docker compose up -d --build
```
Веб-интерфейс Outline будет доступен по [этой ссылке](http://localhost:10240); входить с помощью OpenID Connect под логином/паролем `outline`.
3. Формирование временного файла с помощью [tools/diff.py](./tools/diff.py):
```sh
python tools/diff.py
```
После можно приступить к переводу сфомированного временного файла. После перевода временного файла скопируйте его в файл русского перевода. Любые изменения в русском переводе обновят [открытую веб-страницу](http://localhost:10240) через пару секунд.
### Описание
Скрипт [tools/diff.py](./tools/diff.py) используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
- сохраняет актуальные переведённые строки - сохраняет актуальные переведённые строки
- удаляет неактуальные переведённые строки - удаляет неактуальные переведённые строки
- если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть - если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть
- новые непереведённые строки добавляются в конец - новые непереведённые строки добавляются в конец
> Если во временном файле присутствуют две одинаковые непереведённые строки, но одна из них с суффиксом `_plural` (множественное число), например: > Также скрипт конвертирует строки с суффиксом `_plural` (англ. множественное число) в строки с числовыми суффиксами, поддерживающие склонение по падежам. Например, имеем исходные данные:
> >
> ```json > ```jsonc
> { > {
> // ...
> "{{ count }} comment": "{{ count }} comment", > "{{ count }} comment": "{{ count }} comment",
> "{{ count }} comment_plural": "{{ count }} comments" > "{{ count }} comment_plural": "{{ count }} comments"
> // ...
> } > }
> ``` > ```
> …то нужно заменить эти строки на следующие (для справки: [множественное число](https://www.i18next.com/translation-function/plurals#languages-with-multiple-plurals) в [i18next](https://www.i18next.com) с [JSON-форматом версии 3](https://www.i18next.com/misc/json-format#i18next-json-v3)): > Строки после конвертации скриптом:
> > ```jsonc
> ```json
> { > {
> "{{ count }} comment_0": "{{ count }} комментарий", > // ...
> "{{ count }} comment_1": "{{ count }} комментария", > "{{ count }} comment_0": "[NOT TRANSLATED]",
> "{{ count }} comment_2": "{{ count }} комментариев" > "{{ count }} comment_1": "[NOT TRANSLATED]",
> "{{ count }} comment_2": "[NOT TRANSLATED]"
> // ...
> } > }
> ``` > ```
> Конвертированные строки после перевода:
> ```jsonc
> {
> // ...
> "{{ count }} comment_0": "{{ count }} комментарий", // ед. число, им. падеж
> "{{ count }} comment_1": "{{ count }} комментария", // ед. число, род. падеж
> "{{ count }} comment_2": "{{ count }} комментариев" // мн. число, род. падеж
> // ...
> }
> ```
> Документация: [множественное число](https://www.i18next.com/translation-function/plurals#languages-with-multiple-plurals) в [i18next](https://www.i18next.com) с [JSON-форматом версии 3](https://www.i18next.com/misc/json-format#i18next-json-v3)
### Быстрый старт
1. Клонирование репозитория с подмодулем:
```sh
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
```
2. Пулл изменений в подмодуле и переключение на последний доступный тег:
```sh
git submodule foreach 'git pull --rebase --tags && git checkout v1.0.0'
```
3. Запуск контейнеров:
```sh
docker compose up -d --build
```
Веб-интерфейс Outline будет доступен по [этой ссылке](http://localhost:10240); входить с помощью OpenID Connect под логином/паролем `outline`.
4. Формирование временного файла с помощью [translation/merge.py](./translation/merge.py):
```sh
python translation/merge.py
```
После можно приступить к переводу сфомированного временного файла. После перевода временного файла скопируйте его в файл русского перевода. Любые изменения в русском переводе обновят [открытую веб-страницу](http://localhost:10240) через пару секунд.
+1 -1
View File
@@ -22,7 +22,7 @@ services:
- outline-redis - outline-redis
- outline-oidc - outline-oidc
volumes: volumes:
- ./tools/translation.json:/opt/outline/shared/i18n/locales/ru_RU/translation.json - ./translation/ru.json:/opt/outline/shared/i18n/locales/ru_RU/translation.json
outline-oidc: outline-oidc:
extends: extends:
+1 -1
Submodule outline updated: 5d871beee2...3551d16bd8
+2 -2
View File
@@ -10,9 +10,9 @@ def resolve(path):
en_json_path = resolve('../outline/shared/i18n/locales/en_US/translation.json') en_json_path = resolve('../outline/shared/i18n/locales/en_US/translation.json')
ru_json_path = resolve('./translation.json') ru_json_path = resolve('./ru.json')
out_json_name = 'translation.tmp.json' out_json_name = 'tmp.json'
out_json_path = resolve(out_json_name) out_json_path = resolve(out_json_name)
translated_lines = {} translated_lines = {}
+128 -40
View File
@@ -12,6 +12,11 @@
"Permissions": "Права доступа", "Permissions": "Права доступа",
"Collection permissions": "Права доступа к коллекции", "Collection permissions": "Права доступа к коллекции",
"Share this collection": "Поделиться этой коллекцией", "Share this collection": "Поделиться этой коллекцией",
"Import document": "Импорт документа",
"Sort in sidebar": "Сортировка в боковой панели",
"A-Z sort": "Сортировка А–Я",
"Z-A sort": "Сортировка А–Я",
"Manual sort": "Ручная сортировка",
"Search in collection": "Поиск в коллекции", "Search in collection": "Поиск в коллекции",
"Star": "Добавить в избранное", "Star": "Добавить в избранное",
"Unstar": "Убрать из избранного", "Unstar": "Убрать из избранного",
@@ -83,7 +88,6 @@
"Search in document": "Поиск в документе", "Search in document": "Поиск в документе",
"Print": "Печать", "Print": "Печать",
"Print document": "Печать документа", "Print document": "Печать документа",
"Import document": "Импорт документа",
"Templatize": "Шаблонизировать", "Templatize": "Шаблонизировать",
"Create template": "Создать шаблон", "Create template": "Создать шаблон",
"Open random document": "Открыть случайный документ", "Open random document": "Открыть случайный документ",
@@ -175,6 +179,7 @@
"currently viewing": "сейчас просматривается", "currently viewing": "сейчас просматривается",
"previously edited": "ранее отредактировано", "previously edited": "ранее отредактировано",
"You": "Вы", "You": "Вы",
"Avatar of {{ name }}": "Аватар {{ name }}",
"Viewers": "Наблюдатели", "Viewers": "Наблюдатели",
"Collections are used to group documents and choose permissions": "Коллекции используются для группировки документов и выбора разрешений", "Collections are used to group documents and choose permissions": "Коллекции используются для группировки документов и выбора разрешений",
"Name": "Имя", "Name": "Имя",
@@ -205,7 +210,6 @@
"Move document": "Переместить документ", "Move document": "Переместить документ",
"Moving": "Идет перемещение", "Moving": "Идет перемещение",
"Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.": "Перемещение документа <em>{{ title }}</em> в коллекцию {{ newCollectionName }} изменит права доступа для всех участников рабочего пространства с <em>{{ prevPermission }}</em> на <em>{{ newPermission }}</em>.", "Moving the document <em>{{ title }}</em> to the {{ newCollectionName }} collection will change permission for all workspace members from <em>{{ prevPermission }}</em> to <em>{{ newPermission }}</em>.": "Перемещение документа <em>{{ title }}</em> в коллекцию {{ newCollectionName }} изменит права доступа для всех участников рабочего пространства с <em>{{ prevPermission }}</em> на <em>{{ newPermission }}</em>.",
"Submenu": "Подменю",
"Collections could not be loaded, please reload the app": "Не удалось загрузить коллекции, пожалуйста, перезагрузите приложение", "Collections could not be loaded, please reload the app": "Не удалось загрузить коллекции, пожалуйста, перезагрузите приложение",
"Start view": "Начать просмотр", "Start view": "Начать просмотр",
"Install now": "Установить сейчас", "Install now": "Установить сейчас",
@@ -216,7 +220,6 @@
"Deleted Collection": "Удаленная коллекция", "Deleted Collection": "Удаленная коллекция",
"Untitled": "Без названия", "Untitled": "Без названия",
"Unpin": "Открепить", "Unpin": "Открепить",
"{{ minutes }}m read": "{{ minutes }} минут чтения",
"Select a location to copy": "Выберите место для копирования", "Select a location to copy": "Выберите место для копирования",
"Document copied": "Документ скопирован", "Document copied": "Документ скопирован",
"Couldnt copy the document, try again?": "Не удалось скопировать документ. Попробовать снова?", "Couldnt copy the document, try again?": "Не удалось скопировать документ. Попробовать снова?",
@@ -288,6 +291,7 @@
"{{count}} more user_0": "Ещё {{count}} пользователь", "{{count}} more user_0": "Ещё {{count}} пользователь",
"{{count}} more user_1": "Ещё {{count}} пользователя", "{{count}} more user_1": "Ещё {{count}} пользователя",
"{{count}} more user_2": "Ещё {{count}} пользователей", "{{count}} more user_2": "Ещё {{count}} пользователей",
"Filter options": "Параметры фильтра",
"Filter": "Фильтр", "Filter": "Фильтр",
"No results": "Ничего не найденo", "No results": "Ничего не найденo",
"{{authorName}} created <3></3>": "{{authorName}} создал <3></3>", "{{authorName}} created <3></3>": "{{authorName}} создал <3></3>",
@@ -319,7 +323,15 @@
"Permission": "Право доступа", "Permission": "Право доступа",
"Change Language": "Сменить язык", "Change Language": "Сменить язык",
"Dismiss": "Убрать", "Dismiss": "Убрать",
"Unable to download image": "Не удалось скачать изображение",
"Lightbox": "Лайтбокс",
"View, navigate, or download images in the document": "Просмотр, навигация или загрузка изображений в документе",
"Zoom in": "Приблизить",
"Zoom out": "Отдалить",
"Close": "Закрыть", "Close": "Закрыть",
"Previous": "Предыдущий",
"Next": "Следующий",
"Image failed to load": "Ошибка загрузки изображения",
"Youre offline.": "Вы не в сети.", "Youre offline.": "Вы не в сети.",
"Sorry, an error occurred.": "К сожалению, произошла ошибка.", "Sorry, an error occurred.": "К сожалению, произошла ошибка.",
"Click to retry": "Кликните, чтобы повторить", "Click to retry": "Кликните, чтобы повторить",
@@ -328,6 +340,7 @@
"Mark all as read": "Отметить все как прочитанное", "Mark all as read": "Отметить все как прочитанное",
"You're all caught up": "Вы в теме", "You're all caught up": "Вы в теме",
"Icon": "Иконка", "Icon": "Иконка",
"OAuth client icon": "Иконка OAuth-клиента",
"My App": "Мое приложение", "My App": "Мое приложение",
"Tagline": "Слоган", "Tagline": "Слоган",
"A short description": "Краткое описание", "A short description": "Краткое описание",
@@ -343,6 +356,7 @@
"Reaction picker": "Выбор реакции", "Reaction picker": "Выбор реакции",
"Could not load reactions": "Не удалось загрузить реакции", "Could not load reactions": "Не удалось загрузить реакции",
"Reaction": "Реакция", "Reaction": "Реакция",
"{{ minutes }}m read": "{{ minutes }} минут чтения",
"Revision deleted": "Ревизия удалена", "Revision deleted": "Ревизия удалена",
"Current version": "Текущая версия", "Current version": "Текущая версия",
"{{userName}} edited": "{{userName}} отредактировал", "{{userName}} edited": "{{userName}} отредактировал",
@@ -364,6 +378,8 @@
"Disable this setting to discourage search engines from indexing the page": "Отключите этот параметр, чтобы запретить поисковым системам индексировать страницу", "Disable this setting to discourage search engines from indexing the page": "Отключите этот параметр, чтобы запретить поисковым системам индексировать страницу",
"Show last modified": "Показать последний изменённый", "Show last modified": "Показать последний изменённый",
"Display the last modified timestamp on the shared page": "Показывать метки времени последнего изменения на общей странице", "Display the last modified timestamp on the shared page": "Показывать метки времени последнего изменения на общей странице",
"Show table of contents": "Показать оглавление",
"Display the table of contents on documents by default": "Показывать оглавление в документах по умолчанию",
"All documents in this collection will be shared on the web, including any new documents added later": "Все документы этой коллекции будут опубликованы в Интернете, включая любые новые документы, добавленные позже", "All documents in this collection will be shared on the web, including any new documents added later": "Все документы этой коллекции будут опубликованы в Интернете, включая любые новые документы, добавленные позже",
"Invite": "Приглашение", "Invite": "Приглашение",
"{{ userName }} was added to the collection": "{{ userName }} добавлен в коллекцию", "{{ userName }} was added to the collection": "{{ userName }} добавлен в коллекцию",
@@ -410,17 +426,22 @@
"{{ count }} groups added to the document_1": "{{ count }} группы были добавлены в документ", "{{ count }} groups added to the document_1": "{{ count }} группы были добавлены в документ",
"{{ count }} groups added to the document_2": "{{ count }} групп были добавлена в документ", "{{ count }} groups added to the document_2": "{{ count }} групп были добавлена в документ",
"Logo": "Логотип", "Logo": "Логотип",
"Expand sidebar": "Развернуть боковую панель",
"Collapse sidebar": "Свернуть боковую панель",
"Archived collections": "Архивированные коллекции", "Archived collections": "Архивированные коллекции",
"New doc": "Новый документ", "New doc": "Новый документ",
"Empty": "Пусто", "Empty": "Пусто",
"No collections": "Нет коллекций",
"Collapse": "Свернуть", "Collapse": "Свернуть",
"Expand": "Развернуть", "Expand": "Развернуть",
"Document not supported try Markdown, Plain text, HTML, or Word": "Документ не поддерживается — попробуйте Markdown, HTML, простой текст или Word", "Document not supported try Markdown, Plain text, HTML, or Word": "Документ не поддерживается — попробуйте Markdown, HTML, простой текст или Word",
"Import files": "Импорт файлов",
"Go back": "Назад", "Go back": "Назад",
"Go forward": "Вперед", "Go forward": "Вперед",
"Could not load shared documents": "Не удалось загрузить общие документы", "Could not load shared documents": "Не удалось загрузить общие документы",
"Shared with me": "Поделился со мной", "Shared with me": "Поделился со мной",
"Show more": "Развернуть", "Show more": "Развернуть",
"Link options": "Параметры ссылки",
"Could not load starred documents": "Не удалось загрузить избранные документы", "Could not load starred documents": "Не удалось загрузить избранные документы",
"Starred": "Избранное", "Starred": "Избранное",
"Up to date": "Последняя версия", "Up to date": "Последняя версия",
@@ -455,7 +476,6 @@
"New email": "Новое письмо", "New email": "Новое письмо",
"Email can't be empty": "Письмо не может быть пустым", "Email can't be empty": "Письмо не может быть пустым",
"Your import completed": "Ваш импорт завершен", "Your import completed": "Ваш импорт завершен",
"Sorry, invalid embed link": "Извините, неверная встраиваемая ссылка",
"Previous match": "Предыдущее совпадение", "Previous match": "Предыдущее совпадение",
"Next match": "Следующее совпадение", "Next match": "Следующее совпадение",
"Find and replace": "Найти и заменить", "Find and replace": "Найти и заменить",
@@ -466,12 +486,24 @@
"Replacement": "Замена", "Replacement": "Замена",
"Replace": "Заменить", "Replace": "Заменить",
"Replace all": "Заменить все", "Replace all": "Заменить все",
"Image width": "Ширина изображения",
"Width": "Ширина",
"Image height": "Высота изображения",
"Height": "Высота",
"Profile picture": "Фото профиля", "Profile picture": "Фото профиля",
"Create a new doc": "Создать новый документ", "Create a new doc": "Создать новый документ",
"{{ userName }} won't be notified, as they do not have access to this document": "{{ userName }} не будет уведомлен, так как у него нет доступа к этому документу", "{{ userName }} won't be notified, as they do not have access to this document": "{{ userName }} не будет уведомлен, так как у него нет доступа к этому документу",
"Keep as link": "Сохранить как ссылку", "Keep as link": "Сохранить как ссылку",
"Mention": "Упоминание", "Mention": "Упоминание",
"Embed": "Вставить", "Embed": "Вставить",
"More options": "Больше параметров",
"Rename": "Переименовать",
"Insert after": "Вставить после",
"Insert before": "Вставить до",
"Move up": "Сдвинуть вверх",
"Move down": "Сдвинуть вниз",
"Move left": "Сдвинуть влево",
"Move right": "Сдвинуть вправо",
"Align center": "По центру", "Align center": "По центру",
"Align left": "По левому краю", "Align left": "По левому краю",
"Align right": "По правому краю", "Align right": "По правому краю",
@@ -549,7 +581,6 @@
"Video": "Видео", "Video": "Видео",
"None": "Никто", "None": "Никто",
"Delete embed": "Удалить вставку", "Delete embed": "Удалить вставку",
"Rename": "Переименовать",
"Could not import file": "Не удалось импортировать файл", "Could not import file": "Не удалось импортировать файл",
"Unsubscribed from document": "Отписаться от документа", "Unsubscribed from document": "Отписаться от документа",
"Unsubscribed from collection": "Отменена подписка на коллекцию", "Unsubscribed from collection": "Отменена подписка на коллекцию",
@@ -567,10 +598,6 @@
"Integrations": "Интеграции", "Integrations": "Интеграции",
"API key": "Ключ API", "API key": "Ключ API",
"Show path to document": "Показать путь к документу", "Show path to document": "Показать путь к документу",
"Sort in sidebar": "Сортировка в боковой панели",
"A-Z sort": "Сортировка А–Я",
"Z-A sort": "Сортировка А–Я",
"Manual sort": "Ручная сортировка",
"Collection menu": "Меню коллекции", "Collection menu": "Меню коллекции",
"Comment options": "Настройки комментариев", "Comment options": "Настройки комментариев",
"Enable viewer insights": "Включить подробности о наблюдателях", "Enable viewer insights": "Включить подробности о наблюдателях",
@@ -676,8 +703,11 @@
"You may have lost access to this document, try reloading": "Возможно, вы потеряли доступ к этому документу, попробуйте перезагрузить страницу", "You may have lost access to this document, try reloading": "Возможно, вы потеряли доступ к этому документу, попробуйте перезагрузить страницу",
"Too many users connected to document": "К документу подключено слишком много пользователей", "Too many users connected to document": "К документу подключено слишком много пользователей",
"Your edits will sync once other users leave the document": "Ваши изменения будут синхронизированы, как только другие пользователи покинут документ", "Your edits will sync once other users leave the document": "Ваши изменения будут синхронизированы, как только другие пользователи покинут документ",
"New version available": "Новая версия доступна",
"Please reload the page to update to the latest version": "Пожалуйста, перезагрузите страницу, чтобы обновить её до последней версии",
"Server connection lost": "Потеряна связь с сервером", "Server connection lost": "Потеряна связь с сервером",
"Edits you make will sync once youre online": "Правки, которые вы делаете, будут синхронизированы после того, как вы будете в сети", "Edits you make will sync once youre online": "Правки, которые вы делаете, будут синхронизированы после того, как вы будете в сети",
"Offline": "Не в сети",
"Document restored": "Документ восстановлен", "Document restored": "Документ восстановлен",
"Images are still uploading.\nAre you sure you want to discard them?": "Изображения все еще загружаются.\nВы уверены, что хотите прервать загрузку?", "Images are still uploading.\nAre you sure you want to discard them?": "Изображения все еще загружаются.\nВы уверены, что хотите прервать загрузку?",
"{{ count }} comment_0": "{{ count }} комментарий", "{{ count }} comment_0": "{{ count }} комментарий",
@@ -687,6 +717,7 @@
"only you": "только вами", "only you": "только вами",
"person": "человек", "person": "человек",
"people": "люди", "people": "люди",
"Document title": "Заголовок документа",
"Last updated": "Последнее обновление", "Last updated": "Последнее обновление",
"Type '/' to insert, or start writing…": "Введите '/' для вставки блока или просто начните писать…", "Type '/' to insert, or start writing…": "Введите '/' для вставки блока или просто начните писать…",
"Hide contents": "Скрыть содержимое", "Hide contents": "Скрыть содержимое",
@@ -702,6 +733,7 @@
"Created": "Создан", "Created": "Создан",
"Imported from {{ source }}": "Импортировано из {{ source }}", "Imported from {{ source }}": "Импортировано из {{ source }}",
"Stats": "Статистика", "Stats": "Статистика",
"{{ number }} minute read": "{{ number }} минут чтения",
"{{ number }} words_0": "{{ number }} слово", "{{ number }} words_0": "{{ number }} слово",
"{{ number }} words_1": "{{ number }} слова", "{{ number }} words_1": "{{ number }} слова",
"{{ number }} words_2": "{{ number }} слов", "{{ number }} words_2": "{{ number }} слов",
@@ -758,7 +790,6 @@
"Please request access from the document owner.": "Пожалуйста, запросите доступ у владельца документа.", "Please request access from the document owner.": "Пожалуйста, запросите доступ у владельца документа.",
"Not found": "Не найдено", "Not found": "Не найдено",
"The page youre looking for cannot be found. It might have been deleted or the link is incorrect.": "Страница, которую вы ищете, не найдена. Возможно, она была удалена или ссылка неверна.", "The page youre looking for cannot be found. It might have been deleted or the link is incorrect.": "Страница, которую вы ищете, не найдена. Возможно, она была удалена или ссылка неверна.",
"Offline": "Не в сети",
"We were unable to load the document while offline.": "Не удалось загрузить документ без сети.", "We were unable to load the document while offline.": "Не удалось загрузить документ без сети.",
"Your account has been suspended": "Ваш аккаунт отключён", "Your account has been suspended": "Ваш аккаунт отключён",
"Warning Sign": "Предупреждающий знак", "Warning Sign": "Предупреждающий знак",
@@ -769,7 +800,9 @@
"Weird, this shouldnt ever be empty": "Думаю, это не должно быть пустым", "Weird, this shouldnt ever be empty": "Думаю, это не должно быть пустым",
"You havent created any documents yet": "Вы еще не создали ни одного документа", "You havent created any documents yet": "Вы еще не создали ни одного документа",
"Documents youve recently viewed will be here for easy access": "Документы, которые вы недавно просматривали, будут здесь для быстрого доступа", "Documents youve recently viewed will be here for easy access": "Документы, которые вы недавно просматривали, будут здесь для быстрого доступа",
"We sent out your invites!": "Мы отправили ваши приглашения!", "{{ count }} invites sent_0": "{{ count }} приглашение отправлено",
"{{ count }} invites sent_1": "{{ count }} приглашения отправлено",
"{{ count }} invites sent_2": "{{ count }} приглашений отправлено",
"Those email addresses are already invited": "Эти адреса почты уже приглашены", "Those email addresses are already invited": "Эти адреса почты уже приглашены",
"Sorry, you can only send {{MAX_INVITES}} invites at a time": "Извините, вы можете отправлять только {{MAX_INVITES}} за раз", "Sorry, you can only send {{MAX_INVITES}} invites at a time": "Извините, вы можете отправлять только {{MAX_INVITES}} за раз",
"Invited {{roleName}} will receive access to": "Приглашённый участник получит доступ к", "Invited {{roleName}} will receive access to": "Приглашённый участник получит доступ к",
@@ -936,6 +969,7 @@
"Rotate secret": "Обновить секретный ключ", "Rotate secret": "Обновить секретный ключ",
"Rotating the client secret will invalidate the current secret. Make sure to update any applications using these credentials.": "Обновление секретного ключа клиента аннулирует текущий ключ. Обязательно обновите все приложения, использующие эти учетные данные.", "Rotating the client secret will invalidate the current secret. Make sure to update any applications using these credentials.": "Обновление секретного ключа клиента аннулирует текущий ключ. Обязательно обновите все приложения, использующие эти учетные данные.",
"Displayed to users when authorizing": "Отображается пользователям при авторизации", "Displayed to users when authorizing": "Отображается пользователям при авторизации",
"Application icon": "Иконка приложения",
"Developer information shown to users when authorizing": "Информация о разработчике, показываемая пользователям при авторизации", "Developer information shown to users when authorizing": "Информация о разработчике, показываемая пользователям при авторизации",
"Developer name": "Имя разработчика", "Developer name": "Имя разработчика",
"Developer URL": "URL разработчика", "Developer URL": "URL разработчика",
@@ -999,6 +1033,7 @@
"Search people": "Поиск людей", "Search people": "Поиск людей",
"No people matching your search": "Нет людей, соответствующих вашему запросу", "No people matching your search": "Нет людей, соответствующих вашему запросу",
"No people left to add": "Не осталось людей для добавления", "No people left to add": "Не осталось людей для добавления",
"Group admin": "Администратор группы",
"Member": "Участник", "Member": "Участник",
"Admins": "Администраторы", "Admins": "Администраторы",
"Date created": "Дата создания", "Date created": "Дата создания",
@@ -1043,6 +1078,7 @@
"These settings affect the way that your workspace appears to everyone on the team.": "Эти настройки влияют на то, как ваше рабочее пространство будет отображаться для всех участников команды.", "These settings affect the way that your workspace appears to everyone on the team.": "Эти настройки влияют на то, как ваше рабочее пространство будет отображаться для всех участников команды.",
"Display": "Отображение", "Display": "Отображение",
"The logo is displayed at the top left of the application.": "Логотип, который отображается в левом верхнем углу приложения.", "The logo is displayed at the top left of the application.": "Логотип, который отображается в левом верхнем углу приложения.",
"Workspace logo": "Логотип рабочего пространства",
"The workspace name, usually the same as your company name.": "Название рабочего пространства обычно совпадает с названием компании.", "The workspace name, usually the same as your company name.": "Название рабочего пространства обычно совпадает с названием компании.",
"Description": "Описание", "Description": "Описание",
"A short description of your workspace.": "Краткое описание вашего рабочего пространства.", "A short description of your workspace.": "Краткое описание вашего рабочего пространства.",
@@ -1193,6 +1229,7 @@
"Expires today": "Истёк сегодня", "Expires today": "Истёк сегодня",
"Expires tomorrow": "Истечёт завтра", "Expires tomorrow": "Истечёт завтра",
"Expires {{ date }}": "Истечёт {{ date }}", "Expires {{ date }}": "Истечёт {{ date }}",
"Sorry, invalid embed link": "Извините, неверная встраиваемая ссылка",
"Whoops, you need to accept the permissions in GitHub to connect {{appName}} to your workspace. Try again?": "Вам нужно принять разрешения в GitHub, чтобы подключить {{appName}} к вашему рабочему пространству. Попробуйте еще раз?", "Whoops, you need to accept the permissions in GitHub to connect {{appName}} to your workspace. Try again?": "Вам нужно принять разрешения в GitHub, чтобы подключить {{appName}} к вашему рабочему пространству. Попробуйте еще раз?",
"Something went wrong while authenticating your request. Please try logging in again.": "Что-то пошло не так во время обработки вашего запроса. Пожалуйста, попробуйте войти еще раз.", "Something went wrong while authenticating your request. Please try logging in again.": "Что-то пошло не так во время обработки вашего запроса. Пожалуйста, попробуйте войти еще раз.",
"The owner of GitHub account has been requested to install the {{githubAppName}} GitHub app. Once approved, previews will be shown for respective links.": "Владельцу аккаунта GitHub было предложено установить приложение GitHub {{githubAppName}}. Предпросмотр будет доступен для соответствующих ссылок после одобрения.", "The owner of GitHub account has been requested to install the {{githubAppName}} GitHub app. Once approved, previews will be shown for respective links.": "Владельцу аккаунта GitHub было предложено установить приложение GitHub {{githubAppName}}. Предпросмотр будет доступен для соответствующих ссылок после одобрения.",
@@ -1273,34 +1310,85 @@
"{{ user }} updated {{ timeAgo }}": "{{ user }} обновлен {{ timeAgo }}", "{{ user }} updated {{ timeAgo }}": "{{ user }} обновлен {{ timeAgo }}",
"You created {{ timeAgo }}": "Вы создали {{ timeAgo }}", "You created {{ timeAgo }}": "Вы создали {{ timeAgo }}",
"{{ user }} created {{ timeAgo }}": "{{ user }} создан {{ timeAgo }}", "{{ user }} created {{ timeAgo }}": "{{ user }} создан {{ timeAgo }}",
"Error loading data": "Ошибка загрузки данных",
"Avatar of {{ name }}": "Аватар {{ name }}",
"More options": "Больше параметров",
"Filter options": "Параметры фильтра",
"Lightbox": "Лайтбокс",
"View, navigate, or download images in the document": "Просмотр, навигация или загрузка изображений в документе",
"Previous": "Предыдущий",
"Next": "Следующий",
"Image failed to load": "Ошибка загрузки изображения",
"OAuth client icon": "Иконка OAuth-клиента",
"Expand sidebar": "Развернуть боковую панель",
"Collapse sidebar": "Свернуть боковую панель",
"Import files": "Импорт файлов",
"Image width": "Ширина изображения",
"Width": "Ширина",
"Image height": "Высота изображения",
"Height": "Высота",
"Insert after": "Вставить после",
"Insert before": "Вставить до",
"Move up": "Сдвинуть вверх",
"Move down": "Сдвинуть вниз",
"Move left": "Сдвинуть влево",
"Move right": "Сдвинуть вправо",
"Document title": "Заголовок документа",
"{{ number }} minute read": "{{ number }} минут чтения",
"Application icon": "Иконка приложения",
"Group admin": "Администратор группы",
"Workspace logo": "Логотип рабочего пространства",
"Caption": "Подпись", "Caption": "Подпись",
"Open": "Открыть" "Open": "Открыть",
"Error loading data": "Ошибка загрузки данных",
"Include private collections": "Включить приватные коллекции",
"Members of \"{{ groupName }}\" that have access to this document will be notified": "Участники группы «{{ groupName }}», имеющие доступ к этому документу, будут уведомлены",
"Edit image URL": "Редактировать URL изображения",
"Upload an image": "Загрузить изображение",
"mentioned your group in": "упомянул вашу группу в",
"Disable mentions": "Отключить упоминания",
"Prevent this group from being mentionable in documents or comments": "Запретить упоминание этой группы в документах или комментариях",
"Group mentions": "Упоминания группы",
"Receive a notification when someone mentions a group you are a member of in a document or comment": "Получать уведомление, когда кто-то упоминает группу, участником которой вы являетесь, в документе или комментарии",
"New attribute": "Новый атрибут",
"Paper size": "Размер бумаги",
"Ask AI \"{{question}}\"": "Спросить ИИ «{{question}}»",
"Are you sure you want to delete?": "Вы уверены, что хотите удалить?",
"Deleting this version of the document will permanently and irrevocably remove it from the history.": "Удаление этой версии документа навсегда и безвозвратно удалит её из истории.",
"Format": "Формат",
"Add option": "Добавить опцию",
"Optional": "Опционально",
"Choose a size for your exported document": "Выберите размер для экспортируемого документа",
"Revision renamed": "Ревизия переименована",
"Failed to save revision": "Не удалось сохранить ревизию",
"Invite to document": "Пригласить к документу",
"Data Attributes": "Атрибуты данных",
"Edit attribute": "Редактировать атрибут",
"Property": "Свойство",
"Yes": "Да",
"No": "Нет",
"Search or ask a question": "Искать или задать вопрос",
"Invited {{roleName}} will not receive access to any collections or documents unless explicitly shared.": "Приглашённый {{roleName}} не получит доступ к коллекциям или документам, если они не будут явно предоставлены.",
"Can view only what is explicitly shared": "Может просматривать только то, что явно предоставлено",
"SAML assertion was invalid or missing fields, please check your configuration": "SAML-утверждение недействительно или отсутствуют поля, проверьте вашу конфигурацию",
"AI generated answer based on related documents in your workspace": "Ответ, сгенерированный ИИ на основе связанных документов в вашем рабочем пространстве",
"References": "Ссылки",
"Enable AI answers to get direct answers to searched questions.": "Включите ответы ИИ, чтобы получать прямые ответы на поисковые вопросы.",
"Go to settings": "Перейти к настройкам",
"Where do I find the file?": "Где найти файл?",
"In a Confluence space, navigate to <em>Space Settings -> Manage space -> Export space</em> and choose to export as HTML with the \"Normal Export\" option.": "В пространстве Confluence перейдите в <em>Настройки пространства -> Управление пространством -> Экспорт пространства</em> и выберите экспорт в HTML с опцией «Обычный экспорт».",
"Drag and drop the zip file from Confluence's HTML export option, or click to upload": "Перетащите zip-файл из опции экспорта HTML в Confluence или нажмите для загрузки",
"Guests": "Гости",
"New Attribute": "Новый атрибут",
"Attributes allow you to define data to be stored with your documents. They can be used to store custom properties, metadata, or any other structured information that is common across documents.": "Атрибуты позволяют определять данные, которые будут храниться вместе с вашими документами. Их можно использовать для хранения пользовательских свойств, метаданных или любой другой структурированной информации, общей для документов.",
"Custom domain": "Пользовательский домен",
"AI answers": "Ответы ИИ",
"Use AI to directly answer searched questions using content in your workspace.": "Используйте ИИ для прямых ответов на поисковые вопросы, используя контент в вашем рабочем пространстве.",
"API access": "Доступ к API",
"Allow members to create API keys for programmatic access": "Разрешить участникам создавать API-ключи для программного доступа",
"Public document embedding": "Встраивание публичных документов",
"When enabled, publicly shared documents can be embedded in third-party websites": "Когда включено, публично предоставленные документы могут быть встроены на сторонние веб-сайты",
"Include previews in emails": "Включать предпросмотр в письмах",
"When enabled, email notifications will include content previews": "Когда включено, почтовые уведомления будут содержать предпросмотр контента",
"Boolean": "Логическое значение",
"Number": "Число",
"Text": "Текст",
"List": "Список",
"Could not load events": "Не удалось загрузить события",
"Audit Log": "Журнал аудита",
"The audit log details the history of security related and other events across your knowledge base.": "Журнал аудита содержит историю событий безопасности и других событий в вашей базе знаний.",
"IP address": "IP-адрес",
"Actor": "Исполнитель",
"Event": "Событие",
"Timestamp": "Временная метка",
"IP": "IP",
"a group": "группа",
"All users": "Все пользователи",
"Private": "Приватный",
"View and edit": "Просмотр и редактирование",
"Sharing enabled": "Совместный доступ включён",
"Date archived": "Дата архивирования",
"Could not load collections": "Не удалось загрузить коллекции",
"Manage the permissions and settings of all collections in the knowledge base. As a workspace admin you can also administer private collections.": "Управляйте разрешениями и настройками всех коллекций в базе знаний. Как администратор рабочего пространства вы также можете администрировать приватные коллекции.",
"Automatically index and search document content from {{appName}} inside <4>Glean</4> in realtime.": "Автоматически индексировать и искать содержимое документов из {{appName}} внутри <4>Glean</4> в реальном времени.",
"API Endpoint": "Конечная точка API",
"API Secret": "Секретный ключ API",
"Datasource": "Источник данных",
"Details of the current {{appName}} license. To arrange contract renewal as expiry or seat limits approach or increase licensed seats please contact your account manager or email <4>priority@getoutline.com</4>.": "Сведения о текущей лицензии {{appName}}. Чтобы договориться о продлении контракта по мере приближения срока действия или лимитов мест или увеличить количество лицензированных мест, свяжитесь с вашим менеджером по работе с клиентами или напишите на <4>priority@getoutline.com</4>.",
"Sorry, an answer could not be found in the collection, try widening your search.": "К сожалению, ответ не найден в коллекции, попробуйте расширить поиск.",
"Sorry, an answer could not be found in the workspace, try widening your search.": "К сожалению, ответ не найден в рабочем пространстве, попробуйте расширить поиск.",
"Looking for answers": "Поиск ответов",
"Answer to \"{{ query }}\"": "Ответ на «{{ query }}»"
} }