diff --git a/android/jni/com/mapswithme/platform/Language.cpp b/android/jni/com/mapswithme/platform/Language.cpp index e18f5aa2dc..2b5ee1162b 100644 --- a/android/jni/com/mapswithme/platform/Language.cpp +++ b/android/jni/com/mapswithme/platform/Language.cpp @@ -1,4 +1,7 @@ -#include "com/mapswithme/core/jni_helper.hpp" +#include "android/jni/com/mapswithme/core/jni_helper.hpp" +#include "android/jni/com/mapswithme/core/ScopedLocalRef.hpp" + +#include "platform/locale.hpp" #include "base/assert.hpp" #include "base/logging.hpp" @@ -29,3 +32,26 @@ std::string GetAndroidSystemLanguage() return res; } + +namespace platform +{ +Locale GetCurrentLocale() +{ + JNIEnv * env = jni::GetEnv(); + static jmethodID const getLanguageCodeId = jni::GetStaticMethodID(env, g_utilsClazz, "getLanguageCode", + "()Ljava/lang/String;"); + jni::ScopedLocalRef languageCode(env, env->CallStaticObjectMethod(g_utilsClazz, getLanguageCodeId)); + + static jmethodID const getCountryCodeId = jni::GetStaticMethodID(env, g_utilsClazz, "getCountryCode", + "()Ljava/lang/String;"); + jni::ScopedLocalRef countryCode(env, env->CallStaticObjectMethod(g_utilsClazz, getCountryCodeId)); + + static jmethodID const getCurrencyCodeId = jni::GetStaticMethodID(env, g_utilsClazz, "getCurrencyCode", + "()Ljava/lang/String;"); + jni::ScopedLocalRef currencyCode(env, env->CallStaticObjectMethod(g_utilsClazz, getCurrencyCodeId)); + + return {jni::ToNativeString(env, static_cast(languageCode.get())), + jni::ToNativeString(env, static_cast(countryCode.get())), + currencyCode.get() ? jni::ToNativeString(env, static_cast(currencyCode.get())) : ""}; +} +} // namespace platform diff --git a/android/src/com/mapswithme/util/Utils.java b/android/src/com/mapswithme/util/Utils.java index 06aa5f77f7..6768ecd308 100644 --- a/android/src/com/mapswithme/util/Utils.java +++ b/android/src/com/mapswithme/util/Utils.java @@ -557,6 +557,18 @@ public class Utils return null; } + @NonNull + public static String getCountryCode() + { + return Locale.getDefault().getCountry(); + } + + @NonNull + public static String getLanguageCode() + { + return Locale.getDefault().getLanguage(); + } + @Nullable public static Currency getCurrencyForLocale(@NonNull Locale locale) { diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt index 460b7a38ed..a3db89b1cb 100644 --- a/platform/CMakeLists.txt +++ b/platform/CMakeLists.txt @@ -36,6 +36,7 @@ set( local_country_file.hpp local_country_file_utils.cpp local_country_file_utils.hpp + locale.hpp localization.hpp location.hpp marketing_service.cpp @@ -72,6 +73,7 @@ if(${PLATFORM_IPHONE}) http_uploader_apple.mm http_user_agent_ios.mm localization.mm + locale.mm marketing_service_ios.mm network_policy_ios.h network_policy_ios.mm @@ -127,6 +129,7 @@ else() # neither iPhone nor Android http_uploader_apple.mm http_uploader_background_dummy.cpp http_user_agent_dummy.cpp + locale.mm marketing_service_dummy.cpp platform_mac.mm platform_unix_impl.cpp @@ -145,6 +148,7 @@ else() # neither iPhone nor Android http_uploader_dummy.cpp http_uploader_background_dummy.cpp http_user_agent_dummy.cpp + locale_linux.cpp marketing_service_dummy.cpp platform_linux.cpp platform_unix_impl.cpp diff --git a/platform/locale.hpp b/platform/locale.hpp new file mode 100644 index 0000000000..07255f2a9f --- /dev/null +++ b/platform/locale.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace platform +{ +struct Locale +{ +public: + std::string m_language; + std::string m_country; + std::string m_currency; +}; + +Locale GetCurrentLocale(); +} // namespace platform diff --git a/platform/locale.mm b/platform/locale.mm new file mode 100644 index 0000000000..4f7b9cb2fb --- /dev/null +++ b/platform/locale.mm @@ -0,0 +1,13 @@ +#include "platform/locale.hpp" + +#import + +namespace platform +{ +Locale GetCurrentLocale() +{ + NSLocale * locale = [NSLocale currentLocale]; + return {[locale.languageCode UTF8String], [locale.countryCode UTF8String], + [locale.currencyCode UTF8String]}; +} +} // namespace platform \ No newline at end of file diff --git a/platform/locale_linux.cpp b/platform/locale_linux.cpp new file mode 100644 index 0000000000..df68fe9e2d --- /dev/null +++ b/platform/locale_linux.cpp @@ -0,0 +1,10 @@ +#include "platform/locale.hpp" + +namespace platform +{ +Locale GetCurrentLocale() +{ + return {"", "", ""}; +} +} // namespace platform +