java - Android getting wrong localization strings -


i'm writing app want add multiple language support. have english , bulgarian, when start activities has default values instead of localized. i'm setting manually location via overriding attachbasecontext. when change language english, again bulgarian (without leaving activity, recreating it) working properly. when start app (in mainactivity) working properly. strings in string.xml under values , values-bg folders.

mycontextwrapper

import android.annotation.targetapi; import android.content.context; import android.content.contextwrapper; import android.content.res.configuration; import android.os.build;  import java.util.locale;  public class mycontextwrapper extends contextwrapper {      public mycontextwrapper(context base) {         super(base);     }      public static contextwrapper wrap(context context, string language) {          configuration config = context.getresources().getconfiguration();         locale syslocale;          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);             }              context = context.createconfigurationcontext(config);          }          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);     } } 

classes.basics

import android.content.context; import android.content.contextwrapper; import android.content.sharedpreferences; import android.preference.preferencemanager;  import <appname>.r;  public class basics {     // used in activity creation (auto) language     public static contextwrapper getbasecontext(context newbase){         return mycontextwrapper.wrap(newbase, getlanguage(newbase));     }      // shared preferences     public static sharedpreferences sharedprefs(context context){         return preferencemanager.getdefaultsharedpreferences(context);     }      public static string getlanguage(context context){         return sharedprefs(context).getstring(                 context.getstring(r.string.pref_language),                 context.getstring(r.string.default_language));     } } 

part of mainactivity

@override protected void attachbasecontext(context newbase) {     super.attachbasecontext(basics.getbasecontext(newbase)); }  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);  .....  } 

part of languageselectactivity

@override protected void attachbasecontext(context newbase) {     super.attachbasecontext(basics.getbasecontext(newbase)); }  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_language_select);      log.e("oncreate info", ""             + "\n" + locale.getdefault().getlanguage()             + "\n" + locale.getdefault().getiso3language()             + "\n" + locale.getdefault().getcountry()             + "\n" + locale.getdefault().getiso3country()             + "\n" + locale.getdefault().getdisplaycountry()             + "\n" + locale.getdefault().getdisplayname()             + "\n" + locale.getdefault().getdisplaylanguage()             + "\n" + locale.getdefault().tostring()     );  ......  } 

the result of log.e is:

oncreate info: bg bul    български български bg 

strings pref_language , default_language not translated , in files different string.xml


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -