1+ name : Auto Approve Crowdin Translations
2+
3+ on :
4+ release :
5+ types : [published]
6+ workflow_dispatch :
7+
8+ jobs :
9+ approve-crowdin :
10+ runs-on : ubuntu-latest
11+ steps :
12+ - uses : actions/checkout@v4
13+
14+ - uses : actions/setup-node@v4
15+ with :
16+ node-version : ' 18'
17+
18+ - name : Install Crowdin CLI
19+ run : npm install -g @crowdin/cli
20+
21+ - name : Approve top-voted translations for all languages
22+ env :
23+ CROWDIN_TOKEN : ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
24+ CROWDIN_PROJECT_ID : ${{ secrets.CROWDIN_PROJECT_ID }}
25+ run : |
26+ set -e
27+ echo "Start automatic approval Crowdin Translation..."
28+ language_ids=$(crowdin api \
29+ --method GET \
30+ --path /projects/$CROWDIN_PROJECT_ID/languages \
31+ --plain \
32+ | jq -r '.data[].data.languageId')
33+
34+ string_ids=$(crowdin api \
35+ --method GET \
36+ --path /projects/$CROWDIN_PROJECT_ID/strings \
37+ --plain \
38+ | jq -r '.data[].data.id')
39+
40+ for lang in $language_ids; do
41+ echo "Processing language $lang"
42+ for sid in $string_ids; do
43+ best=$(crowdin api \
44+ --method GET \
45+ --path /projects/$CROWDIN_PROJECT_ID/strings/$sid/translations \
46+ --plain \
47+ | jq -r "
48+ .data
49+ | map(select(.data.languageId==\"$lang\"))
50+ | sort_by(-.data.votes)[-1]
51+ | select(.data.votes > 0)
52+ | .data.id
53+ ")
54+ if [ -n "$best" ]; then
55+ echo " → Approved translation $best"
56+ crowdin api \
57+ --method PATCH \
58+ --path /projects/$CROWDIN_PROJECT_ID/translations/$best \
59+ --body '{\"approved\": true}'
60+ fi
61+ done
62+ done
0 commit comments