diff --git a/locales/ar.json b/locales/ar.json index b0ee13da..841fbf06 100644 --- a/locales/ar.json +++ b/locales/ar.json @@ -91,11 +91,6 @@ "toggle_zen_mode": "تبديل الوضع الهادئ" }, "common": { - "confirm_dialog": { - "cancel": "لا", - "confirm": "نعم", - "title": "هل أنت متأكد؟" - }, "end_of_list": "نهاية القائمة", "error": "حدث خطأ", "in": "في", @@ -191,11 +186,6 @@ "copy_original_link_to_post": "انسخ الرابط الأصلي لهذا المنشور", "delete": "حذف", "delete_and_redraft": "حذف وإعادة صياغة", - "delete_confirm": { - "cancel": "إلغاء", - "confirm": "حذف", - "title": "هل أنت متأكد أنك تريد حذف هذا المنشور؟" - }, "direct_message_account": "إرسال رسالة مباشرة إلى {0}", "edit": "تعديل", "hide_reblogs": "إخفاء المشاركات من {0}", @@ -314,12 +304,6 @@ "description": "قم بتحرير إعدادات حسابك في موقع ماستودون الأصل", "label": "إعدادت الحساب" }, - "feature_flags": { - "github_cards": "بطاقات GitHub", - "title": "الميزات التجريبية", - "user_picker": "الشريط الجانبي لمبدل المستخدم", - "virtual_scroll": "التمرير الافتراضي" - }, "interface": { "color_mode": "وضع اللون", "dark_mode": "الوضع الداكن", diff --git a/locales/ca-valencia.json b/locales/ca-valencia.json index 5d16c8b3..d83ce706 100644 --- a/locales/ca-valencia.json +++ b/locales/ca-valencia.json @@ -54,7 +54,6 @@ "not_found": "404 No s'ha trobat", "offline_desc": "Sembla que estàs fora de línia. Comprova la connexió de xarxa." }, - "compose": {}, "confirm": { "block_account": { "cancel": "Cancel·la", @@ -91,7 +90,6 @@ "title": "Segur que vols deixar de seguir-lo?" } }, - "conversation": {}, "custom_cards": { "stackblitz": { "open": "Obri", @@ -119,7 +117,6 @@ "footer_team": "L'equip d'Elk", "title": "Elk està en proves!" }, - "language": {}, "list": { "add_account": "Afig el compte a una llista", "create": "Crea", diff --git a/locales/cs-CZ.json b/locales/cs-CZ.json index 9648f526..694fdf50 100644 --- a/locales/cs-CZ.json +++ b/locales/cs-CZ.json @@ -142,13 +142,6 @@ "replying": "Sem napište odpověď", "the_thread": "vlákno" }, - "settings": { - "feature_flags": { - "github_cards": "GitHub Cards", - "user_picker": "User Picker", - "virtual_scroll": "Virtual Scrolling" - } - }, "state": { "edited": "(Upraveno)", "editing": "Upravuje se", diff --git a/locales/de-DE.json b/locales/de-DE.json index 7cd9a2e8..5dc480fe 100644 --- a/locales/de-DE.json +++ b/locales/de-DE.json @@ -28,7 +28,6 @@ "muted_users": "Stummgeschaltete Accounts", "muting": "Stummgeschaltet", "mutuals": "Freunde", - "notify_on_post": "Benachrichtige mich, wenn {username} etwas postet", "pinned": "Angepinnt", "posts": "Beiträge", "posts_count": "{0} Beiträge", @@ -102,8 +101,7 @@ "confirm": { "common": { "cancel": "Abbrechen", - "confirm": "OK", - "title": "Bist du sicher, {0}?" + "confirm": "OK" }, "delete_posts": { "cancel": "Abbrechen", @@ -256,12 +254,6 @@ "description": "Bearbeite Kontoeinstellungen in der Mastodon-Benutzeroberfläche", "label": "Account Einstellungen" }, - "feature_flags": { - "github_cards": "GitHub Cards", - "title": "Experimentelle Funktionen", - "user_picker": "Benutzerauswahl", - "virtual_scroll": "Virtuelles Scrollen" - }, "interface": { "color_mode": "Farbschema", "dark_mode": "Dunkles Farbschema", diff --git a/locales/fi-FI.json b/locales/fi-FI.json index 8cb79f5e..136794ef 100644 --- a/locales/fi-FI.json +++ b/locales/fi-FI.json @@ -295,13 +295,6 @@ "font_size": "Kirjasinkoko", "label": "Käyttöliittymä", "light_mode": "Vaalea", - "size_label": { - "lg": "Suuri", - "md": "Keski", - "sm": "Pieni", - "xl": "Ekstra-suuri", - "xs": "Ekstra-pieni" - }, "system_mode": "Laitteen asetus", "theme_color": "Korostusväri" }, diff --git a/locales/id-ID.json b/locales/id-ID.json index af8f83fe..a1aa2beb 100644 --- a/locales/id-ID.json +++ b/locales/id-ID.json @@ -30,7 +30,6 @@ "mutuals": "Terkait", "notifications_on_post_disable": "Berhenti memberi tahu saya saat {username} memposting", "notifications_on_post_enable": "Beri tahu saya jika {username} memposting", - "notify_on_post": "Beri tahu saya jika {username} memposting", "pinned": "Dilekatkan", "posts": "Posting", "posts_count": "{0} Pos|{0} Pos|{0} Pos", @@ -92,11 +91,6 @@ "toggle_zen_mode": "Beralih ke modus zen" }, "common": { - "confirm_dialog": { - "cancel": "Tidak", - "confirm": "Ya", - "title": "Apakah Anda yakin {0}?" - }, "end_of_list": "Akhir dari daftar", "error": "KESALAHAN", "in": "di dalam", @@ -180,11 +174,6 @@ "copy_link_to_post": "Salin tautan pos ini", "delete": "Hapus", "delete_and_redraft": "Hapus dan buat ulang draf", - "delete_confirm": { - "cancel": "Batalkan", - "confirm": "Hapus", - "title": "Yakin ingin menghapus postingan ini?" - }, "direct_message_account": "Pesan langsung {0}", "edit": "Sunting", "hide_reblogs": "Sembunyikan dukungan dari {0}", diff --git a/locales/nl-NL.json b/locales/nl-NL.json index 24d4e2c0..49597b8d 100644 --- a/locales/nl-NL.json +++ b/locales/nl-NL.json @@ -193,12 +193,6 @@ "about": { "label": "Over" }, - "feature_flags": { - "github_cards": "GitHub Cards", - "title": "Experimentele Functies", - "user_picker": "Gebruiker Kiezer", - "virtual_scroll": "Virtueel Scrollen" - }, "interface": { "color_mode": "Kleur Modus", "dark_mode": "Donkere Modus", @@ -284,7 +278,6 @@ } }, "state": { - "attachments_exceed_server_limit": "De hoeveelheid bijlagen is meer dan het limiet per post.", "attachments_limit_error": "Limiet per post overschreden", "edited": "(Aangepast)", diff --git a/locales/ru-RU.json b/locales/ru-RU.json index d44d7261..0eec1898 100644 --- a/locales/ru-RU.json +++ b/locales/ru-RU.json @@ -59,7 +59,6 @@ "more": "Больше", "next": "Следующее", "prev": "Предыдущее", - "previous": "Предыдущее", "publish": "Опубликовать", "reply": "Ответить", "reply_count": "{0}", @@ -90,11 +89,6 @@ "toggle_zen_mode": "Переключить режим дзен" }, "common": { - "confirm_dialog": { - "cancel": "Нет", - "confirm": "Да", - "title": "Вы уверены?" - }, "end_of_list": "Конец списка", "error": "ОШИБКА", "in": "в", @@ -171,11 +165,6 @@ "copy_link_to_post": "Скопировать ссылку на этот пост", "delete": "Удалить", "delete_and_redraft": "Удалить и переписать", - "delete_confirm": { - "cancel": "Отменить", - "confirm": "Удалить", - "title": "Вы уверены, что хотите удалить этот пост?" - }, "direct_message_account": "Отправьте личное сообщение {0}", "edit": "Редактировать", "hide_reblogs": "Скрыть репосты от {0}", @@ -295,13 +284,6 @@ "font_size": "Размер текста", "label": "Интерфейс", "light_mode": "Светлая", - "size_label": { - "lg": "Большой", - "md": "Средний", - "sm": "Маленький", - "xl": "Очень большой", - "xs": "Очень маленький" - }, "system_mode": "Системная", "theme_color": "Цвет" }, diff --git a/locales/tr-TR.json b/locales/tr-TR.json index b9133679..64e58631 100644 --- a/locales/tr-TR.json +++ b/locales/tr-TR.json @@ -99,8 +99,7 @@ "confirm": { "common": { "cancel": "Hayır", - "confirm": "Evet", - "title": "Emin misiniz?" + "confirm": "Evet" }, "delete_posts": { "cancel": "İptal et", diff --git a/locales/uk-UA.json b/locales/uk-UA.json index b09b5b08..6513db71 100644 --- a/locales/uk-UA.json +++ b/locales/uk-UA.json @@ -216,10 +216,6 @@ "description": "Відредагуйте налаштування облікового запису використовуєчи інтерфейс Mastodon", "label": "Налаштування облікового запису" }, - "feature_flags": { - "github_cards": "GitHub картки", - "title": "Експериментальні налаштування" - }, "interface": { "color_mode": "Кольорова тема", "dark_mode": "Темна", diff --git a/locales/zh-TW.json b/locales/zh-TW.json index adbd14f0..74f134b7 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -30,7 +30,6 @@ "mutuals": "互相關注", "notifications_on_post_disable": "當 {username} 發布時,停止通知我", "notifications_on_post_enable": "當 {username} 發布時,通知我", - "notify_on_post": "{username} 發文時通知我", "pinned": "置頂的貼文", "posts": "貼文", "posts_count": "{0} 則貼文", @@ -63,7 +62,6 @@ "more": "更多", "next": "下一個", "prev": "上一個", - "previous": "之前的", "publish": "發布", "reply": "回覆", "reply_count": "{0}", @@ -94,11 +92,6 @@ "toggle_zen_mode": "切換禪模式" }, "common": { - "confirm_dialog": { - "cancel": "取消", - "confirm": "確認", - "title": "你確定嗎?" - }, "end_of_list": "清單到底了", "error": "錯誤", "in": "在", diff --git a/package.json b/package.json index 675a1070..311baa26 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "test:typecheck": "stale-dep && vue-tsc --noEmit && vue-tsc --noEmit --project service-worker/tsconfig.json", "test": "nr test:unit", "update:team:avatars": "esno scripts/avatars.ts", + "cleanup-translations": "esno scripts/cleanup-translations.ts", "prepare-translation-status": "esno scripts/prepare-translation-status.ts", "postinstall": "ignore-dependency-scripts \"stale-dep -u && simple-git-hooks && nuxi prepare && nr prepare-translation-status\"", "release": "stale-dep && bumpp && esno scripts/release.ts" diff --git a/scripts/cleanup-translations.ts b/scripts/cleanup-translations.ts new file mode 100644 index 00000000..58646c1e --- /dev/null +++ b/scripts/cleanup-translations.ts @@ -0,0 +1,65 @@ +import flatten from 'flat' +import { createResolver } from '@nuxt/kit' +import fs from 'fs-extra' +import { currentLocales } from '../config/i18n' + +const resolver = createResolver(import.meta.url) + +const sourceLanguageLocale = currentLocales.find(l => l.code === 'en-US')! + +function merge(src: Record, dst: Record) { + for (const key in src) { + if (typeof src[key] === 'object') { + if (!dst[key]) + dst[key] = {} + + merge(src[key], dst[key]) + } + else { + dst[key] = src[key] + } + } +} + +const sourceFiles: string[] = sourceLanguageLocale.files ? sourceLanguageLocale.files : [sourceLanguageLocale.file!] + +const sourceTranslations: Record = {} + +for (const file of sourceFiles) { + const data = JSON.parse(Buffer.from( + await fs.readFile(resolver.resolve(`../locales/${file}`), 'utf-8'), + ).toString()) as Record + + merge(flatten(data), sourceTranslations) +} + +async function removeOutdatedTranslations() { + for (const locale of currentLocales.filter(l => l.code !== 'en-US')) { + const files: string[] = locale.files ? locale.files : [locale.file!] + + for (const file of files) { + const path = resolver.resolve(`../locales/${file}`) + + const data = JSON.parse(Buffer.from( + await fs.readFile(path, 'utf-8'), + ).toString()) + + const targetTranslations: Record = flatten(data) + + for (const key in targetTranslations) { + if (!sourceTranslations[key]) + delete targetTranslations[key] + } + + const unflattened = flatten.unflatten(targetTranslations) + + await fs.writeFile( + path, + `${JSON.stringify(unflattened, null, 2)}\n`, + { encoding: 'utf-8' }, + ) + } + } +} + +removeOutdatedTranslations()