Adds automatic translations loaders for LXQt libs and apps
authorLuís Pereira <luis.artur.pereira@gmail.com>
Tue, 28 Oct 2014 21:50:13 +0000 (14:50 -0700)
committerLuís Pereira <luis.artur.pereira@gmail.com>
Tue, 28 Oct 2014 22:22:44 +0000 (15:22 -0700)
It enables "automatic" translation loading in LXQt Qt5 apps
and libs. They generate a .cpp file that takes care of everything. The
user doesn't have to do anything in the source code.

CMakeLists.txt
cmake/modules/LXQtAppTranslationLoader.cpp.in [new file with mode: 0644]
cmake/modules/LXQtLibTranslationLoader.cpp.in [new file with mode: 0644]
cmake/modules/LXQtTranslationLoader.cmake [new file with mode: 0644]

index 3c6a02a..ff5ccac 100644 (file)
@@ -265,7 +265,11 @@ install(EXPORT
     COMPONENT Devel
 )
 
-file(GLOB toInstallModules "${PROJECT_SOURCE_DIR}/cmake/modules/*.cmake")
+file(GLOB toInstallModules
+    "${PROJECT_SOURCE_DIR}/cmake/modules/*.cmake"
+    "${PROJECT_SOURCE_DIR}/cmake/modules/*.in"
+)
+
 install(
     FILES ${toInstallModules}
     DESTINATION  "${LXQT_INSTALL_CMAKE_DIR}/${LXQT_LIBRARY_NAME}/modules"
diff --git a/cmake/modules/LXQtAppTranslationLoader.cpp.in b/cmake/modules/LXQtAppTranslationLoader.cpp.in
new file mode 100644 (file)
index 0000000..7ec7644
--- /dev/null
@@ -0,0 +1,15 @@
+/* This file has been generated by the CMake lxqt_app_translation_loader().
+ * It loads LXQt application translations.
+ *
+ * Attention: All changes will be overwritten!!!
+ */
+
+#include <QCoreApplication>
+#include <LXQt/Translator>
+
+static void loadAppTranslation()
+{
+    LxQt::Translator::translateApplication(QStringLiteral("@catalog_name@"));
+}
+
+Q_COREAPP_STARTUP_FUNCTION(loadAppTranslation)
diff --git a/cmake/modules/LXQtLibTranslationLoader.cpp.in b/cmake/modules/LXQtLibTranslationLoader.cpp.in
new file mode 100644 (file)
index 0000000..4e5efca
--- /dev/null
@@ -0,0 +1,15 @@
+/* This file has been generated by the CMake lxqt_app_translation_loader().
+ * It loads LXQt libraries translations.
+ *
+ * Attention: All changes will be overwritten!!!
+ */
+
+#include <QCoreApplication>
+#include <LXQt/Translator>
+
+static void loadLibTranslation()
+{
+    LxQt::Translator::translateLibrary(QStringLiteral("@catalog_name@"));
+}
+
+Q_COREAPP_STARTUP_FUNCTION(loadLibTranslation)
diff --git a/cmake/modules/LXQtTranslationLoader.cmake b/cmake/modules/LXQtTranslationLoader.cmake
new file mode 100644 (file)
index 0000000..c619e14
--- /dev/null
@@ -0,0 +1,61 @@
+#=============================================================================
+# Copyright 2014 Luís Pereira <luis.artur.pereira@gmail.com>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+#
+# These functions enables "automatic" translation loading in LXQt Qt5 apps
+#   and libs. They generate a .cpp file that takes care of everything. The
+#   user doesn't have to do anything in the source code.
+#
+# Typical use:
+#   include(LXQtTranslationLoader)
+#   lxqt_app_translation_loader(lxqt-app_QM_LOADER ${PROJECT_NAME})
+#   add_executable(${PROJECT_NAME}
+#       ${lxqt-app_QM_LOADER}
+#       ...
+#   )
+
+
+# lxqt_app_translation_loader(<source_files> <catalog_name>)
+#       <source_files> The generated .cpp file is added to <source_files>
+#       <catalog_name> Translations catalog to be loaded
+function(lxqt_app_translation_loader source_files catalog_name)
+    configure_file(
+        ${LXQT_CMAKE_MODULES_DIR}/LXQtAppTranslationLoader.cpp.in
+        LXQtAppTranslationLoader.cpp @ONLY
+    )
+    set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/LXQtAppTranslationLoader.cpp PARENT_SCOPE)
+endfunction()
+
+# lxqt_lib_translation_loader(<source_files> <catalog_name>)
+#       <source_files> The generated .cpp file is added to <source_files>
+#       <catalog_name> Translations catalog to be loaded
+function(lxqt_lib_translation_loader source_files catalog_name)
+    configure_file(
+        ${LXQT_CMAKE_MODULES_DIR}/LXQtLibTranslationLoader.cpp.in
+        LXQtLibTranslationLoader.cpp @ONLY
+    )
+    set(${source_files} ${${source_files}} ${CMAKE_CURRENT_BINARY_DIR}/LXQtLibTranslationLoader.cpp PARENT_SCOPE)
+endfunction()