diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index 9f88b72f7..52f3615aa 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 with: - node-version: 17.x + node-version: 18.x - name: install pnpm run: sudo npm i pnpm@latest-6 -g - name: set store diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml new file mode 100644 index 000000000..940704873 --- /dev/null +++ b/.github/workflows/translations.yml @@ -0,0 +1,37 @@ +name: translations progress + +on: + # or manual triggered + workflow_dispatch: + schedule: + # twice a week + - cron: '0 0 * * 1,4' +jobs: + deploy: + runs-on: ubuntu-latest + environment: deploy + steps: + - name: Checkout Commit + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + - name: install pnpm + run: sudo npm i pnpm@latest-6 -g + - name: Install dependencies + run: pnpm install + - name: update translations + run: pnpm run website:translations + env: + TOKEN: ${{ secrets.CROWDIN_VERDACCIO_API_KEY }} + - name: Commit & Push changes + uses: actions-js/push@a52398fac807b0c1e5f1492c969b477c8560a0ba # tag=v1.3 + with: + github_token: ${{ secrets.TOKEN_VERDACCIOBOT_GITHUB }} + message: "chore: updated contributors list" + branch: master + author_email: verdaccio.npm@gmail.com + author_name: verdacciobot diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index f7db27f7f..e0f4cad9a 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -39,6 +39,8 @@ jobs: args: [--frozen-lockfile] - name: Build Plugins run: pnpm build --filter "docusaurus-plugin-contributors" + - name: Build Translations percentage + run: pnpm build --filter "@verdaccio/crowdin-translations" - name: Cache Docusaurus Build uses: actions/cache@fd5de65bc895cf536527842281bea11763fefd77 # tag=v3 with: @@ -54,6 +56,7 @@ jobs: env: CROWDIN_VERDACCIO_PROJECT_ID: ${{ secrets.CROWDIN_VERDACCIO_PROJECT_ID }} CROWDIN_VERDACCIO_API_KEY: ${{ secrets.CROWDIN_VERDACCIO_API_KEY }} + SENTRY_KEY: ${{ secrets.SENTRY_KEY }} CONTEXT: production run: pnpm netlify:build:production --filter ...@verdaccio/website diff --git a/package.json b/package.json index d0cdbc881..161785af9 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@typescript-eslint/eslint-plugin": "5.37.0", "@typescript-eslint/parser": "5.37.0", "@verdaccio/benchmark": "workspace:*", + "@verdaccio/crowdin-translations": "workspace:*", "@verdaccio/eslint-config": "workspace:*", "@verdaccio/types": "workspace:*", "@verdaccio/ui-theme": "workspace:*", @@ -141,6 +142,7 @@ "ci:publish": "changeset publish", "ts:ref": "update-ts-references --discardComments", "website": "pnpm build --filter ...@verdaccio/website", + "translations": "local-crowdin-api translations", "crowdin:upload": "crowdin upload sources --auto-update --config ./crowdin.yaml", "crowdin:download": "crowdin download --verbose --config ./crowdin.yaml", "crowdin:sync": "pnpm crowdin:upload && pnpm crowdin:download --verbose", diff --git a/packages/tools/benchmark/src/index.ts b/packages/tools/benchmark/src/index.ts index 0c85a9494..ba49e4a03 100644 --- a/packages/tools/benchmark/src/index.ts +++ b/packages/tools/benchmark/src/index.ts @@ -4,9 +4,6 @@ import { ApiCommand } from './api'; const [node, app, ...args] = process.argv; -// eslint-disable-next-line no-console -console.log('--args', args); - const cli = new Cli({ binaryLabel: `benckmark`, binaryName: `${node} ${app}`, diff --git a/packages/tools/translations/.babelrc b/packages/tools/translations/.babelrc new file mode 100644 index 000000000..851856e59 --- /dev/null +++ b/packages/tools/translations/.babelrc @@ -0,0 +1,3 @@ +{ + "extends": "../../../.babelrc" +} diff --git a/packages/tools/translations/index.js b/packages/tools/translations/index.js new file mode 100755 index 000000000..1e0215748 --- /dev/null +++ b/packages/tools/translations/index.js @@ -0,0 +1 @@ +require('./build/index.js'); diff --git a/packages/tools/translations/package.json b/packages/tools/translations/package.json new file mode 100644 index 000000000..3623d6b6f --- /dev/null +++ b/packages/tools/translations/package.json @@ -0,0 +1,24 @@ +{ + "name": "@verdaccio/crowdin-translations", + "version": "1.0.0", + "bin": { + "local-crowdin-api": "./index.js" + }, + "private": "true", + "description": "update translations percentage for website data", + "main": "./build/index.js", + "scripts": { + "build": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps", + "start": "ts-node src/index.ts" + }, + "keywords": [], + "author": "Juan Picado ", + "license": "MIT", + "dependencies": { + "clipanion": "3.1.0", + "@crowdin/crowdin-api-client": "1.19.1" + }, + "devDependencies": { + "ts-node": "10.9.1" + } +} diff --git a/packages/tools/translations/src/api/index.ts b/packages/tools/translations/src/api/index.ts new file mode 100644 index 000000000..a43365851 --- /dev/null +++ b/packages/tools/translations/src/api/index.ts @@ -0,0 +1,17 @@ +import { Command } from 'clipanion'; + +import runApi from './run'; + +export class ApiCommand extends Command { + public static paths = [['translations']]; + + public async execute() { + try { + await runApi(); + } catch (err: any) { + // eslint-disable-next-line no-console + console.error(err); + process.exit(1); + } + } +} diff --git a/packages/tools/translations/src/api/run.ts b/packages/tools/translations/src/api/run.ts new file mode 100644 index 000000000..4cb9ebb02 --- /dev/null +++ b/packages/tools/translations/src/api/run.ts @@ -0,0 +1,32 @@ +import { Credentials, TranslationStatus } from '@crowdin/crowdin-api-client'; +import fs from 'fs/promises'; +import path from 'path'; + +const debug = require('debug')('verdaccio:website'); + +const token = process.env.TOKEN || ''; + +export default async function run() { + try { + debug('api report start'); + const credentials: Credentials = { + token, + }; + const api: TranslationStatus = new TranslationStatus(credentials); + const progress = await api.getProjectProgress(295539, { limit: 100 }); + const final = progress.data.reduce((acc, item) => { + const { languageId, translationProgress, approvalProgress } = item.data; + // @ts-ignore + acc[languageId] = { translationProgress, approvalProgress }; + return acc; + }, {}); + const location = path.join(__dirname, '../../src/progress_lang.json'); + fs.writeFile(location, JSON.stringify(final, null, 4)); + // eslint-disable-next-line no-console + console.log('translations written at %s ends', location); + } catch (err: any) { + // eslint-disable-next-line no-console + console.error(`error on process crowdin translations run`, err); + process.exit(1); + } +} diff --git a/packages/tools/translations/src/index.ts b/packages/tools/translations/src/index.ts new file mode 100644 index 000000000..995ab6494 --- /dev/null +++ b/packages/tools/translations/src/index.ts @@ -0,0 +1,27 @@ +import { Cli } from 'clipanion'; + +import { ApiCommand } from './api'; + +const [node, app, ...args] = process.argv; + +const cli = new Cli({ + binaryLabel: `translations`, + binaryName: `${node} ${app}`, + binaryVersion: require('../package.json').version, +}); + +cli.register(ApiCommand); +cli.runExit(args, Cli.defaultContext); + +process.on('uncaughtException', function (err) { + // eslint-disable-next-line no-console + console.error( + // eslint-disable-next-line max-len + `uncaught exception, please report (https://github.com/verdaccio/verdaccio/issues) this: \n${err.stack}` + ); + process.exit(1); +}); + +const data = require('./progress_lang.json'); + +export { data }; diff --git a/packages/tools/translations/src/progress_lang.json b/packages/tools/translations/src/progress_lang.json new file mode 100644 index 000000000..0e028ffda --- /dev/null +++ b/packages/tools/translations/src/progress_lang.json @@ -0,0 +1,118 @@ +{ + "ar": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "cs": { + "translationProgress": 11, + "approvalProgress": 1 + }, + "de": { + "translationProgress": 20, + "approvalProgress": 20 + }, + "es-ES": { + "translationProgress": 26, + "approvalProgress": 26 + }, + "fi": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "fil": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "fr": { + "translationProgress": 26, + "approvalProgress": 26 + }, + "gl": { + "translationProgress": 1, + "approvalProgress": 0 + }, + "hi": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "it": { + "translationProgress": 78, + "approvalProgress": 78 + }, + "ja": { + "translationProgress": 1, + "approvalProgress": 0 + }, + "km": { + "translationProgress": 1, + "approvalProgress": 0 + }, + "ko": { + "translationProgress": 1, + "approvalProgress": 0 + }, + "pl": { + "translationProgress": 21, + "approvalProgress": 21 + }, + "pt-BR": { + "translationProgress": 36, + "approvalProgress": 36 + }, + "pt-PT": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "ro": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "ru": { + "translationProgress": 50, + "approvalProgress": 50 + }, + "ru-UA": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "si-LK": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "sr": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "sr-CS": { + "translationProgress": 12, + "approvalProgress": 0 + }, + "tg": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "tr": { + "translationProgress": 2, + "approvalProgress": 0 + }, + "uk": { + "translationProgress": 0, + "approvalProgress": 0 + }, + "vi": { + "translationProgress": 8, + "approvalProgress": 0 + }, + "yo": { + "translationProgress": 18, + "approvalProgress": 0 + }, + "zh-CN": { + "translationProgress": 34, + "approvalProgress": 34 + }, + "zh-TW": { + "translationProgress": 20, + "approvalProgress": 10 + } +} diff --git a/packages/tools/translations/tsconfig.build.json b/packages/tools/translations/tsconfig.build.json new file mode 100644 index 000000000..db054aa8c --- /dev/null +++ b/packages/tools/translations/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./build" + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts"] +} diff --git a/packages/tools/translations/tsconfig.json b/packages/tools/translations/tsconfig.json new file mode 100644 index 000000000..35b3cee58 --- /dev/null +++ b/packages/tools/translations/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.reference.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./build" + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6dbd7597..afce7faf1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,6 +54,7 @@ importers: '@typescript-eslint/eslint-plugin': 5.37.0 '@typescript-eslint/parser': 5.37.0 '@verdaccio/benchmark': workspace:* + '@verdaccio/crowdin-translations': workspace:* '@verdaccio/eslint-config': workspace:* '@verdaccio/types': workspace:* '@verdaccio/ui-theme': workspace:* @@ -146,6 +147,7 @@ importers: '@typescript-eslint/eslint-plugin': 5.37.0_44c7ca7727a920b33eab97b6957f2740 '@typescript-eslint/parser': 5.37.0_eslint@8.23.1+typescript@4.8.4 '@verdaccio/benchmark': link:packages/tools/benchmark + '@verdaccio/crowdin-translations': link:packages/tools/translations '@verdaccio/eslint-config': link:packages/tools/eslint '@verdaccio/types': link:packages/core/types '@verdaccio/ui-theme': link:packages/plugins/ui-theme @@ -1220,6 +1222,17 @@ importers: ts-node: 10.9.1_8274f11304fdf7eb271c33cd723ceaff verdaccio: link:../../verdaccio + packages/tools/translations: + specifiers: + '@crowdin/crowdin-api-client': 1.19.1 + clipanion: 3.1.0 + ts-node: 10.9.1 + dependencies: + '@crowdin/crowdin-api-client': 1.19.1_debug@4.3.4 + clipanion: 3.1.0 + devDependencies: + ts-node: 10.9.1_8274f11304fdf7eb271c33cd723ceaff + packages/tools/verdaccio-prefix-fake-plugin: specifiers: {} @@ -1360,6 +1373,7 @@ importers: '@mui/material': 5.10.7 '@mui/styles': 5.10.7 '@tsconfig/docusaurus': ^1.0.2 + '@verdaccio/crowdin-translations': workspace:* classnames: 2.3.2 clsx: 1.2.1 copy-text-to-clipboard: 3.0.1 @@ -1404,6 +1418,7 @@ importers: devDependencies: '@docusaurus/module-type-aliases': 2.1.0_e04bad828ac717e6587f05c972df8358 '@tsconfig/docusaurus': 1.0.2 + '@verdaccio/crowdin-translations': link:../packages/tools/translations docusaurus-plugin-sass: 0.2.1_f2ce3bf55a04081984944a3e75e8d1ea esbuild: 0.14.10 esbuild-loader: 2.16.0 @@ -5695,6 +5710,15 @@ packages: - encoding dev: true + /@crowdin/crowdin-api-client/1.19.1_debug@4.3.4: + resolution: {integrity: sha512-sQJBjYchn0yRnqgjqPgqy81byflfpSnwPhIMKcFvhCTJDnp4cHGsbsLO49qWBT52peklZvi6qlsjW9/PB0yHGg==} + engines: {node: '>=12.9.0'} + dependencies: + axios: 0.21.3_debug@4.3.4 + transitivePeerDependencies: + - debug + dev: false + /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -5929,7 +5953,7 @@ packages: wait-on: 6.0.1_debug@4.3.4 webpack: 5.74.0_esbuild@0.14.10 webpack-bundle-analyzer: 4.6.1 - webpack-dev-server: 4.9.3_debug@4.3.4+webpack@5.74.0 + webpack-dev-server: 4.9.3_webpack@5.74.0 webpack-merge: 5.8.0 webpackbar: 5.0.2_webpack@5.74.0 transitivePeerDependencies: @@ -6026,7 +6050,7 @@ packages: wait-on: 6.0.1_debug@4.3.4 webpack: 5.74.0_esbuild@0.14.10 webpack-bundle-analyzer: 4.6.1 - webpack-dev-server: 4.9.3_debug@4.3.4+webpack@5.74.0 + webpack-dev-server: 4.9.3_webpack@5.74.0 webpack-merge: 5.8.0 webpackbar: 5.0.2_webpack@5.74.0 transitivePeerDependencies: @@ -7341,6 +7365,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@jest/console': 29.1.0 '@jest/reporters': 29.1.0 @@ -7425,6 +7452,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.1.0 @@ -7646,6 +7676,9 @@ packages: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/is-prop-valid': 1.2.0 @@ -7667,6 +7700,9 @@ packages: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/is-prop-valid': 1.2.0 @@ -7725,6 +7761,13 @@ packages: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/react': 11.10.4_2752b159547514dc9531b132ed99b44b @@ -7754,6 +7797,13 @@ packages: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@mui/base': 5.0.0-alpha.99_react-dom@17.0.2+react@17.0.2 @@ -7777,6 +7827,9 @@ packages: peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@mui/utils': 5.10.6_react@17.0.2 @@ -7791,6 +7844,9 @@ packages: peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@mui/utils': 5.10.6_react@17.0.2 @@ -7805,6 +7861,11 @@ packages: '@emotion/react': ^11.4.1 '@emotion/styled': ^11.3.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/cache': 11.10.3 @@ -7822,6 +7883,11 @@ packages: '@emotion/react': ^11.4.1 '@emotion/styled': ^11.3.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/cache': 11.10.3 @@ -7836,6 +7902,9 @@ packages: peerDependencies: '@types/react': ^17.0.0 react: ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/hash': 0.9.0 @@ -7864,6 +7933,9 @@ packages: peerDependencies: '@types/react': ^17.0.0 react: ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/hash': 0.9.0 @@ -7893,6 +7965,13 @@ packages: '@emotion/styled': ^11.3.0 '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@emotion/react': 11.10.4_2752b159547514dc9531b132ed99b44b @@ -7916,6 +7995,13 @@ packages: '@emotion/styled': ^11.3.0 '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true dependencies: '@babel/runtime': 7.19.0 '@mui/private-theming': 5.10.6_react@17.0.2 @@ -7932,12 +8018,18 @@ packages: resolution: {integrity: sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==} peerDependencies: '@types/react': '*' + peerDependenciesMeta: + '@types/react': + optional: true dev: false /@mui/types/7.2.0_@types+react@17.0.50: resolution: {integrity: sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==} peerDependencies: '@types/react': '*' + peerDependenciesMeta: + '@types/react': + optional: true dependencies: '@types/react': 17.0.50 dev: true @@ -10202,7 +10294,15 @@ packages: /axios/0.21.1_debug@4.3.4: resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} dependencies: - follow-redirects: 1.14.9_debug@4.3.3 + follow-redirects: 1.14.9_debug@4.3.4 + transitivePeerDependencies: + - debug + dev: false + + /axios/0.21.3_debug@4.3.4: + resolution: {integrity: sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==} + dependencies: + follow-redirects: 1.14.9_debug@4.3.4 transitivePeerDependencies: - debug dev: false @@ -10210,7 +10310,7 @@ packages: /axios/0.25.0_debug@4.3.4: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: - follow-redirects: 1.14.9_debug@4.3.3 + follow-redirects: 1.14.9_debug@4.3.4 transitivePeerDependencies: - debug @@ -14237,16 +14337,9 @@ packages: transitivePeerDependencies: - encoding - /follow-redirects/1.14.9_debug@4.3.3: + /follow-redirects/1.14.9: resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: - debug: 4.3.3_supports-color@6.1.0 /follow-redirects/1.14.9_debug@4.3.4: resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} @@ -15171,19 +15264,18 @@ packages: - supports-color dev: true - /http-proxy-middleware/0.19.1_debug@4.3.3+supports-color@6.1.0: + /http-proxy-middleware/0.19.1_supports-color@6.1.0: resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} dependencies: - http-proxy: 1.18.1_debug@4.3.3 + http-proxy: 1.18.1 is-glob: 4.0.3 lodash: 4.17.21 micromatch: 3.1.10_supports-color@6.1.0 transitivePeerDependencies: - - debug - supports-color - /http-proxy-middleware/2.0.3_adbe487640bba2b97136947cd1213f1b: + /http-proxy-middleware/2.0.3_@types+express@4.17.13: resolution: {integrity: sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -15194,32 +15286,18 @@ packages: dependencies: '@types/express': 4.17.13 '@types/http-proxy': 1.17.8 - http-proxy: 1.18.1_debug@4.3.4 + http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.5 - transitivePeerDependencies: - - debug - /http-proxy/1.18.1_debug@4.3.3: + /http-proxy/1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.6 - follow-redirects: 1.14.9_debug@4.3.3 + follow-redirects: 1.14.9 requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - /http-proxy/1.18.1_debug@4.3.4: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.6 - follow-redirects: 1.14.9_debug@4.3.4 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug /http-status-codes/2.2.0: resolution: {integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==} @@ -15977,6 +16055,9 @@ packages: hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@jest/core': 29.1.1_ts-node@10.9.1 '@jest/test-result': 29.1.0 @@ -16001,6 +16082,11 @@ packages: peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true dependencies: '@babel/core': 7.19.3 '@jest/test-sequencer': 29.1.0 @@ -16035,6 +16121,11 @@ packages: peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true dependencies: '@babel/core': 7.19.3 '@jest/test-sequencer': 29.1.0 @@ -16235,6 +16326,9 @@ packages: engines: {node: '>=6'} peerDependencies: jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true dependencies: jest-resolve: 29.1.0 @@ -16419,6 +16513,9 @@ packages: hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@jest/core': 29.1.1_ts-node@10.9.1 '@jest/types': 29.1.0 @@ -24047,7 +24144,7 @@ packages: del: 4.1.1 express: 4.17.1_supports-color@6.1.0 html-entities: 1.3.1 - http-proxy-middleware: 0.19.1_debug@4.3.3+supports-color@6.1.0 + http-proxy-middleware: 0.19.1_supports-color@6.1.0 import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.5 @@ -24097,7 +24194,7 @@ packages: del: 4.1.1 express: 4.17.1_supports-color@6.1.0 html-entities: 1.3.1 - http-proxy-middleware: 0.19.1_debug@4.3.3+supports-color@6.1.0 + http-proxy-middleware: 0.19.1_supports-color@6.1.0 import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.5 @@ -24127,7 +24224,7 @@ packages: - utf-8-validate dev: false - /webpack-dev-server/4.9.3_debug@4.3.4+webpack@5.74.0: + /webpack-dev-server/4.9.3_webpack@5.74.0: resolution: {integrity: sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -24155,7 +24252,7 @@ packages: express: 4.18.1 graceful-fs: 4.2.9 html-entities: 2.3.2 - http-proxy-middleware: 2.0.3_adbe487640bba2b97136947cd1213f1b + http-proxy-middleware: 2.0.3_@types+express@4.17.13 ipaddr.js: 2.0.1 open: 8.4.0 p-retry: 4.6.1 @@ -24170,7 +24267,6 @@ packages: ws: 8.8.0 transitivePeerDependencies: - bufferutil - - debug - supports-color - utf-8-validate diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 1a089cb2c..7e9472423 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -1,10 +1,12 @@ // @ts-check +const translations = require('@verdaccio/crowdin-translations/build/progress_lang.json'); +// @ts-ignore +const progress = translations; const isDeployPreview = process.env.CONTEXT === "deploy-preview"; const isProductionDeployment = process.env.CONTEXT === "production"; -const localesWithLowRatioOfTranslation = ["ar-SA", "fil-PH", "gl-ES", "hi-IN", "ja-JP", "ko-KR", "pt-PT", "sr-SP", "tg-TJ", "ro-RO", "zh-CN"]; -/** @type {import('@docusaurus/types').DocusaurusConfig['i18n']} */ +// const localesWithLowRatioOfTranslation = ["ar-SA", "fil-PH", "gl-ES", "hi-IN", "ja-JP", "ko-KR", "pt-PT", "sr-SP", "tg-TJ", "ro-RO", "zh-CN"]; const i18nConfig = { defaultLocale: 'en', locales: isDeployPreview ? ['en'] : [ @@ -17,9 +19,20 @@ const i18nConfig = { "zh-CN" ], localeConfigs: { - ar: { - direction: 'rtl' - } + en: { label: "English" }, + 'it-IT': { label: `Italiano (${progress["it"].translationProgress}%)` }, + 'es-ES': { label: `Español (${progress["es-ES"].translationProgress}%)` }, + 'de-DE': { label: `Deutsch (${progress["de"].translationProgress}%)` }, + 'cs-CZ': { label: `Čeština (Česko) (${progress["cs"].translationProgress}%)` }, + 'fr-FR': { label: `Français (${progress["fr"].translationProgress}%)` }, + 'pl-PL': { label: `Polski (Polska) (${progress["pl"].translationProgress}%)` }, + 'pt-BR': { label: `Português (Brasil) (${progress["pt-BR"].translationProgress}%)` }, + 'ru-RU': { label: `Русский (Россия) (${progress["ru"].translationProgress}%)` }, + 'zh-CN': { label: `中文(中国)(${progress["zh-CN"].translationProgress}%)` }, + 'zh-TW': { label: `中文(台灣)(${progress["zh-TW"].translationProgress}%)` }, + 'yo-NG': { label: `Èdè Yorùbá (Nàìjíríà) (${progress["yo"].translationProgress}%)` }, + 'sr-CS': { label: `Српски (Србија) (${progress["sr-CS"].translationProgress}%)` }, + 'vi-VN': { label: `Tiếng Việt (Việt Nam) (${progress["vi"].translationProgress}%)` }, } } @@ -43,7 +56,7 @@ module.exports = { plugins: [ 'docusaurus-plugin-sass', "docusaurus-plugin-contributors", - isProductionDeployment && ['docusaurus-plugin-sentry', { DSN: 'a7bc89ee3f284570b1d9a47e600e7597' }] + isProductionDeployment && typeof process.env.SENTRY_KEY === 'string' && ['docusaurus-plugin-sentry', { DSN: process.env.SENTRY_KEY }] ].filter(Boolean), webpack: { jsLoader: (isServer) => ({ diff --git a/website/package.json b/website/package.json index 05d871ce0..6f765cbf8 100644 --- a/website/package.json +++ b/website/package.json @@ -59,6 +59,7 @@ "devDependencies": { "@docusaurus/module-type-aliases": "2.1.0", "@tsconfig/docusaurus": "^1.0.2", + "@verdaccio/crowdin-translations": "workspace:*", "docusaurus-plugin-sass": "^0.2.1", "esbuild": "0.14.10", "esbuild-loader": "2.16.0",