diff --git a/docs/user/locale/Country.dox b/docs/user/locale/Country.dox index a7f47691c6..9c690d1b6f 100644 --- a/docs/user/locale/Country.dox +++ b/docs/user/locale/Country.dox @@ -117,6 +117,19 @@ */ +/*! + \fn status_t BCountry::GetPreferredLanguage(BLanguage& language) const + \brief Get the most likely language to use in that country. + + \param language A reference to a BLanguage to set to the preferred language. + + \returns A status code, B_OK if everything went fine, or an error code + otherwise. + + \since Haiku R1 +*/ + + /*! \fn const char* BCountry::Code() const \brief Gets the ISO country code for the country. diff --git a/headers/os/locale/Country.h b/headers/os/locale/Country.h index ae41f5351f..a0fd5243d0 100644 --- a/headers/os/locale/Country.h +++ b/headers/os/locale/Country.h @@ -39,6 +39,7 @@ public: status_t GetName(BString& name, const BLanguage* displayLanguage = NULL ) const; + status_t GetPreferredLanguage(BLanguage&) const; const char* Code() const; // ISO-3166 diff --git a/src/kits/locale/Country.cpp b/src/kits/locale/Country.cpp index 24427f35c2..a292ed81ce 100644 --- a/src/kits/locale/Country.cpp +++ b/src/kits/locale/Country.cpp @@ -139,6 +139,35 @@ BCountry::GetName(BString& name, const BLanguage* displayLanguage) const } +status_t +BCountry::GetPreferredLanguage(BLanguage& language) const +{ +#if __GNUC__ == 2 + return ENOSYS; +#else + status_t status = InitCheck(); + if (status != B_OK) + return status; + + icu::Locale* languageLocale = fICULocale->clone(); + if (languageLocale == NULL) + return B_NO_MEMORY; + + UErrorCode icuError = U_ZERO_ERROR; + languageLocale->addLikelySubtags(icuError); + + if (U_FAILURE(icuError)) + return B_ERROR; + + status = language.SetTo(languageLocale->getLanguage()); + + delete languageLocale; + + return status; +#endif +} + + const char* BCountry::Code() const {