From 15decd2ab670a01dbbbbdf459fb97e116cdcb1c3 Mon Sep 17 00:00:00 2001 From: Russell Ballestrini Date: Sat, 3 Jan 2026 12:56:33 -0500 Subject: [PATCH] Force UNCLOSEAI_LANGUAGE to override user setting and disable selector --- public/src/config.js | 21 +++++++------- public/src/uncloseai-embed-modal.js | 45 ++++++++++++++++++----------- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/public/src/config.js b/public/src/config.js index 4b5a33d..e40d4e7 100644 --- a/public/src/config.js +++ b/public/src/config.js @@ -26,17 +26,18 @@ export async function getSystemMessage() { const shouldReplace = typeof window !== "undefined" && window.UNCLOSEAI_SYSTEM_PROMPT_REPLACE === true; // Get user's language preference - // Priority: localStorage > window.UNCLOSEAI_LANGUAGE > "en" + // Priority: window.UNCLOSEAI_LANGUAGE (forced by embed) > localStorage > "en" let userLang = "en"; - try { - const storedLang = localStorage.getItem("uncloseai_language"); - const embedLang = (typeof window !== "undefined" && window.UNCLOSEAI_LANGUAGE) ? window.UNCLOSEAI_LANGUAGE : null; - userLang = storedLang || embedLang || "en"; - } catch (error) { - console.warn("Failed to read language preference:", error); - // Fall back to embed config if localStorage fails - if (typeof window !== "undefined" && window.UNCLOSEAI_LANGUAGE) { - userLang = window.UNCLOSEAI_LANGUAGE; + const embedLang = (typeof window !== "undefined" && window.UNCLOSEAI_LANGUAGE) ? window.UNCLOSEAI_LANGUAGE : null; + + // If embed forces a language, always use it (no user override) + if (embedLang) { + userLang = embedLang; + } else { + try { + userLang = localStorage.getItem("uncloseai_language") || "en"; + } catch (error) { + console.warn("Failed to read language preference:", error); } } diff --git a/public/src/uncloseai-embed-modal.js b/public/src/uncloseai-embed-modal.js index b1124cd..8d8a2a3 100644 --- a/public/src/uncloseai-embed-modal.js +++ b/public/src/uncloseai-embed-modal.js @@ -445,12 +445,21 @@ async function openUncloseaiEmbeddedModalNew() { const { SUPPORTED_LANGUAGES, NATIVE_LANGUAGE_NAMES } = await import( "./translation.js" ); - const currentLang = getUserLanguagePreference(); + + // Check if language is forced by embed config + const forcedLang = (typeof window !== "undefined" && window.UNCLOSEAI_LANGUAGE) ? window.UNCLOSEAI_LANGUAGE : null; + const currentLang = forcedLang || getUserLanguagePreference(); const languageSelect = document.createElement("select"); languageSelect.id = "hermes-language-select"; languageSelect.className = "uncloseai-modal-select"; + // If language is forced, disable the selector + if (forcedLang) { + languageSelect.disabled = true; + languageSelect.title = "Language is set by this site"; + } + // Add options for each supported language Object.entries(SUPPORTED_LANGUAGES).forEach(([code, englishName]) => { const option = document.createElement("option"); @@ -465,24 +474,26 @@ async function openUncloseaiEmbeddedModalNew() { languageSelect.appendChild(option); }); - // Handle language change - languageSelect.onchange = () => { - const newLang = languageSelect.value; - setUserLanguagePreference(newLang); + // Handle language change (only if not forced) + if (!forcedLang) { + languageSelect.onchange = () => { + const newLang = languageSelect.value; + setUserLanguagePreference(newLang); - // Show confirmation - const selectedOption = languageSelect.options[languageSelect.selectedIndex]; - console.log(`Language changed to: ${selectedOption.textContent}`); - - // Refresh all UI text in the modal - refreshModalUI(); + // Show confirmation + const selectedOption = languageSelect.options[languageSelect.selectedIndex]; + console.log(`Language changed to: ${selectedOption.textContent}`); - // Notify user to refresh for full effect - setTimeout(() => { - const langName = SUPPORTED_LANGUAGES[newLang]; - alert(getUIText("languageChanged", { lang: langName })); - }, 100); - }; + // Refresh all UI text in the modal + refreshModalUI(); + + // Notify user to refresh for full effect + setTimeout(() => { + const langName = SUPPORTED_LANGUAGES[newLang]; + alert(getUIText("languageChanged", { lang: langName })); + }, 100); + }; + } languageSection.appendChild(languageSelect);