From 579465df5003dfdecf74228557bd927557fb3b7a Mon Sep 17 00:00:00 2001 From: François Revol Date: Tue, 21 Aug 2018 21:16:06 +0200 Subject: Haiku: use the native locale API to get the language name We used getenv() on LC_MESSAGES but we currently set it incorrectly anyway... We keep this as a fallback. --- frontends/beos/gui.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/frontends/beos/gui.cpp b/frontends/beos/gui.cpp index 19f8eac49..e9ab9737a 100644 --- a/frontends/beos/gui.cpp +++ b/frontends/beos/gui.cpp @@ -42,6 +42,9 @@ #include #include #include +#ifdef __HAIKU__ +#include +#endif extern "C" { @@ -519,9 +522,18 @@ static BPath get_messages_path() BPath p; f.FindPath(B_FIND_PATH_APPS_DIRECTORY, "netsurf/res", p); - // TODO: use Haiku's BLocale stuff - BString lang(getenv("LC_MESSAGES")); - lang.Truncate(2); + BString lang; +#ifdef __HAIKU__ + BMessage preferredLangs; + if (BLocaleRoster::Default()->GetPreferredLanguages(&preferredLangs) == B_OK) { + preferredLangs.FindString("language", 0, &lang); + lang.Truncate(2); + } +#endif + if (lang.Length() < 1) { + lang.SetTo(getenv("LC_MESSAGES")); + lang.Truncate(2); + } BDirectory d(p.Path()); if (!d.Contains(lang.String(), B_DIRECTORY_NODE)) lang = "en"; @@ -1040,9 +1052,19 @@ int main(int argc, char** argv) BResources resources; resources.SetToImage((const void*)main); size_t size = 0; - + + BString lang; +#ifdef __HAIKU__ + BMessage preferredLangs; + if (BLocaleRoster::Default()->GetPreferredLanguages(&preferredLangs) == B_OK) { + preferredLangs.FindString("language", 0, &lang); + } +#endif + if (lang.Length() < 1) + lang.SetTo(getenv("LC_MESSAGES")); + char path[12]; - sprintf(path,"%.2s/Messages", getenv("LC_MESSAGES")); + sprintf(path,"%.2s/Messages", lang.String()); NSLOG(netsurf, INFO, "Loading messages from resource %s\n", path); const uint8_t* res = (const uint8_t*)resources.LoadResource('data', path, &size); -- cgit v1.2.3