অ্যান্ড্রয়েড প্রসঙ্গ


92

সবেমাত্র প্রসঙ্গ আপডেট কনফিগারেশন () অ্যান্ড্রয়েড এপিআই 25 এ অবচয় করা হয়েছে এবং এটি প্রসঙ্গে ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। পরিবর্তে createConfigrationContext ()

কেউ কি জানেন যে কীভাবে ক্রিয়েট কনফিগারেশন কনটেক্সট অ্যান্ড্রয়েড সিস্টেমের লোকালকে ওভাররাইড করতে ব্যবহার করা যেতে পারে?

এটি করার আগে:

Configuration config = getBaseContext().getResources().getConfiguration();
config.setLocale(locale);
context.getResources().updateConfiguration(config,
                                 context.getResources().getDisplayMetrics());


এছাড়াও আছে একটি সহজ সমাধান এখানে খুব এই এক অনুরূপ, stackoverflow.com/questions/39705739/...
Thanasis Saxanidis

[আপডেট কনফিগারেশনটি এপিআই লেভেল ২৫-এ অবমুক্ত করা হয়েছিল] ডেভেলপার.অ্যান্ড্রয়েড
মোঃ সিফাতুল ইসলাম

উত্তর:


126

ক্যালিগ্রাফি দ্বারা অনুপ্রাণিত হয়ে আমি একটি প্রসঙ্গের মোড়ক তৈরি করে শেষ করেছি। আমার ক্ষেত্রে, আমার অ্যাপ্লিকেশন ব্যবহারকারীদের অ্যাপ্লিকেশনটির ভাষা পরিবর্তন করার বিকল্পটি সরবরাহ করতে আমার সিস্টেমের ভাষাটি ওভাররাইট করা দরকার তবে এটি আপনাকে প্রয়োগ করতে হবে এমন কোনও যুক্তির সাথে কাস্টমাইজ করা যায়।

    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);
    }

    @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.N) {
             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,"fr"));
}

আপডেট 22/12/2020 অন্ধকার মোড সমর্থন করার জন্য অ্যান্ড্রয়েড ম্যাটারিয়াল লাইব্রেরি কনটেক্সট থেরাপ্র্যাপার প্রয়োগের পরে, ভাষা সেটিংটি ভেঙে যাবে এবং ভাষা সেটিংটি নষ্ট হবে। মাস কয়েক মাথা স্ক্র্যাচিংয়ের পরে, ক্রিয়াকলাপ এবং ফ্রেগমেন্ট অনক্রিট পদ্ধতিতে নিম্নলিখিত কোড যুক্ত করে সমস্যার সমাধান করা হয়েছিল

Context context = MyContextWrapper.wrap(this/*in fragment use getContext() instead of this*/, "fr");
   getResources().updateConfiguration(context.getResources().getConfiguration(), context.getResources().getDisplayMetrics());

আপডেট 10/19/2018 কখনও কখনও ওরিয়েন্টেশন পরিবর্তনের পরে বা ক্রিয়াকলাপটি বিরতি / পুনরারম্ভের পরে কনফিগারেশন অবজেক্টটি ডিফল্ট সিস্টেম কনফিগারেশনে পুনরায় সেট করে এবং ফলস্বরূপ আমরা ফরাসি "ফরাসী" লোকেলের সাথে প্রসঙ্গটি আবৃত করেও ইংরেজী "এন" পাঠ্য প্রদর্শনকারী অ্যাপটি দেখতে পাব result । সুতরাং এবং একটি ভাল অনুশীলন হিসাবে, ক্রিয়াকলাপ বা ক্রিয়াকলাপে ক্রিয়াকলাপ / ক্রিয়াকলাপের অবজেক্টটি কোনও বিশ্বব্যাপী পরিবর্তনশীল বা টুকরো টুকরো করে রাখবেন না।

তদতিরিক্ত, একটি মাইবেসফ্র্যাগমেন্ট বা মাইবেসঅ্যাক্টিভিটিতে নিম্নলিখিতটি তৈরি এবং ব্যবহার করুন:

public Context getMyContext(){
    return MyContextWrapper.wrap(getContext(),"fr");
}

এই অনুশীলনটি আপনাকে 100% বাগ মুক্ত সমাধান সরবরাহ করবে।


4
এই পদ্ধতির সাথে আমার একটি উদ্বেগ আছে ... এটি বর্তমানে কেবলমাত্র পুরো ক্রিয়াকলাপের জন্য নয় কেবল ক্রিয়াকলাপগুলিতে প্রয়োগ করা হচ্ছে। অ্যাপ্লিকেশন উপাদানগুলির জন্য কী ঘটবে যা পরিষেবাগুলি যেমন ক্রিয়াকলাপ থেকে শুরু নাও হতে পারে?
rfgamaral

6
আপনি কনটেক্সট র‍্যাপারটি কেন বাড়িয়ে দেবেন? আপনার কিছু নেই, কেবল স্থির পদ্ধতি?
ভ্লাদিমির 123

7
আমাকে অন্য সংস্থাগুলি থেকে createConfigrationContext / আপডেটConfigration বের করতে হয়েছিল এবং এর নীচে যুক্ত করতে হবে, অন্যথায় প্রথম ক্রিয়াকলাপে সবকিছু ঠিকঠাক ছিল, তবে দ্বিতীয়বার খোলা হলে ভাষাটি ডিভাইস ডিফল্টে ফিরে এসেছে। কারণ খুঁজে পাইনি।
ক্রোক

4
আমি প্রয়োজনীয় রেখাটি যুক্ত করেছি এবং এটি এই গিস্ট
Muhammad-

4
@ ক্রোকি ঠিক বলেছেন সিস্টেমের লোকেল সঠিকভাবে পরিবর্তিত হয়েছে তবে কনফিগারেশনটি ডিফল্ট হয়ে যায়। ফলস্বরূপ, স্ট্রিংস রিসোর্স ফাইলটি আবার ডিফল্ট হয়ে যায় gets প্রতিটি ক্রিয়াকলাপে প্রতিবার কনফিগারেশন সেট করা ছাড়া অন্য কোনও উপায় রয়েছে
যশ লাডিয়া

32

সম্ভবত এটির মতো:

Configuration overrideConfiguration = getBaseContext().getResources().getConfiguration();
overrideConfiguration.setLocales(LocaleList);
Context context  = createConfigurationContext(overrideConfiguration);
Resources resources = context.getResources();

বোনাস: একটি ব্লগ নিবন্ধ যিনি তৈরির কনফিগারেশন কনটেক্সট () ব্যবহার করেন


আমাকে সঠিক দিকে নির্দেশ করার জন্য আপনাকে ধন্যবাদ, আমি অনুমান করি অবশেষে একজনকে একটি কনটেক্সট্র্যাপার তৈরি করতে হবে এবং এটি ক্যালিগ্রাফি দ্বারা সম্পন্নর মতো ক্রিয়াকলাপগুলিতে যুক্ত করতে হবে। যাইহোক পুরষ্কারটি আপনার, তবে যতক্ষণ না আমি কাজের ভিত্তিতে ডান কোডিং পোস্ট করব না ততক্ষণ এটি চূড়ান্ত উত্তর হিসাবে বিবেচনা করবে না।
বাসেল মোরজান

59
এপিআই 24 + ... বোকা গুগল, তারা কি কেবল আমাদের একটি সহজ উপায় সরবরাহ করতে পারে না?
আলী বিদেয়ার

7
@ ক্লিক_বহির এই কথাটি "আপনি যদি কেবলমাত্র এই ডিভাইসগুলিকে লক্ষ্য করেন তবে" এটি সত্যই সহজ করে তোলে না বলে কথা বলা।
ভ্লাদ

4
@ ভ্ল্যাড 2012 এর আগে তৈরি ডিভাইসগুলির যদি আপনার সমর্থন না করার দরকার হয় তবে একটি সহজ পদ্ধতি রয়েছে application
করুন_হির

4
আপনি কোথা থেকে LocaleList
পেয়েছেন

4

ক্যালিগ্রাফি এবং মুরজান এবং নিজে থেকে অনুপ্রাণিত হয়ে আমি এটি তৈরি করেছি।

প্রথমে আপনাকে অবশ্যই অ্যাপ্লিকেশনটির একটি সাবক্লাস তৈরি করতে হবে:

public class MyApplication extends Application {
    private Locale locale = null;

    @Override
    public void onCreate() {
        super.onCreate();

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

        Configuration config = getBaseContext().getResources().getConfiguration();

        String lang = preferences.getString(getString(R.string.pref_locale), "en");
        String systemLocale = getSystemLocale(config).getLanguage();
        if (!"".equals(lang) && !systemLocale.equals(lang)) {
            locale = new Locale(lang);
            Locale.setDefault(locale);
            setSystemLocale(config, locale);
            updateConfiguration(config);
        }
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (locale != null) {
            setSystemLocale(newConfig, locale);
            Locale.setDefault(locale);
            updateConfiguration(newConfig);
        }
    }

    @SuppressWarnings("deprecation")
    private static Locale getSystemLocale(Configuration config) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return config.getLocales().get(0);
        } else {
            return config.locale;
        }
    }

    @SuppressWarnings("deprecation")
    private static void setSystemLocale(Configuration config, Locale locale) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            config.setLocale(locale);
        } else {
            config.locale = locale;
        }
    }

    @SuppressWarnings("deprecation")
    private void updateConfiguration(Configuration config) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            getBaseContext().createConfigurationContext(config);
        } else {
            getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        }
    }
}

তারপরে আপনার এটি আপনার AndroidManLive.xML অ্যাপ্লিকেশন ট্যাগে সেট করতে হবে:

<application
    ...
    android:name="path.to.your.package.MyApplication"
    >

এবং এটি আপনার AndroidManLive.xML ক্রিয়াকলাপ ট্যাগ এ যুক্ত করুন।

<activity
    ...
    android:configChanges="locale"
    >

মনে রাখবেন যে pref_locale একটি স্ট্রিং রিসোর্স:

<string name="pref_locale">fa</string>

যদি pref_locale সেট না করা থাকে তবে হার্ডকোড "এন" ডিফল্ট ল্যাং হয়


এটি যথেষ্ট নয়, আপনার প্রতিটি ক্রিয়াকলাপে প্রসঙ্গকে ওভাররাইড করতে হবে। যেহেতু আপনি এমন পরিস্থিতিতে শেষ করবেন যে আপনার বেসকন্টেক্সটে একটি লোকেল রয়েছে এবং আপনার আবেদনের আরেকটি জায়গা থাকবে। ফলস্বরূপ আপনি আপনার ইউআই তে মিশ্র ভাষা পেয়ে যাবেন। আমার উত্তর দেখুন দয়া করে।
ওলেকসান্ডার আলবুল

3

এখানে 100% কার্যনির্বাহী সমাধান নেই। আপনার createConfigurationContextএবং উভয়ই ব্যবহার করা দরকার applyOverrideConfiguration। তা না হলে এমনকি যদি আপনি প্রতিস্থাপন baseContextনতুন কনফিগারেশন প্রতি কার্যকলাপ, কার্যকলাপ এখনও ব্যবহার করেন Resourcesথেকে ContextThemeWrapperপুরাতন লোকেল সঙ্গে।

সুতরাং এখানে আমার সমাধান যা এপিআই 29 পর্যন্ত কাজ করে:

আপনার MainApplicationশ্রেণি সাবক্লাস থেকে:

abstract class LocalApplication : Application() {

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(
            base.toLangIfDiff(
                PreferenceManager
                    .getDefaultSharedPreferences(base)
                    .getString("langPref", "sys")!!
             )
        )
    }
}

এছাড়াও প্রতিটি Activityথেকে:

abstract class LocalActivity : AppCompatActivity() {

    override fun attachBaseContext(newBase: Context) {
        super.attachBaseContext(            
            PreferenceManager
                .getDefaultSharedPreferences(base)
                    .getString("langPref", "sys")!!
        )
    }

    override fun applyOverrideConfiguration(overrideConfiguration: Configuration) {
        super.applyOverrideConfiguration(baseContext.resources.configuration)
    }
}

যোগ LocaleExt.ktপরবর্তী এক্সটেনশন ফাংশন সঙ্গে

const val SYSTEM_LANG = "sys"
const val ZH_LANG = "zh"
const val SIMPLIFIED_CHINESE_SUFFIX = "rCN"


private fun Context.isAppLangDiff(prefLang: String): Boolean {
    val appConfig: Configuration = this.resources.configuration
    val sysConfig: Configuration = Resources.getSystem().configuration

    val appLang: String = appConfig.localeCompat.language
    val sysLang: String = sysConfig.localeCompat.language

    return if (SYSTEM_LANG == prefLang) {
        appLang != sysLang
    } else {
        appLang != prefLang
                || ZH_LANG == prefLang
    }
}

fun Context.toLangIfDiff(lang: String): Context =
    if (this.isAppLangDiff(lang)) {
        this.toLang(lang)
    } else {
        this
    }

@Suppress("DEPRECATION")
fun Context.toLang(toLang: String): Context {
    val config = Configuration()

    val toLocale = langToLocale(toLang)

    Locale.setDefault(toLocale)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        config.setLocale(toLocale)

        val localeList = LocaleList(toLocale)
        LocaleList.setDefault(localeList)
        config.setLocales(localeList)
    } else {
        config.locale = toLocale
    }

    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        config.setLayoutDirection(toLocale)
        this.createConfigurationContext(config)
    } else {
        this.resources.updateConfiguration(config, this.resources.displayMetrics)
        this
    }
}

/**
 * @param toLang - two character representation of language, could be "sys" - which represents system's locale
 */
fun langToLocale(toLang: String): Locale =
    when {
        toLang == SYSTEM_LANG ->
            Resources.getSystem().configuration.localeCompat

        toLang.contains(ZH_LANG) -> when {
            toLang.contains(SIMPLIFIED_CHINESE_SUFFIX) ->
                Locale.SIMPLIFIED_CHINESE
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ->
                Locale(ZH_LANG, "Hant")
            else ->
                Locale.TRADITIONAL_CHINESE
        }

        else -> Locale(toLang)
    }

@Suppress("DEPRECATION")
private val Configuration.localeCompat: Locale
    get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        this.locales.get(0)
    } else {
        this.locale
    }

আপনার যোগ res/values/arrays.xmlঅ্যারের মধ্যে আপনার সমর্থিত ভাষাগুলি:

<string-array name="lang_values" translatable="false">
    <item>sys</item> <!-- System default -->
    <item>ar</item>
    <item>de</item>
    <item>en</item>
    <item>es</item>
    <item>fa</item>
    ...
    <item>zh</item> <!-- Traditional Chinese -->
    <item>zh-rCN</item> <!-- Simplified Chinese -->
</string-array>

আমি উল্লেখ করতে চাই:

  • ব্যবহারের config.setLayoutDirection(toLocale);লেআউট পরিবর্তন করুন দিক থেকে যখন তোমার মত আরবি, ফারসি, ইত্যাদি আরটিএল লোকেল ব্যবহার
  • "sys" কোডটিতে এমন একটি মান রয়েছে যার অর্থ "সিস্টেমের ডিফল্ট ভাষা উত্তরাধিকারী"।
  • এখানে "ল্যাংপ্রেফ" হল পছন্দের একটি কী যেখানে আপনি ব্যবহারকারীদের বর্তমান ভাষাটি রেখেছেন।
  • যদি ইতিমধ্যে প্রয়োজনীয় লোকেল ব্যবহার করে তবে প্রসঙ্গটি পুনরায় তৈরি করার দরকার নেই।
  • এখানে ContextWraperপোস্ট করার দরকার নেই, কেবল createConfigurationContextবেস কনটেক্সট হিসাবে ফিরে আসা নতুন প্রসঙ্গ সেট করুন
  • এই অত্যন্ত গুরুত্বপূর্ণ! আপনি যখন কল করবেন তখন আপনাকে স্ক্র্যাচ থেকে ক্রেফিটcreateConfigurationContext কনফিগারেশনটি পাস করতে হবে এবং কেবল সম্পত্তি সেট দিয়ে। এই কনফিগারেশনে অন্য কোনও সম্পত্তি সেট করা উচিত নয়। কারণ আমরা যদি এই কনফিগ (জন্য কিছু অন্যান্য বিশিষ্টতাগুলি সেট অভিযোজন উদাহরণস্বরূপ), আমরা সব সময় প্রবেশ করুন যে সম্পত্তি ওভাররাইড, এবং আমাদের প্রসঙ্গ আর এই পরিবর্তন অভিযোজন সম্পত্তি এমনকি যদি আমরা পর্দা আবর্তিত।Locale
  • recreateব্যবহারকারী কেবল ভিন্ন ভাষা নির্বাচন করলে এটি কেবল ক্রিয়াকলাপের পক্ষে যথেষ্ট নয় , কারণ অ্যাপ্লিকেশন কনটেক্সটটি পুরানো লোকেলের সাথে থাকবে এবং এটি অপ্রত্যাশিত আচরণ প্রদান করতে পারে। সুতরাং অগ্রাধিকার পরিবর্তন শুনুন এবং পরিবর্তে পুরো অ্যাপ্লিকেশন টাস্কটি পুনরায় চালু করুন:

fun Context.recreateTask() {
    this.packageManager
        .getLaunchIntentForPackage(context.packageName)
        ?.let { intent ->
            val restartIntent = Intent.makeRestartActivityTask(intent.component)
            this.startActivity(restartIntent)
            Runtime.getRuntime().exit(0)
         }
}

এটা কাজ করে না. প্রতিটি ক্রিয়াকলাপে নকল কোডের পরিবর্তে সমস্ত ক্রিয়াকলাপের জন্য বেস ক্রিয়াকলাপটি বিবেচনা করুন। পাশাপাশি, recreateTask(Context context)পদ্ধতিটি ঠিক মতো কাজ করছে না কারণ আমি এখনও কোনও পরিবর্তন ছাড়াই বিন্যাস দেখছি।
ব্লুওয়্যার

@ ব্লুওয়্যার আমি নমুনাগুলি আপডেট করেছি। আগে কিছু বাগ ছিল। তবে বর্তমানে এটি কাজ করা উচিত, এটি আমার প্রোডাকশন অ্যাপ্লিকেশন থেকে কোড। মজাদার বিনোদন টাস্কটি কাজ করতে পারেনি, আপনি "
টেক্সটটি

1

এখানে কোটলিনের কিছুটা মঙ্গলতার সাথে @ বাসেল-মর্জনের সমাধান রয়েছে:

import android.annotation.TargetApi
import android.content.ContextWrapper
import android.os.Build
import java.util.*

@Suppress("DEPRECATION")
fun ContextWrapper.wrap(language: String): ContextWrapper {
    val config = baseContext.resources.configuration
    val sysLocale: Locale = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        this.getSystemLocale()
    } else {
        this.getSystemLocaleLegacy()
    }

    if (!language.isEmpty() && sysLocale.language != language) {
        val locale = Locale(language)
        Locale.setDefault(locale)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            this.setSystemLocale(locale)
        } else {
            this.setSystemLocaleLegacy(locale)
        }
    }

    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        val context = baseContext.createConfigurationContext(config)
        ContextWrapper(context)
    } else {
        baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
        ContextWrapper(baseContext)
    }

}

@Suppress("DEPRECATION")
fun ContextWrapper.getSystemLocaleLegacy(): Locale {
    val config = baseContext.resources.configuration
    return config.locale
}

@TargetApi(Build.VERSION_CODES.N)
fun ContextWrapper.getSystemLocale(): Locale {
    val config = baseContext.resources.configuration
    return config.locales[0]
}


@Suppress("DEPRECATION")
fun ContextWrapper.setSystemLocaleLegacy(locale: Locale) {
    val config = baseContext.resources.configuration
    config.locale = locale
}

@TargetApi(Build.VERSION_CODES.N)
fun ContextWrapper.setSystemLocale(locale: Locale) {
    val config = baseContext.resources.configuration
    config.setLocale(locale)
}

এবং আপনি এটি কীভাবে ব্যবহার করবেন তা এখানে:

override fun attachBaseContext(newBase: Context?) {
    super.attachBaseContext(ContextWrapper(newBase).wrap(defaultLocale.language))
}

এই লাইনটি val config = baseContext.resources.configurationখুব ভুল। এর কারণে আপনি প্রচুর বাগ সহ শেষ করবেন। পরিবর্তে আপনার নতুন কনফিগারেশন তৈরি করতে হবে। আমার উত্তর দেখুন।
ওলেকসান্ডার আলবুল

0

এখানে প্রাসঙ্গিক সহ একটি সহজ সমাধান রয়েছে: অ্যান্ড্রয়েড এন ভাষা পরিবর্তনক্রমে পরিবর্তন করুন () পদ্ধতিতে পুনরায় তৈরি করুন attention


লিঙ্কটি সহায়ক, এবং একটি ভাল রেফারেন্স। আমি বিশ্বাস করি যে এখানে অতিরিক্ত ক্লিকের পরিবর্তে প্রকৃত উত্তরটি অন্তর্ভুক্ত করা ভাল।
টুথলেস রিবেল

আপনি ঠিক বলেছেন আমি স্ট্যাকওভারফ্লোতে কেবল নতুন এবং আমার মনে হয়েছিল যে উত্তরের জন্য ক্রেডিট নেওয়া ভুল হবে তাই আমি মূল লেখকের লিঙ্কটি পোস্ট করব
থানাসিস স্যাক্সানিডিস

-1

এটা চেষ্টা কর:

Configuration config = getBaseContext().getResources().getConfiguration();
config.setLocale(locale);
context.createConfigurationContext(config);

4
এটি কেবলমাত্র আপনার ক্রিয়াকলাপটিকে
নতুনটির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.