chore: add a script to cleanup old translations (#1963)
parent
dac044e6ad
commit
2267556b8b
|
@ -91,11 +91,6 @@
|
||||||
"toggle_zen_mode": "تبديل الوضع الهادئ"
|
"toggle_zen_mode": "تبديل الوضع الهادئ"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"confirm_dialog": {
|
|
||||||
"cancel": "لا",
|
|
||||||
"confirm": "نعم",
|
|
||||||
"title": "هل أنت متأكد؟"
|
|
||||||
},
|
|
||||||
"end_of_list": "نهاية القائمة",
|
"end_of_list": "نهاية القائمة",
|
||||||
"error": "حدث خطأ",
|
"error": "حدث خطأ",
|
||||||
"in": "في",
|
"in": "في",
|
||||||
|
@ -191,11 +186,6 @@
|
||||||
"copy_original_link_to_post": "انسخ الرابط الأصلي لهذا المنشور",
|
"copy_original_link_to_post": "انسخ الرابط الأصلي لهذا المنشور",
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"delete_and_redraft": "حذف وإعادة صياغة",
|
"delete_and_redraft": "حذف وإعادة صياغة",
|
||||||
"delete_confirm": {
|
|
||||||
"cancel": "إلغاء",
|
|
||||||
"confirm": "حذف",
|
|
||||||
"title": "هل أنت متأكد أنك تريد حذف هذا المنشور؟"
|
|
||||||
},
|
|
||||||
"direct_message_account": "إرسال رسالة مباشرة إلى {0}",
|
"direct_message_account": "إرسال رسالة مباشرة إلى {0}",
|
||||||
"edit": "تعديل",
|
"edit": "تعديل",
|
||||||
"hide_reblogs": "إخفاء المشاركات من {0}",
|
"hide_reblogs": "إخفاء المشاركات من {0}",
|
||||||
|
@ -314,12 +304,6 @@
|
||||||
"description": "قم بتحرير إعدادات حسابك في موقع ماستودون الأصل",
|
"description": "قم بتحرير إعدادات حسابك في موقع ماستودون الأصل",
|
||||||
"label": "إعدادت الحساب"
|
"label": "إعدادت الحساب"
|
||||||
},
|
},
|
||||||
"feature_flags": {
|
|
||||||
"github_cards": "بطاقات GitHub",
|
|
||||||
"title": "الميزات التجريبية",
|
|
||||||
"user_picker": "الشريط الجانبي لمبدل المستخدم",
|
|
||||||
"virtual_scroll": "التمرير الافتراضي"
|
|
||||||
},
|
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "وضع اللون",
|
"color_mode": "وضع اللون",
|
||||||
"dark_mode": "الوضع الداكن",
|
"dark_mode": "الوضع الداكن",
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
"not_found": "404 No s'ha trobat",
|
"not_found": "404 No s'ha trobat",
|
||||||
"offline_desc": "Sembla que estàs fora de línia. Comprova la connexió de xarxa."
|
"offline_desc": "Sembla que estàs fora de línia. Comprova la connexió de xarxa."
|
||||||
},
|
},
|
||||||
"compose": {},
|
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"block_account": {
|
"block_account": {
|
||||||
"cancel": "Cancel·la",
|
"cancel": "Cancel·la",
|
||||||
|
@ -91,7 +90,6 @@
|
||||||
"title": "Segur que vols deixar de seguir-lo?"
|
"title": "Segur que vols deixar de seguir-lo?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"conversation": {},
|
|
||||||
"custom_cards": {
|
"custom_cards": {
|
||||||
"stackblitz": {
|
"stackblitz": {
|
||||||
"open": "Obri",
|
"open": "Obri",
|
||||||
|
@ -119,7 +117,6 @@
|
||||||
"footer_team": "L'equip d'Elk",
|
"footer_team": "L'equip d'Elk",
|
||||||
"title": "Elk està en proves!"
|
"title": "Elk està en proves!"
|
||||||
},
|
},
|
||||||
"language": {},
|
|
||||||
"list": {
|
"list": {
|
||||||
"add_account": "Afig el compte a una llista",
|
"add_account": "Afig el compte a una llista",
|
||||||
"create": "Crea",
|
"create": "Crea",
|
||||||
|
|
|
@ -142,13 +142,6 @@
|
||||||
"replying": "Sem napište odpověď",
|
"replying": "Sem napište odpověď",
|
||||||
"the_thread": "vlákno"
|
"the_thread": "vlákno"
|
||||||
},
|
},
|
||||||
"settings": {
|
|
||||||
"feature_flags": {
|
|
||||||
"github_cards": "GitHub Cards",
|
|
||||||
"user_picker": "User Picker",
|
|
||||||
"virtual_scroll": "Virtual Scrolling"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"state": {
|
"state": {
|
||||||
"edited": "(Upraveno)",
|
"edited": "(Upraveno)",
|
||||||
"editing": "Upravuje se",
|
"editing": "Upravuje se",
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
"muted_users": "Stummgeschaltete Accounts",
|
"muted_users": "Stummgeschaltete Accounts",
|
||||||
"muting": "Stummgeschaltet",
|
"muting": "Stummgeschaltet",
|
||||||
"mutuals": "Freunde",
|
"mutuals": "Freunde",
|
||||||
"notify_on_post": "Benachrichtige mich, wenn {username} etwas postet",
|
|
||||||
"pinned": "Angepinnt",
|
"pinned": "Angepinnt",
|
||||||
"posts": "Beiträge",
|
"posts": "Beiträge",
|
||||||
"posts_count": "{0} Beiträge",
|
"posts_count": "{0} Beiträge",
|
||||||
|
@ -102,8 +101,7 @@
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"common": {
|
"common": {
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"confirm": "OK",
|
"confirm": "OK"
|
||||||
"title": "Bist du sicher, {0}?"
|
|
||||||
},
|
},
|
||||||
"delete_posts": {
|
"delete_posts": {
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
|
@ -256,12 +254,6 @@
|
||||||
"description": "Bearbeite Kontoeinstellungen in der Mastodon-Benutzeroberfläche",
|
"description": "Bearbeite Kontoeinstellungen in der Mastodon-Benutzeroberfläche",
|
||||||
"label": "Account Einstellungen"
|
"label": "Account Einstellungen"
|
||||||
},
|
},
|
||||||
"feature_flags": {
|
|
||||||
"github_cards": "GitHub Cards",
|
|
||||||
"title": "Experimentelle Funktionen",
|
|
||||||
"user_picker": "Benutzerauswahl",
|
|
||||||
"virtual_scroll": "Virtuelles Scrollen"
|
|
||||||
},
|
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "Farbschema",
|
"color_mode": "Farbschema",
|
||||||
"dark_mode": "Dunkles Farbschema",
|
"dark_mode": "Dunkles Farbschema",
|
||||||
|
|
|
@ -295,13 +295,6 @@
|
||||||
"font_size": "Kirjasinkoko",
|
"font_size": "Kirjasinkoko",
|
||||||
"label": "Käyttöliittymä",
|
"label": "Käyttöliittymä",
|
||||||
"light_mode": "Vaalea",
|
"light_mode": "Vaalea",
|
||||||
"size_label": {
|
|
||||||
"lg": "Suuri",
|
|
||||||
"md": "Keski",
|
|
||||||
"sm": "Pieni",
|
|
||||||
"xl": "Ekstra-suuri",
|
|
||||||
"xs": "Ekstra-pieni"
|
|
||||||
},
|
|
||||||
"system_mode": "Laitteen asetus",
|
"system_mode": "Laitteen asetus",
|
||||||
"theme_color": "Korostusväri"
|
"theme_color": "Korostusväri"
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
"mutuals": "Terkait",
|
"mutuals": "Terkait",
|
||||||
"notifications_on_post_disable": "Berhenti memberi tahu saya saat {username} memposting",
|
"notifications_on_post_disable": "Berhenti memberi tahu saya saat {username} memposting",
|
||||||
"notifications_on_post_enable": "Beri tahu saya jika {username} memposting",
|
"notifications_on_post_enable": "Beri tahu saya jika {username} memposting",
|
||||||
"notify_on_post": "Beri tahu saya jika {username} memposting",
|
|
||||||
"pinned": "Dilekatkan",
|
"pinned": "Dilekatkan",
|
||||||
"posts": "Posting",
|
"posts": "Posting",
|
||||||
"posts_count": "{0} Pos|{0} Pos|{0} Pos",
|
"posts_count": "{0} Pos|{0} Pos|{0} Pos",
|
||||||
|
@ -92,11 +91,6 @@
|
||||||
"toggle_zen_mode": "Beralih ke modus zen"
|
"toggle_zen_mode": "Beralih ke modus zen"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"confirm_dialog": {
|
|
||||||
"cancel": "Tidak",
|
|
||||||
"confirm": "Ya",
|
|
||||||
"title": "Apakah Anda yakin {0}?"
|
|
||||||
},
|
|
||||||
"end_of_list": "Akhir dari daftar",
|
"end_of_list": "Akhir dari daftar",
|
||||||
"error": "KESALAHAN",
|
"error": "KESALAHAN",
|
||||||
"in": "di dalam",
|
"in": "di dalam",
|
||||||
|
@ -180,11 +174,6 @@
|
||||||
"copy_link_to_post": "Salin tautan pos ini",
|
"copy_link_to_post": "Salin tautan pos ini",
|
||||||
"delete": "Hapus",
|
"delete": "Hapus",
|
||||||
"delete_and_redraft": "Hapus dan buat ulang draf",
|
"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}",
|
"direct_message_account": "Pesan langsung {0}",
|
||||||
"edit": "Sunting",
|
"edit": "Sunting",
|
||||||
"hide_reblogs": "Sembunyikan dukungan dari {0}",
|
"hide_reblogs": "Sembunyikan dukungan dari {0}",
|
||||||
|
|
|
@ -193,12 +193,6 @@
|
||||||
"about": {
|
"about": {
|
||||||
"label": "Over"
|
"label": "Over"
|
||||||
},
|
},
|
||||||
"feature_flags": {
|
|
||||||
"github_cards": "GitHub Cards",
|
|
||||||
"title": "Experimentele Functies",
|
|
||||||
"user_picker": "Gebruiker Kiezer",
|
|
||||||
"virtual_scroll": "Virtueel Scrollen"
|
|
||||||
},
|
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "Kleur Modus",
|
"color_mode": "Kleur Modus",
|
||||||
"dark_mode": "Donkere Modus",
|
"dark_mode": "Donkere Modus",
|
||||||
|
@ -284,7 +278,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"state": {
|
"state": {
|
||||||
|
|
||||||
"attachments_exceed_server_limit": "De hoeveelheid bijlagen is meer dan het limiet per post.",
|
"attachments_exceed_server_limit": "De hoeveelheid bijlagen is meer dan het limiet per post.",
|
||||||
"attachments_limit_error": "Limiet per post overschreden",
|
"attachments_limit_error": "Limiet per post overschreden",
|
||||||
"edited": "(Aangepast)",
|
"edited": "(Aangepast)",
|
||||||
|
|
|
@ -59,7 +59,6 @@
|
||||||
"more": "Больше",
|
"more": "Больше",
|
||||||
"next": "Следующее",
|
"next": "Следующее",
|
||||||
"prev": "Предыдущее",
|
"prev": "Предыдущее",
|
||||||
"previous": "Предыдущее",
|
|
||||||
"publish": "Опубликовать",
|
"publish": "Опубликовать",
|
||||||
"reply": "Ответить",
|
"reply": "Ответить",
|
||||||
"reply_count": "{0}",
|
"reply_count": "{0}",
|
||||||
|
@ -90,11 +89,6 @@
|
||||||
"toggle_zen_mode": "Переключить режим дзен"
|
"toggle_zen_mode": "Переключить режим дзен"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"confirm_dialog": {
|
|
||||||
"cancel": "Нет",
|
|
||||||
"confirm": "Да",
|
|
||||||
"title": "Вы уверены?"
|
|
||||||
},
|
|
||||||
"end_of_list": "Конец списка",
|
"end_of_list": "Конец списка",
|
||||||
"error": "ОШИБКА",
|
"error": "ОШИБКА",
|
||||||
"in": "в",
|
"in": "в",
|
||||||
|
@ -171,11 +165,6 @@
|
||||||
"copy_link_to_post": "Скопировать ссылку на этот пост",
|
"copy_link_to_post": "Скопировать ссылку на этот пост",
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"delete_and_redraft": "Удалить и переписать",
|
"delete_and_redraft": "Удалить и переписать",
|
||||||
"delete_confirm": {
|
|
||||||
"cancel": "Отменить",
|
|
||||||
"confirm": "Удалить",
|
|
||||||
"title": "Вы уверены, что хотите удалить этот пост?"
|
|
||||||
},
|
|
||||||
"direct_message_account": "Отправьте личное сообщение {0}",
|
"direct_message_account": "Отправьте личное сообщение {0}",
|
||||||
"edit": "Редактировать",
|
"edit": "Редактировать",
|
||||||
"hide_reblogs": "Скрыть репосты от {0}",
|
"hide_reblogs": "Скрыть репосты от {0}",
|
||||||
|
@ -295,13 +284,6 @@
|
||||||
"font_size": "Размер текста",
|
"font_size": "Размер текста",
|
||||||
"label": "Интерфейс",
|
"label": "Интерфейс",
|
||||||
"light_mode": "Светлая",
|
"light_mode": "Светлая",
|
||||||
"size_label": {
|
|
||||||
"lg": "Большой",
|
|
||||||
"md": "Средний",
|
|
||||||
"sm": "Маленький",
|
|
||||||
"xl": "Очень большой",
|
|
||||||
"xs": "Очень маленький"
|
|
||||||
},
|
|
||||||
"system_mode": "Системная",
|
"system_mode": "Системная",
|
||||||
"theme_color": "Цвет"
|
"theme_color": "Цвет"
|
||||||
},
|
},
|
||||||
|
|
|
@ -99,8 +99,7 @@
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"common": {
|
"common": {
|
||||||
"cancel": "Hayır",
|
"cancel": "Hayır",
|
||||||
"confirm": "Evet",
|
"confirm": "Evet"
|
||||||
"title": "Emin misiniz?"
|
|
||||||
},
|
},
|
||||||
"delete_posts": {
|
"delete_posts": {
|
||||||
"cancel": "İptal et",
|
"cancel": "İptal et",
|
||||||
|
|
|
@ -216,10 +216,6 @@
|
||||||
"description": "Відредагуйте налаштування облікового запису використовуєчи інтерфейс Mastodon",
|
"description": "Відредагуйте налаштування облікового запису використовуєчи інтерфейс Mastodon",
|
||||||
"label": "Налаштування облікового запису"
|
"label": "Налаштування облікового запису"
|
||||||
},
|
},
|
||||||
"feature_flags": {
|
|
||||||
"github_cards": "GitHub картки",
|
|
||||||
"title": "Експериментальні налаштування"
|
|
||||||
},
|
|
||||||
"interface": {
|
"interface": {
|
||||||
"color_mode": "Кольорова тема",
|
"color_mode": "Кольорова тема",
|
||||||
"dark_mode": "Темна",
|
"dark_mode": "Темна",
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
"mutuals": "互相關注",
|
"mutuals": "互相關注",
|
||||||
"notifications_on_post_disable": "當 {username} 發布時,停止通知我",
|
"notifications_on_post_disable": "當 {username} 發布時,停止通知我",
|
||||||
"notifications_on_post_enable": "當 {username} 發布時,通知我",
|
"notifications_on_post_enable": "當 {username} 發布時,通知我",
|
||||||
"notify_on_post": "{username} 發文時通知我",
|
|
||||||
"pinned": "置頂的貼文",
|
"pinned": "置頂的貼文",
|
||||||
"posts": "貼文",
|
"posts": "貼文",
|
||||||
"posts_count": "{0} 則貼文",
|
"posts_count": "{0} 則貼文",
|
||||||
|
@ -63,7 +62,6 @@
|
||||||
"more": "更多",
|
"more": "更多",
|
||||||
"next": "下一個",
|
"next": "下一個",
|
||||||
"prev": "上一個",
|
"prev": "上一個",
|
||||||
"previous": "之前的",
|
|
||||||
"publish": "發布",
|
"publish": "發布",
|
||||||
"reply": "回覆",
|
"reply": "回覆",
|
||||||
"reply_count": "{0}",
|
"reply_count": "{0}",
|
||||||
|
@ -94,11 +92,6 @@
|
||||||
"toggle_zen_mode": "切換禪模式"
|
"toggle_zen_mode": "切換禪模式"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"confirm_dialog": {
|
|
||||||
"cancel": "取消",
|
|
||||||
"confirm": "確認",
|
|
||||||
"title": "你確定嗎?"
|
|
||||||
},
|
|
||||||
"end_of_list": "清單到底了",
|
"end_of_list": "清單到底了",
|
||||||
"error": "錯誤",
|
"error": "錯誤",
|
||||||
"in": "在",
|
"in": "在",
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
"test:typecheck": "stale-dep && vue-tsc --noEmit && vue-tsc --noEmit --project service-worker/tsconfig.json",
|
"test:typecheck": "stale-dep && vue-tsc --noEmit && vue-tsc --noEmit --project service-worker/tsconfig.json",
|
||||||
"test": "nr test:unit",
|
"test": "nr test:unit",
|
||||||
"update:team:avatars": "esno scripts/avatars.ts",
|
"update:team:avatars": "esno scripts/avatars.ts",
|
||||||
|
"cleanup-translations": "esno scripts/cleanup-translations.ts",
|
||||||
"prepare-translation-status": "esno scripts/prepare-translation-status.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\"",
|
"postinstall": "ignore-dependency-scripts \"stale-dep -u && simple-git-hooks && nuxi prepare && nr prepare-translation-status\"",
|
||||||
"release": "stale-dep && bumpp && esno scripts/release.ts"
|
"release": "stale-dep && bumpp && esno scripts/release.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<string, any>, dst: Record<string, any>) {
|
||||||
|
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<string, string> = {}
|
||||||
|
|
||||||
|
for (const file of sourceFiles) {
|
||||||
|
const data = JSON.parse(Buffer.from(
|
||||||
|
await fs.readFile(resolver.resolve(`../locales/${file}`), 'utf-8'),
|
||||||
|
).toString()) as Record<string, unknown>
|
||||||
|
|
||||||
|
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<string, string> = 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()
|
Loading…
Reference in New Issue