From a7764b301c5c73293da7945c205a6fbd6ae876e6 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Tue, 9 Mar 2010 10:47:03 +0000 Subject: [PATCH] Change the catalog loading so it will crawl up the catalogs even if the rt root one is not found. This will allow to load "fr" even if "fr_FR" is not found. This way the preflet in its current state works again. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35787 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/locale/LocaleRoster.cpp | 49 +++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/kits/locale/LocaleRoster.cpp b/src/kits/locale/LocaleRoster.cpp index 010bd698be..2eaabf1b7f 100644 --- a/src/kits/locale/LocaleRoster.cpp +++ b/src/kits/locale/LocaleRoster.cpp @@ -600,33 +600,36 @@ BLocaleRoster::LoadCatalog(const char *signature, const char *language, const char *lang; for (int32 l=0; languages.FindString("language", l, &lang)==B_OK; ++l) { catalog = info->fInstantiateFunc(signature, lang, fingerprint); - if (catalog) { + if (catalog) info->fLoadedCatalogs.AddItem(catalog); - // Chain-load catalogs for languages that depend on - // other languages. - // The current implementation uses the filename in order to - // detect dependencies (parenthood) between languages (it - // traverses from "english-british-oxford" to "english-british" - // to "english"): - // TODO :use ICU facilities instead, so we can handle more - // complex things such as fr_FR@euro, or whatever, encodings - // and so on. - int32 pos; - BString langName(lang); - BCatalogAddOn *currCatalog=catalog, *nextCatalog; - while ((pos = langName.FindLast('-')) >= 0) { - // language is based on parent, so we load that, too: - langName.Truncate(pos); - nextCatalog = info->fInstantiateFunc(signature, - langName.String(), fingerprint); - if (nextCatalog) { - info->fLoadedCatalogs.AddItem(nextCatalog); + // Chain-load catalogs for languages that depend on + // other languages. + // The current implementation uses the filename in order to + // detect dependencies (parenthood) between languages (it + // traverses from "english-british-oxford" to "english-british" + // to "english"): + // TODO :use ICU facilities instead, so we can handle more + // complex things such as fr_FR@euro, or whatever, encodings + // and so on. + int32 pos; + BString langName(lang); + BCatalogAddOn *currCatalog=catalog, *nextCatalog; + while ((pos = langName.FindLast('_')) >= 0) { + // language is based on parent, so we load that, too: + // (even if the parent catalog was not found) + langName.Truncate(pos); + nextCatalog = info->fInstantiateFunc(signature, + langName.String(), fingerprint); + if (nextCatalog) { + info->fLoadedCatalogs.AddItem(nextCatalog); + if(currCatalog) currCatalog->fNext = nextCatalog; - currCatalog = nextCatalog; - } + else + catalog = nextCatalog; + currCatalog = nextCatalog; } - return catalog; } + return catalog; } info->UnloadIfPossible(); }