aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Kitaev <mbg033@gmail.com>2016-07-19 23:31:09 +0300
committerIlya Kitaev <mbg033@gmail.com>2016-07-19 23:31:09 +0300
commita9339838ac295a4d045433c1b20fd5666fb35575 (patch)
treead96d028753913fcee5c1a074dbf55562b527fbd
parentde7bd2eb971e9a0a796728599478330454bc13a6 (diff)
downloadmonzero-gui-a9339838ac295a4d045433c1b20fd5666fb35575.tar.gz
monzero-gui-a9339838ac295a4d045433c1b20fd5666fb35575.tar.xz
monzero-gui-a9339838ac295a4d045433c1b20fd5666fb35575.zip
TranslationManager, Russian translation example
-rw-r--r--TranslationManager.cpp63
-rw-r--r--TranslationManager.h29
-rwxr-xr-xget_libwallet_api.sh2
-rw-r--r--lang/languages.xml33
-rw-r--r--main.cpp11
-rw-r--r--monero-core.pro18
-rw-r--r--translations/monero-core_de.ts5
-rw-r--r--translations/monero-core_en.ts5
-rw-r--r--translations/monero-core_it.ts5
-rw-r--r--translations/monero-core_pl.ts5
-rw-r--r--translations/monero-core_ru.ts11
-rw-r--r--translations/monero-core_zh.ts5
-rw-r--r--wizard/WizardWelcome.qml39
13 files changed, 192 insertions, 39 deletions
diff --git a/TranslationManager.cpp b/TranslationManager.cpp
new file mode 100644
index 00000000..69448ce2
--- /dev/null
+++ b/TranslationManager.cpp
@@ -0,0 +1,63 @@
+#include "TranslationManager.h"
+
+#include <QApplication>
+#include <QTranslator>
+#include <QDir>
+#include <QDebug>
+#include <QFileInfo>
+
+
+TranslationManager * TranslationManager::m_instance = nullptr;
+
+
+TranslationManager::TranslationManager(QObject *parent) : QObject(parent)
+{
+ m_translator = new QTranslator(this);
+}
+
+bool TranslationManager::setLanguage(const QString &language)
+{
+ qDebug() << __FUNCTION__ << " " << language;
+ // if language is "en", remove translator
+ if (language.toLower() == "en") {
+ qApp->removeTranslator(m_translator);
+ emit languageChanged();
+ return true;
+ }
+
+ // we expecting to have translation files in "i18n" directory
+ QString dir = qApp->applicationDirPath() + QDir::separator() + "i18n";
+
+ QString filename = "monero-core_" + language;
+
+ qDebug("%s: loading translation file '%s' from '%s",
+ __FUNCTION__, qPrintable(filename), qPrintable(dir));
+
+
+ if (m_translator->load(filename, dir)) {
+ qDebug("%s: translation for language '%s' loaded successfully",
+ __FUNCTION__, qPrintable(language));
+ // TODO: apply locale?
+ qApp->installTranslator(m_translator);
+ emit languageChanged();
+ return true;
+ } else {
+ qCritical("%s: error loading translation for language '%s'",
+ __FUNCTION__, qPrintable(language));
+ return false;
+ }
+}
+
+TranslationManager *TranslationManager::instance()
+{
+ if (!m_instance) {
+ m_instance = new TranslationManager();
+ }
+ return m_instance;
+}
+
+QString TranslationManager::emptyString()
+{
+ return "";
+}
+
diff --git a/TranslationManager.h b/TranslationManager.h
new file mode 100644
index 00000000..94d0e50e
--- /dev/null
+++ b/TranslationManager.h
@@ -0,0 +1,29 @@
+#ifndef TRANSLATIONMANAGER_H
+#define TRANSLATIONMANAGER_H
+
+#include <QObject>
+
+class QTranslator;
+class TranslationManager : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString emptyString READ emptyString NOTIFY languageChanged)
+public:
+ Q_INVOKABLE bool setLanguage(const QString &language);
+ static TranslationManager *instance();
+
+ QString emptyString();
+
+signals:
+ void languageChanged();
+
+private:
+ explicit TranslationManager(QObject *parent = 0);
+
+private:
+ static TranslationManager * m_instance;
+ QTranslator * m_translator;
+
+};
+
+#endif // TRANSLATIONMANAGER_H
diff --git a/get_libwallet_api.sh b/get_libwallet_api.sh
index 9e69235e..53ae9268 100755
--- a/get_libwallet_api.sh
+++ b/get_libwallet_api.sh
@@ -2,7 +2,7 @@
BITMONERO_URL=https://github.com/mbg033/bitmonero.git
-BITMONERO_BRANCH=devel
+BITMONERO_BRANCH=master
# thanks to SO: http://stackoverflow.com/a/20283965/4118915
CPU_CORE_COUNT=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
pushd $(pwd)
diff --git a/lang/languages.xml b/lang/languages.xml
index 8f5120a7..cc47eaa1 100644
--- a/lang/languages.xml
+++ b/lang/languages.xml
@@ -1,14 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<languages>
- <language display_name="US English" locale="en_US" wallet_name="English" flag="/lang/flags/usa.png" qs="none"/>
- <language display_name="UK English" locale="en_GB" wallet_name="English" flag="/lang/flags/uk.png" qs="none"/>
- <language display_name="Russia" locale="ru_RU" wallet_name="English" flag="/lang/flags/russia.png" qs="none"/>
- <language display_name="RPA" locale="TODO" wallet_name="English" flag="/lang/flags/rpa.png" qs="none"/>
- <language display_name="Palestine" locale="TODO" wallet_name="English" flag="/lang/flags/palestine.png" qs="none"/>
- <language display_name="India" locale="hi_IN" wallet_name="English" flag="/lang/flags/india.png" qs="none"/>
- <language display_name="Italy" locale="it_IT" wallet_name="English" flag="/lang/flags/italy.png" qs="none"/>
- <language display_name="German" locale="de_DE" wallet_name="English" flag="/lang/flags/german.png" qs="none"/>
- <language display_name="China" locale="zh_CN" wallet_name="English" flag="/lang/flags/china.png" qs="none"/>
- <language display_name="Brazil" locale="pt_BR" wallet_name="English" flag="/lang/flags/brazil.png" qs="none"/>
- <language display_name="Bangladesh" locale="TODO" wallet_name="English" flag="/lang/flags/bangladesh.png" qs="none"/>
+
+<!--
+List of available languages for your wallet's seed:
+0 : English
+1 : Spanish
+2 : German
+3 : Italian
+4 : Portuguese
+5 : Russian
+6 : Japanese
+-->
+ <language display_name="US English" locale="en_US" wallet_language="English" flag="/lang/flags/usa.png" qs="none"/>
+ <language display_name="UK English" locale="en_GB" wallet_language="English" flag="/lang/flags/uk.png" qs="none"/>
+ <language display_name="Russia" locale="ru_RU" wallet_language="Russian" flag="/lang/flags/russia.png" qs="none"/>
+ <language display_name="RPA" locale="en_SA" wallet_language="English" flag="/lang/flags/rpa.png" qs="none"/>
+ <language display_name="Palestine" locale="ar_PS" wallet_language="English" flag="/lang/flags/palestine.png" qs="none"/>
+ <language display_name="India" locale="hi_IN" wallet_language="English" flag="/lang/flags/india.png" qs="none"/>
+ <language display_name="Italy" locale="it_IT" wallet_language="Italian" flag="/lang/flags/italy.png" qs="none"/>
+ <language display_name="German" locale="de_DE" wallet_language="German" flag="/lang/flags/german.png" qs="none"/>
+ <language display_name="China" locale="zh_CN" wallet_language="English" flag="/lang/flags/china.png" qs="none"/>
+ <language display_name="Brazil" locale="pt_BR" wallet_language="Portuguese" flag="/lang/flags/brazil.png" qs="none"/>
+ <language display_name="Bangladesh" locale="en_US" wallet_language="English" flag="/lang/flags/bangladesh.png" qs="none"/>
</languages>
diff --git a/main.cpp b/main.cpp
index 43ef8186..030a21c3 100644
--- a/main.cpp
+++ b/main.cpp
@@ -37,6 +37,7 @@
#include "WalletManager.h"
#include "Wallet.h"
#include "PendingTransaction.h"
+#include "TranslationManager.h"
@@ -53,10 +54,18 @@ int main(int argc, char *argv[])
app.installEventFilter(eventFilter);
qmlRegisterType<clipboardAdapter>("moneroComponents", 1, 0, "Clipboard");
+
qmlRegisterUncreatableType<Wallet>("Bitmonero.Wallet", 1, 0, "Wallet", "Wallet can't be instantiated directly");
+
qmlRegisterUncreatableType<PendingTransaction>("Bitmonero.PendingTransaction", 1, 0, "PendingTransaction",
"PendingTransaction can't be instantiated directly");
+ qmlRegisterUncreatableType<WalletManager>("Bitmonero.WalletManager", 1, 0, "WalletManager",
+ "WalletManager can't be instantiated directly");
+
+ qmlRegisterUncreatableType<TranslationManager>("moneroComponents", 1, 0, "TranslationManager",
+ "TranslationManager can't be instantiated directly");
+
qRegisterMetaType<PendingTransaction::Priority>();
@@ -69,6 +78,8 @@ int main(int argc, char *argv[])
engine.rootContext()->setContextProperty("walletManager", WalletManager::instance());
+ engine.rootContext()->setContextProperty("translationManager", TranslationManager::instance());
+
// export to QML monero accounts root directory
// wizard is talking about where
// to save the wallet file (.keys, .bin), they have to be user-accessible for
diff --git a/monero-core.pro b/monero-core.pro
index 845e0501..a5b170e5 100644
--- a/monero-core.pro
+++ b/monero-core.pro
@@ -19,7 +19,8 @@ HEADERS += \
src/libwalletqt/PendingTransaction.h \
src/libwalletqt/TransactionHistory.h \
src/libwalletqt/TransactionInfo.h \
- oshelper.h
+ oshelper.h \
+ TranslationManager.h
SOURCES += main.cpp \
@@ -31,7 +32,8 @@ SOURCES += main.cpp \
src/libwalletqt/PendingTransaction.cpp \
src/libwalletqt/TransactionHistory.cpp \
src/libwalletqt/TransactionInfo.cpp \
- oshelper.cpp
+ oshelper.cpp \
+ TranslationManager.cpp
lupdate_only {
SOURCES = *.qml \
@@ -101,11 +103,11 @@ macx {
# translations files;
TRANSLATIONS = $$PWD/translations/monero-core_en.ts \ # English (could be untranslated)
- $$PWD/translations/monero-core_de.ts \ # Deutsch
- $$PWD/translations/monero-core_zh.ts \ # Chineese
- $$PWD/translations/monero-core_ru.ts \ # Russian
- $$PWD/translations/monero-core_it.ts \ # Italian
- $$PWD/translations/monero-core_pl.ts \ # Polish
+ $$PWD/translations/monero-core_de.ts \ # Deutsch
+ $$PWD/translations/monero-core_zh.ts \ # Chineese
+ $$PWD/translations/monero-core_ru.ts \ # Russian
+ $$PWD/translations/monero-core_it.ts \ # Italian
+ $$PWD/translations/monero-core_pl.ts \ # Polish
@@ -117,7 +119,7 @@ trans_update.depends = $$_PRO_FILE_
trans_release.commands = lrelease $$_PRO_FILE_
trans_release.depends = trans_update $$TRANSLATIONS
-translate.commands = $(COPY) $$PWD/*.qm ${DESTDIR}
+translate.commands = $(MKDIR) ${DESTDIR}/i18n && $(COPY) $$PWD/translations/*.qm ${DESTDIR}/i18n
translate.depends = trans_release
QMAKE_EXTRA_TARGETS += trans_update trans_release translate
diff --git a/translations/monero-core_de.ts b/translations/monero-core_de.ts
index 09e96e70..53c8bef3 100644
--- a/translations/monero-core_de.ts
+++ b/translations/monero-core_de.ts
@@ -666,12 +666,13 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/monero-core_en.ts b/translations/monero-core_en.ts
index 307233ba..957bfdd0 100644
--- a/translations/monero-core_en.ts
+++ b/translations/monero-core_en.ts
@@ -666,12 +666,13 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/monero-core_it.ts b/translations/monero-core_it.ts
index e59d65eb..a24a0501 100644
--- a/translations/monero-core_it.ts
+++ b/translations/monero-core_it.ts
@@ -666,12 +666,13 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/monero-core_pl.ts b/translations/monero-core_pl.ts
index 237bf62b..67e8a0aa 100644
--- a/translations/monero-core_pl.ts
+++ b/translations/monero-core_pl.ts
@@ -666,12 +666,13 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/translations/monero-core_ru.ts b/translations/monero-core_ru.ts
index a5c61585..ab0d509c 100644
--- a/translations/monero-core_ru.ts
+++ b/translations/monero-core_ru.ts
@@ -6,7 +6,7 @@
<message>
<location filename="../pages/AddressBook.qml" line="47"/>
<source>Add new entry</source>
- <translation type="unfinished"></translation>
+ <translation>Новая запись</translation>
</message>
<message>
<location filename="../pages/AddressBook.qml" line="56"/>
@@ -666,14 +666,15 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
- <translation type="unfinished"></translation>
+ <translation>Добро пожаловать</translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
- <translation type="unfinished"></translation>
+ <translation>Пожалуйста выберите язык и региональный формат.</translation>
</message>
</context>
<context>
diff --git a/translations/monero-core_zh.ts b/translations/monero-core_zh.ts
index 5dc6440a..d47f1c24 100644
--- a/translations/monero-core_zh.ts
+++ b/translations/monero-core_zh.ts
@@ -666,12 +666,13 @@
<context>
<name>WizardWelcome</name>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="65"/>
+ <location filename="../wizard/WizardWelcome.qml" line="49"/>
+ <location filename="../wizard/WizardWelcome.qml" line="73"/>
<source>Welcome</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../wizard/WizardWelcome.qml" line="76"/>
+ <location filename="../wizard/WizardWelcome.qml" line="86"/>
<source>Please choose a language and regional format.</source>
<translation type="unfinished"></translation>
</message>
diff --git a/wizard/WizardWelcome.qml b/wizard/WizardWelcome.qml
index 31bdbcb7..72bf27cc 100644
--- a/wizard/WizardWelcome.qml
+++ b/wizard/WizardWelcome.qml
@@ -39,11 +39,25 @@ Item {
function onPageClosed(settingsObject) {
var lang = languagesModel.get(gridView.currentIndex);
settingsObject['language'] = lang.display_name;
- settingsObject['wallet_language'] = lang.wallet_name;
+ settingsObject['wallet_language'] = lang.wallet_language;
settingsObject['locale'] = lang.locale;
return true
}
+
+// function retranslateUi() {
+// welcomeText.text = qsTr("Welcome")
+// }
+
+
+// Connections {
+// target: translationManager
+// onEmptyStringChanged: {
+// console.log("languageChanged")
+// retranslateUi()
+// }
+// }
+
Column {
id: headerColumn
anchors.left: parent.left
@@ -55,6 +69,7 @@ Item {
spacing: 24
Text {
+ id: welcomeText
anchors.left: parent.left
anchors.right: parent.right
font.family: "Arial"
@@ -62,10 +77,14 @@ Item {
//renderType: Text.NativeRendering
color: "#3F3F3F"
wrapMode: Text.Wrap
- text: qsTr("Welcome")
+ // hack to implement dynamic translation
+ // https://wiki.qt.io/How_to_do_dynamic_translation_in_QML
+ text: qsTr("Welcome") +
+ translationManager.emptyString
}
Text {
+ id: selectLanguageText
anchors.left: parent.left
anchors.right: parent.right
font.family: "Arial"
@@ -74,6 +93,7 @@ Item {
color: "#4A4646"
wrapMode: Text.Wrap
text: qsTr("Please choose a language and regional format.")
+ + translationManager.emptyString
}
}
@@ -84,11 +104,13 @@ Item {
XmlRole { name: "display_name"; query: "@display_name/string()" }
XmlRole { name: "locale"; query: "@locale/string()" }
- XmlRole { name: "wallet_name"; query: "@wallet_name/string()" }
+ XmlRole { name: "wallet_language"; query: "@wallet_language/string()" }
XmlRole { name: "flag"; query: "@flag/string()" }
// TODO: XmlListModel is read only, we should store current language somewhere else
// and set current language accordingly
XmlRole { name: "isCurrent"; query: "@enabled/string()" }
+
+
}
GridView {
@@ -111,6 +133,8 @@ Item {
height: gridView.cellHeight
+
+
Rectangle {
id: flagRect
width: 60; height: 60
@@ -139,8 +163,15 @@ Item {
anchors.fill: parent
onClicked: {
gridView.currentIndex = index
+ var data = languagesModel.get(gridView.currentIndex);
+ if (data !== null || data !== undefined) {
+ var locale = data.locale
+ translationManager.setLanguage(locale.split("_")[0]);
+ }
}
}
- }
+ } // delegate
+
+
}
}