Skip to content

Commit 1c13ed7

Browse files
committed
ci: Crowdin Patch 1
1 parent 22363a7 commit 1c13ed7

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

.github/workflows/approve-translations.yml

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
workflow_dispatch:
77

88
jobs:
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

Comments
 (0)