13
13
14
14
SonicPii18n::SonicPii18n (QString rootpath) {
15
15
this ->root_path = rootpath;
16
- this ->available_languages = findAvailableLanguages ();
16
+ this ->system_language_available = true ; // Set to true unless we can't load the system language
17
17
18
- // Set to true unless we can't load the system language
19
- this -> system_language_available = true ;
18
+ this -> available_languages = findAvailableLanguages ();
19
+ // checkAllTranslations(); // For testing and debugging purposes
20
20
}
21
21
22
22
SonicPii18n::~SonicPii18n () {
@@ -65,22 +65,21 @@ QString SonicPii18n::determineUILanguage(QString lang_pref) {
65
65
66
66
QStringList SonicPii18n::findAvailableLanguages () {
67
67
QStringList languages;
68
- QLocale locale;
69
68
70
69
QString m_langPath = root_path + " /app/gui/qt/lang" ;
71
- // std::cout << m_langPath.toUtf8().constData() << "\n" ;
70
+ // std::cout << m_langPath.toUtf8().constData() << std::endl ;
72
71
QDir dir (m_langPath);
73
72
QStringList fileNames = dir.entryList (QStringList (" sonic-pi_*.qm" ));
74
73
75
74
for (int i = 0 ; i < fileNames.size (); ++i) {
76
- // get locale extracted by filename
77
- QString locale ;
78
- locale = fileNames[i]; // "sonic-pi_pt_BR.qm"
79
- locale .truncate (locale .lastIndexOf (' .' )); // "sonic-pi_pt_BR"
80
- locale .remove (0 , locale .lastIndexOf (" sonic-pi_" ) + 9 ); // "pt_BR"
81
- // locale .replace("_", "-"); // Replace underscores with dashes so it matches the language codes e.g: "pt-BR"
82
- // std::cout << locale .toUtf8().constData() << '\n';
83
- languages << locale ;
75
+ // extract the language from the filename
76
+ QString lang ;
77
+ lang = fileNames[i]; // "sonic-pi_pt_BR.qm"
78
+ lang .truncate (lang .lastIndexOf (' .' )); // "sonic-pi_pt_BR"
79
+ lang .remove (0 , lang .lastIndexOf (" sonic-pi_" ) + 9 ); // "pt_BR"
80
+ // lang .replace("_", "-"); // Replace underscores with dashes so it matches the language codes e.g: "pt-BR"
81
+ // std::cout << lang .toUtf8().constData() << '\n';
82
+ languages << lang ;
84
83
}
85
84
// Add the source language
86
85
languages << " en_GB" ;
@@ -101,7 +100,7 @@ bool SonicPii18n::loadTranslations(QString lang) {
101
100
102
101
i18n = translator.load (" sonic-pi_" + language, " :/lang/" ) || language == " en_GB" || language == " en" || language == " C" ;
103
102
if (!i18n) {
104
- std::cout << language.toUtf8 ().constData () << " : Language translation not available " << std::endl;
103
+ std::cout << " Error: Failed to load language translation for " << language .toUtf8 ().constData () << std::endl;
105
104
language = " en" ;
106
105
}
107
106
app->installTranslator (&translator);
@@ -142,3 +141,35 @@ QString SonicPii18n::getNativeLanguageName(QString lang) {
142
141
}
143
142
}
144
143
}
144
+
145
+ // For testing and debugging purposes
146
+ bool SonicPii18n::checkAllTranslations () {
147
+ QStringList failed_to_load = QStringList ();
148
+ bool all_succeeded = true ;
149
+
150
+ std::cout << " ==========================================" << std::endl;
151
+ std::cout << " Testing all found language translations..." << std::endl;
152
+ for (int i = 0 ; i < this ->available_languages .size (); ++i) {
153
+ QString lang = this ->available_languages [i];
154
+ bool success = loadTranslations (lang);
155
+ if (success) {
156
+ std::cout << lang.toUtf8 ().constData () << " : ✓" << std::endl;
157
+ } else {
158
+ std::cout << lang.toUtf8 ().constData () << " : ✗" << std::endl;
159
+ failed_to_load << lang;
160
+ all_succeeded = false ;
161
+ }
162
+ }
163
+ std::cout << " Done" << std::endl;
164
+
165
+ std::cout << " ------------------------------------------" << std::endl;
166
+ if (failed_to_load.length () > 0 ) {
167
+ std::cout << " Some translations failed to load:" << std::endl;
168
+ std::cout << failed_to_load.join (" \n " ).toUtf8 ().constData () << std::endl;
169
+ } else {
170
+ std::cout << " All found translations loaded successfully :)" << std::endl;
171
+ }
172
+ std::cout << " ==========================================" << std::endl;
173
+
174
+ return all_succeeded;
175
+ }
0 commit comments