mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
chore: update extension uninstall URL and fix missing onboarding restart translations
This commit is contained in:
@@ -8,6 +8,7 @@ export default [
|
||||
sourceType: "module",
|
||||
globals: {
|
||||
chrome: "readonly",
|
||||
browser: "readonly",
|
||||
window: "readonly",
|
||||
document: "readonly",
|
||||
navigator: "readonly",
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Equalizer",
|
||||
"AUDIO_COMING_SOON": "Demnächst",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Einführung neu starten",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Startet die Einführung für neue Benutzer erneut",
|
||||
"HINT_SELECT_VIDEO": "Wähle hier dein Video aus!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Ecualizador",
|
||||
"AUDIO_COMING_SOON": "Próximamente",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Reiniciar tutorial",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Reiniciar el tutorial de inicio",
|
||||
"HINT_SELECT_VIDEO": "¡Selecciona tu video aquí!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Égaliseur",
|
||||
"AUDIO_COMING_SOON": "Bientôt disponible",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Redémarrer le tutoriel",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Recommencer le tutoriel d'intégration",
|
||||
"HINT_SELECT_VIDEO": "Sélectionnez votre vidéo ici !"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Equalizzatore",
|
||||
"AUDIO_COMING_SOON": "Prossimamente",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Riavvia tutorial",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Riavvia il tutorial iniziale",
|
||||
"HINT_SELECT_VIDEO": "Seleziona il tuo video qui!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "イコライザー",
|
||||
"AUDIO_COMING_SOON": "近日公開",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "チュートリアルを再起動",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "オンボーディングチュートリアルを再起動する",
|
||||
"HINT_SELECT_VIDEO": "ここで動画を選択してください!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "이퀄라이저",
|
||||
"AUDIO_COMING_SOON": "출시 예정",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "튜토리얼 다시 시작",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "온보딩 튜토리얼을 다시 시작합니다",
|
||||
"HINT_SELECT_VIDEO": "여기에서 비디오를 선택하세요!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Equalizer",
|
||||
"AUDIO_COMING_SOON": "Binnenkort beschikbaar",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Tutorial opnieuw starten",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Start de introductie-tutorial opnieuw",
|
||||
"HINT_SELECT_VIDEO": "Selecteer hier je video!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Korektor",
|
||||
"AUDIO_COMING_SOON": "Wkrótce",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Uruchom samouczek ponownie",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Uruchom ponownie samouczek powitalny",
|
||||
"HINT_SELECT_VIDEO": "Wybierz swoje wideo tutaj!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Equalizador",
|
||||
"AUDIO_COMING_SOON": "Em breve",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Reiniciar tutorial",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Reiniciar o tutorial de introdução",
|
||||
"HINT_SELECT_VIDEO": "Selecione seu vídeo aqui!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Equalizador",
|
||||
"AUDIO_COMING_SOON": "Em breve",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Reiniciar tutorial",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Reiniciar o tutorial de introdução",
|
||||
"HINT_SELECT_VIDEO": "Selecione o seu vídeo aqui!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Эквалайзер",
|
||||
"AUDIO_COMING_SOON": "Скоро",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Перезапустить обучение",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Запустить приветственное руководство заново",
|
||||
"HINT_SELECT_VIDEO": "Выберите ваше видео здесь!"
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
"AUDIO_PARAM_RELEASE": "Release",
|
||||
"AUDIO_EQUALIZER": "Ekolayzer",
|
||||
"AUDIO_COMING_SOON": "Çok yakında",
|
||||
"BTN_RESTART_TOUR": "",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "",
|
||||
"HINT_SELECT_VIDEO": ""
|
||||
"BTN_RESTART_TOUR": "Eğitimi Yeniden Başlat",
|
||||
"BTN_RESTART_TOUR_TOOLTIP": "Tanıtım eğitimini yeniden başlat",
|
||||
"HINT_SELECT_VIDEO": "Videonuzu buradan seçin!"
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ function copyExtensionFiles(targetDir, browserName) {
|
||||
const uStart = '// --- UNINSTALL_URL_INJECT_START ---';
|
||||
const uEnd = '// --- UNINSTALL_URL_INJECT_END ---';
|
||||
const uPattern = new RegExp(`${uStart}[\\s\\S]+?${uEnd}`);
|
||||
const placeholderUrl = "https://example.com/uninstall-placeholder"; // TODO: Replace me
|
||||
const placeholderUrl = "https://bye.koalastuff.net/c/camp_99ztjRVbK1BNN2RU";
|
||||
|
||||
let uRep = `${uStart}\n // This block is automatically updated by /scripts/build-extension.js\n`;
|
||||
uRep += ` const UNINSTALL_URL = "${placeholderUrl}";\n`;
|
||||
|
||||
+21
-2
@@ -48,7 +48,7 @@ try {
|
||||
const enDict = JSON.parse(fs.readFileSync(enPath, 'utf8'));
|
||||
const enKeys = Object.keys(enDict);
|
||||
|
||||
const localeFiles = fs.readdirSync(localesDir).filter(file => file.endsWith('.json') && file !== 'en.json');
|
||||
const localeFiles = fs.readdirSync(localesDir).filter(file => file.endsWith('.json'));
|
||||
|
||||
console.log(`Auditing i18n locales using ${enKeys.length} baseline keys from en.json...\n`);
|
||||
|
||||
@@ -79,8 +79,21 @@ for (const file of localeFiles) {
|
||||
|
||||
const missingKeys = enKeys.filter(k => !keys.includes(k));
|
||||
const extraKeys = keys.filter(k => !enKeys.includes(k));
|
||||
const emptyKeys = keys.filter(k => typeof dict[k] === 'string' && dict[k].trim() === '');
|
||||
const placeholderKeys = keys.filter(k => {
|
||||
if (typeof dict[k] !== 'string') return false;
|
||||
const val = dict[k];
|
||||
const lower = val.toLowerCase();
|
||||
return (
|
||||
lower.includes('placeholder') ||
|
||||
lower.includes('todo:') ||
|
||||
lower.includes('tbd:') ||
|
||||
/\bTODO\b/.test(val) ||
|
||||
/\bTBD\b/.test(val)
|
||||
);
|
||||
});
|
||||
|
||||
if (missingKeys.length > 0 || extraKeys.length > 0) {
|
||||
if (missingKeys.length > 0 || extraKeys.length > 0 || emptyKeys.length > 0 || placeholderKeys.length > 0) {
|
||||
hasError = true;
|
||||
console.error(`❌ ${file} has inconsistencies:`);
|
||||
if (missingKeys.length > 0) {
|
||||
@@ -89,6 +102,12 @@ for (const file of localeFiles) {
|
||||
if (extraKeys.length > 0) {
|
||||
console.error(` Extra keys (${extraKeys.length}):`, extraKeys);
|
||||
}
|
||||
if (emptyKeys.length > 0) {
|
||||
console.error(` Empty translation values (${emptyKeys.length}):`, emptyKeys);
|
||||
}
|
||||
if (placeholderKeys.length > 0) {
|
||||
console.error(` Placeholder/TODO values (${placeholderKeys.length}):`, placeholderKeys);
|
||||
}
|
||||
} else {
|
||||
console.log(`✓ ${file} is fully consistent (matches all keys).`);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ const enDict = JSON.parse(fs.readFileSync(enPath, 'utf8'));
|
||||
const enKeys = Object.keys(enDict).sort();
|
||||
|
||||
const localeFiles = fs.readdirSync(localesDir)
|
||||
.filter(file => file.endsWith('.json') && file !== 'en.json')
|
||||
.filter(file => file.endsWith('.json'))
|
||||
.sort();
|
||||
|
||||
let hasError = false;
|
||||
@@ -51,8 +51,24 @@ for (const file of localeFiles) {
|
||||
|
||||
const missingKeys = enKeys.filter(k => !keys.includes(k));
|
||||
const extraKeys = keys.filter(k => !enKeys.includes(k));
|
||||
const emptyKeys = keys.filter(k => {
|
||||
if (file === 'en.json' && k === 'CANONICAL_PATH') return false;
|
||||
return typeof dict[k] === 'string' && dict[k].trim() === '';
|
||||
});
|
||||
const placeholderKeys = keys.filter(k => {
|
||||
if (typeof dict[k] !== 'string') return false;
|
||||
const val = dict[k];
|
||||
const lower = val.toLowerCase();
|
||||
return (
|
||||
lower.includes('placeholder') ||
|
||||
lower.includes('todo:') ||
|
||||
lower.includes('tbd:') ||
|
||||
/\bTODO\b/.test(val) ||
|
||||
/\bTBD\b/.test(val)
|
||||
);
|
||||
});
|
||||
|
||||
if (missingKeys.length > 0 || extraKeys.length > 0) {
|
||||
if (missingKeys.length > 0 || extraKeys.length > 0 || emptyKeys.length > 0 || placeholderKeys.length > 0) {
|
||||
hasError = true;
|
||||
console.error(`❌ ${file} has inconsistencies:`);
|
||||
if (missingKeys.length > 0) {
|
||||
@@ -61,6 +77,12 @@ for (const file of localeFiles) {
|
||||
if (extraKeys.length > 0) {
|
||||
console.error(` Extra keys (${extraKeys.length}):`, extraKeys);
|
||||
}
|
||||
if (emptyKeys.length > 0) {
|
||||
console.error(` Empty translation values (${emptyKeys.length}):`, emptyKeys);
|
||||
}
|
||||
if (placeholderKeys.length > 0) {
|
||||
console.error(` Placeholder/TODO values (${placeholderKeys.length}):`, placeholderKeys);
|
||||
}
|
||||
} else {
|
||||
console.log(`✓ ${file} is fully consistent (matches all keys).`);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "it",
|
||||
"HTML_CLASS": "lang-it",
|
||||
"CANONICAL_PATH": "it/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "it_IT",
|
||||
"META_TITLE": "KoalaSync | Sincronizza Netflix, YouTube e qualsiasi video con gli amici",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "ja",
|
||||
"HTML_CLASS": "lang-ja",
|
||||
"CANONICAL_PATH": "ja/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "ja_JP",
|
||||
"META_TITLE": "KoalaSync | Netflix、YouTube、あらゆる動画を友達と同期視聴",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "ko",
|
||||
"HTML_CLASS": "lang-ko",
|
||||
"CANONICAL_PATH": "ko/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "ko_KR",
|
||||
"META_TITLE": "KoalaSync | Netflix, YouTube 및 모든 비디오를 친구와 실시간 동기화 시청",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "nl",
|
||||
"HTML_CLASS": "lang-nl",
|
||||
"CANONICAL_PATH": "nl/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "nl_NL",
|
||||
"META_TITLE": "KoalaSync | Synchroniseer Netflix, YouTube & elke video met vrienden",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "pl",
|
||||
"HTML_CLASS": "lang-pl",
|
||||
"CANONICAL_PATH": "pl/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "pl_PL",
|
||||
"META_TITLE": "KoalaSync | Synchronizuj Netflix, YouTube i dowolne wideo ze znajomymi",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "pt",
|
||||
"HTML_CLASS": "lang-pt",
|
||||
"CANONICAL_PATH": "pt/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "pt_PT",
|
||||
"META_TITLE": "KoalaSync | Sincronize Netflix, YouTube e qualquer vídeo com os amigos",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"LANG_CODE": "tr",
|
||||
"HTML_CLASS": "lang-tr",
|
||||
"CANONICAL_PATH": "tr/",
|
||||
"LANG_TOGGLE_URL": "",
|
||||
"LANG_TOGGLE_URL": "../",
|
||||
"LANG_TOGGLE_TEXT": "EN",
|
||||
"OG_LOCALE": "tr_TR",
|
||||
"META_TITLE": "KoalaSync | Netflix, YouTube ve Herhangi Bir Videoyu Arkadaşlarınızla Eşitleyin",
|
||||
|
||||
Reference in New Issue
Block a user