From 6e812eed03eb4ac3f4ad3673277240ea9d13fcef Mon Sep 17 00:00:00 2001 From: pelya Date: Thu, 19 Aug 2010 14:48:31 +0300 Subject: [PATCH] Setting envvar LANG to correct value from Java code --- project/jni/sdl_main/sdl_main.c | 12 ++++++++++++ project/src/Settings.java | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/project/jni/sdl_main/sdl_main.c b/project/jni/sdl_main/sdl_main.c index efa49bfbd..b0cb627c1 100644 --- a/project/jni/sdl_main/sdl_main.c +++ b/project/jni/sdl_main/sdl_main.c @@ -1,6 +1,7 @@ #ifdef ANDROID #include +#include #include #include #include "SDL_thread.h" @@ -57,6 +58,17 @@ JAVA_EXPORT_NAME(Settings_nativeIsSdcardUsed) ( JNIEnv* env, jobject thiz, jint isSdcardUsed = flag; } +extern C_LINKAGE void +JAVA_EXPORT_NAME(Settings_nativeSetEnv) ( JNIEnv* env, jobject thiz, jstring j_name, jstring j_value ) +{ + jboolean iscopy; + const char *name = (*env)->GetStringUTFChars(env, j_name, &iscopy); + const char *value = (*env)->GetStringUTFChars(env, j_value, &iscopy); + setenv(name, value, 1); + (*env)->ReleaseStringUTFChars(env, j_name, name); + (*env)->ReleaseStringUTFChars(env, j_value, value); +} + #undef JAVA_EXPORT_NAME #undef JAVA_EXPORT_NAME1 #undef JAVA_EXPORT_NAME2 diff --git a/project/src/Settings.java b/project/src/Settings.java index 6463c991d..36b6a6bcc 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -16,6 +16,7 @@ import android.content.DialogInterface; import android.content.res.Configuration; import android.os.Environment; import android.os.StatFs; +import java.util.Locale; class Settings { @@ -177,6 +178,12 @@ class Settings nativeSetTouchscreenKeyboardUsed(); nativeSetupScreenKeyboard(0, 4); } + String lang = new String(Locale.getDefault().getLanguage()); + if( Locale.getDefault().getCountry().length() > 0 ) + lang = lang + "_" + Locale.getDefault().getCountry(); + System.out.println( "libSDL: setting envvar LANG to '" + lang + "'"); + nativeSetEnv( "LANG", lang ); + // TODO: get current user name and set envvar USER, the API is not availalbe on Android 1.6 so I don't bother with this } static void startDownloader(MainActivity p) @@ -202,5 +209,6 @@ class Settings private static native void nativeSetMultitouchUsed(); private static native void nativeSetTouchscreenKeyboardUsed(); private static native void nativeSetupScreenKeyboard(int size, int nbuttons); + public static native void nativeSetEnv(final String name, final String value); }