chore: drop translations of app strings the calendar agenda no longer uses

This commit is contained in:
Linus Rath
2026-09-24 20:27:58 +02:00
parent 96bffa51e8
commit dd0969d48b
27 changed files with 20 additions and 107 deletions
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "غير مميزة بنجمة"
},
"calendar": {
"agenda": {
"days_clear": "لا أحداث في الأيام الـ{count} القادمة.",
"no_upcoming": "لا توجد أحداث قادمة"
},
"alerts": {
"unit_minutes_after": "دقائق بعد"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "No destacat"
},
"calendar": {
"agenda": {
"days_clear": "Els propers {count} dies són lliures.",
"no_upcoming": "Cap esdeveniment proper"
},
"alerts": {
"unit_minutes_after": "minuts després"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Bez hvězdičky"
},
"calendar": {
"agenda": {
"days_clear": "Příštích {count} dní je volných.",
"no_upcoming": "Žádné nadcházející události"
},
"alerts": {
"unit_minutes_after": "min po"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Ikke stjernemarkerede"
},
"calendar": {
"agenda": {
"days_clear": "De næste {count} dage er ledige.",
"no_upcoming": "Ingen kommende begivenheder"
},
"alerts": {
"unit_minutes_after": "minutter efter"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Nicht markiert"
},
"calendar": {
"agenda": {
"days_clear": "Die nächsten {count} Tage sind frei.",
"no_upcoming": "Keine bevorstehenden Termine"
},
"alerts": {
"unit_minutes_after": "Minuten danach"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "No destacado"
},
"calendar": {
"agenda": {
"days_clear": "Los próximos {count} días están libres.",
"no_upcoming": "No hay eventos próximos"
},
"alerts": {
"unit_minutes_after": "minutos después"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "بدون ستاره"
},
"calendar": {
"agenda": {
"days_clear": "در {count} روز آینده رویدادی نیست.",
"no_upcoming": "رویداد پیش‌رویی وجود ندارد"
},
"alerts": {
"unit_minutes_after": "دقیقه بعد"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Non suivis"
},
"calendar": {
"agenda": {
"days_clear": "Les {count} prochains jours sont libres.",
"no_upcoming": "Aucun événement à venir"
},
"alerts": {
"unit_minutes_after": "minutes après"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "ללא כוכב"
},
"calendar": {
"agenda": {
"days_clear": "אין אירועים ב-{count} הימים הקרובים.",
"no_upcoming": "אין אירועים קרובים"
},
"alerts": {
"unit_minutes_after": "דקות אחרי"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Nem csillagozott"
},
"calendar": {
"agenda": {
"days_clear": "A következő {count} nap szabad.",
"no_upcoming": "Nincsenek közelgő események"
},
"alerts": {
"unit_minutes_after": "perccel utána"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Non speciale"
},
"calendar": {
"agenda": {
"days_clear": "I prossimi {count} giorni sono liberi.",
"no_upcoming": "Nessun evento in programma"
},
"alerts": {
"unit_minutes_after": "minuti dopo"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "スターなし"
},
"calendar": {
"agenda": {
"days_clear": "今後{count}日間は予定がありません。",
"no_upcoming": "今後の予定はありません"
},
"alerts": {
"unit_minutes_after": "分後"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "별표 없음"
},
"calendar": {
"agenda": {
"days_clear": "앞으로 {count}일 동안 일정이 없어요.",
"no_upcoming": "다가오는 일정이 없어요"
},
"alerts": {
"unit_minutes_after": "분 후"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Bez zvaigznītes"
},
"calendar": {
"agenda": {
"days_clear": "Nākamās {count} dienas ir brīvas.",
"no_upcoming": "Nav gaidāmo notikumu"
},
"alerts": {
"unit_minutes_after": "min pēc sākuma"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Одгүй"
},
"calendar": {
"agenda": {
"days_clear": "Дараагийн {count} өдөр үйл явдал байхгүй.",
"no_upcoming": "Удахгүй болох үйл явдал байхгүй"
},
"alerts": {
"unit_minutes_after": "минутын дараа"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Ikke stjernemerket"
},
"calendar": {
"agenda": {
"days_clear": "De neste {count} dagene er ledige.",
"no_upcoming": "Ingen kommende hendelser"
},
"alerts": {
"unit_minutes_after": "minutter etter"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Zonder ster"
},
"calendar": {
"agenda": {
"days_clear": "De komende {count} dagen zijn vrij.",
"no_upcoming": "Geen komende afspraken"
},
"alerts": {
"unit_minutes_after": "minuten erna"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Bez gwiazdki"
},
"calendar": {
"agenda": {
"days_clear": "Najbliższe {count} dni są wolne.",
"no_upcoming": "Brak nadchodzących wydarzeń"
},
"alerts": {
"unit_minutes_after": "min po"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Sem estrela"
},
"calendar": {
"agenda": {
"days_clear": "Os próximos {count} dias estão livres.",
"no_upcoming": "Nenhum evento próximo"
},
"alerts": {
"unit_minutes_after": "minutos depois"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Fără stea"
},
"calendar": {
"agenda": {
"days_clear": "Următoarele {count} de zile sunt libere.",
"no_upcoming": "Nu există evenimente viitoare"
},
"alerts": {
"unit_minutes_after": "minute după"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Без пометки"
},
"calendar": {
"agenda": {
"days_clear": "В ближайшие {count} дн. событий нет.",
"no_upcoming": "Нет предстоящих событий"
},
"alerts": {
"unit_minutes_after": "минут после"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Bez hviezdičky"
},
"calendar": {
"agenda": {
"days_clear": "Nasledujúcich {count} dní je voľných.",
"no_upcoming": "Žiadne nadchádzajúce udalosti"
},
"alerts": {
"unit_minutes_after": "min po"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Yıldızsız"
},
"calendar": {
"agenda": {
"days_clear": "Önümüzdeki {count} gün boş.",
"no_upcoming": "Yaklaşan etkinlik yok"
},
"alerts": {
"unit_minutes_after": "dakika sonra"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "Без зірочки"
},
"calendar": {
"agenda": {
"days_clear": "У найближчі {count} дн. подій немає.",
"no_upcoming": "Немає майбутніх подій"
},
"alerts": {
"unit_minutes_after": "хвилин після"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "未加星號"
},
"calendar": {
"agenda": {
"days_clear": "未來 {count} 天沒有活動。",
"no_upcoming": "沒有即將開始的活動"
},
"alerts": {
"unit_minutes_after": "分鐘後"
},
-4
View File
@@ -6,10 +6,6 @@
"not_starred": "无星标"
},
"calendar": {
"agenda": {
"days_clear": "未来 {count} 天没有活动。",
"no_upcoming": "没有即将举行的活动"
},
"alerts": {
"unit_minutes_after": "分钟后"
},
+20 -3
View File
@@ -4,10 +4,13 @@
// node scripts/rn-missing-translations.mjs count per language
// node scripts/rn-missing-translations.mjs de the missing keys with their
// English text, as nested JSON
// node scripts/rn-missing-translations.mjs --prune
// drop translated keys English
// no longer has
//
// Keys the vendored webmail catalog of that language already carries are not
// listed: they are translated there.
import { readFileSync, readdirSync } from 'node:fs';
import { readFileSync, readdirSync, writeFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
@@ -40,12 +43,26 @@ function missingFor(lang, en) {
const en = flatten(readJson(join(RN, 'en.json')));
const lang = process.argv[2];
const langs = readdirSync(RN).filter((f) => f.endsWith('.json') && f !== 'en.json').map((f) => f.slice(0, -5));
if (lang) {
if (lang === '--prune') {
for (const l of langs.sort()) {
const path = join(RN, `${l}.json`);
const kept = {};
let dropped = 0;
for (const [key, value] of flatten(readJson(path))) {
if (en.has(key)) setDeep(kept, key, value);
else dropped++;
}
if (dropped) {
writeFileSync(path, `${JSON.stringify(kept, null, 2)}\n`);
console.log(`${l.padEnd(6)} dropped ${dropped}`);
}
}
} else if (lang) {
const out = {};
for (const [key, value] of missingFor(lang, en)) setDeep(out, key, value);
console.log(JSON.stringify(out, null, 2));
} else {
const langs = readdirSync(RN).filter((f) => f.endsWith('.json') && f !== 'en.json').map((f) => f.slice(0, -5));
for (const l of langs.sort()) console.log(`${l.padEnd(6)} ${missingFor(l, en).length} of ${en.size} missing`);
}