Force UNCLOSEAI_LANGUAGE to override user setting and disable selector

This commit is contained in:
Russell Ballestrini 2026-01-03 12:56:33 -05:00
parent f7adaa1d74
commit 15decd2ab6
2 changed files with 39 additions and 27 deletions

View file

@ -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);
}
}

View file

@ -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);