fix(i18n): one sentence each for the read-failure lines

The ended-session and spent-budget lines each ran to two sentences; the
action sits on the button, so each is one sentence now. The sign-in
label's key is common.signIn, matching what it says. The French strings
added in this release use vous like the rest of the bundle, and the
Korean sleep-score gap labels take the polite form the bundle uses.
This commit is contained in:
Marc-André Bombeck committed 2026-10-20 10:10:57 +02:00
1 parent 923249dbf6
commit 3e6a33df35
10 files changed
+30 -30

No files matched your search

+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "Fehler-ID",
"errorIdCopy": "Fehler-ID kopieren",
"errorIdCopied": "Fehler-ID kopiert",
"readThrottled": "Gerade zu viele Anfragen. Versuch es später noch einmal.",
"sessionEnded": "Deine Sitzung ist abgelaufen. Melde dich erneut an, um weiterzumachen.",
"signInAgain": "Anmelden"
"readThrottled": "Gerade gibt es zu viele Anfragen, versuch es später noch einmal.",
"sessionEnded": "Deine Sitzung ist abgelaufen, melde dich erneut an, um weiterzumachen.",
"signIn": "Anmelden"
},
"apiErrors": {
"measurement": {
+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "Error ID",
"errorIdCopy": "Copy error ID",
"errorIdCopied": "Error ID copied",
"readThrottled": "Too many requests just now. Try again later.",
"sessionEnded": "Your session has ended. Sign in again to continue.",
"signInAgain": "Sign in"
"readThrottled": "There are too many requests just now, so try again later.",
"sessionEnded": "Your session has ended, so sign in again to continue.",
"signIn": "Sign in"
},
"apiErrors": {
"measurement": {
+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "ID de error",
"errorIdCopy": "Copiar ID de error",
"errorIdCopied": "ID de error copiado",
"readThrottled": "Demasiadas solicitudes ahora mismo. Vuelve a intentarlo más tarde.",
"sessionEnded": "Tu sesión ha caducado. Inicia sesión de nuevo para continuar.",
"signInAgain": "Iniciar sesión"
"readThrottled": "Hay demasiadas solicitudes ahora mismo, así que vuelve a intentarlo más tarde.",
"sessionEnded": "Tu sesión ha caducado, así que inicia sesión de nuevo para continuar.",
"signIn": "Iniciar sesión"
},
"apiErrors": {
"measurement": {
+4 -4
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "ID d'erreur",
"errorIdCopy": "Copier l'ID d'erreur",
"errorIdCopied": "ID d'erreur copié",
"readThrottled": "Trop de requêtes pour le moment. Réessaie plus tard.",
"sessionEnded": "Ta session a expiré. Reconnecte-toi pour continuer.",
"signInAgain": "Se connecter"
"readThrottled": "Il y a trop de requêtes pour le moment, réessayez plus tard.",
"sessionEnded": "Votre session a expiré, reconnectez-vous pour continuer.",
"signIn": "Se connecter"
},
"apiErrors": {
"measurement": {
@@ -4667,7 +4667,7 @@
"scoreCrossLink": "Voir le score de récupération composite",
"emptyTitle": "Pas encore de données de récupération",
"empty": "Cette page se remplit avec les valeurs de récupération, d'effort et de charge de WHOOP ou Polar et avec le niveau de résilience d'Oura.",
"emptyOuraPermission": "Le niveau de résilience d'Oura demande l'accès aux données de santé cardiaque : reconnecte Oura une fois dans Intégrations et autorise-le.",
"emptyOuraPermission": "Le niveau de résilience d'Oura demande l'accès aux données de santé cardiaque : reconnectez Oura une fois dans Intégrations et autorisez-le.",
"emptyOuraNoResilience": "Oura est connecté, et son niveau de résilience apparaîtra ici dès qu'Oura en fournira un.",
"emptyAction": "Ouvrir les intégrations",
"block": {
+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "ID errore",
"errorIdCopy": "Copia ID errore",
"errorIdCopied": "ID errore copiato",
"readThrottled": "Troppe richieste in questo momento. Riprova più tardi.",
"sessionEnded": "La tua sessione è scaduta. Accedi di nuovo per continuare.",
"signInAgain": "Accedi"
"readThrottled": "Ci sono troppe richieste in questo momento, quindi riprova più tardi.",
"sessionEnded": "La tua sessione è scaduta, quindi accedi di nuovo per continuare.",
"signIn": "Accedi"
},
"apiErrors": {
"measurement": {
+5 -5
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "오류 ID",
"errorIdCopy": "오류 ID 복사",
"errorIdCopied": "오류 ID 복사됨",
"readThrottled": "지금은 요청이 너무 많아요. 나중에 다시 시도해 주세요.",
"sessionEnded": "세션이 만료되었어요. 계속하려면 다시 로그인해 주세요.",
"signInAgain": "로그인"
"readThrottled": "지금은 요청이 너무 많으니 나중에 다시 시도해 주세요.",
"sessionEnded": "세션이 만료되었으니 계속하려면 다시 로그인해 주세요.",
"signIn": "로그인"
},
"apiErrors": {
"measurement": {
@@ -4397,8 +4397,8 @@
"composition": "구성"
},
"gap": {
"fewNights": "아직 밤이 부족함 ({count}/{needed})",
"noMainSleep": "최근 하루는 낮잠만 있음"
"fewNights": "아직 밤이 부족해요 ({needed}일 중 {count}일)",
"noMainSleep": "최근 하루는 낮잠만 있었어요"
}
},
"READINESS": {
+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "Fout-ID",
"errorIdCopy": "Fout-ID kopiëren",
"errorIdCopied": "Fout-ID gekopieerd",
"readThrottled": "Er zijn net te veel verzoeken. Probeer het later opnieuw.",
"sessionEnded": "Je sessie is verlopen. Meld je opnieuw aan om verder te gaan.",
"signInAgain": "Aanmelden"
"readThrottled": "Er zijn net te veel verzoeken, dus probeer het later opnieuw.",
"sessionEnded": "Je sessie is verlopen, dus meld je opnieuw aan om verder te gaan.",
"signIn": "Aanmelden"
},
"apiErrors": {
"measurement": {
+3 -3
View File
@@ -55,9 +55,9 @@
"errorIdLabel": "ID błędu",
"errorIdCopy": "Kopiuj ID błędu",
"errorIdCopied": "Skopiowano ID błędu",
"readThrottled": "Zbyt wiele zapytań w tej chwili. Spróbuj ponownie później.",
"sessionEnded": "Twoja sesja wygasła. Zaloguj się ponownie, aby kontynuować.",
"signInAgain": "Zaloguj się"
"readThrottled": "W tej chwili jest zbyt wiele zapytań, więc spróbuj ponownie później.",
"sessionEnded": "Twoja sesja wygasła, więc zaloguj się ponownie, aby kontynuować.",
"signIn": "Zaloguj się"
},
"apiErrors": {
"measurement": {
@@ -91,7 +91,7 @@ describe.each([
it("says a spent budget without offering a retry", () => {
const html = render(new ApiError("Too many", 429));
expect(html).toContain("Too many requests just now.");
expect(html).toContain("There are too many requests just now");
expect(html).not.toContain("retry");
expect(html).not.toContain("Could not load");
expect(html).not.toContain("Something on our side.");
@@ -100,7 +100,7 @@ describe.each([
it("offers sign-in for an ended session, never a blank", () => {
const html = render(new ApiError("Unauthorized", 401));
expect(html).not.toBe("");
expect(html).toContain("Your session has ended.");
expect(html).toContain("Your session has ended");
expect(html).toContain('data-slot="query-error-sign-in"');
expect(html).not.toContain("retry");
});
+1 -1
View File
@@ -45,7 +45,7 @@ export function useReadFailure(
kind: "unauthenticated",
message: t("common.sessionEnded"),
action: {
label: t("common.signInAgain"),
label: t("common.signIn"),
onClick: () => window.location.assign(signInHref()),
kind: "signIn",
},