From 66d44a4d3de4858fcd7ef579fa3c4753500000d2 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Mon, 15 Jul 2024 00:35:38 +0500 Subject: [PATCH 1/9] fix varname typos in the workflow --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d5da857..2299297 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: branches: - master workflow_dispatch: - + env: REGISTRY: ghcr.io @@ -65,11 +65,11 @@ jobs: cache-to: type=gha,mode=max tags: ${{ steps.meta.outputs.tags }} - + - name: Create Release uses: softprops/action-gh-release@v2 with: - name: ${{ env.version }} - tag_name: ${{ env.version }} - body: "[Изменения в ${{ env.version }}](https://github.com/outline/outline/releases/tag/v${{ env.version }})" + name: ${{ env.VERSION }} + tag_name: ${{ env.VERSION }} + body: "[Изменения в ${{ env.VERSION }}](https://github.com/outline/outline/releases/tag/v${{ env.VERSION }})" token: ${{ secrets.TOKEN }} From b5c7884a382e39b02d9ebe596f5612332118a445 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 17:25:07 +0500 Subject: [PATCH 2/9] bump src to 0.78.0 --- src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src b/src index 07ae7fc..fd1e14d 160000 --- a/src +++ b/src @@ -1 +1 @@ -Subproject commit 07ae7fca81f738e5cd40488ecad6d42073aac27f +Subproject commit fd1e14d1db0cb5a3f2f9013302be85b693d05731 From 4ab9dff0042d71b5ff43e0ff5d3c07b6e3c990e2 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 17:51:13 +0500 Subject: [PATCH 3/9] update Dockerfile --- Dockerfile | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index b9cb530..250fe65 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,29 @@ ARG APP_PATH=/opt/outline -FROM node:20-slim as base +FROM node:20-slim AS base ARG APP_PATH 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 . COPY shared ./shared +ARG CDN_URL RUN yarn build 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 +ENV NODE_ENV=production COPY --from=build $APP_PATH/build ./build COPY --from=build $APP_PATH/server ./server COPY --from=build $APP_PATH/public ./public @@ -29,11 +35,11 @@ RUN addgroup --gid 1001 nodejs && \ chown -R nodejs:nodejs $APP_PATH/build && \ mkdir -p /var/lib/outline && \ chown -R nodejs:nodejs /var/lib/outline -ENV FILE_STORAGE_LOCAL_ROOT_DIR /var/lib/outline/data +ENV FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data RUN mkdir -p "$FILE_STORAGE_LOCAL_ROOT_DIR" && \ chown -R nodejs:nodejs "$FILE_STORAGE_LOCAL_ROOT_DIR" && \ chmod 1777 "$FILE_STORAGE_LOCAL_ROOT_DIR" VOLUME /var/lib/outline/data USER nodejs EXPOSE 3000 -CMD ["yarn", "start"] \ No newline at end of file +CMD ["yarn", "start"] From 19ffc021ee51fb0ed0c3a2d982b4fa46781842f9 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 18:20:14 +0500 Subject: [PATCH 4/9] add a simple script to insert lines to *.ts files --- utils/insert_ru_entries.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 utils/insert_ru_entries.sh diff --git a/utils/insert_ru_entries.sh b/utils/insert_ru_entries.sh new file mode 100644 index 0000000..63bc1f5 --- /dev/null +++ b/utils/insert_ru_entries.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +CWD="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)" + +cat $CWD/src/shared/utils/date.ts | \ + sed '/^ pl,/a\ \ ru,' | \ + sed '/^ pl_PL: pl,/a\ \ ru_RU: ru,' \ + > $CWD/shared/utils/date.ts + +cat $CWD/src/shared/i18n/index.ts | \ + sed '/^export const languageOptions = \[/a\ \ {\n label: "Русский (Russian)",\n value: "ru_RU",\n },' \ + > $CWD/shared/i18n/index.ts From ee9bf86e195c1d6c1da826d97970221a4ca2d124 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 18:20:30 +0500 Subject: [PATCH 5/9] bump *.ts files --- shared/i18n/index.ts | 14 +++++++++++--- shared/utils/date.ts | 4 ++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/shared/i18n/index.ts b/shared/i18n/index.ts index 273abd7..5880d8f 100644 --- a/shared/i18n/index.ts +++ b/shared/i18n/index.ts @@ -1,6 +1,10 @@ // Note: Updating the available languages? Make sure to also update the // locales array in shared/utils/date.ts to enable translation for timestamps. export const languageOptions = [ + { + label: "Русский (Russian)", + value: "ru_RU", + }, { label: "English (US)", value: "en_US", @@ -45,6 +49,10 @@ export const languageOptions = [ label: "Nederland (Dutch, Netherlands)", value: "nl_NL", }, + { + label: "Norsk Bokmål (Norwegian)", + value: "nb_NO", + }, { label: "Português (Portuguese, Brazil)", value: "pt_BR", @@ -62,8 +70,8 @@ export const languageOptions = [ value: "fa_IR", }, { - label: "Русский (Russian)", - value: "ru_RU", + label: "Svenska (Swedish)", + value: "sv_SE", }, { label: "Türkçe (Turkish)", @@ -79,4 +87,4 @@ export const languageOptions = [ }, ]; -export const languages: string[] = languageOptions.map((i) => i.value); +export const languages = languageOptions.map((i) => i.value); diff --git a/shared/utils/date.ts b/shared/utils/date.ts index 1444b10..b02c268 100644 --- a/shared/utils/date.ts +++ b/shared/utils/date.ts @@ -18,11 +18,13 @@ import { it, ja, ko, + nb, nl, ptBR, pt, pl, ru, + sv, tr, vi, uk, @@ -169,11 +171,13 @@ const locales = { it_IT: it, ja_JP: ja, ko_KR: ko, + nb_NO: nb, nl_NL: nl, pt_BR: ptBR, pt_PT: pt, pl_PL: pl, ru_RU: ru, + sv_SE: sv, tr_TR: tr, uk_UA: uk, vi_VN: vi, From 9318d6ba0bce6121c4b335543c64b028f4cc7c77 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 18:23:30 +0500 Subject: [PATCH 6/9] add a workflow for dev branch for dry build --- .github/workflows/dry_build.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/dry_build.yml diff --git a/.github/workflows/dry_build.yml b/.github/workflows/dry_build.yml new file mode 100644 index 0000000..5b293e3 --- /dev/null +++ b/.github/workflows/dry_build.yml @@ -0,0 +1,28 @@ +name: Dry Build + +on: + push: + branches: + - dev + +jobs: + build: + name: Dry Build + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Image + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64 + push: false + cache-from: type=gha + cache-to: type=gha,mode=max From d0b2f668e28b5b7155cf6d5b22ccbb752d744cae Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 18:52:37 +0500 Subject: [PATCH 7/9] upload new translations --- shared/i18n/locales/ru_RU/translation.json | 75 +++++++++++++++++----- 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/shared/i18n/locales/ru_RU/translation.json b/shared/i18n/locales/ru_RU/translation.json index 1b4b631..2b837c4 100644 --- a/shared/i18n/locales/ru_RU/translation.json +++ b/shared/i18n/locales/ru_RU/translation.json @@ -13,6 +13,8 @@ "Unstar": "Убрать из избранного", "Delete": "Удалить", "Delete collection": "Удалить коллекцию", + "New template": "Новый шаблон", + "Delete comment": "Удалить комментарий", "Copy ID": "Скопировать ID", "Clear IndexedDB cache": "Очистить кэш IndexedDB", "IndexedDB cache cleared": "Кэш IndexedDB очищен", @@ -60,7 +62,6 @@ "Print document": "Печать документа", "Import document": "Импорт документа", "Templatize": "Шаблонизировать", - "New template": "Новый шаблон", "Create template": "Создать шаблон", "Open random document": "Открыть случайный документ", "Search documents for \"{{searchQuery}}\"": "Поиск документов для {{searchQuery}}»", @@ -186,8 +187,6 @@ "{{ userName }} created": "{{ userName }} создан", "You published": "Вы опубликовали", "{{ userName }} published": "{{ userName }} опубликован", - "You saved": "Вы сохранили", - "{{ userName }} saved": "{{ userName }} сохранен", "Never viewed": "Не просмотрено", "Viewed": "Просмотрено", "in": "в", @@ -207,8 +206,6 @@ "Title": "Заголовок", "Published": "Опубликовано", "Include nested documents": "Включить вложенные документы", - "Emoji Picker": "Выбор эмодзи", - "Remove": "Удалить", "Module failed to load": "Произошла ошибка во время загрузки модуля", "Loading Failed": "Ошибка загрузки", "Sorry, part of the application failed to load. This may be because it was updated since you opened the tab or because of a failed network request. Please try reloading.": "К сожалению, части приложения не удалось загрузиться. Это могло произойти из-за того, что страница обновилась с тех пор, как была открыта или из-за проблем в отправке сетевого запроса. Пожалуйста, попробуйте перезагрузить страницу.", @@ -245,10 +242,11 @@ "{{authorName}} created <3>": "{{authorName}} создал <3>", "{{authorName}} opened <3>": "{{authorName}} открыл <3>", "Show menu": "Показать меню", - "Choose an icon": "Выберите значок", - "Filter": "Фильтр", - "Loading": "Загрузка", + "Remove": "Удалить", + "All": "Все", + "Search Results": "Результаты поиска", "Select a color": "Выберите цвет", + "Loading": "Загрузка", "Search": "Поиск", "Permission": "Право доступа", "View only": "Только просмотр", @@ -454,7 +452,6 @@ "Sort in sidebar": "Сортировка в боковой панели", "Alphabetical sort": "Сортировка по алфавиту", "Manual sort": "Ручная сортировка", - "Delete comment": "Удалить комментарий", "Comment options": "Настройки комментариев", "Document restored": "Документ восстановлен", "Document options": "Параметры документа", @@ -466,8 +463,8 @@ "Delete group": "Удалить группу", "Group options": "Параметры группы", "Member options": "Параметры участников", - "New child document": "Новый вложенный документ", "New document in {{ collectionName }}": "Новый документ в {{ collectionName }}", + "New child document": "Новый вложенный документ", "Notification settings": "Настройки уведомлений", "Revision options": "Настройка версии", "Share link revoked": "Ссылка общего доступа отозвана", @@ -495,7 +492,6 @@ "left a comment on": "оставил комментарий в", "shared": "поделенный", "invited you to": "пригласил Вас в", - "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\".": "Назовите свой ключ так, чтобы не забыть о его предназначении в будущем. Например. «локальная разработка» или «непрерывная интеграция».", "The document archive is empty at the moment.": "Архив документов на данный момент пуст.", "Collection menu": "Меню коллекции", @@ -755,11 +751,7 @@ "We were unable to find the page you’re looking for.": "Нам не удалось найти нужную вам страницу.", "Search titles only": "Искать только в названиях", "No documents found for your search filters.": "Не найдено документов по вашим фильтрам поиска.", - "Search Results": "Результаты поиска", - "API Keys": "Ключи 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 Более подробную информацию смотрите в документации разработчика.", - "Active": "Активный", - "API token copied to clipboard": "Токен API скопирован в буфер обмена", "Copied": "Скопировано", "Revoking": "Отзыв", "Are you sure you want to revoke the {{ tokenName }} token?": "Вы уверены, что хотите отозвать токен {{ tokenName }}?", @@ -808,6 +800,7 @@ "Admins": "Администраторы", "Editors": "Редакторы", "All status": "Все статусы", + "Active": "Активный", "Settings saved": "Настройки сохранены", "Logo updated": "Логотип обновлен", "Unable to upload new logo": "Не удалось загрузить новый логотип", @@ -842,7 +835,6 @@ "New group": "Новая группа", "Groups can be used to organize and manage the people on your team.": "Группы могут быть использованы для организации и управления людьми в Вашей команде.", "No groups have been created yet": "Пока что не создано ни одной группы", - "All": "Все", "Create a group": "Создать группу", "Quickly transfer your existing documents, pages, and files from other tools and services into {{appName}}. You can also drag and drop any HTML, Markdown, and text documents directly into Collections in the app.": "Быстро переносите существующие документы, страницы и файлы из других инструментов и сервисов в {{appName}}. Вы также можете перетаскивать любые документы HTML, Markdown и текстовые документы непосредственно в Коллекции в приложении.", "Import a zip file of Markdown documents (exported from version 0.67.0 or earlier)": "Импорт ZIP-архива или документов Markdown (экспортированный из 0.67.0 или более ранней версии)", @@ -853,6 +845,7 @@ "Enterprise": "Корпоративная версия", "Recent imports": "Недавно импортированное", "Everyone that has signed into {{appName}} is listed here. It’s possible that there are other users who have access through {{signinMethods}} but haven’t signed in yet.": "Здесь перечислены все, кто вошел в {{appName}}. Возможно, есть другие пользователи, у которых есть доступ через {{signinMethods}}, но они еще не вошли в систему.", + "Filter": "Фильтр", "Receive a notification whenever a new document is published": "Получать уведомление каждый раз, когда опубликован новый документ", "Document updated": "Документ обновлен", "Receive a notification when a document you are subscribed to is edited": "Получать уведомление, когда документ, на который Вы подписаны, был отредактирован", @@ -1023,5 +1016,53 @@ "{{ user }} updated {{ timeAgo }}": "{{ user }} обновлен {{ timeAgo }}", "You created {{ timeAgo }}": "Вы создали {{ timeAgo }}", "{{ user }} created {{ timeAgo }}": "{{ user }} создан {{ timeAgo }}", - "Uploading": "Идёт загрузка" + "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 }}" } From 04ab1279025c95c16b1f434a13bbe3cf8e217ce7 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 19:01:21 +0500 Subject: [PATCH 8/9] add specific paths to trigger workflows --- .github/workflows/build.yml | 5 +++++ .github/workflows/dry_build.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2299297..7756517 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,6 +4,11 @@ on: push: branches: - master + paths: + - .github + - shared + - src + - Dockerfile workflow_dispatch: diff --git a/.github/workflows/dry_build.yml b/.github/workflows/dry_build.yml index 5b293e3..ff4f289 100644 --- a/.github/workflows/dry_build.yml +++ b/.github/workflows/dry_build.yml @@ -4,6 +4,11 @@ on: push: branches: - dev + paths: + - .github + - shared + - src + - Dockerfile jobs: build: From 1e8a16292cc0e8bce5da10c057413e928998f157 Mon Sep 17 00:00:00 2001 From: flameshikari Date: Sat, 20 Jul 2024 19:01:32 +0500 Subject: [PATCH 9/9] update readme --- .github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index a9aa9ae..a220955 100644 --- a/.github/README.md +++ b/.github/README.md @@ -6,7 +6,7 @@ ## Примечания -За основу взят перевод из [данного коммита](https://github.com/outline/outline/commit/228d1faa9fd3cbb82409d98e1443fed65adc5715), который впоследствии улучшается и переводится здесь. Перевод наверняка не самый точный; буду рад помощи в его улучшении. +За основу взят перевод из [данного коммита](https://github.com/outline/outline/commit/228d1faa9fd3cbb82409d98e1443fed65adc5715), который впоследствии улучшается и переводится здесь. Буду рад помощи в улучшении перевода или сборки; сообщить о некорректном переводе можно [здесь](https://github.com/flameshikari/outline-ru/discussions/8). Из доступных архитектур контейнера имеются только `amd64` и `arm64`, потому что мультиплатформерная сборка на GitHub Actions с помощью QEMU очень медленная: остальные архитектуры собираются часами либо вовсе зависают намертво.