[vlc-commits] qml: add support for i18n through vlc_gettext
Pierre Lamot
git at videolan.org
Fri Jan 10 15:06:17 CET 2020
vlc | branch: master | Pierre Lamot <pierre at videolabs.io> | Mon Dec 2 15:39:43 2019 +0100| [36b3e611bdcb604198aced71b6733a4aafe99895] | committer: Jean-Baptiste Kempf
qml: add support for i18n through vlc_gettext
this way, qml files can be translated using vlc usual tools rather than
qt own tools
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=36b3e611bdcb604198aced71b6733a4aafe99895
---
modules/gui/qt/Makefile.am | 2 ++
modules/gui/qt/maininterface/main_interface.cpp | 3 ++
modules/gui/qt/util/i18n.cpp | 45 +++++++++++++++++++++++++
modules/gui/qt/util/i18n.hpp | 43 +++++++++++++++++++++++
4 files changed, 93 insertions(+)
diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index ce74bb989e..47ddf08afb 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -161,6 +161,7 @@ libqt_plugin_la_SOURCES = \
gui/qt/util/audio_device_model.cpp \
gui/qt/util/audio_device_model.hpp \
gui/qt/util/imagehelper.cpp gui/qt/util/imagehelper.hpp \
+ gui/qt/util/i18n.cpp gui/qt/util/i18n.hpp \
gui/qt/util/navigation_history.cpp gui/qt/util/navigation_history.hpp \
gui/qt/util/qml_main_context.cpp \
gui/qt/util/qml_main_context.hpp \
@@ -286,6 +287,7 @@ nodist_libqt_plugin_la_SOURCES = \
gui/qt/playlist/playlist_item.moc.cpp \
gui/qt/playlist/playlist_model.moc.cpp \
gui/qt/util/audio_device_model.moc.cpp \
+ gui/qt/util/i18n.moc.cpp \
gui/qt/util/navigation_history.moc.cpp \
gui/qt/util/qml_main_context.moc.cpp \
gui/qt/util/qmleventfilter.moc.cpp \
diff --git a/modules/gui/qt/maininterface/main_interface.cpp b/modules/gui/qt/maininterface/main_interface.cpp
index 9eea5706fc..f843bab77b 100644
--- a/modules/gui/qt/maininterface/main_interface.cpp
+++ b/modules/gui/qt/maininterface/main_interface.cpp
@@ -68,6 +68,7 @@
#include "util/qml_main_context.hpp"
#include "util/qmleventfilter.hpp"
+#include "util/i18n.hpp"
#include "menus/menus.hpp" // Menu creation
@@ -386,6 +387,7 @@ void MainInterface::createMainWidget( QSettings * )
mediacenterView = new QQuickWidget(this);
mediacenterView->setClearColor(Qt::transparent);
+ I18n* i18n = new I18n(this);
NavigationHistory* navigation_history = new NavigationHistory(mediacenterView);
QmlMainContext* mainCtx = new QmlMainContext(p_intf, this, mediacenterView);
@@ -395,6 +397,7 @@ void MainInterface::createMainWidget( QSettings * )
rootCtx->setContextProperty( "history", navigation_history );
rootCtx->setContextProperty( "player", p_intf->p_sys->p_mainPlayerController );
+ rootCtx->setContextProperty( "i18n", i18n );
rootCtx->setContextProperty( "mainctx", mainCtx);
rootCtx->setContextProperty( "rootQMLView", mediacenterView);
rootCtx->setContextProperty( "rootWindow", this);
diff --git a/modules/gui/qt/util/i18n.cpp b/modules/gui/qt/util/i18n.cpp
new file mode 100644
index 0000000000..ab3ff12fb4
--- /dev/null
+++ b/modules/gui/qt/util/i18n.cpp
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Access to vlc_gettext from QML
+ ****************************************************************************
+ * Copyright (C) 2019 the VideoLAN team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "i18n.hpp"
+#include <vlc_common.h>
+#include <QDebug>
+
+#ifdef qtr
+#undef qtr
+#endif
+
+I18n::I18n(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QString I18n::qtr(const QString msgid) const
+{
+ //we need msgIdUtf8 to stay valid for the whole scope,
+ //as vlc_gettext may return the incoming pointer
+ QByteArray msgIdUtf8 = msgid.toUtf8();
+ const char * msgstr_c = vlc_gettext(msgIdUtf8.constData());
+ return QString::fromUtf8( msgstr_c );
+}
diff --git a/modules/gui/qt/util/i18n.hpp b/modules/gui/qt/util/i18n.hpp
new file mode 100644
index 0000000000..51c38b4a56
--- /dev/null
+++ b/modules/gui/qt/util/i18n.hpp
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * Access to vlc_gettext from QML
+ ****************************************************************************
+ * Copyright (C) 2019 the VideoLAN team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef I18N_HPP
+#define I18N_HPP
+
+#include <QString>
+#include <QObject>
+
+class I18n : public QObject
+{
+ Q_OBJECT
+public:
+ I18n(QObject* parent = nullptr);
+public:
+#ifdef qtr
+#undef qtr
+ Q_INVOKABLE QString qtr(QString msgid) const;
+#define qtr(i) QString::fromUtf8( vlc_gettext(i) )
+#else
+ Q_INVOKABLE QString qtr(const QString msgid) const;
+#endif
+
+};
+
+#endif // I18N_HPP
More information about the vlc-commits
mailing list