Bug 215837 - Nativ KDE QFileDialog changes translation
Summary: Nativ KDE QFileDialog changes translation
Status: CONFIRMED
Alias: None
Product: i18n
Classification: Translations
Component: general (show other bugs)
Version: unspecified
Platform: Ubuntu Linux
: NOR normal
Target Milestone: ---
Assignee: Albert Astals Cid
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-11-23 15:04 UTC by Patrick R. Gansterer
Modified: 2016-07-04 20:57 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Patrick R. Gansterer 2009-11-23 15:04:22 UTC
Version:            (using KDE 4.3.2)
OS:                Linux
Installed from:    Ubuntu Packages

http://bugreports.qt.nokia.com/browse/QTBUG-5822

When you try the following code in an translated (non english) KDE 4 the first QMessageBox shows "Open" and the second the KDE-translation of "Open". 

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMessageBox::information(0, QLatin1String("Open"), QObject::tr("Open"));
    QFileDialog::getOpenFileName();	
    QMessageBox::information(0, QLatin1String("Open"), QObject::tr("Open"));

    return app.exec();
}
Comment 1 Friedrich W. H. Kossebau 2016-06-27 18:35:36 UTC
Confirmed for Qt4/kdelibs4.

Similarly still happening with Qt5/KF5/Plasma5, though now translations are loaded on QApplication instance creation, so minor improvement is that texts do not change anymore after using QFileDialog.

Still, it is not perfect that the platform plugin decides on its own to load the Qt meta catalog for the current system locale and thus ruling over a possible decision of the app itself to use another catalog (or even none). As this not only affects the platform dependent UI as provided by the platform (where it could be reasoned it is kind of integrating with system language), but any other normal Qt UI of the app as well (e.g. strings in the context menu of QLineEdit, "Cut", "Copy" etc).
I'd consider this a bug.

Not tracked down to the call, but very possibly due to ki18n lib being pulled in by whatever platform plugin (lost overview) which provides the plasma/kf5 filedialog & Co.. The KI18n lib has a startup hook which load the Qt meta catalog with translations for the locale as defined by QLocale::system(). Meant as convenience for KDE application developers (who rely on that without knowing possibly ;) ), but surprising for 3rd-party Qt apps which might want own control over the translation catalogs used in the app.

See how many Qt catalogs are opened just due to the platform plugin here:

src.pro:
TEMPLATE = app
CONFIG += qt
QT += widgets
SOURCES += main.cpp

main.cpp:
#include <QtWidgets>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // Changed QObject::tr("Open") to QLineEdit::tr("Cu&t") to show the affect on normal Qt widgets
    QMessageBox::information(0, QLatin1String("Open"), QLineEdit::tr("Cu&t"));
    QFileDialog::getOpenFileName();
    QMessageBox::information(0, QLatin1String("Open"), QLineEdit::tr("Cu&t"));
    return app.exec();
}

kossebau@klux:~$ strace ~koder/Kode/qt/bug215837/src 2>&1 | grep '^open(' | grep -P '\.(mo|qm)'
open("/usr/share/locale/de/LC_MESSAGES/sonnet5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcoreaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kauth5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kglobalaccel5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kconfig5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kwidgetsaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcompletion5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qt_en.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qt_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtbase_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtscript_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtquick1_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtmultimedia_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtxmlpatterns_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcodecs5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kitemviews5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kdbusaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kwindowsystem5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/solid5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kbookmarks5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kjobwidgets5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/knotifications5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/knotifications5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kjobwidgets5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kbookmarks5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/solid5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kwindowsystem5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kdbusaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kitemviews5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcodecs5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qt_en.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qt_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtbase_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtscript_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtquick1_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtmultimedia_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/qt5/translations/qtxmlpatterns_de.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcompletion5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kwidgetsaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kconfig5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kglobalaccel5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kauth5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/kcoreaddons5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
open("/usr/share/locale/de/LC_MESSAGES/sonnet5_qt.qm", O_RDONLY|O_CLOEXEC) = 6
[[here call to QFileDialog at runtime]]
open("/usr/share/locale-langpack/de_DE.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de_DE.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-bundle/de_DE.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/de_DE.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de_DE.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-bundle/de_DE.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/de_DE/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de_DE/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-bundle/de_DE/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/de.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-bundle/de.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/de.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-bundle/de.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/de/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de/LC_MESSAGES/libc.mo", O_RDONLY) = 10
open("/usr/share/locale-langpack/de/LC_MESSAGES/kio5.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de/LC_MESSAGES/kio5.mo", O_RDONLY) = 15
open("/usr/share/locale-langpack/de/LC_MESSAGES/kconfigwidgets5.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de/LC_MESSAGES/kconfigwidgets5.mo", O_RDONLY) = 19
open("/usr/share/locale-langpack/de/LC_MESSAGES/kxmlgui5.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de/LC_MESSAGES/kxmlgui5.mo", O_RDONLY) = 19
open("/home/kossebau/messages.mo", O_RDONLY|O_CLOEXEC) = 19
Comment 2 Albert Astals Cid 2016-07-04 20:57:56 UTC
"The KI18n lib has a startup hook which load the Qt meta catalog with translations for the locale as defined by QLocale::system(). "

If you think that is a bug, open a bug against ki18n framework instead of reopening this unrelated bug please.