diff --git a/doc/help.htm b/doc/help.htm
index f01be6c..82dcb55 100644
--- a/doc/help.htm
+++ b/doc/help.htm
@@ -182,6 +182,14 @@
(qget *quick-view* |width|)
+qinstall-translator (language)
+
+ Only needed for changing the UI language at runtime.
+ Returns the passed language string if successful.
+
+ (qinstall-translator "es") ; assumes file 'es.qm' (spanish) is present in 'i18n/'
+
+
qjs (function item/name &rest arguments)
Fast and convenient way to call JS functions defined in QML. You may pass
diff --git a/src/cpp/ecl_ext.cpp b/src/cpp/ecl_ext.cpp
index 0a5b19e..ead41b8 100644
--- a/src/cpp/ecl_ext.cpp
+++ b/src/cpp/ecl_ext.cpp
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -47,6 +48,7 @@ void iniCLFunctions() {
DEFUN ("%qfind-children", qfind_children2, 3)
DEFUN ("qfrom-utf8", qfrom_utf8, 1)
DEFUN ("qto-utf8", qto_utf8, 1)
+ DEFUN ("qinstall-translator", qinstall_translator, 1)
DEFUN ("qinvoke-method", qinvoke_method, 4)
DEFUN ("%qload-c++", qload_cpp, 2)
DEFUN ("qload-rc", qload_rc, 1)
@@ -490,6 +492,27 @@ cl_object qnull(cl_object l_arg) {
ecl_return1(ecl_process_env(), (qobject == nullptr) ? ECL_T : ECL_NIL);
}
+cl_object qinstall_translator(cl_object l_lang) {
+ /// args: (language)
+ /// Only needed for changing the UI language at runtime.
+ /// Returns the passed language string if successful.
+ /// (qinstall-translator "es") ; assumes file 'es.qm' (spanish) is present in 'i18n/'
+ ecl_process_env()->nvalues = 1;
+ QString lang(toQString(l_lang));
+ if (!lang.isEmpty()) {
+ QTranslator translator;
+ QString trFile(QDir::currentPath() + "/i18n");
+ if ((QFile::exists(trFile) && translator.load(QLocale(lang), QString(), QString(), trFile))
+ || translator.load(QLocale(lang), QString(), QString(), ":/i18n")) {
+ QCoreApplication::installTranslator(&translator);
+ LQML::quickView->engine()->retranslate();
+ return l_lang;
+ }
+ }
+ error_msg("QINSTALL-TRANSLATOR", LIST1(l_lang));
+ return ECL_NIL;
+}
+
cl_object qinvoke_method(cl_object l_obj, cl_object l_name, cl_object l_args, cl_object l_qjs_call) {
// for internal use: this is used to call user defined JS functions, and to
// call user defined Qt/C++ plugin functions.
diff --git a/src/cpp/ecl_ext.h b/src/cpp/ecl_ext.h
index b1918e0..d42adae 100644
--- a/src/cpp/ecl_ext.h
+++ b/src/cpp/ecl_ext.h
@@ -65,6 +65,7 @@ cl_object qfind_child (cl_object, cl_object);
cl_object qfind_children2 (cl_object, cl_object, cl_object);
cl_object qfrom_utf8 (cl_object);
cl_object qto_utf8 (cl_object);
+cl_object qinstall_translator (cl_object);
cl_object qinvoke_method (cl_object, cl_object, cl_object, cl_object);
cl_object qload_cpp (cl_object, cl_object);
cl_object qload_rc (cl_object);
diff --git a/src/lisp/ecl-ext.lisp b/src/lisp/ecl-ext.lisp
index 4aac102..ca96edd 100644
--- a/src/lisp/ecl-ext.lisp
+++ b/src/lisp/ecl-ext.lisp
@@ -18,6 +18,7 @@
(defun qfind-child (a b))
(defun %qfind-children (a b c))
(defun qfrom-utf8 (a))
+(defun qinstall-translator (a))
(defun qinvoke-method (a b c d))
(defun %qload-c++ (a b))
(defun %qlog (a))
diff --git a/src/lisp/package.lisp b/src/lisp/package.lisp
index 06c45e6..452d9f1 100644
--- a/src/lisp/package.lisp
+++ b/src/lisp/package.lisp
@@ -37,6 +37,7 @@
#:qexit
#:qfrom-utf8
#:qget
+ #:qinstall-translator
#:qset
#:qlater
#:qlater-sequence