@@ -48,7 +48,6 @@ const QString URLKey("Desktop Entry/URL");
48
48
const QString LogicalIdKey (" Desktop Entry/X-MeeGo-Logical-Id" );
49
49
const QString TranslationCatalogKey (" Desktop Entry/X-MeeGo-Translation-Catalog" );
50
50
const QString XMaemoServiceKey (" Desktop Entry/X-Maemo-Service" );
51
- QMap<QString, QSharedPointer<QTranslator> > MDesktopEntryPrivate::translators;
52
51
53
52
// The syntax of the locale string in the POSIX environment variables
54
53
// related to locale is:
@@ -94,34 +93,7 @@ MDesktopEntryPrivate::MDesktopEntryPrivate(const QString &fileName) :
94
93
95
94
// Checks if the file exists and opens it in readonly mode
96
95
if (file.exists () && file.open (QIODevice::ReadOnly)) {
97
- if (readDesktopFile (file, desktopEntriesMap)) {
98
- // Load the translation catalog if it has been defined for the entry.
99
- if (desktopEntriesMap.contains (TranslationCatalogKey)) {
100
- // Load the catalog from disk if it's not yet loaded
101
- QString catalog = desktopEntriesMap.value (TranslationCatalogKey);
102
- QString engineeringEnglishCatalog = catalog + " _eng_en" ;
103
- if (!translators.contains (engineeringEnglishCatalog)) {
104
- QTranslator *translator = new QTranslator;
105
- if (translator->load (engineeringEnglishCatalog, " /usr/share/translations" )) {
106
- translators[engineeringEnglishCatalog] = QSharedPointer<QTranslator>(translator);
107
- qApp->installTranslator (translator);
108
- } else {
109
- delete translator;
110
- }
111
- }
112
-
113
- if (!translators.contains (catalog)) {
114
- QTranslator *translator = new QTranslator;
115
- if (translator->load (QLocale (), catalog, " -" , " /usr/share/translations" )) {
116
- translators[catalog] = QSharedPointer<QTranslator>(translator);
117
- qApp->installTranslator (translator);
118
- } else {
119
- qDebug () << " Unable to load catalog" << catalog;
120
- delete translator;
121
- }
122
- }
123
- }
124
- }
96
+ readDesktopFile (file, desktopEntriesMap);
125
97
} else {
126
98
qDebug () << " Specified Desktop file does not exist" << fileName;
127
99
}
@@ -137,6 +109,18 @@ bool MDesktopEntryPrivate::readDesktopFile(QIODevice &device, QMap<QString, QStr
137
109
return valid;
138
110
}
139
111
112
+ QTranslator *MDesktopEntryPrivate::loadTranslator () const
113
+ {
114
+ QTranslator *translator = new QTranslator;
115
+ QString catalog = desktopEntriesMap.value (TranslationCatalogKey);
116
+ if (catalog.isNull () || !translator->load (QLocale (), catalog, " -" , " /usr/share/translations" )) {
117
+ qDebug () << " Unable to load catalog" << catalog;
118
+ delete translator;
119
+ translator = 0 ;
120
+ }
121
+ return translator;
122
+ }
123
+
140
124
bool MDesktopEntry::readDesktopFile (QIODevice &device, QMap<QString, QString> &desktopEntriesMap)
141
125
{
142
126
bool valid = true ;
@@ -335,11 +319,23 @@ QString MDesktopEntry::version() const
335
319
336
320
QString MDesktopEntry::name () const
337
321
{
322
+ Q_D (const MDesktopEntry);
323
+
324
+ if (!d->translatedName .isNull ())
325
+ return d->translatedName ;
326
+
338
327
QString name = value (NameKey);
339
328
340
329
if (contains (LogicalIdKey)) {
341
330
QString key = value (LogicalIdKey);
342
- QString translation = qtTrId (key.toLatin1 ().data ());
331
+ QString translation;
332
+ QScopedPointer<QTranslator> translator (d->loadTranslator ());
333
+ if (translator) {
334
+ translation = translator->translate (0 , key.toLatin1 ().data (), 0 , -1 );
335
+ } else {
336
+ translation = qtTrId (key.toLatin1 ().data ());
337
+ }
338
+
343
339
if (!translation.isEmpty () && translation != key) {
344
340
name = translation;
345
341
}
@@ -360,6 +356,7 @@ QString MDesktopEntry::name() const
360
356
}
361
357
}
362
358
359
+ d->translatedName = name;
363
360
return name;
364
361
}
365
362
0 commit comments