feat(i18n): the interface speaks both languages
The account has had a `locale` since the beginning and it only chose which grammar quick add read a line with — so picking English changed nothing anybody could see, and the field said so honestly: "Sprog i hurtig tilføjelse". It says "Sprog" now, because it means it. Every component goes through `t()`. Danish is the source: a key missing from English falls through to Danish rather than to the key, because a Danish sentence in an English screen can be read and `settings.notifications.title` cannot. `tag()` is the single place `Intl` is asked. Before, `'da-DK'` was written into a dozen components, and that is the half of a translation that gets left behind — an English interface still saying "24. aug." is exactly the shape of a job half done. There is a smoke test that switches to English and refuses to see a Danish month name in the calendar's heading. Colour and theme names are keys now. `colors.js` keeps its ids untouched — they are what the database stores, and `internal/store` reads them out of that file — but `name` is `'color.tomato'`, resolved where it is drawn. The Inbox keeps its name. It is a project row the server creates at signup, not a string in the interface, and it can be renamed like any other project. Four copies of "3 hours ago" became one, in `web/src/lib/when.js`. They had already drifted: one said "aldrig logget ind", another "aldrig", and two stopped at days where the others carried on to a date. Routes stay Danish. `/indstillinger`, `/projekt`, `/uddelegeret` are bookmarks and they are in every smoke test; translating them buys nothing and costs both. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e3c7fc792a
commit
4d8b70918b
+4
-3
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
import { api } from './api.js';
|
||||
import { t } from './i18n.svelte.js';
|
||||
|
||||
/** Whether this browser can do it at all. Safari before 16.4 cannot, and neither
|
||||
* can any browser on a page served over plain HTTP from a non-localhost host. */
|
||||
@@ -56,14 +57,14 @@ export async function subscribe() {
|
||||
if (granted !== 'granted') {
|
||||
throw new Error(
|
||||
granted === 'denied'
|
||||
? 'Browseren har blokeret notifikationer for dette site. Det skal slås til i browserens indstillinger.'
|
||||
: 'Notifikationer blev ikke slået til.'
|
||||
? t('push.deniedByBrowser')
|
||||
: t('push.notEnabled')
|
||||
);
|
||||
}
|
||||
|
||||
const reg = await registration();
|
||||
const { public_key } = await api.pushKey();
|
||||
if (!public_key) throw new Error('Serveren har ingen VAPID-nøgle.');
|
||||
if (!public_key) throw new Error(t('push.noVapidKey'));
|
||||
|
||||
const subscription = await reg.pushManager.subscribe({
|
||||
// Not optional in Chrome: a subscription that is not userVisibleOnly is
|
||||
|
||||
Reference in New Issue
Block a user