Nie podoba mi się modyfikowanie przekazanego argumentu, bo to jest takie... proceduralne :P Klasa modyfikuje swoje pola a nie argumenty metod.
Jestem zdania, że nie należy opakowywać funkcjonalności ustawienia jezyka jako całości w jedną klase tylko wyodrębnić czego nam brakuje i napisać klasa dla tej brakującej funkcjonalności. Bez dublowania tego co już udostępnia QTranslator i QLocale.
Tak na prawdę brakuje mapowania QLanguage na nazwe pliku.
Można pomyśleć nad klasą propertisową, która zwróci ścieżke pliku z tlumaczeniem danego języka.
Ale można też generować nazwy dynamicznie. Zauważ, że jest metoda:
QString QLocale::languageToString(QLocale::Language language)
dzięki, której zamiast tego szpetnego switch case'a można napisać:
if (!this->translator.load(languageToFileName(locale.language())))
this->translator.load(languageToFileName(QLanguage::English));
app.installTranslator(&this->translator);
Pytanie gdzie umieścić languageToFileName:
QString languageToFileName(QLanguage lang) {
return QLocale::languageToString(lang) + ".qm";
}
W ostatecznosci jako prywatna metoda aplikacji, ale lepiej w jakiejś klasie propertisowej razem ze sciezkami do innych rzeczy.
pathInOperatingSystemToFolderWithTranslations
Plus za deskryptywne nazwy, ale z tak długą nazwą nie da się pracować. Wyobraź sobie, że potrzebujesz napisać tą nazwe 2 czy nawet 3 razy w jednej linijce. "translationsDirPath" mówi tyle samo.