From 44ac4627682720b99df17f338160a36a5f3c4b15 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 4 May 2012 20:07:24 +0100 Subject: [PATCH] New methods SystemStats::getUserLanguage(), SystemStats::getUserRegion(). --- .../Builds/Android/src/com/juce/JuceDemo.java | 8 ++++++++ extras/JuceDemo/Source/ApplicationStartup.cpp | 1 + modules/juce_core/juce_core.cpp | 4 ++++ modules/juce_core/native/java/JuceAppActivity.java | 8 ++++++++ modules/juce_core/native/juce_android_JNIHelpers.h | 1 + .../juce_core/native/juce_android_SystemStats.cpp | 14 ++++++++++++++ .../juce_core/native/juce_linux_SystemStats.cpp | 11 +++++++++++ modules/juce_core/native/juce_mac_SystemStats.mm | 11 +++++++++++ .../juce_core/native/juce_win32_SystemStats.cpp | 12 ++++++++++++ modules/juce_core/system/juce_SystemStats.h | 10 ++++++++++ 10 files changed, 80 insertions(+) diff --git a/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java b/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java index 07b1726333..dd28f467ee 100644 --- a/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java +++ b/extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java @@ -495,4 +495,12 @@ public final class JuceDemo extends Activity { startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse (url))); } + + public static final String getLocaleValue (boolean isRegion) + { + java.util.Locale locale = java.util.Locale.getDefault(); + + return isRegion ? locale.getDisplayCountry (java.util.Locale.US) + : locale.getDisplayLanguage (java.util.Locale.US); + } } diff --git a/extras/JuceDemo/Source/ApplicationStartup.cpp b/extras/JuceDemo/Source/ApplicationStartup.cpp index 093d763d11..2240c2dddd 100644 --- a/extras/JuceDemo/Source/ApplicationStartup.cpp +++ b/extras/JuceDemo/Source/ApplicationStartup.cpp @@ -114,6 +114,7 @@ private: << "Full user name: " << SystemStats::getFullUserName() << newLine << "Host name: " << SystemStats::getComputerName() << newLine << "Operating system: " << SystemStats::getOperatingSystemName() << newLine + << "Locale: " << SystemStats::getUserLanguage() << "-" << SystemStats::getUserRegion() << newLine << "Memory size: " << SystemStats::getMemorySizeInMegabytes() << "MB" << newLine << "Number of CPUs: " << SystemStats::getNumCpus() << newLine diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 842788b209..0b7f906d7d 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -66,6 +66,10 @@ #include #endif + #if JUCE_LINUX + #include + #endif + #include #include #include diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index e64abf3ed0..99a4779e13 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -495,4 +495,12 @@ public final class JuceAppActivity extends Activity { startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse (url))); } + + public static final String getLocaleValue (boolean isRegion) + { + java.util.Locale locale = java.util.Locale.getDefault(); + + return isRegion ? locale.getDisplayCountry (java.util.Locale.US) + : locale.getDisplayLanguage (java.util.Locale.US); + } } diff --git a/modules/juce_core/native/juce_android_JNIHelpers.h b/modules/juce_core/native/juce_android_JNIHelpers.h index 4f9bd7b7f6..f454c87647 100644 --- a/modules/juce_core/native/juce_android_JNIHelpers.h +++ b/modules/juce_core/native/juce_android_JNIHelpers.h @@ -359,6 +359,7 @@ extern ThreadLocalJNIEnvHolder threadLocalJNIEnvHolder; METHOD (showMessageBox, "showMessageBox", "(Ljava/lang/String;Ljava/lang/String;J)V") \ METHOD (showOkCancelBox, "showOkCancelBox", "(Ljava/lang/String;Ljava/lang/String;J)V") \ METHOD (showYesNoCancelBox, "showYesNoCancelBox", "(Ljava/lang/String;Ljava/lang/String;J)V") \ + STATICMETHOD (getLocaleValue, "getLocaleValue", "(Z)Ljava/lang/String;") \ DECLARE_JNI_CLASS (JuceAppActivity, JUCE_ANDROID_ACTIVITY_CLASSPATH); #undef JNI_CLASS_MEMBERS diff --git a/modules/juce_core/native/juce_android_SystemStats.cpp b/modules/juce_core/native/juce_android_SystemStats.cpp index b64064a5ee..5e9c41b03f 100644 --- a/modules/juce_core/native/juce_android_SystemStats.cpp +++ b/modules/juce_core/native/juce_android_SystemStats.cpp @@ -172,6 +172,14 @@ namespace AndroidStatsHelpers SystemClass.getProperty, javaString (name).get()))); } + + //============================================================================== + String getLocaleValue (bool isRegion) + { + return juceString (LocalRef ((jstring) getEnv()->CallStaticObjectMethod (JuceAppActivity, + JuceAppActivity.getLocaleValue, + isRegion))); + } } //============================================================================== @@ -250,6 +258,12 @@ String SystemStats::getComputerName() return String::empty; } + + +String SystemStats::getUserLanguage() { return AndroidStatsHelpers::getLocaleValue (false); } +String SystemStats::getUserRegion() { return AndroidStatsHelpers::getLocaleValue (true); } + + //============================================================================== SystemStats::CPUFlags::CPUFlags() { diff --git a/modules/juce_core/native/juce_linux_SystemStats.cpp b/modules/juce_core/native/juce_linux_SystemStats.cpp index c70b127cc4..7007c864b9 100644 --- a/modules/juce_core/native/juce_linux_SystemStats.cpp +++ b/modules/juce_core/native/juce_linux_SystemStats.cpp @@ -119,6 +119,17 @@ String SystemStats::getComputerName() return String::empty; } +String getLocaleValue (nl_item key) +{ + const char* oldLocale = ::setlocale (LC_ALL, ""); + return String (const_cast (nl_langinfo (key))); + ::setlocale (LC_ALL, oldLocale); +} + +String SystemStats::getUserLanguage() { return getLocaleValue (_NL_IDENTIFICATION_LANGUAGE); } +String SystemStats::getUserRegion() { return getLocaleValue (_NL_IDENTIFICATION_TERRITORY); } + + //============================================================================== SystemStats::CPUFlags::CPUFlags() { diff --git a/modules/juce_core/native/juce_mac_SystemStats.mm b/modules/juce_core/native/juce_mac_SystemStats.mm index 91595d72ff..684a3b38e5 100644 --- a/modules/juce_core/native/juce_mac_SystemStats.mm +++ b/modules/juce_core/native/juce_mac_SystemStats.mm @@ -202,6 +202,17 @@ String SystemStats::getComputerName() return String::empty; } +static String getLocaleValue (CFStringRef key) +{ + CFLocaleRef cfLocale = CFLocaleCopyCurrent(); + const String result (String::fromCFString ((CFStringRef) CFLocaleGetValue (cfLocale, key))); + CFRelease (cfLocale); + return result; +} + +String SystemStats::getUserLanguage() { return getLocaleValue (kCFLocaleLanguageCode); } +String SystemStats::getUserRegion() { return getLocaleValue (kCFLocaleCountryCode); } + //============================================================================== class HiResCounterHandler { diff --git a/modules/juce_core/native/juce_win32_SystemStats.cpp b/modules/juce_core/native/juce_win32_SystemStats.cpp index 5b21f63f33..34add677df 100644 --- a/modules/juce_core/native/juce_win32_SystemStats.cpp +++ b/modules/juce_core/native/juce_win32_SystemStats.cpp @@ -370,3 +370,15 @@ String SystemStats::getComputerName() GetComputerName (text, &len); return String (text, len); } + +static String getLocaleValue (LCTYPE key, const char* defaultValue) +{ + TCHAR buffer [256] = { 0 }; + if (GetLocaleInfo (LOCALE_USER_DEFAULT, key, buffer, 255) > 0) + return buffer; + + return defaultValue; +} + +String SystemStats::getUserLanguage() { return getLocaleValue (LOCALE_SISO639LANGNAME, "en"); } +String SystemStats::getUserRegion() { return getLocaleValue (LOCALE_SISO3166CTRYNAME, "US"); } diff --git a/modules/juce_core/system/juce_SystemStats.h b/modules/juce_core/system/juce_SystemStats.h index 7d67acef06..b95918f4c2 100644 --- a/modules/juce_core/system/juce_SystemStats.h +++ b/modules/juce_core/system/juce_SystemStats.h @@ -109,6 +109,16 @@ public: /** Returns the host-name of the computer. */ static String getComputerName(); + /** Returns the user's language. + The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2) + */ + static String getUserLanguage(); + + /** Returns the user's region. + The return value is a 2 letter country code (ISO 3166-1 alpha-2). + */ + static String getUserRegion(); + //============================================================================== // CPU and memory information..