diff --git a/build.mjs b/build.mjs index 181506cc..10a5aa98 100644 --- a/build.mjs +++ b/build.mjs @@ -406,4 +406,59 @@ async function runAll() { removeBuildDirs(); } +// Check locales folder at chrome/_locales and match with messages.json in en folder +const localesPath = path.join(chromeSourceDir, '_locales/'); + +const localeFolders = fs.readdirSync(localesPath); +const locales = []; + +localeFolders.forEach((localeFolder) => { + const localePath = path.join(localesPath, localeFolder, 'messages.json'); + // check if file exists + if (!fs.existsSync(localePath)) { + return; + } + + const messages = JSON.parse(fs.readFileSync(localePath, 'utf8')); + const translationMap = {}; + Object.keys(messages).forEach((key) => { + translationMap[key] = messages[key].message; + }); + locales.push({ + translationMap, + code: localeFolder, + }); +}); + +// Find english +const defaultLanguage = 'en'; +const english = locales.find((locale) => locale.code === defaultLanguage); +const otherLocales = locales.filter((locale) => locale.code !== defaultLanguage); + +// Check if all keys are present in all locales +otherLocales.forEach((locale) => { + const missingKeys = []; + Object.keys(english.translationMap).forEach((key) => { + if (!locale.translationMap[key]) { + missingKeys.push(key); + } + }); + + const extraKeys = []; + Object.keys(locale.translationMap).forEach((key) => { + if (!english.translationMap[key]) { + extraKeys.push(key); + } + }); + + if (missingKeys.length) { + console.error(`Missing keys in ${locale.code}:`, missingKeys); + } + + if (extraKeys.length) { + console.error(`Extra keys in ${locale.code}:`, extraKeys); + } +}); + + runAll(); diff --git a/chrome/_locales/en/messages.json b/chrome/_locales/en/messages.json index d8900186..74f8721c 100644 --- a/chrome/_locales/en/messages.json +++ b/chrome/_locales/en/messages.json @@ -177,37 +177,43 @@ "player_nosource_instruction2p2": { "message": "to load sources detected from other tabs." }, - "player_playpause_label": { - "message": "Play or pause video" + "player_play_label": { + "message": "Play video" + }, + "player_pause_label": { + "message": "Pause video" + }, + "player_volume_label": { + "message": "Volume is $1%. Use arrow keys to adjust, enter to toggle mute." }, "player_mute_label": { "message": "Mute audio" }, "player_timestamp_label": { - "message": "Timestamp" + "message": "Copy URL with timestamp" }, "player_sourcesbrowser_title": { "message": "Sources Browser" }, - "player_sourcesbrowser_toggle_label": { - "message": "Toggle sources browser" + "player_sourcesbrowser_open_label": { + "message": "Open sources browser" }, - "player_sourcesbrowser_closebtn_label": { + "player_sourcesbrowser_close_label": { "message": "Close sources browser" }, "player_audioconfig_title": { "message": "Audio Configuration" }, - "player_audioconfig_toggle_label": { - "message": "Toggle audio config window" + "player_audioconfig_open_label": { + "message": "Open audio config window" }, - "player_audioconfig_toggle_closebtn_label": { + "player_audioconfig_close_label": { "message": "Close audio config window" }, "player_opensubtitles_title": { "message": "OpenSubtitles Search" }, - "player_opensubtitles_closebtn_label": { + "player_opensubtitles_close_label": { "message": "Close OpenSubtitles search window" }, "player_opensubtitles_search_placeholder": { @@ -285,8 +291,11 @@ "player_opensubtitles_askopen": { "message": "Would you like to open the OpenSubtitles website to download the subtitle file manually?" }, - "player_subtitlesmenu_toggle_label": { - "message": "Toggle subtitles menu" + "player_subtitlesmenu_open_label": { + "message": "Open subtitles menu" + }, + "player_subtitlesmenu_close_label": { + "message": "Close subtitles menu" }, "player_subtitlesmenu_backbtn": { "message": "Back" @@ -357,11 +366,11 @@ "player_settings_title": { "message": "FastStream Settings" }, - "player_settings_closebtn_label": { - "message": "Close settings window" + "player_settings_open_label": { + "message": "Open settings window" }, - "player_settings_label": { - "message": "Settings" + "player_settings_close_label": { + "message": "Close settings window" }, "player_savevideo_label": { "message": "Save video. hold ALT to save partial video. hold SHIFT to dump buffer." @@ -373,10 +382,10 @@ "message": "Picture in picture" }, "player_fullscreen_label": { - "message": "Fullscreen" + "message": "Toggle fullscreen" }, "player_windowed_fullscreen_label": { - "message": "Windowed Fullscreen" + "message": "Toggle windowed fullscreen" }, "player_skip_forward_label": { "message": "Skip forward 10s" @@ -639,6 +648,12 @@ "audiomixer_title": { "message": "Audio Channel Mixer" }, + "audiomixer_volume_master_handle_label": { + "message": "$1 gain is $2 dB. Use arrows to adjust. Press M to toggle mono" + }, + "audiomixer_volume_handle_label": { + "message": "$1 gain is $2 dB. Use arrows to adjust. Press M to toggle mute" + }, "audiomixer_solo_label": { "message": "Solo" }, diff --git a/chrome/_locales/es/messages.json b/chrome/_locales/es/messages.json index 4970a143..78663fe6 100644 --- a/chrome/_locales/es/messages.json +++ b/chrome/_locales/es/messages.json @@ -176,8 +176,14 @@ "player_nosource_instruction2p2": { "message": "para cargar fuentes detectadas desde otras pestañas." }, - "player_playpause_label": { - "message": "Reproducir o pausar vídeo" + "player_play_label": { + "message": "Reproducir video" + }, + "player_pause_label": { + "message": "Pausar video" + }, + "player_volume_label": { + "message": "El volumen es $1%. Usa las teclas de flecha para ajustar, enter para silenciar." }, "player_mute_label": { "message": "Silenciar el audio" @@ -188,25 +194,25 @@ "player_sourcesbrowser_title": { "message": "Navegador de Fuentes" }, - "player_sourcesbrowser_toggle_label": { - "message": "Alternar navegador de fuentes" + "player_sourcesbrowser_open_label": { + "message": "Abrir navegador de fuentes" }, - "player_sourcesbrowser_closebtn_label": { + "player_sourcesbrowser_close_label": { "message": "Cerrar navegador de fuentes" }, "player_audioconfig_title": { "message": "Configuración de Audio" }, - "player_audioconfig_toggle_label": { - "message": "Alternar ventana de configuración de audio" + "player_audioconfig_open_label": { + "message": "Abrir ventana de configuración de audio" }, - "player_audioconfig_toggle_closebtn_label": { + "player_audioconfig_close_label": { "message": "Cerrar ventana de configuración de audio" }, "player_opensubtitles_title": { "message": "Búsqueda en OpenSubtitles" }, - "player_opensubtitles_closebtn_label": { + "player_opensubtitles_close_label": { "message": "Cerrar ventana de búsqueda de OpenSubtitles" }, "player_opensubtitles_search_placeholder": { @@ -284,8 +290,11 @@ "player_opensubtitles_askopen": { "message": "¿Le gustaría abrir el sitio web de OpenSubtitles para descargar el archivo de subtítulos manualmente?" }, - "player_subtitlesmenu_toggle_label": { - "message": "Alternar menú de subtítulos" + "player_subtitlesmenu_open_label": { + "message": "Abrir menú de subtítulos" + }, + "player_subtitlesmenu_close_label": { + "message": "Cerrar menú de subtítulos" }, "player_subtitlesmenu_backbtn": { "message": "Volver" @@ -356,11 +365,11 @@ "player_settings_title": { "message": "Configuraciones de FastStream" }, - "player_settings_closebtn_label": { + "player_settings_close_label": { "message": "Cerrar ventana de configuración" }, - "player_settings_label": { - "message": "Configuraciones" + "player_settings_open_label": { + "message": "Abrir ventana de configuración" }, "player_savevideo_label": { "message": "Guardar video. mantén presionado ALT para guardar un video parcial. mantén presionado SHIFT para vaciar el búfer." @@ -638,6 +647,12 @@ "audiomixer_title": { "message": "Mezclador de Canales de Audio" }, + "audiomixer_volume_master_handle_label": { + "message": "Ganancia de $1 es $2 dB. Usa las flechas para ajustar. Presiona M para alternar mono" + }, + "audiomixer_volume_handle_label": { + "message": "Ganancia de $1 es $2 dB. Usa las flechas para ajustar. Presiona M para alternar silencio" + }, "audiomixer_solo_label": { "message": "Solo" }, diff --git a/chrome/_locales/ja/messages.json b/chrome/_locales/ja/messages.json index 27de68db..ebb2677e 100644 --- a/chrome/_locales/ja/messages.json +++ b/chrome/_locales/ja/messages.json @@ -177,8 +177,14 @@ "player_nosource_instruction2p2": { "message": "他のタブから検出されたソースを読み込み。" }, - "player_playpause_label": { - "message": "動画を再生/一時停止" + "player_play_label": { + "message": "ビデオを再生" + }, + "player_pause_label": { + "message": "ビデオを一時停止" + }, + "player_volume_label": { + "message": "音量は $1% です。矢印キーで調整、ミュートを切り替えるにはエンターキーを使用します。" }, "player_mute_label": { "message": "オーディオを消音" @@ -189,25 +195,25 @@ "player_sourcesbrowser_title": { "message": "ソースの参照" }, - "player_sourcesbrowser_toggle_label": { + "player_sourcesbrowser_open_label": { "message": "ソースの参照を開く" }, - "player_sourcesbrowser_closebtn_label": { + "player_sourcesbrowser_close_label": { "message": "ソースの参照を閉じる" }, "player_audioconfig_title": { "message": "オーディオの設定" }, - "player_audioconfig_toggle_label": { + "player_audioconfig_open_label": { "message": "オーディオ設定ウィンドウを開く" }, - "player_audioconfig_toggle_closebtn_label": { + "player_audioconfig_close_label": { "message": "オーディオ設定ウィンドウを閉じる" }, "player_opensubtitles_title": { "message": "OpenSubtitles を検索" }, - "player_opensubtitles_closebtn_label": { + "player_opensubtitles_close_label": { "message": "OpenSubtitles 検索ウィンドウを閉じる" }, "player_opensubtitles_search_placeholder": { @@ -285,9 +291,12 @@ "player_opensubtitles_askopen": { "message": "OpenSubtitles の Web サイトを開いて字幕ファイルを手動でダウンロードしますか?" }, - "player_subtitlesmenu_toggle_label": { + "player_subtitlesmenu_open_label": { "message": "字幕メニューを開く" }, + "player_subtitlesmenu_close_label": { + "message": "字幕メニューを閉じる" + }, "player_subtitlesmenu_backbtn": { "message": "戻る" }, @@ -357,11 +366,11 @@ "player_settings_title": { "message": "FastStream の設定" }, - "player_settings_closebtn_label": { + "player_settings_close_label": { "message": "設定ウィンドウを閉じる" }, - "player_settings_label": { - "message": "設定" + "player_settings_open_label": { + "message": "設定ウィンドウを開く" }, "player_savevideo_label": { "message": "ALT を押しながらで動画の一部を保存します。SHIFT を押しながらでバッファーをダンプします。" @@ -639,6 +648,12 @@ "audiomixer_title": { "message": "オーディオチャンネルミキサー" }, + "audiomixer_volume_master_handle_label": { + "message": "$1 のゲインは $2 dB です。矢印キーで調整します。M キーでモノラルを切り替えます" + }, + "audiomixer_volume_handle_label": { + "message": "$1 のゲインは $2 dB です。矢印キーで調整します。M キーでミュートを切り替えます" + }, "audiomixer_solo_label": { "message": "ソロ" }, diff --git a/chrome/_locales/ms/messages.json b/chrome/_locales/ms/messages.json index 590b35b9..71fc8479 100644 --- a/chrome/_locales/ms/messages.json +++ b/chrome/_locales/ms/messages.json @@ -177,8 +177,14 @@ "player_nosource_instruction2p2": { "message": "untuk memuatkan sumber yang dikesan daripada tab lain." }, - "player_playpause_label": { - "message": "Mainkan atau jeda video" + "player_play_label": { + "message": "Mainkan video" + }, + "player_pause_label": { + "message": "Jeda video" + }, + "player_volume_label": { + "message": "Kelantangan $1%. Gunakan anak panah untuk menyesuaikan, enter untuk menogol audio." }, "player_mute_label": { "message": "Redamkan audio" @@ -189,25 +195,25 @@ "player_sourcesbrowser_title": { "message": "Sumber Pelayar" }, - "player_sourcesbrowser_toggle_label": { - "message": "Togol penyemak imbas sumber" + "player_sourcesbrowser_open_label": { + "message": "Buka penyemak imbas sumber" }, - "player_sourcesbrowser_closebtn_label": { + "player_sourcesbrowser_close_label": { "message": "Tutup penyemak imbas sumber" }, "player_audioconfig_title": { "message": "Konfigurasi Audio" }, - "player_audioconfig_toggle_label": { - "message": "Togol tetingkap konfigurasi audio" + "player_audioconfig_open_label": { + "message": "Buka tetingkap konfigurasi audio" }, - "player_audioconfig_toggle_closebtn_label": { + "player_audioconfig_close_label": { "message": "Tutup tetingkap konfigurasi audio" }, "player_opensubtitles_title": { "message": "Carian OpenSubtitles" }, - "player_opensubtitles_closebtn_label": { + "player_opensubtitles_close_label": { "message": "Tutup tingkap carian OpenSubtitles" }, "player_opensubtitles_search_placeholder": { @@ -285,8 +291,11 @@ "player_opensubtitles_askopen": { "message": "Adakah anda ingin membuka laman web OpenSubtitles untuk memuat turun fail sarikata secara manual?" }, - "player_subtitlesmenu_toggle_label": { - "message": "Togol menu sarikata" + "player_subtitlesmenu_open_label": { + "message": "Buka tingkap sarikata" + }, + "player_subtitlesmenu_close_label": { + "message": "Tutup tingkap sarikata" }, "player_subtitlesmenu_backbtn": { "message": "Kembali" @@ -357,11 +366,11 @@ "player_settings_title": { "message": "Tetapan FastStream" }, - "player_settings_closebtn_label": { + "player_settings_close_label": { "message": "Tutup tetingkap tetapan" }, - "player_settings_label": { - "message": "Tetapan" + "player_settings_open_label": { + "message": "Buka tetingkap tetapan" }, "player_savevideo_label": { "message": "Simpan video. tahan ALT untuk menyimpan sebahagian video. tahan SHIFT untuk membuang penimbal." @@ -639,6 +648,12 @@ "audiomixer_title": { "message": "Pengadun Saluran Audio" }, + "audiomixer_volume_master_handle_label": { + "message": "$1 gain is $2 dB. Gunakan anak panah untuk menyesuaikan. Tekan M untuk mengalihkan mono" + }, + "audiomixer_volume_handle_label": { + "message": "$1 gain is $2 dB. Gunakan anak panah untuk menyesuaikan. Tekan M untuk mengalihkan bisu" + }, "audiomixer_solo_label": { "message": "Solo" }, diff --git a/chrome/_locales/ru/messages.json b/chrome/_locales/ru/messages.json index 9fa7a0f1..54423d72 100644 --- a/chrome/_locales/ru/messages.json +++ b/chrome/_locales/ru/messages.json @@ -177,8 +177,14 @@ "player_nosource_instruction2p2": { "message": "для загрузки источников, обнаруженных на других вкладках." }, - "player_playpause_label": { - "message": "Воспроизведение/Пауза" + "player_play_label": { + "message": "Воспроизвести видео" + }, + "player_pause_label": { + "message": "Приостановить видео" + }, + "player_volume_label": { + "message": "Громкость $1%. Используйте стрелки для регулировки, Enter для отключения звука." }, "player_mute_label": { "message": "Отключить звук" @@ -189,25 +195,25 @@ "player_sourcesbrowser_title": { "message": "Обзор источников" }, - "player_sourcesbrowser_toggle_label": { - "message": "Обзор источников" + "player_sourcesbrowser_open_label": { + "message": "Открыть обзор источников" }, - "player_sourcesbrowser_closebtn_label": { + "player_sourcesbrowser_close_label": { "message": "Закрыть обзор источников" }, "player_audioconfig_title": { "message": "Конфигурация звука" }, - "player_audioconfig_toggle_label": { - "message": "Настройка звука" + "player_audioconfig_open_label": { + "message": "Открыть настройки звука" }, - "player_audioconfig_toggle_closebtn_label": { + "player_audioconfig_close_label": { "message": "Закрыть настройки звука" }, "player_opensubtitles_title": { "message": "Поиск по OpenSubtitles" }, - "player_opensubtitles_closebtn_label": { + "player_opensubtitles_close_label": { "message": "Закрыть поиск по OpenSubtitles" }, "player_opensubtitles_search_placeholder": { @@ -285,8 +291,11 @@ "player_opensubtitles_askopen": { "message": "Хотите открыть сайт OpenSubtitles, чтобы загрузить субтитры вручную?" }, - "player_subtitlesmenu_toggle_label": { - "message": "Субтитры" + "player_subtitlesmenu_open_label": { + "message": "Открыть меню субтитров" + }, + "player_subtitlesmenu_close_label": { + "message": "Закрыть меню субтитров" }, "player_subtitlesmenu_backbtn": { "message": "Назад" @@ -357,11 +366,11 @@ "player_settings_title": { "message": "Настройки FastStream" }, - "player_settings_closebtn_label": { + "player_settings_close_label": { "message": "Закрыть окно настроек" }, - "player_settings_label": { - "message": "Настройки" + "player_settings_open_label": { + "message": "Открыть окно настроек" }, "player_savevideo_label": { "message": "Сохранить видео. Удерживайте ALT, чтобы сохранить часть видео. Удерживайте SHIFT, чтобы сбросить буфер." @@ -639,6 +648,12 @@ "audiomixer_title": { "message": "Микшер аудиоканала" }, + "audiomixer_volume_master_handle_label": { + "message": "$1 усиление $2 dB. Используйте стрелки для регулировки. Нажмите M, чтобы переключить моно" + }, + "audiomixer_volume_handle_label": { + "message": "$1 усиление $2 dB. Используйте стрелки для регулировки. Нажмите M, чтобы переключить отключение звука" + }, "audiomixer_solo_label": { "message": "Соло" }, diff --git a/chrome/player/index.html b/chrome/player/index.html index 1a5b89ef..41a106e8 100644 --- a/chrome/player/index.html +++ b/chrome/player/index.html @@ -19,7 +19,7 @@