fix(i18n): three Danish strings that had no æ, ø or å in them

Spotted on the running instance: the version line read "Running v0.11.0. Der
bliver ikke set efter opdateringer." — half translated, on one line.

The sweep that was supposed to catch these grepped for Danish letters, and none of
the three survivors contain one: "Ingen nyere version fundet.", "Ikke mere i dag."
and a token hint split across two source lines so neither half looked like prose.

So there is a test for it now. It reads the templates and looks for the words that
give Danish away whatever letters they are spelled with — a word list rather than a
language detector, because this ships as one static binary and thirty common words
catch the sentences a person actually writes. It fails on the exact three that got
through.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kristian Wind
2026-08-18 10:50:25 +02:00
co-authored by Claude Opus 5
parent d6d5bf590b
commit ab5e3e35a6
6 changed files with 23 additions and 9 deletions
+8 -1
View File
@@ -589,5 +589,12 @@ export const da = {
'view.showDone': 'Vis færdige',
'view.hideDone': 'Skjul færdige',
'task.moveFailed': 'Kunne ikke flytte opgaven.'
'task.moveFailed': 'Kunne ikke flytte opgaven.',
'push.updatesOff': 'Der bliver ikke set efter opdateringer.',
'push.updateOut': '{version} er ude.',
'push.upToDate': 'Ingen nyere version fundet.',
'view.nothingMoreToday': 'Ikke mere i dag.',
'project.roleFor': 'Rolle for {name}'
};
+8 -1
View File
@@ -584,5 +584,12 @@ export const en = {
'view.showDone': 'Show done',
'view.hideDone': 'Hide done',
'task.moveFailed': 'The task could not be moved.'
'task.moveFailed': 'The task could not be moved.',
'push.updatesOff': 'Updates are not being checked for.',
'push.updateOut': '{version} is out.',
'push.upToDate': 'No newer version found.',
'view.nothingMoreToday': 'Nothing more today.',
'project.roleFor': 'Role for {name}'
};
+1 -1
View File
@@ -76,7 +76,7 @@
like finishing, not like something is missing. -->
<p class="clear">
<span class="rune" aria-hidden="true">ᚹ</span>
Ikke mere i dag.
{t('view.nothingMoreToday')}
</p>
{/if}
</section>
@@ -174,11 +174,11 @@
<p class="hint">
{t('push.running')} <span class="mono">{version.current}</span>.
{#if version.disabled}
Der bliver ikke set efter opdateringer.
{t('push.updatesOff')}
{:else if version.update_available}
<strong>{version.latest} er ude.</strong>
<strong>{t('push.updateOut', { version: version.latest })}</strong>
{:else if version.checked_at}
Ingen nyere version fundet.
{t('push.upToDate')}
{/if}
</p>
@@ -104,8 +104,8 @@
{#if fresh}
<div class="fresh">
<p class="hint">
<strong>{t('tokens.copyNow')}</strong> Den vises kun denne ene gang — serveren har
kun dens hash.
<strong>{t('tokens.copyNow')}</strong>
{t('tokens.onceOnly')}
</p>
<p class="mono value">{fresh.token}</p>
<div class="row">
+1 -1
View File
@@ -493,7 +493,7 @@
<select
class="role-picker"
value={member.role}
aria-label="Rolle for {member.name}"
aria-label={t('project.roleFor', { name: member.name })}
onchange={(e) => setMemberRole(member, e.currentTarget.value)}
>
<option value="editor">{ROLES.editor}</option>