android - не могу сделать приложение мультиязычным - PullRequest
0 голосов
/ 16 февраля 2020

Я хочу иметь мультиязычное приложение, я создал файл регресса следующим образом:

enter image description here

Я поместил строку внутри каждая строка. xml файл "welcome" с различными переводами

это мой класс:

public class MyContextWrapper extends ContextWrapper {

public MyContextWrapper(Context base) {
    super(base);
}

@SuppressWarnings("deprecation")
public static ContextWrapper wrap(Context context, String language) {
    Configuration config = context.getResources().getConfiguration();
    Locale sysLocale = null;
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
        sysLocale = getSystemLocale(config);
    } else {
        sysLocale = getSystemLocaleLegacy(config);
    }
    if (!language.equals("") && !sysLocale.getLanguage().equals(language)) {
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            setSystemLocale(config, locale);
        } else {
            setSystemLocaleLegacy(config, locale);
        }

    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        context = context.createConfigurationContext(config);
    } else {
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    }
    return new MyContextWrapper(context);
}

@SuppressWarnings("deprecation")
public static Locale getSystemLocaleLegacy(Configuration config){
    return config.locale;
}

@TargetApi(Build.VERSION_CODES.N)
public static Locale getSystemLocale(Configuration config){
    return config.getLocales().get(0);
}

@SuppressWarnings("deprecation")
public static void setSystemLocaleLegacy(Configuration config, Locale locale){
    config.locale = locale;
}

@TargetApi(Build.VERSION_CODES.N)
public static void setSystemLocale(Configuration config, Locale locale){
    config.setLocale(locale);
}

это мое первое занятие и как я его называю:

 @Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(MyContextWrapper.wrap(newBase,"fa"));
}

проблема в том, что он всегда возвращает значение из каталога значений, поэтому он не работает.

что не так?

1 Ответ

0 голосов
/ 16 февраля 2020

попробуйте этот код, чтобы изменить язык вашего приложения на любой язык устройства:

   Locale locale = new Locale("ar");
   Locale.setDefault(locale);
   Resources res = context.getResources();
   Configuration config = new Configuration();
   DisplayMetrics dm = res.getDisplayMetrics();
   config.locale = locale;
   context.getResources().updateConfiguration(config, dm);
...