Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android play store localization issue

I am working on an android project and I localized my app in two languages, the problem is that it works fine when I run my app directly from the android studio but when I upload my project in google play store and download the app from play store its localization is not working in some version of Android.

This is my java code that sets the local language.

 private static Context updateResources(Context context) {

        Locale locale = new Locale("fa","AF");
        Locale.setDefault(locale);
        Resources res = context.getResources();
        Configuration config = new Configuration(res.getConfiguration());
        if (Build.VERSION.SDK_INT >= 17) {
            config.setLocale(locale);
            context = context.createConfigurationContext(config);
        } else {
            config.locale = locale;
            res.updateConfiguration(config, res.getDisplayMetrics());
        }
        return context;
    }

This is my English layout file.

<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="update">Update</string>
    <string name="app_version_title">New version</string>
    <string name="app_version_title_second">is now available</string>
    <string name="logout_msg">Are you sure you want to logout?</string>
    <string name="logout_title">Log Out?</string>
    <string name="languages">Languages</string>
    <string name="km">Km</string>
</resources>

This is my Persion layout file.

<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="update">به روز رسانی </string>
    <string name="app_version_title">نسخه جدید</string>
    <string name="app_version_title_second">موجود است</string>
    <string name="logout_msg">آیا مطمئین هستید که خارج میشوید؟ </string>
    <string name="logout_title">خروج؟</string>
    <string name="languages">زبانها</string>
    <string name="km">کیلومتر</string>
</resources>

This is the structure of my Values folder.

values strings.xml values-fa-rAF strings.xml

like image 515
Azizullah Avatar asked Jan 08 '19 12:01

Azizullah


People also ask

How do I change localization in Android?

You'll find this screen either in the System Settings app: Languages, or System Settings: System: Languages and input. The Language preference screen should contain one entry called “English (Europe)”. Click Add language and add a fallback language.

How do I change the default locale in Android?

Configuration config = new Configuration(); config. locale = selectedLocale; // set accordingly // eg. if Hindi then selectedLocale = new Locale("hi"); Locale. setDefault(selectedLocale); // has no effect Resources res = getApplicationContext().

How does localization work in Android?

In order to localize the strings used in your application , make a new folder under res with name of values-local where local would be the replaced with the region. Once that folder is made, copy the strings. xmlfrom default folder to the folder you have created. And change its contents.


Video Answer


1 Answers

If you are using app bundle to publish in the play store the android app bundle feature will split the bundle into APK(s) based on the languages for optimizations and smaller sized APK file. Read more here. So only the APK which matches the user's locale will be installed on the device. Therefore changing the language dynamically will not work because the installed APK will contain only the language which is same as user phone's locale. To prevent the split based on the language you need to add the following in your app build.gradle file like below.

android {
  ...
  ...
  bundle {
    language {
        enableSplit = false
    }
  }
}
like image 139
shijo Avatar answered Sep 23 '22 08:09

shijo