From 92bae21ab74d0dd77410c7ab01e03527c306941d Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 29 Oct 2011 14:35:55 +0000 Subject: [PATCH] Try to load resource-embedded catalog from application. Should fix #8037. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42950 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/locale/DefaultCatalog.cpp | 37 +++++++++++++++++++----------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/kits/locale/DefaultCatalog.cpp b/src/kits/locale/DefaultCatalog.cpp index 997060c4c3..17713f8a70 100644 --- a/src/kits/locale/DefaultCatalog.cpp +++ b/src/kits/locale/DefaultCatalog.cpp @@ -65,20 +65,29 @@ DefaultCatalog::DefaultCatalog(const char *signature, const char *language, : BHashMapCatalog(signature, language, fingerprint) { - // give highest priority to catalog living in sub-folder of app's folder: + status_t status; + app_info appInfo; be_app->GetAppInfo(&appInfo); - node_ref nref; - nref.device = appInfo.ref.device; - nref.node = appInfo.ref.directory; - BDirectory appDir(&nref); - BString catalogName("locale/"); - catalogName << kCatFolder - << "/" << fSignature - << "/" << fLanguageName - << kCatExtension; - BPath catalogPath(&appDir, catalogName.String()); - status_t status = ReadFromFile(catalogPath.Path()); + + // give highest priority to catalog embedded as resource in application + // executable: + status = ReadFromResource(&appInfo.ref); + + // search for catalog living in sub-folder of app's folder: + if (status != B_OK) { + node_ref nref; + nref.device = appInfo.ref.device; + nref.node = appInfo.ref.directory; + BDirectory appDir(&nref); + BString catalogName("locale/"); + catalogName << kCatFolder + << "/" << fSignature + << "/" << fLanguageName + << kCatExtension; + BPath catalogPath(&appDir, catalogName.String()); + status = ReadFromFile(catalogPath.Path()); + } if (status != B_OK) { // search in data folders @@ -92,8 +101,8 @@ DefaultCatalog::DefaultCatalog(const char *signature, const char *language, for (size_t i = 0; i < sizeof(which) / sizeof(which[0]); i++) { BPath path; if (find_directory(which[i], &path) == B_OK) { - catalogName = BString(path.Path()) - << "/locale/" << kCatFolder + BString catalogName(path.Path()); + catalogName << "/locale/" << kCatFolder << "/" << fSignature << "/" << fLanguageName << kCatExtension;