66 workflow_dispatch :
77
88jobs :
9- approve-crowdin :
9+ approve-translations :
1010 runs-on : ubuntu-latest
1111 steps :
1212 - uses : actions/checkout@v4
@@ -16,47 +16,54 @@ jobs:
1616 node-version : ' 18'
1717
1818 - name : Install Crowdin CLI
19- run : npm install -g @crowdin/cli
19+ run : |
20+ npm install -g @crowdin/cli@3
2021
2122 - name : Approve top-voted translations for all languages
2223 env :
2324 CROWDIN_TOKEN : ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
2425 CROWDIN_PROJECT_ID : ${{ secrets.CROWDIN_PROJECT_ID }}
2526 run : |
2627 set -e
28+
29+ if [ -z "$CROWDIN_TOKEN" ] || [ -z "$CROWDIN_PROJECT_ID" ]; then
30+ echo "Crowdin token or project id is missing!"
31+ exit 1
32+ fi
33+
2734 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')
35+
36+ language_ids=$(crowdin api list-languages --project-id=$CROWDIN_PROJECT_ID --plain | jq -r '.data[].data.id' || true)
37+ if [ -z "$language_ids" ]; then
38+ echo "No language ids found, check Crowdin project or CLI output."
39+ exit 1
40+ fi
41+
42+ string_ids=$(crowdin api list-strings --project-id=$CROWDIN_PROJECT_ID --plain | jq -r '.data[].data.id' || true)
43+ if [ -z "$string_ids" ]; then
44+ echo "No string ids found, check Crowdin project or CLI output."
45+ exit 1
46+ fi
3947
4048 for lang in $language_ids; do
4149 echo "Processing language $lang"
50+
51+ translations=$(crowdin api list-string-translations --project-id=$CROWDIN_PROJECT_ID --language-id=$lang --plain)
52+
4253 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}'
54+ best=$(echo "$translations" | jq -r "
55+ .data[]
56+ | .data
57+ | select(.stringId == \"$sid\" and .votes > 0)
58+ | {\"id\": .id, \"votes\": .votes}
59+ " | jq -s 'sort_by(-.votes) | .[0] | .id')
60+
61+ if [ -n "$best" ] && [ "$best" != "null" ]; then
62+ echo " → Approved translation $best for string $sid"
63+ crowdin api edit-translation \
64+ --project-id=$CROWDIN_PROJECT_ID \
65+ --translation-id=$best \
66+ --approved=true
6067 fi
6168 done
6269 done
0 commit comments