diff --git a/.github/workflows/dry_build.yml b/.github/workflows/dry_build.yml
index ff4f289..3fa4855 100644
--- a/.github/workflows/dry_build.yml
+++ b/.github/workflows/dry_build.yml
@@ -27,7 +27,7 @@ jobs:
uses: docker/build-push-action@v5
with:
context: .
- platforms: linux/amd64
+ platforms: linux/amd64,linux/arm64
push: false
cache-from: type=gha
cache-to: type=gha,mode=max
diff --git a/.gitignore b/.gitignore
index 6e89ac1..a62a7ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-utils/translation.json
+scripts/translation.json
diff --git a/Dockerfile b/Dockerfile
index 250fe65..2c489ef 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,9 +7,6 @@ WORKDIR $APP_PATH
FROM base AS build
COPY ./src/package.json ./src/yarn.lock ./
COPY ./src/patches ./patches
-RUN apt-get update && \
- apt-get install -y wget && \
- rm -rf /var/lib/apt/lists/*
RUN yarn install --no-optional --frozen-lockfile --network-timeout 1000000 && \
yarn cache clean
COPY src .
@@ -20,7 +17,7 @@ RUN rm -rf node_modules
RUN yarn install --production=true --frozen-lockfile --network-timeout 1000000 && \
yarn cache clean
ENV PORT=3000
-HEALTHCHECK CMD wget -qO- http://localhost:${PORT}/_health | grep -q "OK" || exit 1
+
FROM base AS release
ENV NODE_ENV=production
@@ -30,6 +27,9 @@ COPY --from=build $APP_PATH/public ./public
COPY --from=build $APP_PATH/.sequelizerc ./.sequelizerc
COPY --from=build $APP_PATH/node_modules ./node_modules
COPY --from=build $APP_PATH/package.json ./package.json
+RUN apt-get update && \
+ apt-get install -y wget && \
+ rm -rf /var/lib/apt/lists/*
RUN addgroup --gid 1001 nodejs && \
adduser --uid 1001 --ingroup nodejs nodejs && \
chown -R nodejs:nodejs $APP_PATH/build && \
@@ -41,5 +41,6 @@ RUN mkdir -p "$FILE_STORAGE_LOCAL_ROOT_DIR" && \
chmod 1777 "$FILE_STORAGE_LOCAL_ROOT_DIR"
VOLUME /var/lib/outline/data
USER nodejs
+HEALTHCHECK CMD wget -qO- http://localhost:${PORT}/_health | grep -q "OK" || exit 1
EXPOSE 3000
CMD ["yarn", "start"]
diff --git a/.github/README.md b/README.md
similarity index 100%
rename from .github/README.md
rename to README.md
diff --git a/utils/check_missing_lines.py b/scripts/check_missing_lines.py
old mode 100644
new mode 100755
similarity index 98%
rename from utils/check_missing_lines.py
rename to scripts/check_missing_lines.py
index 442b6f4..8599562
--- a/utils/check_missing_lines.py
+++ b/scripts/check_missing_lines.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+
import json
import os
diff --git a/utils/insert_ru_entries.sh b/scripts/insert_ru_entries.sh
old mode 100644
new mode 100755
similarity index 95%
rename from utils/insert_ru_entries.sh
rename to scripts/insert_ru_entries.sh
index 63bc1f5..5db66ff
--- a/utils/insert_ru_entries.sh
+++ b/scripts/insert_ru_entries.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
CWD="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
diff --git a/shared/i18n/locales/ru_RU/translation.json b/shared/i18n/locales/ru_RU/translation.json
index 2b837c4..e909f4f 100644
--- a/shared/i18n/locales/ru_RU/translation.json
+++ b/shared/i18n/locales/ru_RU/translation.json
@@ -15,6 +15,9 @@
"Delete collection": "Удалить коллекцию",
"New template": "Новый шаблон",
"Delete comment": "Удалить комментарий",
+ "Mark as resolved": "Отметить как решённое",
+ "Thread resolved": "Обсуждение решено",
+ "Mark as unresolved": "Отметить как нерешённое",
"Copy ID": "Скопировать ID",
"Clear IndexedDB cache": "Очистить кэш IndexedDB",
"IndexedDB cache cleared": "Кэш IndexedDB очищен",
@@ -197,14 +200,11 @@
"{{ completed }} task done": "{{ completed }} задача выполнена",
"{{ completed }} task done_plural": "{{ completed }} задач выполнено",
"{{ completed }} of {{ total }} tasks": "{{ completed }} из {{ total }} задач",
- "Template created, go ahead and customize it": "Шаблон создан, теперь Вы можете перейти к нему и продолжить настройку",
- "Creating a template from {{titleWithDefault}} is a non-destructive action – we'll make a copy of the document and turn it into a template that can be used as a starting point for new documents.": "Создание шаблона из {{titleWithDefault}} не уничтожит Ваш документ — мы сделаем копию и превратим ее в шаблон, который можно будет использовать в качестве отправной точки для новых документов.",
"Currently editing": "Сейчас редактируется",
"Currently viewing": "Сейчас просматривается",
"Viewed {{ timeAgo }}": "Просмотрено {{ timeAgo }}",
"Copy of {{ documentName }}": "Копия {{ documentName }}",
"Title": "Заголовок",
- "Published": "Опубликовано",
"Include nested documents": "Включить вложенные документы",
"Module failed to load": "Произошла ошибка во время загрузки модуля",
"Loading Failed": "Ошибка загрузки",
@@ -241,10 +241,25 @@
"Group members": "Участники группы",
"{{authorName}} created <3>3>": "{{authorName}} создал <3>3>",
"{{authorName}} opened <3>3>": "{{authorName}} открыл <3>3>",
+ "Search emoji": "Поиск эмодзи",
+ "Search icons": "Поиск иконок",
+ "Choose default skin tone": "Выберите цвет кожи по умолчанию",
"Show menu": "Показать меню",
+ "Icon Picker": "Выбор иконок",
+ "Icons": "Иконки",
+ "Emojis": "Эмодзи",
"Remove": "Удалить",
"All": "Все",
+ "Frequently Used": "Часто используемые",
"Search Results": "Результаты поиска",
+ "Smileys & People": "Смайлики и люди",
+ "Animals & Nature": "Животные и природа",
+ "Food & Drink": "Еда и напитки",
+ "Activity": "Активность",
+ "Travel & Places": "Путешествия и места",
+ "Objects": "Объекты",
+ "Symbols": "Символы",
+ "Flags": "Флаги",
"Select a color": "Выберите цвет",
"Loading": "Загрузка",
"Search": "Поиск",
@@ -266,27 +281,20 @@
"Results": "Результаты",
"No results for {{query}}": "По запросу «{{query}}» ничего не найдено",
"Manage": "Управлять",
+ "All members": "Все участники",
+ "Everyone in the workspace": "Все в рабочем пространстве",
"Invite": "Приглашение",
"{{ userName }} was added to the collection": "{{ userName }} добавлен в коллекцию",
"{{ count }} people added to the collection": "{{ count }} человек добавлен в коллекцию",
"{{ count }} people added to the collection_plural": "{{ count }} людей добавлено в коллекцию",
"{{ count }} people and {{ count2 }} groups added to the collection": "{{ count }} человек и {{ count2 }} группа добавлены в коллекцию",
"{{ count }} people and {{ count2 }} groups added to the collection_plural": "{{ count }} людей и {{ count2 }} групп добавлены в коллекцию",
- "All members": "Все участники",
- "Everyone in the workspace": "Все в рабочем пространстве",
"Add": "Добавить",
"Add or invite": "Добавить или пригласить",
"Viewer": "Наблюдатель",
"Editor": "Редактор",
+ "Suggestions for invitation": "Предложения по приглашению",
"No matches": "Нет совпадений",
- "{{ userName }} was removed from the document": "{{ userName }} был удален из документа",
- "Could not remove user": "Не удалось удалить пользователя",
- "Permissions for {{ userName }} updated": "Права для {{ userName }} обновлены",
- "Could not update user": "Не удалось обновить пользователя",
- "Has access through <2>parent2>": "Имеет доступ через <2>parent2>",
- "Suspended": "Отключен",
- "Invited": "Приглашенные",
- "Leave": "Покинуть",
"Can view": "Может просматривать",
"Everyone in the collection": "Все в коллекции",
"You have full access": "Вы имеете полный доступ",
@@ -295,6 +303,16 @@
"Other workspace members may have access": "Другие участники рабочего пространства могут иметь доступ",
"This document may be shared with more workspace members through a parent document or collection you do not have access to": "Этот документ может быть доступен другим участникам рабочего пространства через родительский документ или коллекцию, к которой у Вас нет доступа.",
"Access inherited from collection": "Доступ унаследован от коллекции",
+ "{{ userName }} was removed from the document": "{{ userName }} был удален из документа",
+ "Could not remove user": "Не удалось удалить пользователя",
+ "Permissions for {{ userName }} updated": "Права для {{ userName }} обновлены",
+ "Could not update user": "Не удалось обновить пользователя",
+ "Has access through <2>parent2>": "Имеет доступ через <2>parent2>",
+ "Suspended": "Отключен",
+ "Invited": "Приглашенные",
+ "Active <1>1> ago": "Был в сети <1>1> тому назад",
+ "Never signed in": "Никогда не входил",
+ "Leave": "Покинуть",
"Only lowercase letters, digits and dashes allowed": "Допускаются только строчные буквы, цифры и тире",
"Sorry, this link has already been used": "К сожалению, эта ссылка уже используется",
"Public link copied to clipboard": "Публичная ссылка скопировано в буфер обмена",
@@ -304,9 +322,6 @@
"Allow anyone with the link to access": "Разрешить доступ всем, у кого есть ссылка",
"Publish to internet": "Опубликовать в Интернете",
"Nested documents are not shared on the web. Toggle sharing to enable access, this will be the default behavior in the future": "Вложенные документы не публикуются в Интернете. Переключите опцию общего доступа, чтобы включить доступ. В будущем это будет поведение по умолчанию.",
- "{{ userName }} was invited to the document": "{{ userName }} приглашен в документ",
- "{{ count }} people invited to the document": "{{ count }} человек приглашен в документ",
- "{{ count }} people invited to the document_plural": "{{ count }} людей приглашено в документ",
"Logo": "Логотип",
"Move document": "Переместить документ",
"New doc": "Новый документ",
@@ -331,6 +346,9 @@
"No results": "Ничего не найденo",
"Previous page": "Предыдущая страница",
"Next page": "Следующая страница",
+ "Template created, go ahead and customize it": "Шаблон создан, теперь Вы можете перейти к нему и продолжить настройку",
+ "Creating a template from {{titleWithDefault}} is a non-destructive action – we'll make a copy of the document and turn it into a template that can be used as a starting point for new documents.": "Создание шаблона из {{titleWithDefault}} не уничтожит Ваш документ — мы сделаем копию и превратим ее в шаблон, который можно будет использовать в качестве отправной точки для новых документов.",
+ "Published": "Опубликовано",
"Admins can manage the workspace and access billing.": "Администраторы могут управлять рабочим пространством и имеют доступ к биллингу.",
"Editors can create, edit, and comment on documents.": "Редакторы могут создавать, редактировать и комментировать документы.",
"Viewers can only view and comment on documents.": "Наблюдатели могут только просматривать и комментировать документы.",
@@ -453,7 +471,6 @@
"Alphabetical sort": "Сортировка по алфавиту",
"Manual sort": "Ручная сортировка",
"Comment options": "Настройки комментариев",
- "Document restored": "Документ восстановлен",
"Document options": "Параметры документа",
"Restore": "Восстановить",
"Choose a collection": "Выберите коллекцию",
@@ -492,7 +509,17 @@
"left a comment on": "оставил комментарий в",
"shared": "поделенный",
"invited you to": "пригласил Вас в",
+ "Choose a date": "Выбрать дату",
+ "API key created": "Ключ API создан",
"Name your key something that will help you to remember it's use in the future, for example \"local development\" or \"continuous integration\".": "Назовите свой ключ так, чтобы не забыть о его предназначении в будущем. Например. «локальная разработка» или «непрерывная интеграция».",
+ "Expiration": "Срок действия",
+ "Never expires": "Никогда не истекает",
+ "7 days": "7 дней",
+ "30 days": "30 дней",
+ "60 days": "60 дней",
+ "90 days": "90 дней",
+ "Custom": "Пользовательский",
+ "No expiration": "Нет срока истечения",
"The document archive is empty at the moment.": "Архив документов на данный момент пуст.",
"Collection menu": "Меню коллекции",
"Drop documents to import": "Перетащите документы для импорта",
@@ -523,8 +550,13 @@
"Post": "Опубликовать",
"Cancel": "Отменить",
"Upload image": "Загрузить изображение",
+ "Resolved comments": "Решённые комментарии",
+ "View comments": "Посмотреть комментарии",
+ "View resolved comments": "Посмотреть решённые комментарии",
+ "No resolved comments": "Нет решённых комментариев",
"No comments yet": "Пока нет комментариев",
"Error updating comment": "При обновлении комментария произошла ошибка",
+ "Document restored": "Документ восстановлен",
"Images are still uploading.\nAre you sure you want to discard them?": "Изображения все еще загружаются.\nВы уверены, что хотите прервать загрузку?",
"{{ count }} comment": "{{ count }} комментарий",
"{{ count }} comment_plural": "{{ count }} комментариев",
@@ -535,6 +567,7 @@
"Type '/' to insert, or start writing…": "Введите '/' для вставки блока или просто начните писать…",
"Hide contents": "Скрыть содержимое",
"Show contents": "Показать содержимое",
+ "available when headings are added": "доступно при добавлении заголовков",
"Edit {{noun}}": "Редактировать {{noun}}",
"Switch to dark": "Вкл. тёмную тему",
"Switch to light": "Вкл. светлую тему",
@@ -625,8 +658,6 @@
"Search people": "Поиск людей",
"No people matching your search": "Нет людей, соответствующих Вашему запросу",
"No people left to add": "Не осталось людей для добавления",
- "Active <1>1> ago": "Был в сети <1>1> тому назад",
- "Never signed in": "Никогда не входил",
"Admin": "Администратор",
"{{userName}} was removed from the group": "{{userName}} удален из группы",
"Add and remove members to the {{groupName}} group. Members of the group will have access to any collections this group has been added to.": "Добавляйте и удаляйте участников в группу {{groupName}}. Члены группы будут иметь доступ ко всем коллекциям, в которые была добавлена эта группа.",
@@ -665,13 +696,13 @@
"Open document history": "Открыть историю документа",
"Jump to search": "Перейти к поиску",
"Jump to home": "Перейти на главную",
- "Toggle navigation": "Переключить навигацию",
"Focus search input": "Сфокусироваться на строке поиска",
"Open this guide": "Открыть эту инструкцию",
"Enter": "Ввод",
"Publish document and exit": "Опубликовать документ и выйти",
"Save document": "Сохранить документ",
"Cancel editing": "Отменить редактирование",
+ "Collaboration": "Коллаборация",
"Formatting": "Форматирование",
"Paragraph": "Абзац",
"Large header": "Большой заголовок",
@@ -751,7 +782,11 @@
"We were unable to find the page you’re looking for.": "Нам не удалось найти нужную вам страницу.",
"Search titles only": "Искать только в названиях",
"No documents found for your search filters.": "Не найдено документов по вашим фильтрам поиска.",
+ "API key copied to clipboard": "Ключ API скопирован в буфер обмена",
"Create personal API keys to authenticate with the API and programatically control\n your workspace's data. API keys have the same permissions as your user account.\n For more details see the developer documentation.": "Создавайте ключи API для аутентификации с помощью API и программируемого управления\n данными Вашего рабочего пространства. Ключи API имеют те же разрешения, что и Ваш аккаунт пользователя.\n Более подробную информацию смотрите в документации разработчика.",
+ "Personal keys": "Персональные ключи",
+ "Last used": "Последний раз использован",
+ "No expiry": "Нет срока истечения",
"Copied": "Скопировано",
"Revoking": "Отзыв",
"Are you sure you want to revoke the {{ tokenName }} token?": "Вы уверены, что хотите отозвать токен {{ tokenName }}?",
@@ -816,6 +851,10 @@
"Accent text color": "Цвет акцентного текста",
"Public branding": "Публичный брендинг",
"Show your team’s logo on public pages like login and shared documents.": "Показывать логотип Вашей команды на общедоступных страницах, таких как вход в систему и общие документы.",
+ "Table of contents position": "Позиция оглавления",
+ "The side to display the table of contents in relation to the main content.": "Сторона для отображения оглавления относительно основного контента.",
+ "Left": "Слева",
+ "Right": "Справа",
"Behavior": "Действие",
"Subdomain": "Поддомен",
"Your workspace will be accessible at": "Ваше рабочее пространство будет доступно по адресу",
@@ -948,6 +987,11 @@
"This month": "В этом месяце",
"Last month": "Прошлый месяц",
"This year": "В этом году",
+ "Expired yesterday": "Истёк вчера",
+ "Expired {{ date }}": "Истёк {{ date }}",
+ "Expires today": "Истёк сегодня",
+ "Expires tomorrow": "Истечёт завтра",
+ "Expires {{ date }}": "Истечёт {{ date }}",
"Connect": "Подключить",
"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.": "Что-то пошло не так во время обработки вашего запроса. Пожалуйста, попробуйте войти еще раз.",
@@ -1017,52 +1061,19 @@
"You created {{ timeAgo }}": "Вы создали {{ timeAgo }}",
"{{ user }} created {{ timeAgo }}": "{{ user }} создан {{ timeAgo }}",
"Uploading": "Идёт загрузка",
- "Mark as resolved": "Отметить как решённое",
- "Thread resolved": "Обсуждение решено",
- "Mark as unresolved": "Отметить как нерешённое",
- "Search emoji": "Поиск эмодзи",
- "Search icons": "Поиск иконок",
- "Choose default skin tone": "Выберите цвет кожи по умолчанию",
- "Icon Picker": "Выбор иконок",
- "Icons": "Иконки",
- "Emojis": "Эмодзи",
- "Frequently Used": "Часто используемые",
- "Smileys & People": "Смайлики и люди",
- "Animals & Nature": "Животные и природа",
- "Food & Drink": "Еда и напитки",
- "Activity": "Активность",
- "Travel & Places": "Путешествия и места",
- "Objects": "Объекты",
- "Symbols": "Символы",
- "Flags": "Флаги",
- "Suggestions for invitation": "Предложения по приглашению",
- "Choose a date": "Выбрать дату",
- "API key created": "Ключ API создан",
- "Expiration": "Срок действия",
- "Never expires": "Никогда не истекает",
- "7 days": "7 дней",
- "30 days": "30 дней",
- "60 days": "60 дней",
- "90 days": "90 дней",
- "Custom": "Пользовательский",
- "No expiration": "Нет срока истечения",
- "Resolved comments": "Решённые комментарии",
- "View comments": "Посмотреть комментарии",
- "View resolved comments": "Посмотреть решённые комментарии",
- "No resolved comments": "Нет решённых комментариев",
- "available when headings are added": "доступно при добавлении заголовков",
- "Collaboration": "Коллаборация",
- "API key copied to clipboard": "Ключ API скопирован в буфер обмена",
- "Personal keys": "Персональные ключи",
- "Last used": "Последний раз использован",
- "No expiry": "Нет срока истечения",
- "Table of contents position": "Позиция оглавления",
- "The side to display the table of contents in relation to the main content.": "Сторона для отображения оглавления относительно основного контента.",
- "Left": "Слева",
- "Right": "Справа",
- "Expired yesterday": "Истёк вчера",
- "Expired {{ date }}": "Истёк {{ date }}",
- "Expires today": "Истёк сегодня",
- "Expires tomorrow": "Истечёт завтра",
- "Expires {{ date }}": "Истечёт {{ date }}"
+ "Move to workspace": "Переместить в рабочее пространство",
+ "Move to collection": "Переместить в коллекцию",
+ "{{ userName }} was added to the document": "{{ userName }} был добавлен в документ",
+ "{{ count }} people added to the document": "{{ count }} человек был добавлен в документ",
+ "{{ count }} people added to the document_plural": "{{ count }} людей было добавлено в документ",
+ "{{ count }} groups added to the document": "{{ count }} группа была добавлена в документ",
+ "{{ count }} groups added to the document_plural": "{{ count }} групп была добавлена в документ",
+ "Enable other members to use the template immediately": "Разрешить другим участникам немедленно использовать шаблон",
+ "Location": "Расположение",
+ "None": "Никто",
+ "{{ documentName }} restored": "{{ documentName }} восстановлен",
+ "Save in workspace": "Сохранить в рабочем пространстве",
+ "Forward": "Переслать",
+ "Something went wrong": "Что-то пошло не так",
+ "Please try again or contact support if the problem persists": "Пожалуйста, попробуйте ещё раз или обратитесь в поддержку, если проблема осталась"
}
diff --git a/src b/src
index fd1e14d..ce85b8f 160000
--- a/src
+++ b/src
@@ -1 +1 @@
-Subproject commit fd1e14d1db0cb5a3f2f9013302be85b693d05731
+Subproject commit ce85b8f94dd9c390b1e4667f564dc805d13271f2