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