Skip to content

The Translation Pit (Localize) #159

The Translation Pit (Localize)

The Translation Pit (Localize) #159

name: The Translation Pit (Localize)
on:
workflow_dispatch:
permissions:
contents: read
jobs:
localize:
name: The Translation Pit (Localize)
runs-on: ubuntu-latest
concurrency:
group: localize
cancel-in-progress: true
steps:
- name: Summoning the GitHub App Token
uses: actions/create-github-app-token@v2
id: generate-token
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
permission-contents: write
- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ steps.generate-token.outputs.token }}
- name: Upload Sources to Crowdin
uses: crowdin/github-action@v2
with:
upload_sources: true
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Record Pre-Translation Time
id: timestamp
run: echo "time=$(date -u +%Y-%m-%dT%H:%M:%S+00:00)" >> $GITHUB_OUTPUT
- name: Pre-Translate
uses: crowdin/github-action@v2
with:
command: 'pre-translate'
command_args: '--method ai --ai-prompt=${{ secrets.CROWDIN_AI_PROMPT_ID }}'
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Approve Pre-Translations
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_USER_ID: ${{ secrets.CROWDIN_USER_ID }}
CROWDIN_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }}
TIMESTAMP: ${{ steps.timestamp.outputs.time }}
run: |
set -euo pipefail
BASE="https://api.crowdin.com/api/v2"
LANGUAGES=$(curl -sf -H "Authorization: Bearer $CROWDIN_TOKEN" \
"$BASE/projects/$CROWDIN_PROJECT_ID" \
| jq -re '.data.targetLanguageIds[]')
for LANG in $LANGUAGES; do
IDS=$(curl -sf -H "Authorization: Bearer $CROWDIN_TOKEN" \
"$BASE/projects/$CROWDIN_PROJECT_ID/languages/$LANG/translations?limit=100&orderBy=createdAt%20desc" \
| jq -r --arg ts "$TIMESTAMP" --arg uid $CROWDIN_USER_ID \
'[.data[] | select(.data.createdAt >= $ts and .data.user.id == ($uid | tonumber)) | .data.translationId] | .[]')
for ID in $IDS; do
curl -sf -X POST \
-H "Authorization: Bearer $CROWDIN_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"translationId\": $ID}" \
"$BASE/projects/$CROWDIN_PROJECT_ID/approvals" > /dev/null
done
done
- name: Download Bundles
uses: crowdin/github-action@v2
with:
upload_sources: false
upload_translations: false
download_translations: false
# Bundle ID 6 refers to our 'Web' export bundle in CrowdIn
download_bundle: 6
skip_untranslated_strings: true
export_only_approved: true
create_pull_request: false
localization_branch_name: main
commit_message: 'feat(i18n): update translations'
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}