diff --git a/src/gui/src/IPC.js b/src/gui/src/IPC.js index d27188b9b..8920ff45e 100644 --- a/src/gui/src/IPC.js +++ b/src/gui/src/IPC.js @@ -247,6 +247,16 @@ const ipc_listener = async (event, handled) => { }, '*'); } //-------------------------------------------------------- + // getLanguage + //-------------------------------------------------------- + else if(event.data.msg === 'getLanguage'){ + target_iframe.contentWindow.postMessage({ + original_msg_id: msg_id, + msg: 'languageReceived', + language: window.locale || 'en', + }, '*'); + } + //-------------------------------------------------------- // socialShare //-------------------------------------------------------- else if(event.data.msg === 'socialShare' && event.data.url !== undefined){ diff --git a/src/puter-js/src/modules/UI.js b/src/puter-js/src/modules/UI.js index 7b83ce52a..d09365006 100644 --- a/src/puter-js/src/modules/UI.js +++ b/src/puter-js/src/modules/UI.js @@ -467,6 +467,10 @@ class UI extends EventListener { // execute callback this.#callbackFunctions[e.data.original_msg_id](e.data.response); } + else if(e.data.msg === 'languageReceived'){ + // execute callback + this.#callbackFunctions[e.data.original_msg_id](e.data.language); + } else if(e.data.msg === "fileSaved"){ // execute callback this.#callbackFunctions[e.data.original_msg_id](new FSItem(e.data.saved_file)); @@ -1526,6 +1530,21 @@ class UI extends EventListener { isWorkingActive() { return this.#overlayActive; } + + /** + * Gets the current language/locale code (e.g., 'en', 'fr', 'es'). + * + * @returns {Promise} A promise that resolves with the current language code. + * + * @example + * const currentLang = await puter.ui.getLanguage(); + * console.log(`Current language: ${currentLang}`); // e.g., "Current language: fr" + */ + getLanguage() { + return new Promise((resolve) => { + this.#postMessageWithCallback('getLanguage', resolve, {}); + }); + } } export default UI