From d5a425aeffa3a477fbd91f942c21f0645c9d8573 Mon Sep 17 00:00:00 2001 From: SunderB <20426079+SunderB@users.noreply.github.com> Date: Fri, 29 Jan 2021 20:05:54 +0000 Subject: [PATCH] Fix bugs, enable all language translations --- app/gui/qt/SonicPi.qrc | 2 +- ...onic-pi_zh-Hans.ts => sonic-pi_zh_Hans.ts} | 0 app/gui/qt/main.cpp | 2 - app/gui/qt/mainwindow.cpp | 64 +++++++++-------- app/gui/qt/mainwindow.h | 3 +- app/gui/qt/ruby_help.tmpl | 18 ----- app/gui/qt/utils/lang_list.h | 20 +++--- app/gui/qt/utils/sonic_pi_i18n.cpp | 70 +++++++++++++------ app/gui/qt/utils/sonic_pi_i18n.h | 9 +-- app/gui/qt/widgets/settingswidget.cpp | 28 ++++---- app/gui/qt/widgets/settingswidget.h | 4 +- app/server/ruby/bin/qt-doc.rb | 54 +++++++------- 12 files changed, 144 insertions(+), 130 deletions(-) rename app/gui/qt/lang/{sonic-pi_zh-Hans.ts => sonic-pi_zh_Hans.ts} (100%) delete mode 100644 app/gui/qt/ruby_help.tmpl diff --git a/app/gui/qt/SonicPi.qrc b/app/gui/qt/SonicPi.qrc index 1529c8bd26..8637160a41 100644 --- a/app/gui/qt/SonicPi.qrc +++ b/app/gui/qt/SonicPi.qrc @@ -190,7 +190,7 @@ lang/sonic-pi_ug.qm lang/sonic-pi_uk.qm lang/sonic-pi_vi.qm - lang/sonic-pi_zh-Hans.qm + lang/sonic-pi_zh_Hans.qm lang/sonic-pi_zh_HK.qm lang/sonic-pi_zh.qm lang/sonic-pi_zh_TW.qm diff --git a/app/gui/qt/lang/sonic-pi_zh-Hans.ts b/app/gui/qt/lang/sonic-pi_zh_Hans.ts similarity index 100% rename from app/gui/qt/lang/sonic-pi_zh-Hans.ts rename to app/gui/qt/lang/sonic-pi_zh_Hans.ts diff --git a/app/gui/qt/main.cpp b/app/gui/qt/main.cpp index fa57aefd3e..660de9a750 100644 --- a/app/gui/qt/main.cpp +++ b/app/gui/qt/main.cpp @@ -18,8 +18,6 @@ #include #include #include -#include -#include #include #include "mainwindow.h" diff --git a/app/gui/qt/mainwindow.cpp b/app/gui/qt/mainwindow.cpp index 354874ba39..436c85091c 100644 --- a/app/gui/qt/mainwindow.cpp +++ b/app/gui/qt/mainwindow.cpp @@ -150,7 +150,7 @@ MainWindow::MainWindow(QApplication &app, QSplashScreen* splash) initProcess->waitForFinished(); // Throw all stdout into ~/.sonic-pi/log/gui.log - //setupLogPathAndRedirectStdOut(); + setupLogPathAndRedirectStdOut(); std::cout << "[GUI] - Welcome to the Sonic Pi GUI" << std::endl; std::cout << "[GUI] - ===========================" << std::endl; @@ -1944,39 +1944,41 @@ void MainWindow::changeSystemPreAmp(int val, int silent) statusBar()->showMessage(tr("Updating System Volume..."), 2000); } +// TODO: Implement real-time language switching void MainWindow::changeUILanguage(QString lang) { if (lang != piSettings->language) { - std::cout << "New language selected: " << lang.toUtf8().constData() << std::endl; - QString old_lang = sonicPii18n->getNativeLanguageName(piSettings->language); - QString new_lang = sonicPii18n->getNativeLanguageName(lang); - - // Load new language - //QString language = sonicPii18n->determineUILanguage(lang); - //sonicPii18n->loadTranslations(language); - //QString title_new = tr("Updated the UI language from %s to %s").arg(); - - QMessageBox msgBox(this); - msgBox.setText(tr("You've selected a new language: %s").arg(new_lang)); - msgBox.setInformativeText(tr("Do you want to apply these new settings?\nApplying the new language will restart Sonic Pi.")); - QPushButton *restartButton = msgBox.addButton(tr("Apply & Restart"), QMessageBox::ActionRole); - QPushButton *dismissButton = msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole); - msgBox.setDefaultButton(restartButton); - msgBox.setIcon(QMessageBox::Information); - msgBox.exec(); - - if (msgBox.clickedButton() == (QAbstractButton*)restartButton) { - piSettings->language = lang; - writeSettings(); - restartApp(); - //statusBar()->showMessage(tr("Updated UI language setting, please restart Sonic Pi to apply it"), 2000); - } else if (msgBox.clickedButton() == (QAbstractButton*)dismissButton) { - settingsWidget->updateSelectedUILanguage(piSettings->language); - } + std::cout << "Current language: " << piSettings->language.toUtf8().constData() << std::endl; + std::cout << "New language selected: " << lang.toUtf8().constData() << std::endl; + QString old_lang = sonicPii18n->getNativeLanguageName(piSettings->language); + QString new_lang = sonicPii18n->getNativeLanguageName(lang); + + // Load new language + //QString language = sonicPii18n->determineUILanguage(lang); + //sonicPii18n->loadTranslations(language); + //QString title_new = tr("Updated the UI language from %s to %s").arg(); + + QMessageBox msgBox(this); + msgBox.setText(QString(tr("You've selected a new language: %1")).arg(new_lang)); + msgBox.setInformativeText(tr("Do you want to apply this language?\nApplying the new language will restart Sonic Pi.")); + QPushButton *restartButton = msgBox.addButton(tr("Apply and Restart"), QMessageBox::ActionRole); + QPushButton *dismissButton = msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole); + msgBox.setDefaultButton(restartButton); + msgBox.setIcon(QMessageBox::Information); + msgBox.exec(); + + if (msgBox.clickedButton() == (QAbstractButton*)restartButton) { + piSettings->language = lang; + writeSettings(); + restartApp(); + //statusBar()->showMessage(tr("Updated UI language setting, please restart Sonic Pi to apply it"), 2000); + } else if (msgBox.clickedButton() == (QAbstractButton*)dismissButton) { + // Don't apply the new language settings + settingsWidget->updateSelectedUILanguage(piSettings->language); + } - // Load previously set language - //sonicPii18n->loadTranslations(ui_language); + // Load previously set language + //sonicPii18n->loadTranslations(ui_language); } - } @@ -3916,6 +3918,8 @@ void MainWindow::updateContext(int line, int index){ } +// TODO: Implement real-time language switching +// This is currently unused, but put in place to aid in implementing real-time language switching in the future void MainWindow::updateTranslatedUIText() { // Widget titles prefsWidget->setWindowTitle(tr("Preferences")); diff --git a/app/gui/qt/mainwindow.h b/app/gui/qt/mainwindow.h index dda281cd1f..18f523bbb7 100644 --- a/app/gui/qt/mainwindow.h +++ b/app/gui/qt/mainwindow.h @@ -296,6 +296,7 @@ class MainWindow : public QMainWindow // void initPrefsWindow(); void initDocsWindow(QString language); + void addTutorialDocsTab(QString lang); void addLangDocsTab(); void addSynthDocsTab(); void addFXDocsTab(); @@ -324,8 +325,6 @@ class MainWindow : public QMainWindow void addUniversalCopyShortcuts(QTextEdit *te); void updateTranslatedUIText(); - void restartApp(); - QMenu *liveMenu, *codeMenu, *audioMenu, *displayMenu, *viewMenu, *ioMenu, *ioMidiInMenu, *ioMidiOutMenu, *ioMidiOutChannelMenu, *localIpAddressesMenu, *themeMenu, *scopeKindVisibilityMenu; SonicPiSettings *piSettings; diff --git a/app/gui/qt/ruby_help.tmpl b/app/gui/qt/ruby_help.tmpl deleted file mode 100644 index f32467ad3a..0000000000 --- a/app/gui/qt/ruby_help.tmpl +++ /dev/null @@ -1,18 +0,0 @@ -//-- -// This file is part of Sonic Pi: http://sonic-pi.net -// Full project source: https://github.com/samaaron/sonic-pi -// License: https://github.com/samaaron/sonic-pi/blob/master/LICENSE.md -// -// Copyright 2013, 2014 by Sam Aaron (http://sam.aaron.name). -// All rights reserved. -// -// Permission is granted for use, copying, modification, distribution, -// and distribution of modified versions of this work as long as this -// notice is included. -//++ - -#pragma once - -// AUTO-GENERATED-DOCS -// Do not manually add any code below this comment -// otherwise it may be removed diff --git a/app/gui/qt/utils/lang_list.h b/app/gui/qt/utils/lang_list.h index f3c147c870..5ce73582b0 100644 --- a/app/gui/qt/utils/lang_list.h +++ b/app/gui/qt/utils/lang_list.h @@ -21,14 +21,18 @@ std::map SonicPii18n::native_language_names = { {"system_locale", ""}, {"bg", "български"}, +{"bn", "বাংলা"}, {"bs", "Bosanski/босански"}, {"ca", "Català"}, +{"ca@valencia", "Valencià"}, {"cs", "Čeština"}, {"da", "Dansk"}, {"de", "Deutsch"}, {"el", "ελληνικά"}, -{"en-GB", "English (UK)"}, -{"en-US", "English (US)"}, +{"en_AU", "English (Australian)"}, +{"en_GB", "English (UK)"}, +{"en_US", "English (US)"}, +{"eo", "Esperanto"}, {"es", "Español"}, {"et", "Eesti keel"}, {"fa", "فارسی"}, @@ -50,7 +54,7 @@ std::map SonicPii18n::native_language_names = { {"nl", "Nederlands"}, {"pl", "Polski"}, {"pt", "Português"}, -{"pt-BR", "Português do Brasil"}, +{"pt_BR", "Português do Brasil"}, {"ro", "Română"}, {"ru", "Pусский"}, {"si", "සිංහල"}, @@ -58,14 +62,14 @@ std::map SonicPii18n::native_language_names = { {"sl", "Slovenščina"}, {"sv", "Svenska"}, {"sw", "Kiswahili"}, -{"ti", "ไทย"}, +{"th", "ไทย"}, {"tr", "Türkçe"}, {"ug", "ئۇيغۇر تىلى"}, {"uk", "Українська"}, {"vi", "Tiếng Việt"}, -{"zh", "繁體中文"}, -{"zh-Hans", "简体中文"}, -{"zh-Hk", "廣東話"}, -{"zh-TW", "臺灣華語"} +{"zh", "简体中文"}, +{"zh_Hans", "简体中文"}, +{"zh_HK", "廣東話"}, +{"zh_TW", "臺灣華語"} }; #endif diff --git a/app/gui/qt/utils/sonic_pi_i18n.cpp b/app/gui/qt/utils/sonic_pi_i18n.cpp index 7cfc5bc043..76d1a62a17 100644 --- a/app/gui/qt/utils/sonic_pi_i18n.cpp +++ b/app/gui/qt/utils/sonic_pi_i18n.cpp @@ -2,9 +2,7 @@ #include #include #include -#include #include -#include #include #include @@ -16,11 +14,29 @@ SonicPii18n::SonicPii18n(QString rootpath) { this->root_path = rootpath; this->available_languages = findAvailableLanguages(); + // Set to true unless we can't load the system language + this->system_language_available = true; + + // // Print all Qt's language codes for debugging + // QList allLocales = QLocale::matchingLocales( + // QLocale::AnyLanguage, + // QLocale::AnyScript, + // QLocale::AnyCountry); + // QStringList iso639LanguageCodes; + // + // for(const QLocale &locale : allLocales) { + // iso639LanguageCodes << locale.name(); + // } + // + // std::cout << iso639LanguageCodes.join("\n").toUtf8().constData() << std::endl; +} + +SonicPii18n::~SonicPii18n() { } QString SonicPii18n::determineUILanguage(QString lang_pref) { QStringList available_languages = getAvailableLanguages(); - std::cout << available_languages.join("\n").toUtf8().constData() << '\n'; + std::cout << available_languages.join("\n").toUtf8().constData() << std::endl; QLocale locale; if (lang_pref != "system_locale") { @@ -34,7 +50,7 @@ QString SonicPii18n::determineUILanguage(QString lang_pref) { general_name.truncate(general_name.lastIndexOf('-')); if (available_languages.contains(general_name)) { - return lang_pref; + return general_name; } } else { QStringList preferred_languages = locale.uiLanguages(); @@ -42,14 +58,20 @@ QString SonicPii18n::determineUILanguage(QString lang_pref) { // ...run through the list of preferred languages std::cout << "Looping through preferred ui languages" << std::endl; + QString l; for (int i = 0; i < preferred_languages.length(); i += 1) { - if (available_languages.contains(preferred_languages[i])) { - return lang_pref; + l = preferred_languages[i]; + l.replace("-", "_"); + + std::cout << preferred_languages[i].toUtf8().constData() << std::endl; + if (available_languages.contains(l)) { + return l; } } } - // Fallback to English + // Fpreferred_languages[i]preferred_languages[i]preferred_languages[i]allback to English + this->system_language_available = false; return "en"; } @@ -65,12 +87,16 @@ QStringList SonicPii18n::findAvailableLanguages() { for (int i = 0; i < fileNames.size(); ++i) { // get locale extracted by filename QString locale; - locale = fileNames[i]; // "TranslationExample_de.qm" - locale.truncate(locale.lastIndexOf('.')); // "TranslationExample_de" - locale.remove(0, locale.lastIndexOf("sonic-pi_") + 9); // "de" + locale = fileNames[i]; // "sonic-pi_pt_BR.qm" + locale.truncate(locale.lastIndexOf('.')); // "sonic-pi_pt_BR" + locale.remove(0, locale.lastIndexOf("sonic-pi_") + 9); // "pt_BR" + //locale.replace("_", "-"); // Replace underscores with dashes so it matches the language codes e.g: "pt-BR" std::cout << locale.toUtf8().constData() << '\n'; languages << locale; } + // Add the source language + languages << "en_GB"; + languages.sort(); return languages; } @@ -99,25 +125,29 @@ bool SonicPii18n::loadTranslations(QString lang) { } QStringList SonicPii18n::getAvailableLanguages() { - return self->available_languages; + return this->available_languages; } -static std::map SonicPii18n::getLanguageNameList() { - return self->native_language_names; +std::map SonicPii18n::getNativeLanguageNameList() { + return native_language_names; } -static QString SonicPii18n::getNativeLanguageName(QString lang) { - if (native_language_names.contains(lang)) - return self->native_language_names[lang]; - else if (lang == "system_locale") { - return tr("System language") +QString SonicPii18n::getNativeLanguageName(QString lang) { + std::map::iterator it = native_language_names.find(lang); + if(it != native_language_names.end()) { + // language found + return native_language_names[lang]; + } else if (lang == "system_locale") { + return tr("System language"); } else { + std::cout << "Warning: Predefined language name not found'" << lang.toUtf8().constData() << "'" << std::endl; // Try using QLocale to find the native language name QLocale locale(lang); - if (locale.language != QLanguage::C) { + QString name = locale.nativeLanguageName(); + if (name != "C" && name != "") { return locale.nativeLanguageName(); } else { - std::cout << "Warning: Invalid language code '" << lang.toUtf8().constData() << "'" << std:endl; + std::cout << "Warning: Invalid language code '" << lang.toUtf8().constData() << "'" << std::endl; return lang; } } diff --git a/app/gui/qt/utils/sonic_pi_i18n.h b/app/gui/qt/utils/sonic_pi_i18n.h index 0477baf4e8..4e03f94bdc 100644 --- a/app/gui/qt/utils/sonic_pi_i18n.h +++ b/app/gui/qt/utils/sonic_pi_i18n.h @@ -20,13 +20,16 @@ class SonicPii18n : public QObject { public: SonicPii18n(QString rootpath); + ~SonicPii18n(); public slots: QString determineUILanguage(QString lang_pref); QStringList getAvailableLanguages(); - static std::map getLanguageNameList(); - static QString getNativeLanguageName(QString lang); + std::map getNativeLanguageNameList(); + QString getNativeLanguageName(QString lang); bool loadTranslations(QString lang); + + bool system_language_available; private: QString root_path; @@ -36,7 +39,5 @@ public slots: static std::map native_language_names; QStringList findAvailableLanguages(); - - }; #endif diff --git a/app/gui/qt/widgets/settingswidget.cpp b/app/gui/qt/widgets/settingswidget.cpp index 18caf08be4..8e38af0339 100644 --- a/app/gui/qt/widgets/settingswidget.cpp +++ b/app/gui/qt/widgets/settingswidget.cpp @@ -27,6 +27,7 @@ SettingsWidget::SettingsWidget(int port, bool i18n, SonicPiSettings *piSettings, this->sonicPii18n = sonicPii18n; this->localeNames = sonicPii18n->getNativeLanguageNameList(); this->available_languages = sonicPii18n->getAvailableLanguages(); + available_languages.prepend("system_locale"); server_osc_cues_port = port; prefTabs = new QTabWidget(); @@ -49,7 +50,7 @@ SettingsWidget::SettingsWidget(int port, bool i18n, SonicPiSettings *piSettings, QGroupBox *update_prefs_box = createUpdatePrefsTab(); prefTabs->addTab(update_prefs_box, tr("Updates")); - if (!i18n) { + if (!sonicPii18n->system_language_available) { QGroupBox *translation_box = new QGroupBox("Translation"); QVBoxLayout *translation_box_layout = new QVBoxLayout; QLabel *go_translate = new QLabel; @@ -59,7 +60,7 @@ SettingsWidget::SettingsWidget(int port, bool i18n, SonicPiSettings *piSettings, QLocale::languageToString(QLocale::system().language()) + " yet.
" + "We rely on crowdsourcing to help create and maintain translations.
" + - "" + + "" + "Please consider helping to translate Sonic Pi to your language. " ); go_translate->setTextFormat(Qt::RichText); @@ -388,6 +389,11 @@ QGroupBox* SettingsWidget::createEditorPrefsTab() { language_option_label->setText(tr("UI & Tutorial Language (Requires a restart to take effect)")); language_option_label->setToolTip(tr("Change the language of the UI & Tutorial (Requires a restart to take effect)")); + language_info_label = new QLabel; + language_info_label->setText(tr("Translations have been generously provided by volunteers")); + + language_option_label->setText(tr("UI & Tutorial Language (Requires a restart to take effect)")); + QVBoxLayout *language_box_layout = new QVBoxLayout; language_box_layout->addWidget(language_combo); language_box_layout->addWidget(language_option_label); @@ -398,7 +404,7 @@ QGroupBox* SettingsWidget::createEditorPrefsTab() { gridEditorPrefs->addWidget(editor_look_feel_box, 0, 1); gridEditorPrefs->addWidget(automation_box, 1, 1); gridEditorPrefs->addWidget(debug_box, 1, 0); - gridEditorPrefs->addWidget(language_box, 2, 0); + gridEditorPrefs->addWidget(language_box, 2, 0, 1, 2); editor_box->setLayout(gridEditorPrefs); return editor_box; @@ -538,6 +544,7 @@ void SettingsWidget::toggleScope( QWidget* qw ) { void SettingsWidget::updateUILanguage(int index) { QString lang = available_languages[index]; + std::cout << "Changed language to " << lang.toUtf8().constData() << std::endl; emit uiLanguageChanged(lang); } @@ -763,7 +770,7 @@ void SettingsWidget::settingsChanged() { } void SettingsWidget::connectAll() { - connect(language_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSettings())); + //connect(language_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSettings())); connect(language_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUILanguage(int))); connect(mixer_invert_stereo, SIGNAL(clicked()), this, SLOT(updateSettings())); connect(mixer_force_mono, SIGNAL(clicked()), this, SLOT(updateSettings())); @@ -849,22 +856,15 @@ void SettingsWidget::add_language_combo_box_entries(QComboBox* combo) { std::cout << "[Debug] Adding language " << language.toUtf8().data() << " to the combo box" << std::endl; if (language != "system_locale") { // Add the language's name to the combo box - combo->addItem(localeNames[language]); + combo->addItem(sonicPii18n->getNativeLanguageName(language)); } else { combo->addItem(tr("Use system language")); } } } - -// -// -// -// -// - - - +// TODO: Implement real-time language switching +// This is currently unused, but put in place aid implementing real-time language switching in the future void SettingsWidget::updateTranslatedUIText() { /** * IO Tab diff --git a/app/gui/qt/widgets/settingswidget.h b/app/gui/qt/widgets/settingswidget.h index 2b282b6c6c..8acac55430 100644 --- a/app/gui/qt/widgets/settingswidget.h +++ b/app/gui/qt/widgets/settingswidget.h @@ -24,7 +24,7 @@ class SettingsWidget : public QWidget Q_OBJECT public: - SettingsWidget(int server_osc_cues_port, bool i18n, SonicPiSettings *piSettings, SonicPii18n *sonicPii18n, QWidget *parent = 0); + SettingsWidget(int server_osc_cues_port, bool i18n, SonicPiSettings *piSettings, SonicPii18n *sonicPii18n, QWidget *parent = nullptr); ~SettingsWidget(); void updateVersionInfo( QString info_string, QString visit, bool sonic_pi_net_visible, bool check_now_visible); @@ -37,8 +37,6 @@ class SettingsWidget : public QWidget QSize sizeHint() const; - void updateTranslatedUIText(); - private slots: void updateUILanguage(int index); void update_mixer_invert_stereo(); diff --git a/app/server/ruby/bin/qt-doc.rb b/app/server/ruby/bin/qt-doc.rb index dde57044e7..e6b403c531 100644 --- a/app/server/ruby/bin/qt-doc.rb +++ b/app/server/ruby/bin/qt-doc.rb @@ -27,38 +27,23 @@ require 'active_support/inflector' - include SonicPi::Util -# Clear all the folders -FileUtils::rm_rf "#{qt_gui_path}/help/" -FileUtils::mkdir "#{qt_gui_path}/help/" - -FileUtils::rm_rf "#{qt_gui_path}/info/" -FileUtils::mkdir "#{qt_gui_path}/info/" - -FileUtils::rm_rf "#{qt_gui_path}/book/" -FileUtils::mkdir "#{qt_gui_path}/book/" - -# Copy images for tutorial -FileUtils::cp_r("#{etc_path}/doc/images", "#{qt_gui_path}/help/") - # List of all languages with GUI translation files -# Commented out languages currently have no translated strings @lang_names = Hash[ "bg" => "български", # Bulgarian - #"bn" => "বাংলা", # Bengali/Bangla + "bn" => "বাংলা", # Bengali/Bangla "bs" => "Bosanski/босански", # Bosnian "ca" => "Català", # Catalan - #"ca@valencia" => "Valencià", # Valencian + "ca@valencia" => "Valencià", # Valencian "cs" => "Čeština", # Czech "da" => "Dansk", # Danish "de" => "Deutsch", # German "el" => "ελληνικά", # Greek - #"en-AU" => "English (Australian)", # English (Australian) - "en-GB" => "English (UK)", # English (UK) - default language - "en-US" => "English (US)", # English (US) - #"eo" => "Esperanto", # Esperanto + "en_AU" => "English (Australian)", # English (Australian) + "en_GB" => "English (UK)", # English (UK) - default language + "en_US" => "English (US)", # English (US) + "eo" => "Esperanto", # Esperanto "es" => "Español", # Spanish "et" => "Eesti keel", # Estonian "fa" => "فارسی", # Persian @@ -80,7 +65,7 @@ "nl" => "Nederlands", # Dutch (Netherlands) "pl" => "Polski", # Polish "pt" => "Português", # Portuguese - "pt-BR" => "Português do Brasil", # Brazilian Portuguese + "pt_BR" => "Português do Brasil", # Brazilian Portuguese "ro" => "Română", # Romanian "ru" => "Pусский", # Russian "si" => "සිංහල", # Sinhala/Sinhalese @@ -88,17 +73,30 @@ "sl" => "Slovenščina",#/Slovenski Jezik", # Slovenian "sv" => "Svenska", # Swedish "sw" => "Kiswahili", # Swahili - "ti" => "ไทย", # Thai + "th" => "ไทย", # Thai "tr" => "Türkçe", # Turkish "ug" => "ئۇيغۇر تىلى", # Uyghur "uk" => "Українська", # Ukranian "vi" => "Tiếng Việt", # Vietnamese - "zh" => "繁體中文", # Mandarin Chinese (Traditional) - "zh-Hans" => "简体中文", # Mandarin Chinese (Simplified) - "zh-Hk" => "廣東話", # Cantonese - "zh-TW" => "臺灣華語" # Taiwanese Mandarin + "zh" => "简体中文", # Mandarin Chinese (Simplified) + "zh_Hans" => "简体中文", # Mandarin Chinese (Simplified) + "zh_HK" => "廣東話", # Mandarin Chinese (Traditional, Hong Kong) + "zh_TW" => "臺灣華語" # Mandarin Chinese (Traditional, Taiwan) ] +# Clear all the folders +FileUtils::rm_rf "#{qt_gui_path}/help/" +FileUtils::mkdir "#{qt_gui_path}/help/" + +FileUtils::rm_rf "#{qt_gui_path}/info/" +FileUtils::mkdir "#{qt_gui_path}/info/" + +FileUtils::rm_rf "#{qt_gui_path}/book/" +FileUtils::mkdir "#{qt_gui_path}/book/" + +# Copy images for tutorial +FileUtils::cp_r("#{etc_path}/doc/images", "#{qt_gui_path}/help/") + #docs = [] @filenames = [] @count = 0 @@ -529,7 +527,6 @@ def generate_ui_lang_names f << " \n\n" end - ### # Generate info pages ### @@ -560,4 +557,5 @@ def generate_ui_lang_names end + generate_ui_lang_names()