diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 193aeec63..049233589 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -50,4 +50,6 @@ 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 + # When adding a step to the list above, please consider adding it to the `ci-check` script in `package.json`. 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 diff --git a/package.json b/package.json index 797ef7400..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", @@ -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" diff --git a/src/translations/en.json b/src/translations/en.json index d3bc39ab9..dd0a04ced 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", @@ -941,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.", @@ -1000,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", @@ -1038,7 +1038,7 @@ "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", + "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 042a4d8b4..d1adad123 100644 --- a/src/translations/sv.json +++ b/src/translations/sv.json @@ -938,9 +938,7 @@ "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", @@ -1001,7 +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": "Pick a date", + "datepicker_pick_date": "Välj ett datum", "datepicker_weekday_separator": ", den ", "locale": "sv-SE", "setting_appearance": "Utseende",