Browse Source

[android] Detect prefered language

pull/2478/head
Anders Jenbo 5 years ago
parent
commit
522f748179
  1. 23
      Source/options.cpp
  2. 9
      android-project/app/src/main/java/org/diasurgical/devilutionx/DevilutionXSDLActivity.java

23
Source/options.cpp

@ -8,6 +8,11 @@
#include <fstream>
#include <locale>
#ifdef __ANDROID__
#include "SDL.h"
#include <jni.h>
#endif
#define SI_SUPPORT_IOSTREAMS
#include <SimpleIni.h>
@ -261,14 +266,30 @@ void LoadOptions()
sgOptions.Controller.bRearTouch = GetIniBool("Controller", "Enable Rear Touchpad", true);
#endif
#ifdef __ANDROID__
JNIEnv *env = (JNIEnv *)SDL_AndroidGetJNIEnv();
jobject activity = (jobject)SDL_AndroidGetActivity();
jclass clazz(env->GetObjectClass(activity));
jmethodID method_id = env->GetMethodID(clazz, "getLocale", "()Ljava/lang/String;");
jstring jLocale = (jstring)env->CallObjectMethod(activity, method_id);
const char *cLocale = env->GetStringUTFChars(jLocale, nullptr);
std::string locale = cLocale;
env->ReleaseStringUTFChars(jLocale, cLocale);
env->DeleteLocalRef(jLocale);
env->DeleteLocalRef(activity);
env->DeleteLocalRef(clazz);
#else
std::string locale = std::locale("").name().substr(0, 5);
SDL_Log("prefered locale %s", locale.c_str());
#endif
LogVerbose("Prefered locale: {}", locale);
if (!HasTranslation(locale)) {
locale = locale.substr(0, 2);
if (!HasTranslation(locale)) {
locale = "en";
}
}
LogVerbose("Best match locale: {}", locale);
GetIniValue("Language", "Code", sgOptions.Language.szCode, sizeof(sgOptions.Language.szCode), locale.c_str());

9
android-project/app/src/main/java/org/diasurgical/devilutionx/DevilutionXSDLActivity.java

@ -17,6 +17,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;
public class DevilutionXSDLActivity extends SDLActivity {
private String externalDir;
@ -127,6 +128,14 @@ public class DevilutionXSDLActivity extends SDLActivity {
}
}
/**
* This method is called by SDL using JNI.
*/
public String getLocale()
{
return Locale.getDefault().toString();
}
protected String[] getArguments() {
if (BuildConfig.DEBUG) {
return new String[]{

Loading…
Cancel
Save