From 9872062c0ec882a4cc002a37890dd133cf5ae7a9 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 19 Apr 2021 19:55:59 +0200 Subject: [PATCH] Add translation support --- .github/workflows/translations-download.yaml | 75 ++++++++++++++++++++ .github/workflows/translations-upload.yaml | 53 ++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 .github/workflows/translations-download.yaml create mode 100644 .github/workflows/translations-upload.yaml diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml new file mode 100644 index 00000000..1e62b739 --- /dev/null +++ b/.github/workflows/translations-download.yaml @@ -0,0 +1,75 @@ +--- +name: Translations Download + +# yamllint disable-line rule:truthy +on: + schedule: + - cron: "0 8 * * *" + workflow_dispatch: + workflow_run: + workflows: ["Translations Upload"] + branches: [master] + types: + - completed + +jobs: + json: + name: Download Translations + runs-on: ubuntu-latest + steps: + - name: โคต๏ธ Check out code from GitHub + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + - name: ๐Ÿ— Set up yq + uses: frenck/action-setup-yq@v1.0.0 + - name: ๐Ÿ— Set up the Lokalise CLI + uses: frenck/action-setup-lokalise@v1.0.0 + - name: โคต๏ธ Download translations + run: | + echo "Downloading translations to lokalise" + lokalise2 file download \ + --token "${LOKALISE_TOKEN}" \ + --project-id "${LOKALISE_PROJECT}" \ + --format yaml \ + --original-filenames=false \ + --export-empty-as base \ + --bundle-structure ".translations/%LANG_ISO%.yaml" + env: + LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} + LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }} + - name: ๐Ÿš€ Process translations + run: | + addons=$(yq e '.addons | keys | .[]' .addons.yml) + mkdir -p .translations + for file in .translations/*.yaml; + do + filename=$(basename "${file}") + language="${filename%.*}" + if [[ "${language}" == "en" ]]; then + continue + fi + echo "Processing downloaded translations in ${language}..." + while read addon; + do + if [[ -f "${addon}/translations/en.yaml" ]]; + then + echo "Processing downloaded translations in ${language} for ${addon}..." + yq e ".${addon}" "${file}" \ + > "${addon}/translations/${filename}" + fi + done <<<"${addons}" + done + - name: ๐Ÿš€ Commit changes + continue-on-error: true + run: | + git config --local user.email "action@github.com" + git config --local user.name "${GITHUB_ACTOR}" + git add . + git commit -m "๐ŸŒ Updating translations" -a + - name: ๐Ÿš€ Push changes + uses: ad-m/github-push-action@v0.6.0 + continue-on-error: true + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.ref }} diff --git a/.github/workflows/translations-upload.yaml b/.github/workflows/translations-upload.yaml new file mode 100644 index 00000000..37c20152 --- /dev/null +++ b/.github/workflows/translations-upload.yaml @@ -0,0 +1,53 @@ +--- +name: Translations Upload + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + workflow_run: + workflows: ["Repository Updater"] + branches: [master] + types: + - completed + +jobs: + upload: + name: Upload Translations + runs-on: ubuntu-latest + steps: + - name: โคต๏ธ Check out code from GitHub + uses: actions/checkout@v2.3.4 + - name: ๐Ÿ— Set up yq + uses: frenck/action-setup-yq@v1.0.0 + - name: ๐Ÿ— Set up the Lokalise CLI + uses: frenck/action-setup-lokalise@v1.0.0 + - name: ๐Ÿš€ Combine translations + run: | + addons=$(yq e '.addons | keys | .[]' .addons.yml) + mkdir -p .translations + while read addon; + do + if [[ -f "${addon}/translations/en.yaml" ]]; + then + echo "Prepping translation upload for $addon..." + ADDON="${addon}" \ + yq e '{env(ADDON): .}' "${addon}/translations/en.yaml" \ + > ".translations/${addon}.yaml" + fi + done <<<"${addons}" + + echo "Combining translation files..." + yq ea '. as $item ireduce ({}; . * $item)' ./.translations/*.yaml > translations.yaml + - name: ๐Ÿš€ Upload translations + run: | + echo "Uploading translations to lokalise" + lokalise2 file upload \ + --apply-tm \ + --lang-iso en \ + --poll \ + --token "${LOKALISE_TOKEN}" \ + --project-id "${LOKALISE_PROJECT}" \ + --file translations.yaml + env: + LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} + LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }}