diff --git a/extension/_locales/de/messages.json b/extension/_locales/de/messages.json index 8b84354..f7bf757 100644 --- a/extension/_locales/de/messages.json +++ b/extension/_locales/de/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Synchronisiere die Videowiedergabe auf YouTube, Netflix, Emby, Jellyfin und jeder HTML5-Seite in Echtzeit mit Freunden." + "message": "Erstelle private Watch Partys und synchronisiere Videos mit Freunden auf YouTube, Netflix, Jellyfin, Emby und fast jeder Website." } } diff --git a/extension/_locales/en/messages.json b/extension/_locales/en/messages.json index 3132906..8be2507 100644 --- a/extension/_locales/en/messages.json +++ b/extension/_locales/en/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Synchronize video playback on YouTube, Netflix, Emby, Jellyfin, and any HTML5 site in real-time with friends." + "message": "Create private watch parties and sync videos with friends on YouTube, Netflix, Jellyfin, Emby, and almost any HTML5 website." } } diff --git a/extension/_locales/es/messages.json b/extension/_locales/es/messages.json index d716d3e..9125cab 100644 --- a/extension/_locales/es/messages.json +++ b/extension/_locales/es/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Mira videos junto a tus amigos en perfecta sincronización. Compatible con Netflix, YouTube, Twitch, Prime Video, Disney+ y cualquier reproductor HTML5." + "message": "Crea fiestas privadas y sincroniza vídeos con amigos en YouTube, Netflix, Jellyfin, Emby y casi cualquier sitio HTML5." } } diff --git a/extension/_locales/fr/messages.json b/extension/_locales/fr/messages.json index 37cbe71..ce17b61 100644 --- a/extension/_locales/fr/messages.json +++ b/extension/_locales/fr/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Synchronisez la lecture vidéo sur YouTube, Netflix, Emby, Jellyfin et tout site HTML5 en temps réel avec vos amis." + "message": "Créez des watch parties privées et regardez en synchro entre amis sur YouTube, Netflix, Jellyfin, Emby et presque tout site HTML5." } } diff --git a/extension/_locales/it/messages.json b/extension/_locales/it/messages.json index 118ff90..4f6aa8a 100644 --- a/extension/_locales/it/messages.json +++ b/extension/_locales/it/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Sincronizza la riproduzione video su YouTube, Netflix, Emby, Jellyfin e qualsiasi sito HTML5 in tempo reale con gli amici." + "message": "Crea watch party private e sincronizza i video con gli amici su YouTube, Netflix, Jellyfin, Emby e quasi ogni sito HTML5." } } diff --git a/extension/_locales/ja/messages.json b/extension/_locales/ja/messages.json index 5833c2f..dc17ce0 100644 --- a/extension/_locales/ja/messages.json +++ b/extension/_locales/ja/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "YouTube、Netflix、Emby、Jellyfin、その他HTML5サイトでの動画再生を友達とリアルタイムで同期します。" + "message": "プライベートなウォッチパーティーを作成し、YouTube、Netflix、Jellyfin、EmbyやほぼすべてのHTML5サイトで友達と動画を同期再生できます。" } } diff --git a/extension/_locales/ko/messages.json b/extension/_locales/ko/messages.json index 12f71e4..8ad21bb 100644 --- a/extension/_locales/ko/messages.json +++ b/extension/_locales/ko/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "YouTube, Netflix, Emby, Jellyfin 및 모든 HTML5 사이트에서 친구들과 실시간으로 비디오 재생을 동기화하세요." + "message": "비공개 Watch Party를 만들고 YouTube, Netflix, Jellyfin, Emby 및 거의 모든 HTML5 사이트에서 친구들과 영상을 동기화하세요." } } diff --git a/extension/_locales/nl/messages.json b/extension/_locales/nl/messages.json index ab97481..feb4563 100644 --- a/extension/_locales/nl/messages.json +++ b/extension/_locales/nl/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Synchroniseer video-afspelen op YouTube, Netflix, Emby, Jellyfin en elke HTML5-site in realtime met vrienden." + "message": "Maak privéwatchparty's en kijk synchroon met vrienden op YouTube, Netflix, Jellyfin, Emby en vrijwel elke HTML5-website." } } diff --git a/extension/_locales/pl/messages.json b/extension/_locales/pl/messages.json index e13b068..8f50d12 100644 --- a/extension/_locales/pl/messages.json +++ b/extension/_locales/pl/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Synchronizuj odtwarzanie wideo na YouTube, Netflix, Emby, Jellyfin i dowolnej stronie HTML5 w czasie rzeczywistym ze znajomymi." + "message": "Twórz prywatne wspólne seanse i synchronizuj filmy ze znajomymi na YouTube, Netflix, Jellyfin, Emby i niemal każdej stronie HTML5." } } diff --git a/extension/_locales/pt_BR/messages.json b/extension/_locales/pt_BR/messages.json index 7c3103e..5c2cbee 100644 --- a/extension/_locales/pt_BR/messages.json +++ b/extension/_locales/pt_BR/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Assista a vídeos junto com seus amigos em sincronia perfeita. Compatível com Netflix, YouTube, Twitch, Prime Video, Disney+ e qualquer player HTML5." + "message": "Crie watch parties privadas e sincronize vídeos com amigos no YouTube, Netflix, Jellyfin, Emby e em quase qualquer site HTML5." } } diff --git a/extension/_locales/pt_PT/messages.json b/extension/_locales/pt_PT/messages.json index 506b8a3..d4285a4 100644 --- a/extension/_locales/pt_PT/messages.json +++ b/extension/_locales/pt_PT/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Veja vídeos em conjunto com os seus amigos em sincronia perfeita. Compatível com Netflix, YouTube, Twitch, Prime Video, Disney+ e qualquer leitor HTML5." + "message": "Crie sessões privadas e veja vídeos sincronizados com amigos no YouTube, Netflix, Jellyfin, Emby e em quase qualquer site HTML5." } } diff --git a/extension/_locales/ru/messages.json b/extension/_locales/ru/messages.json index ff73697..5360023 100644 --- a/extension/_locales/ru/messages.json +++ b/extension/_locales/ru/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Синхронизируйте воспроизведение видео на YouTube, Netflix, Emby, Jellyfin и любых HTML5-сайтах в реальном времени с друзьями." + "message": "Создавайте закрытые Watch Party и смотрите синхронно с друзьями на YouTube, Netflix, Jellyfin, Emby и почти любом сайте HTML5." } } diff --git a/extension/_locales/tr/messages.json b/extension/_locales/tr/messages.json index 7641824..236642c 100644 --- a/extension/_locales/tr/messages.json +++ b/extension/_locales/tr/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "YouTube, Netflix, Emby, Jellyfin ve herhangi bir HTML5 sitesinde video oynatmayı arkadaşlarınızla gerçek zamanlı olarak senkronize edin." + "message": "Özel izleme partileri kurun; YouTube, Netflix, Jellyfin, Emby ve çoğu HTML5 sitesinde arkadaşlarınızla senkron izleyin." } } diff --git a/extension/_locales/uk/messages.json b/extension/_locales/uk/messages.json index 4e1fea2..8aee6c0 100644 --- a/extension/_locales/uk/messages.json +++ b/extension/_locales/uk/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "Синхронізуйте відтворення відео на YouTube, Netflix, Emby, Jellyfin і будь-якому сайті HTML5 у режимі реального часу з друзями." + "message": "Створюйте закриті Watch Party й дивіться синхронно з друзями на YouTube, Netflix, Jellyfin, Emby та майже будь-якому сайті HTML5." } } diff --git a/extension/_locales/zh_CN/messages.json b/extension/_locales/zh_CN/messages.json index 8b40486..6717048 100644 --- a/extension/_locales/zh_CN/messages.json +++ b/extension/_locales/zh_CN/messages.json @@ -1,8 +1,8 @@ { "appName": { - "message": "KoalaSync" + "message": "Watch Party - KoalaSync" }, "appDesc": { - "message": "与朋友实时同步YouTube、Netflix、Emby、Jellyfin和任何HTML5网站上的视频播放。" + "message": "创建私人观影派对,与好友在 YouTube、Netflix、Jellyfin、Emby 及几乎任何 HTML5 视频网站同步观看。" } } diff --git a/extension/manifest.base.json b/extension/manifest.base.json index aa61218..3948b08 100644 --- a/extension/manifest.base.json +++ b/extension/manifest.base.json @@ -1,9 +1,10 @@ { "manifest_version": 3, "default_locale": "en", - "name": "KoalaSync", + "name": "__MSG_appName__", + "short_name": "KoalaSync", "version": "2.6.3", - "description": "Synchronize video playback on YouTube, Netflix, Emby, Jellyfin, and any HTML5 site in real-time with friends.", + "description": "__MSG_appDesc__", "permissions": [ "storage", "tabs", diff --git a/scripts/build-extension.cjs b/scripts/build-extension.cjs index b5d9ac6..2fa56ae 100644 --- a/scripts/build-extension.cjs +++ b/scripts/build-extension.cjs @@ -6,6 +6,59 @@ const rootDir = path.join(__dirname, '..'); const extDir = path.join(rootDir, 'extension'); const distDir = path.join(rootDir, 'dist'); const baseManifestPath = path.join(extDir, 'manifest.base.json'); +const localesDir = path.join(extDir, '_locales'); +const requiredAppName = 'Watch Party - KoalaSync'; +const maxAppNameLength = 75; +const maxAppDescLength = 132; + +function countUnicodeCharacters(value) { + return Array.from(value).length; +} + +function validateExtensionMetadata() { + const localeDirectories = fs.readdirSync(localesDir, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name) + .sort(); + + for (const locale of localeDirectories) { + const messagesPath = path.join(localesDir, locale, 'messages.json'); + let messages; + + try { + messages = JSON.parse(fs.readFileSync(messagesPath, 'utf8')); + } catch (error) { + throw new Error(`CRITICAL: Invalid locale JSON at _locales/${locale}/messages.json: ${error.message}`); + } + + if (!messages || typeof messages !== 'object' || Array.isArray(messages)) { + throw new Error(`CRITICAL: _locales/${locale}/messages.json must contain a JSON object`); + } + + for (const key of ['appName', 'appDesc']) { + if (!messages[key] || typeof messages[key].message !== 'string' || messages[key].message.trim().length === 0) { + throw new Error(`CRITICAL: _locales/${locale}/messages.json is missing a valid ${key}.message`); + } + } + + const appNameLength = countUnicodeCharacters(messages.appName.message); + const appDescLength = countUnicodeCharacters(messages.appDesc.message); + + if (appNameLength > maxAppNameLength) { + throw new Error(`CRITICAL: _locales/${locale}/messages.json appName.message is ${appNameLength} characters; maximum is ${maxAppNameLength}`); + } + if (messages.appName.message !== requiredAppName) { + throw new Error(`CRITICAL: _locales/${locale}/messages.json appName.message must exactly equal "${requiredAppName}"`); + } + if (appDescLength > maxAppDescLength) { + throw new Error(`CRITICAL: _locales/${locale}/messages.json appDesc.message is ${appDescLength} characters; maximum is ${maxAppDescLength}`); + } + } + + console.log(`✓ Validated localized extension metadata for ${localeDirectories.length} locales`); +} + +validateExtensionMetadata(); // Ensure dist directory exists if (fs.existsSync(distDir)) {