From a62122eec419791cd2d9fec43212ae7569d2ffad Mon Sep 17 00:00:00 2001 From: sashamishcheriakova <135987917+sashamishcheriakova@users.noreply.github.com> Date: Thu, 18 Dec 2025 12:54:32 +0000 Subject: [PATCH] Prepare for translation Add workflow files, empty lines --- .github/workflows/create-crowdin-project.yml | 20 ++++++ .github/workflows/download-translations.yml | 73 ++++++++++++++++++++ .github/workflows/hide-strings.yml | 36 ++++++++++ .github/workflows/nttt-processing.yml | 58 ++++++++++++++++ .github/workflows/upload-sources.yml | 36 ++++++++++ crowdin.yml | 10 +++ en/step_1.md | 5 ++ en/step_2.md | 5 ++ en/step_3.md | 5 ++ en/step_4.md | 5 ++ en/step_5.md | 5 ++ 11 files changed, 258 insertions(+) create mode 100644 .github/workflows/create-crowdin-project.yml create mode 100644 .github/workflows/download-translations.yml create mode 100644 .github/workflows/hide-strings.yml create mode 100644 .github/workflows/nttt-processing.yml create mode 100644 .github/workflows/upload-sources.yml diff --git a/.github/workflows/create-crowdin-project.yml b/.github/workflows/create-crowdin-project.yml new file mode 100644 index 0000000..d881f83 --- /dev/null +++ b/.github/workflows/create-crowdin-project.yml @@ -0,0 +1,20 @@ +name: Create Crowdin project + +on: + workflow_dispatch: + +jobs: + crowdin-create: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Create crowdin project + uses: crowdin/github-action@v2 + with: + command: "project add" + command_args: "RPF-Project-${{ github.event.repository.name }} -l fr -l nl -l de -l hi -l it -l ja -l pt-BR -l es-419 -l uk" + env: + CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} diff --git a/.github/workflows/download-translations.yml b/.github/workflows/download-translations.yml new file mode 100644 index 0000000..7f3b622 --- /dev/null +++ b/.github/workflows/download-translations.yml @@ -0,0 +1,73 @@ +name: Crowdin Download Action + +on: + schedule: + # Run every day at 1 AM UTC + - cron: "0 1 * * *" + workflow_dispatch: # Manual triggering + inputs: + language_code: + description: 'Language code to download translations for (leave empty to download all languages)' + required: false + default: '' + type: string + +concurrency: + group: crowdin-download + cancel-in-progress: true + +permissions: write-all + +jobs: + crowdin: + runs-on: ubuntu-latest + steps: + - name: Skip if Crowdin ID missing + run: | + if [ -z "${{ secrets.CROWDIN_PROJECT_ID }}" ]; then + echo "Skipping Crowdin sync โ€” no project ID set." + exit 0 + fi + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: master + + - name: Download all translations from Crowdin + uses: crowdin/github-action@v2 + with: + create_pull_request: true + crowdin_branch_name: master + download_translations: true + localization_branch_name: l10n_crowdin_translations + pull_request_base_branch_name: "master" + pull_request_body: "New Crowdin pull request with translations" + pull_request_title: "New Crowdin translations" + upload_sources: false + upload_translations: false + env: + CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: ${{ inputs.language_code == '' }} + + - name: Download selected translations from Crowdin + uses: crowdin/github-action@v2 + with: + create_pull_request: true + crowdin_branch_name: master + download_language: ${{ inputs.language_code }} + download_translations: true + localization_branch_name: l10n_crowdin_translations-${{ inputs.language_code }} + pull_request_base_branch_name: "master" + pull_request_body: "New Crowdin pull request with translations" + pull_request_title: "New Crowdin translations for ${{ inputs.language_code }}" + upload_sources: false + upload_translations: false + env: + CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: ${{ inputs.language_code != '' }} + diff --git a/.github/workflows/hide-strings.yml b/.github/workflows/hide-strings.yml new file mode 100644 index 0000000..93a8a1d --- /dev/null +++ b/.github/workflows/hide-strings.yml @@ -0,0 +1,36 @@ +name: Crowdin Hide Strings + +on: + workflow_run: + workflows: ["Crowdin Upload Action"] + types: + - completed + +jobs: + crowdin-upload: + if: ${{ github.event.workflow_run.conclusion == 'success' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Crowdin CLI + run: | + curl -L https://github.com/crowdin/crowdin-cli/releases/latest/download/crowdin-cli.zip -o crowdin-cli.zip + unzip crowdin-cli.zip -d crowdin-cli + mkdir -p ~/bin + mv crowdin-cli/*/crowdin ~/bin/crowdin + cp crowdin-cli/*/crowdin-cli.jar ~/bin/crowdin-cli.jar + chmod +x ~/bin/crowdin + echo "PATH=$HOME/bin:$PATH" >> $GITHUB_ENV + + - name: Hide matching strings + run: | + crowdin --version + crowdin string list --verbose | grep -E -- '--- /no-print ---|--- no-print|--- print-only|hero_image images/' | awk '{print $1}' | sed 's/^#//' | grep '^[0-9]\+$' + while read -r id; do + crowdin string edit "$id" --hidden + done + env: + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} diff --git a/.github/workflows/nttt-processing.yml b/.github/workflows/nttt-processing.yml new file mode 100644 index 0000000..ba35944 --- /dev/null +++ b/.github/workflows/nttt-processing.yml @@ -0,0 +1,58 @@ +name: NTTT processing + +on: + # currently allowing manual trigger only + workflow_dispatch: + inputs: + branch: + description: 'Branch to process translations on' + required: false + default: 'l10n_crowdin_translations' + type: string + +permissions: write-all + +jobs: + nttt-processing: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ inputs.branch || 'l10n_crowdin_translations'}} + + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: '3.11.0' + + - name: Install NTTT from GitHub repository + run: | + python -m pip install --upgrade pip + pip install git+https://github.com/raspberrypilearning/nttt.git + + - name: Run NTTT on all language directories except 'en' + run: | + for lang_dir in */; do + if [[ -d "$lang_dir" && "$lang_dir" != "en/" ]]; then + lang_code=$(basename "$lang_dir") + echo "Processing language: $lang_code" + cd "$lang_dir" + printf "y\n" | nttt -Y YES || true + cd .. + fi + done + + - name: Add changes to branch + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action - NTTT Processing" + git add . + if git diff --staged --quiet; then + echo "No changes after NTTT processing" + else + git commit -m "Apply NTTT processing to translations" + git push origin HEAD:${{ inputs.branch || 'l10n_crowdin_translations'}} + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/upload-sources.yml b/.github/workflows/upload-sources.yml new file mode 100644 index 0000000..28af698 --- /dev/null +++ b/.github/workflows/upload-sources.yml @@ -0,0 +1,36 @@ +name: Crowdin Upload Action + +on: + pull_request: + types: [closed] + branches: + - master + paths: ["en/**/*.*"] + + workflow_dispatch: + +jobs: + crowdin-upload: + if: (github.event.pull_request.merged == true) || (github.event_name == 'workflow_dispatch') + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Make sure CROWDIN_PROJECT_ID is set + run: | + if [ -z "${{ secrets.CROWDIN_PROJECT_ID }}" ]; then + echo "CROWDIN_PROJECT_ID is not set. Please see instructions in CROWDIN.md" + exit 1 + fi + + - name: Crowdin push + uses: crowdin/github-action@v2 + with: + crowdin_branch_name: master + upload_sources: true + upload_translations: false + download_translations: false + env: + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }} diff --git a/crowdin.yml b/crowdin.yml index 72ed141..d37ca83 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,13 @@ +"project_id_env": "CROWDIN_PROJECT_ID" +"api_token_env": "CROWDIN_API_TOKEN" +base_path: "." +base_url: "https://api.crowdin.com" +preserve_hierarchy: true + files: - source: /en/**/*.* translation: /%locale%/**/%original_file_name% + ignore: + - /en/**/*.pdf + - /en/**/*.mp3 + - /en/**/*.zip diff --git a/en/step_1.md b/en/step_1.md index 949e242..c266b3f 100644 --- a/en/step_1.md +++ b/en/step_1.md @@ -1,6 +1,9 @@

Print a disgusting welcome

+ --- task --- + Use print() to show a welcome message for your disgusting recipe card. + --- /task ---

Set the scene

@@ -22,8 +25,10 @@ line_numbers: true line_number_start: 1 line_highlights: 1-2 --- + print('๐Ÿคข Welcome to the DISGUSTING DISHES cookbook! ๐Ÿคฎ') print() + --- /code --- diff --git a/en/step_2.md b/en/step_2.md index 205037b..1edc55f 100644 --- a/en/step_2.md +++ b/en/step_2.md @@ -1,6 +1,9 @@

Add an ingredients heading

+ --- task --- + Use print() to add a heading and the first ingredient to your recipe card. + --- /task ---

Set the scene

@@ -19,8 +22,10 @@ line_numbers: true line_number_start: 3 line_highlights: 3-4 --- + print('๐Ÿง  Ingredients:') print(' - 1 cup of toenail clippings ๐Ÿฆถ') + --- /code --- diff --git a/en/step_3.md b/en/step_3.md index dd0be5d..e7a9c9f 100644 --- a/en/step_3.md +++ b/en/step_3.md @@ -1,6 +1,9 @@

Add more gross ingredients

+ --- task --- + Use more print() lines to add extra ingredients to your recipe. + --- /task ---

Set the scene

@@ -19,11 +22,13 @@ line_numbers: true line_number_start: 5 line_highlights: 5-9 --- + print(' - 2 rotten eggs ๐Ÿฅš') print(' - A handful of belly button fluff ๐Ÿค') print(' - 3 eyeballs ๐Ÿ‘๏ธ๐Ÿ‘๏ธ๐Ÿ‘๏ธ') print(' - Green slime to taste ๐Ÿงช') print() + --- /code --- diff --git a/en/step_4.md b/en/step_4.md index 255e855..51763be 100644 --- a/en/step_4.md +++ b/en/step_4.md @@ -1,6 +1,9 @@

Add your first instructions

+ --- task --- + Use print() to show the first two steps for your recipe. + --- /task ---

Set the scene

@@ -19,9 +22,11 @@ line_numbers: true line_number_start: 10 line_highlights: 10-12 --- + print('๐Ÿงช Instructions:') print('1. Mix the toenails and eggs in a dirty sock.') print('2. Sprinkle in the belly button fluff.') + --- /code --- diff --git a/en/step_5.md b/en/step_5.md index 80715b6..1ee595e 100644 --- a/en/step_5.md +++ b/en/step_5.md @@ -1,6 +1,9 @@

Finish the recipe and add a warning

+ --- task --- + Print the last steps of your recipe and a final warning message using double quotes. + --- /task ---

Set the scene

@@ -19,10 +22,12 @@ line_numbers: true line_number_start: 13 line_highlights: 13-16 --- + print('3. Stir in the eyeballs until they stare back at you.') print('4. Drizzle with slime and serve cold. โ„๏ธ') print() print("๐Ÿ’€ WARNING: Don't eat this unless you're a zombie!") + --- /code ---