From d91ec2f194cff34613a1f760bf71251576dc804a Mon Sep 17 00:00:00 2001 From: Nelli Skogman Date: Sun, 17 May 2026 20:09:45 +0200 Subject: [PATCH 1/5] Add script to cehck translation key synchronisation --- .github/workflows/translation-check.yml | 17 ++++++++++++++++ dev/check_translations.sh | 26 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/workflows/translation-check.yml create mode 100755 dev/check_translations.sh diff --git a/.github/workflows/translation-check.yml b/.github/workflows/translation-check.yml new file mode 100644 index 000000000..8c163cd1a --- /dev/null +++ b/.github/workflows/translation-check.yml @@ -0,0 +1,17 @@ +# This workflow performs validity check on translations. + +name: Translations CI + +on: + push: + branches: ["main", "new-design"] + pull_request: + branches: ["main", "new-design"] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + - run: dev/check_translations.sh diff --git a/dev/check_translations.sh b/dev/check_translations.sh new file mode 100755 index 000000000..3a8d9fe6d --- /dev/null +++ b/dev/check_translations.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -euo pipefail + +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT + +jq --raw-output 'keys[]' src/translations/en.json >"$tmp/en-keys" +jq --raw-output 'keys[]' src/translations/sv.json >"$tmp/sv-keys" + +if cmp --quiet "$tmp/en-keys" "$tmp/sv-keys"; then + exit 0 +fi + +only_en_keys="$(comm -23 "$tmp/en-keys" "$tmp/sv-keys")" +only_sv_keys="$(comm -13 "$tmp/en-keys" "$tmp/sv-keys")" + +if [[ -n "$only_en_keys" ]]; then + printf 'The following translation keys are only set in English:\n\n%s\n\n' "$only_en_keys" +fi + +if [[ -n "$only_sv_keys" ]]; then + printf 'The following translation keys are only set in Swedish:\n\n%s\n\n' "$only_sv_keys" +fi + +exit 1 From 0e5c5c2cc7e885fda96c6f745225b37fd3471b4f Mon Sep 17 00:00:00 2001 From: Nelli Skogman Date: Sun, 17 May 2026 20:15:55 +0200 Subject: [PATCH 2/5] Remove unused *and language-unique* translation strings --- src/translations/en.json | 4 ---- src/translations/sv.json | 6 ------ 2 files changed, 10 deletions(-) diff --git a/src/translations/en.json b/src/translations/en.json index d3bc39ab9..30694c301 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -303,7 +303,6 @@ "committees_committees": "Committees", "committees_volunteers": "volunteers", "committees_boardMember": "Board Member", - "committees_committeeImage": "Committee image", "committees_committeeImageExplanation": "This should be in the SVG format, without background color, without whitespace and with white text.", "committees_save": "Save", "committees_description": "Description", @@ -638,7 +637,6 @@ "songbook_remove": "Remove", "songbook_save": "Save", "songbook_errors_songNotFound": "Song not found", - "songbook_errors_missingId": "Missing ID", "songbook_errors_invalidID": "Invalid ID", "members_all": "All", "members_noMembers": "No members found", @@ -649,7 +647,6 @@ "members_save": "Save", "members_cancel": "Cancel", "members_edit": "Edit", - "members_stopEditing": "Stop editing", "members_heldPositions": "Held positions", "members_memberUpdated": "Member updated", "members_pingSent": "Ping sent", @@ -1038,7 +1035,6 @@ "committees_card_image": "Card image (in the committee list)", "committees_banner_image": "Banner image", "committees_invert_text": "Invert text/logo", - "commitees_edit_links": "Edit links", "select_member": "Select member", "select_members": "Select members", "about_guild": "About the guild", diff --git a/src/translations/sv.json b/src/translations/sv.json index 042a4d8b4..d8edc9258 100644 --- a/src/translations/sv.json +++ b/src/translations/sv.json @@ -938,10 +938,6 @@ "nav_nollning_description": "Ett sammanhang inom vilket du kan lära känna studentlivet och nya människor", "nav_about_guild": "Om sektionen", "nav_about_guild_desc": "Sektionen består av 15 utskott med olika ansvarsområden.", - "nav_news_feed": "Nyhetsflöde", - "nav_news_feed_desc": "Se de senaste nyheterna på D-sektionen.", - "nav_events": "Evenemang", - "nav_events_desc": "Se aktuella evenemang på D-sektionen.", "nav_guild": "Sektionen", "nav_board": "Styrelsen", "nav_board_desc": "Styrelsen har ansvar för sektionens verksamhet.", @@ -1001,7 +997,6 @@ "fileupload_error": "Sidan tillåter inte nedladdning av filer.", "datetimeselector_range_error": "Intervall slutar innan det börjar ", "timepicker_invalid_time": " Ogiltig tid", - "datepicker_pick_date": "Pick a date", "datepicker_weekday_separator": ", den ", "locale": "sv-SE", "setting_appearance": "Utseende", @@ -1040,7 +1035,6 @@ "committees_card_image": "Kortbild (i utskottslitan)", "committees_banner_image": "Bannerbild", "committees_invert_text": "Invertera text/logo", - "committees_edit_links": "Redigera länkar", "select_member": "Välj medlem", "select_members": "Välj medlemmar", "about_guild": "Om sektionen", From 2ca026f583aeee14ace8ee1b56963674645cc018 Mon Sep 17 00:00:00 2001 From: Nelli Skogman Date: Mon, 18 May 2026 11:57:13 +0200 Subject: [PATCH 3/5] Fix broken translation strings --- src/translations/en.json | 4 ++++ src/translations/sv.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/translations/en.json b/src/translations/en.json index 30694c301..dd0a04ced 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -938,6 +938,8 @@ "nav_nollning_description": "A context where you can learn about the student life and get to know new people.", "nav_about_guild": "About the guild", "nav_about_guild_desc": "The guild consists of 15 committees with different responsibilities.", + "nav_news_feed_desc": "See the latest news from the D-guild.", + "nav_events_desc": "See current events at the D-guild.", "nav_guild": "The Guild", "nav_board": "The Board", "nav_board_desc": "The board are responsible for the operations of the guild.", @@ -997,6 +999,7 @@ "fileupload_error": "The website does not allow downloads.", "datetimeselector_range_error": "Range ends before it starts", "timepicker_invalid_time": "Invalid time", + "datepicker_pick_date": "Pick a date", "datepicker_weekday_separator": ", ", "setting_appearance": "Appearance", "setting_language": "Language", @@ -1035,6 +1038,7 @@ "committees_card_image": "Card image (in the committee list)", "committees_banner_image": "Banner image", "committees_invert_text": "Invert text/logo", + "committees_edit_links": "Edit links", "select_member": "Select member", "select_members": "Select members", "about_guild": "About the guild", diff --git a/src/translations/sv.json b/src/translations/sv.json index d8edc9258..d1adad123 100644 --- a/src/translations/sv.json +++ b/src/translations/sv.json @@ -938,6 +938,8 @@ "nav_nollning_description": "Ett sammanhang inom vilket du kan lära känna studentlivet och nya människor", "nav_about_guild": "Om sektionen", "nav_about_guild_desc": "Sektionen består av 15 utskott med olika ansvarsområden.", + "nav_news_feed_desc": "Se de senaste nyheterna på D-sektionen.", + "nav_events_desc": "Se aktuella evenemang på D-sektionen.", "nav_guild": "Sektionen", "nav_board": "Styrelsen", "nav_board_desc": "Styrelsen har ansvar för sektionens verksamhet.", @@ -997,6 +999,7 @@ "fileupload_error": "Sidan tillåter inte nedladdning av filer.", "datetimeselector_range_error": "Intervall slutar innan det börjar ", "timepicker_invalid_time": " Ogiltig tid", + "datepicker_pick_date": "Välj ett datum", "datepicker_weekday_separator": ", den ", "locale": "sv-SE", "setting_appearance": "Utseende", @@ -1035,6 +1038,7 @@ "committees_card_image": "Kortbild (i utskottslitan)", "committees_banner_image": "Bannerbild", "committees_invert_text": "Invertera text/logo", + "committees_edit_links": "Redigera länkar", "select_member": "Välj medlem", "select_members": "Välj medlemmar", "about_guild": "Om sektionen", From 936406402a551c26a4cdfbddac51a40cd39ace8c Mon Sep 17 00:00:00 2001 From: Nelli Skogman Date: Mon, 18 May 2026 12:08:12 +0200 Subject: [PATCH 4/5] Add `check-translations` as a pnpm script and merge workflows --- .github/workflows/node.js.yml | 1 + .github/workflows/translation-check.yml | 17 ----------------- package.json | 3 ++- 3 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 .github/workflows/translation-check.yml diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 193aeec63..48354f467 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -50,4 +50,5 @@ jobs: - run: pnpm run format - run: pnpm run test - run: pnpm run check --fail-on-warnings + - run: pnpm run check-translations - run: pnpm run build diff --git a/.github/workflows/translation-check.yml b/.github/workflows/translation-check.yml deleted file mode 100644 index 8c163cd1a..000000000 --- a/.github/workflows/translation-check.yml +++ /dev/null @@ -1,17 +0,0 @@ -# This workflow performs validity check on translations. - -name: Translations CI - -on: - push: - branches: ["main", "new-design"] - pull_request: - branches: ["main", "new-design"] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v6 - - run: dev/check_translations.sh diff --git a/package.json b/package.json index 797ef7400..7f426bf8b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "migrate": "zenstack generate && prisma migrate dev && snaplet-seed sync", "seed": "prisma db seed", "prisma-case-format": "prisma-case-format -f src/database/prisma/schema.prisma", - "paraglide": "paraglide-js compile --project ./project.inlang --outdir ./src/translations/paraglide" + "paraglide": "paraglide-js compile --project ./project.inlang --outdir ./src/translations/paraglide", + "check-translations": "./dev/check_translations.sh" }, "zenstack": { "schema": "src/database/schema.zmodel" From ee6044521f0e168fab282d4a0e095e04f5a1aaf5 Mon Sep 17 00:00:00 2001 From: Nelli Skogman Date: Mon, 18 May 2026 22:35:02 +0200 Subject: [PATCH 5/5] Update `ci-check` script --- .github/workflows/node.js.yml | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 48354f467..049233589 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -52,3 +52,4 @@ jobs: - run: pnpm run check --fail-on-warnings - run: pnpm run check-translations - run: pnpm run build + # When adding a step to the list above, please consider adding it to the `ci-check` script in `package.json`. diff --git a/package.json b/package.json index 7f426bf8b..f794fd44a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "prepare": "svelte-kit sync && zenstack generate && prisma generate && pnpm paraglide && pnpm snaplet-seed generate", "setup-dev": "vite-node dev/setup.ts", - "ci-check": "concurrently 'pnpm:lint' 'pnpm:format' 'pnpm:check' --prefix-colors 'auto' --group", + "ci-check": "concurrently 'pnpm:lint --max-warnings 0' 'pnpm:format' 'pnpm:test' 'pnpm:check --fail-on-warnings' 'pnpm:check-translations' --prefix-colors 'auto' --group", "dev": "vite dev", "build": "vite build", "preview": "pm2 start prod/ecosystem.config.cjs --no-daemon",