# Manual Crowdin sync: uploads English source .po, downloads translations, opens a PR. # Prerequisites: repo secrets CROWDIN_PROJECT_ID and CROWDIN_PERSONAL_TOKEN (see docs/CONTRIBUTING_TRANSLATIONS.md). name: Crowdin sync on: workflow_dispatch: permissions: contents: write pull-requests: write jobs: crowdin: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Crowdin push and pull uses: crowdin/github-action@v2 with: upload_sources: true # Set to true once to seed Crowdin with existing translations/…/messages.po, then set back to false. upload_translations: false download_translations: true localization_branch_name: i18n/crowdin create_pull_request: true pull_request_title: "chore(i18n): Crowdin translations" pull_request_body: "Automated sync from Crowdin. Review placeholders and `no` vs `nb` paths before merge." commit_message: "chore(i18n): sync Crowdin translations" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}