Index: src/kcatalog.cpp =================================================================== --- src/kcatalog.cpp +++ src/kcatalog.cpp @@ -124,8 +124,14 @@ { QMutexLocker lock(&catalogStaticData->mutex); const QString customLocaleDir = catalogStaticData->customCatalogDirs.value(domain); - if (!customLocaleDir.isEmpty() && QFileInfo::exists(customLocaleDir + QLatin1Char('/') + relpath)) { + const QString filename = customLocaleDir + QLatin1Char('/') + relpath; + if (!customLocaleDir.isEmpty() && QFileInfo::exists(filename)) { +#if defined(Q_OS_ANDROID) + // The exact file name must be returned on Android because libintl-lite loads a catalog by filename with bindtextdomain() + return filename; +#else return customLocaleDir; +#endif } } @@ -133,8 +139,13 @@ QStringLiteral("locale/") + relpath); QString localeDir; if (!file.isEmpty()) { +#if defined(Q_OS_ANDROID) + // The exact file name must be returned on Android because libintl-lite loads a catalog by filename with bindtextdomain() + localeDir = file; +#else // Path of the locale/ directory must be returned. localeDir = QFileInfo(file.left(file.size() - relpath.size())).absolutePath(); +#endif } return localeDir; } Index: src/klocalizedstring.cpp =================================================================== --- src/klocalizedstring.cpp +++ src/klocalizedstring.cpp @@ -140,7 +140,7 @@ } } -#ifndef Q_OS_UNIX +#if !defined(Q_OS_UNIX) || defined(Q_OS_ANDROID) static void appendLanguagesFromQLocale(QStringList &languages, const QLocale &locale) { const QStringList uiLangs = locale.uiLanguages(); @@ -363,7 +363,7 @@ appendLanguagesFromVariable(localeLanguages, "LC_ALL"); appendLanguagesFromVariable(localeLanguages, "LC_MESSAGES"); appendLanguagesFromVariable(localeLanguages, "LANG"); -#ifndef Q_OS_UNIX +#if !defined(Q_OS_UNIX) || defined(Q_OS_ANDROID) // For non UNIX platforms the environment variables might not // suffice so we add system locale UI languages, too. appendLanguagesFromQLocale(localeLanguages, QLocale::system());