প্রতি-অ্যাপ ভাষা পছন্দ

সিস্টেম সেটিংসে প্রতি-অ্যাপ ভাষা

অনেক ক্ষেত্রে, বহুভাষিক ব্যবহারকারীরা তাদের সিস্টেমের ভাষাকে একটি ভাষাতে সেট করে - যেমন ইংরেজি - কিন্তু তারা নির্দিষ্ট অ্যাপের জন্য অন্যান্য ভাষা নির্বাচন করতে চায়, যেমন ডাচ, চাইনিজ বা হিন্দি। এই ব্যবহারকারীদের জন্য অ্যাপগুলিকে আরও ভাল অভিজ্ঞতা প্রদানে সহায়তা করার জন্য, Android 13 একাধিক ভাষা সমর্থন করে এমন অ্যাপগুলির জন্য নিম্নলিখিত বৈশিষ্ট্যগুলি প্রবর্তন করে:

  • সিস্টেম সেটিংস : একটি কেন্দ্রীভূত অবস্থান যেখানে ব্যবহারকারীরা প্রতিটি অ্যাপের জন্য একটি পছন্দের ভাষা নির্বাচন করতে পারেন।

    আপনি আপনার অ্যাপ কনফিগার করতে পারেন যাতে স্বয়ংক্রিয়ভাবে ফাইলগুলি তৈরি করা যায় যাতে প্রতি-অ্যাপের ভাষা পছন্দগুলিকে সমর্থন করা যায় এবং সিস্টেম সেটিংসে দেখা যায়৷ আরও জানতে, স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ ভাষা সমর্থন সক্ষম করার নির্দেশাবলী দেখুন।

  • অতিরিক্ত API : এই সর্বজনীন API, যেমন setApplicationLocales() এবং getApplicationLocales() পদ্ধতি LocaleManager এ, অ্যাপগুলিকে রানটাইমে সিস্টেম ভাষা থেকে একটি ভিন্ন ভাষা সেট করতে দেয়।

    এই APIগুলি স্বয়ংক্রিয়ভাবে সিস্টেম সেটিংসের সাথে সিঙ্ক হয়; তাই, যে অ্যাপগুলি কাস্টম ইন-অ্যাপ ল্যাঙ্গুয়েজ পিকার তৈরি করতে এই APIগুলি ব্যবহার করে সেগুলি নিশ্চিত করবে যে তাদের ব্যবহারকারীরা তাদের ভাষা পছন্দগুলি যেখানেই বেছে নিন না কেন তাদের ব্যবহারকারীদের একটি সামঞ্জস্যপূর্ণ ব্যবহারকারীর অভিজ্ঞতা রয়েছে। পাবলিক APIগুলি আপনাকে বয়লারপ্লেট কোডের পরিমাণ কমাতেও সাহায্য করে, তারা বিভক্ত APK সমর্থন করে এবং তারা অ্যাপ-স্তরের ব্যবহারকারী ভাষা সেটিংস সংরক্ষণ করতে অ্যাপগুলির জন্য স্বয়ংক্রিয় ব্যাকআপ সমর্থন করে।

    পূর্ববর্তী অ্যান্ড্রয়েড সংস্করণগুলির সাথে পিছিয়ে থাকা সামঞ্জস্যের জন্য, সমতুল্য APIগুলিও AndroidX-এ উপলব্ধ। যাইহোক, অ্যান্ড্রয়েড 12 (এপিআই লেভেল 32) এবং তার আগের সংস্করণগুলির জন্য, পিছিয়ে থাকা সামঞ্জস্যপূর্ণ APIগুলি AppCompatActivity প্রসঙ্গের সাথে কাজ করে, অ্যাপ্লিকেশন প্রসঙ্গে নয়। Appcompat 1.6.0 বা উচ্চতর সহ পশ্চাদগামী সামঞ্জস্যপূর্ণ APIগুলি অ্যাক্সেস করুন৷

এই বৈশিষ্ট্য বাস্তবায়নের ওভারভিউ

নিম্নলিখিত সারণী বিভিন্ন ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে প্রস্তাবিত বাস্তবায়ন দেখায়।

ব্যবহারের ক্ষেত্রে প্রস্তাবিত বাস্তবায়ন
আপনার অ্যাপে অ্যাপ-মধ্যস্থ ভাষা চয়নকারী নেই
  1. একটি LocaleConfig ফাইল তৈরি করতে এবং সিস্টেম সেটিংসে আপনার অ্যাপের ভাষা যোগ করতে স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ-প্রতি ভাষা সমর্থন সক্ষম করুন।
  2. ঐচ্ছিকভাবে, যদি আপনি একটি অ্যাপ-মধ্যস্থ ভাষা চয়নকারী যোগ করতে চান: AndroidX লাইব্রেরি ব্যবহার করুন এবং autoStoreLocales মাধ্যমে পশ্চাৎপদ সামঞ্জস্য সমর্থন করতে আমাদের API বাস্তবায়নে নির্বাচন করুন।
আপনার অ্যাপে ইতিমধ্যেই একটি ইন-অ্যাপ ভাষা চয়নকারী রয়েছে৷
  1. একটি LocaleConfig ফাইল তৈরি করতে এবং সিস্টেম সেটিংসে আপনার অ্যাপের ভাষা যোগ করতে স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ-প্রতি ভাষা সমর্থন সক্ষম করুন।
  2. ব্যবহারকারীরা একটি সামঞ্জস্যপূর্ণ অভিজ্ঞতা দেখতে পান তা নিশ্চিত করতে সর্বজনীন API ব্যবহার করতে আপনার অ্যাপের কাস্টম যুক্তি স্থানান্তর করুন৷
  3. নিম্নলিখিত কোণার কেসগুলি পরিচালনা করুন:
    1. Android 13 চালিত ডিভাইসে আপনার অ্যাপটি প্রথমবার চালানো হলে AppCompatDelegate.setApplicationLocales() এ কল করুন।
    2. নিম্নলিখিত ক্ষেত্রে সিস্টেমে পূর্ব-বিদ্যমান ব্যবহারকারী-অনুরোধ করা লোকেলগুলি প্রদান করতে AppCompatDelegate.setApplicationLocales() এ কল করুন:

ব্যবহারকারীদের জন্য সিস্টেম সেটিংস

অ্যান্ড্রয়েড 13 থেকে শুরু করে, অ্যান্ড্রয়েড প্রতি-অ্যাপ ভাষা পছন্দগুলি সেট করার জন্য সিস্টেম সেটিংসে একটি কেন্দ্রীভূত অবস্থান অন্তর্ভুক্ত করে। আপনার অ্যাপের ভাষাগুলি Android 13 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে সিস্টেম সেটিংসে কনফিগারযোগ্য তা নিশ্চিত করতে, স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ ভাষা সমর্থন (প্রস্তাবিত) সক্ষম করুন বা ম্যানুয়ালি সমর্থন কনফিগার করুন

স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ ভাষা সমর্থন সক্ষম করুন

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

মনে রাখবেন যে স্বয়ংক্রিয় প্রতি-অ্যাপ ভাষা বৈশিষ্ট্যটি এমন অ্যাপগুলিকে সমর্থন করে যেগুলি Android 13 (API স্তর 33) বা উচ্চতর চালায়৷ বৈশিষ্ট্যটি ব্যবহার করতে, আপনাকে অবশ্যই compileSdkVersion 33 বা উচ্চতর সেট করতে হবে। Android এর পূর্ববর্তী সংস্করণগুলির জন্য প্রতি-অ্যাপ ভাষা পছন্দগুলি কনফিগার করতে, আপনাকে এখনও API এবং অ্যাপ-মধ্যস্থ ভাষা চয়নকারী ব্যবহার করতে হবে৷

স্বয়ংক্রিয়ভাবে প্রতি-অ্যাপ ভাষা সমর্থন সক্ষম করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. বৈশিষ্ট্যটি চালু করতে, মডিউল-স্তরের build.gradle.kts ফাইলের androidResources {} ব্লকে generateLocaleConfig সেটিংস ব্যবহার করুন ( আপনি যদি Groovy ব্যবহার করেন তবে build.gradle ফাইল)। বৈশিষ্ট্যটি ডিফল্টরূপে বন্ধ।

    কোটলিন

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    গ্রোভি

        android {
          androidResources {
            generateLocaleConfig true
          }
        }
        
  2. একটি ডিফল্ট লোকেল নির্দিষ্ট করুন:
    1. অ্যাপ মডিউলের res ফোল্ডারে, resources.properties নামে একটি নতুন ফাইল তৈরি করুন।
    2. resources.properties ফাইলে, ডিফল্ট লোকেলটি unqualifiedResLocale লেবেল দিয়ে সেট করুন। লোকেল নাম ফরম্যাট করতে, দেখুন কিভাবে লোকেল নাম গঠন করা যায়

AGP এই ডিফল্ট লোকেল এবং আপনার নির্দিষ্ট করা যেকোনো বিকল্প লোকেল যোগ করে, res ফোল্ডারে values-* ডিরেক্টরি ব্যবহার করে, স্বয়ংক্রিয়ভাবে তৈরি LocaleConfig ফাইলে।

কিভাবে স্থানীয় নাম গঠন করতে হয়

লোকেল নাম তৈরি করতে, ভাষা কোডটিকে ঐচ্ছিক স্ক্রিপ্ট এবং অঞ্চল কোডগুলির সাথে একত্রিত করুন, প্রতিটিকে ড্যাশ দিয়ে আলাদা করুন:

  • ভাষা: দুই- বা তিন-অক্ষরের ISO 639-1 কোড ব্যবহার করুন।
  • স্ক্রিপ্ট (ঐচ্ছিক): ISO 15924 কোড ব্যবহার করুন।
  • অঞ্চল (ঐচ্ছিক): হয় দুই-অক্ষরের ISO 3166-1-আলফা-2 কোড বা তিন-সংখ্যার UN_M.49 কোড ব্যবহার করুন।

উদাহরণস্বরূপ যদি আপনার ডিফল্ট লোকেল আমেরিকান ইংরেজি হয়:

unqualifiedResLocale=en-US

সিস্টেম সেটিংসে সমর্থিত ভাষা যোগ করতে android:localeConfig ব্যবহার করুন

অ্যান্ড্রয়েড 13 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে সিস্টেম সেটিংসে এর ভাষাগুলি কনফিগারযোগ্য কিনা তা নিশ্চিত করতে আপনি ম্যানুয়ালি সেট আপ করতে পারেন৷ এটি করার জন্য, একটি locales_config XML ফাইল তৈরি করুন এবং android:localeConfig অ্যাট্রিবিউট ব্যবহার করে এটিকে আপনার অ্যাপের ম্যানিফেস্ট যোগ করুন। android:localeConfig ম্যানিফেস্ট এন্ট্রি সিগন্যাল বাদ দিলে ব্যবহারকারীরা তাদের সিস্টেম সেটিংসের মধ্যে তাদের সিস্টেমের ভাষা থেকে স্বাধীনভাবে আপনার অ্যাপের ভাষা সেট করতে পারবে না।

ব্যবহারকারীর সিস্টেম সেটিংসে ম্যানুয়ালি আপনার অ্যাপের সমর্থিত ভাষা যোগ করতে:

  1. res/xml/locales_config.xml নামে একটি ফাইল তৈরি করুন এবং আপনার অ্যাপের চূড়ান্ত ফলব্যাক লোকেল সহ আপনার অ্যাপের ভাষাগুলি নির্দিষ্ট করুন, যা res/values/strings.xml এ নির্দিষ্ট করা লোকেল।

    বিন্যাসের প্রয়োজনীয়তার জন্য কীভাবে লোকেল নাম তৈরি করবেন তা দেখুন। সবচেয়ে বেশি ব্যবহৃত লোকেলের তালিকার জন্য নমুনা locale_config.xml ফাইলটিও দেখুন।

    উদাহরণস্বরূপ, নিম্নলিখিত ভাষাগুলিকে সমর্থন করে এমন একটি অ্যাপের জন্য locales_config.xml ফাইলটিকে এভাবে ফর্ম্যাট করুন:

    • চূড়ান্ত ফলব্যাক লোকেল হিসাবে ইংরেজি (মার্কিন যুক্তরাষ্ট্র)
    • ইংরেজি যুক্তরাজ্য)
    • ফরাসি
    • জাপানিজ
    • চীনা (সরলীকৃত, ম্যাকাও)
    • চীনা (ঐতিহ্য, ম্যাকাও)
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
       <locale android:name="en-US"/>
       <locale android:name="en-GB"/>
       <locale android:name="fr"/>
       <locale android:name="ja"/>
       <locale android:name="zh-Hans-MO"/>
       <locale android:name="zh-Hant-MO"/>
    </locale-config>
    
  2. ম্যানিফেস্টে, এই নতুন ফাইলের দিকে নির্দেশ করে একটি লাইন যোগ করুন:

    <manifest>
        ...
        <application
            ...
            android:localeConfig="@xml/locales_config">
        </application>
    </manifest>
    

আপনি Android সেটিংসে প্রতি-অ্যাপ্লিকেশান ভাষার তালিকায় প্রদর্শিত ভাষার সেট কাস্টমাইজ করতে LocaleManager.setOverrideLocaleConfig এর সাথে আপনার অ্যাপের localeConfig গতিশীলভাবে আপডেট করতে পারেন। এটি আপনাকে অঞ্চল প্রতি ভাষার তালিকা কাস্টমাইজ করতে, A/B পরীক্ষা চালাতে এবং আপডেট করা লোকেল প্রদান করতে দেয় যদি আপনার অ্যাপ সার্ভার-সাইড স্থানীয়করণ পুশ ব্যবহার করে তাহলে নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

//For setOverrideLocaleConfig
val localeManager = applicationContext
    .getSystemService(LocaleManager::class.java)
localeManager.overrideLocaleConfig = LocaleConfig(
LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")
)

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
val overrideLocaleConfig = localeManager.overrideLocaleConfig
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
val supportedLocales = overrideLocaleConfig.supportedLocales()

জাভা

//For setOverrideLocaleConfig
mContext.getSystemService(LocaleManager.class).setOverrideLocaleConfig(new LocaleConfig(LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")));

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
LocaleConfig overrideLocaleConfig = mContext.getSystemService(LocaleManager.class).getOverrideLocaleConfig();
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
LocaleList supportedLocales = overrideLocaleConfig.getSupportedLocales();

উপরন্তু, IMEs এখন LocaleManager.getApplicationLocales ব্যবহার করতে পারে বর্তমান অ্যাপের UI ভাষা জানতে কীবোর্ডের ভাষা আপডেট করার জন্য দেখানো হয়েছে:

কোটলিন

val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)

জাভা

LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales(appPackageName);

Gradle-এ সমর্থিত ভাষা উল্লেখ করুন

যদি ইতিমধ্যে উপস্থিত না থাকে, তাহলে আপনার অ্যাপের মডিউল-স্তরের build.gradle ফাইলে resourceConfigurations বৈশিষ্ট্য ব্যবহার করে একই ভাষা উল্লেখ করুন:

android {
  ...
  defaultConfig {
    resourceConfigurations += ["en", "en-rGB", "fr", "ja", "b+zh+Hans+MO", "b+zh+Hant+MO"]
  }
}

যখন resourceConfigurations বৈশিষ্ট্য উপস্থিত থাকে, তখন বিল্ড সিস্টেম শুধুমাত্র এই নির্দিষ্ট ভাষার জন্য APK-এ ভাষা সংস্থান অন্তর্ভুক্ত করে, যা আপনার অ্যাপ সমর্থন করে না এমন ভাষাগুলিকে সমর্থন করতে পারে এমন অন্যান্য লাইব্রেরি থেকে অনুবাদ করা স্ট্রিংগুলিকে অন্তর্ভুক্ত করা থেকে বাধা দেয়। আরও তথ্যের জন্য, আপনার অ্যাপ যে ভাষাগুলি সমর্থন করে তা নির্দিষ্ট করুন দেখুন৷

ব্যবহারকারীরা কীভাবে সিস্টেম সেটিংসে একটি অ্যাপের ভাষা নির্বাচন করে

ব্যবহারকারীরা সিস্টেম সেটিংসের মাধ্যমে প্রতিটি অ্যাপের জন্য তাদের পছন্দের ভাষা নির্বাচন করতে পারেন। তারা দুটি ভিন্ন উপায়ে এই সেটিংস অ্যাক্সেস করতে পারে:

  • সিস্টেম সেটিংসের মাধ্যমে অ্যাক্সেস করুন

    সেটিংস > সিস্টেম > ভাষা ও ইনপুট > অ্যাপের ভাষা > (একটি অ্যাপ নির্বাচন করুন)

  • অ্যাপস সেটিংসের মাধ্যমে অ্যাক্সেস করুন

    সেটিংস > অ্যাপস > (একটি অ্যাপ নির্বাচন করুন) > ভাষা

অ্যাপ-মধ্যস্থ ভাষা বাছাইকারীদের পরিচালনা করুন

যে অ্যাপগুলির জন্য ইতিমধ্যেই একটি ইন-অ্যাপ ভাষা চয়নকারী রয়েছে বা একটি ব্যবহার করতে চান, সেটিং পরিচালনা করতে এবং আপনার অ্যাপের জন্য ব্যবহারকারীর পছন্দের ভাষা পেতে কাস্টম অ্যাপ লজিকের পরিবর্তে সর্বজনীন API ব্যবহার করুন। আপনি যদি আপনার অ্যাপ-মধ্যস্থ ভাষা চয়নকারীর জন্য সর্বজনীন API ব্যবহার করেন, তাহলে ডিভাইসের সিস্টেম সেটিংস স্বয়ংক্রিয়ভাবে আপডেট হয় যাতে ব্যবহারকারী আপনার অ্যাপ-মধ্যস্থ অভিজ্ঞতার মাধ্যমে যে ভাষা নির্বাচন করেন তার সাথে মেলে।

পূর্ববর্তী অ্যান্ড্রয়েড সংস্করণগুলির সাথে পিছিয়ে থাকা সামঞ্জস্যের জন্য, আমরা দৃঢ়ভাবে একটি অ্যাপ-মধ্যস্থ ভাষা চয়নকারী প্রয়োগ করার সময় AndroidX সমর্থন লাইব্রেরি ব্যবহার করার পরামর্শ দিই। যাইহোক, যদি আপনার প্রয়োজন হয় তবে আপনি সরাসরি ফ্রেমওয়ার্ক APIগুলি বাস্তবায়ন করতে পারেন।

AndroidX সমর্থন লাইব্রেরি ব্যবহার করে বাস্তবায়ন করুন

Appcompat 1.6.0 বা উচ্চতর এ setApplicationLocales() এবং getApplicationLocales() পদ্ধতি ব্যবহার করুন। Android 12 (API লেভেল 32) এবং তার আগের সংস্করণের জন্য পিছিয়ে থাকা সামঞ্জস্যপূর্ণ APIগুলি AppCompatActivity প্রসঙ্গের সাথে কাজ করে, অ্যাপ্লিকেশন প্রসঙ্গে নয়।

উদাহরণস্বরূপ, ব্যবহারকারীর পছন্দের ভাষা সেট করতে, আপনি ব্যবহারকারীকে ভাষা চয়নকারীতে একটি লোকেল নির্বাচন করতে বলবেন, তারপর সিস্টেমে সেই মানটি সেট করুন:

কোটলিন

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

জাভা

LocaleListCompat appLocale = LocaleListCompat.forLanguageTags("xx-YY");
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale);

মনে রাখবেন যে setApplicationLocales() কল করা আপনার Activity পুনরায় তৈরি করে, যদি না আপনার অ্যাপ স্থানীয় কনফিগারেশনের পরিবর্তনগুলি নিজেই পরিচালনা করে

ব্যবহারকারীর পছন্দের লোকেল পুনরুদ্ধার করতে AppCompatDelegate.getApplicationLocales() ব্যবহার করুন। ব্যবহারকারী হয়তো সিস্টেম সেটিংস থেকে বা আপনার অ্যাপ-মধ্যস্থ ভাষা চয়নকারী থেকে তাদের অ্যাপ লোকেল নির্বাচন করেছেন।

অ্যান্ড্রয়েড 12 এবং তার নিচের সংস্করণ সমর্থন করে

Android 12 (API লেভেল 32) এবং তার নিচের ডিভাইসগুলির জন্য সমর্থন করার জন্য, AndroidX-কে বলুন একটি autoStoreLocales মান true করে android:enabled স্টোরেজ পরিচালনা করতে এবং আপনার অ্যাপের AppLocalesMetadataHolderService পরিষেবার ম্যানিফেস্ট এন্ট্রিতে false autoStoreLocales মান সেট করে নিম্নলিখিত কোডে দেখানো হয়েছে স্নিপেট:

<application
  ...
  <service
    android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
    android:enabled="false"
    android:exported="false">
    <meta-data
      android:name="autoStoreLocales"
      android:value="true" />
  </service>
  ...
</application>

মনে রাখবেন যে একটি autoStoreLocales মান true সেট করার ফলে প্রধান থ্রেডে পড়া একটি ব্লক করা হয় এবং আপনি যদি থ্রেড লঙ্ঘন লগিং করেন তবে এটি একটি StrictMode diskRead এবং diskWrite লঙ্ঘনের কারণ হতে পারে। আরও তথ্যের জন্য AppCompatDelegate.setApplicationLocales() দেখুন।

কাস্টম স্টোরেজ হ্যান্ডলিং

ম্যানিফেস্ট এন্ট্রি বাদ দেওয়া বা autoStoreLocales কে false সংকেত সেট করা যে আপনি নিজের সঞ্চয়স্থান পরিচালনা করছেন। এই ক্ষেত্রে, অ্যাক্টিভিটি লাইফসাইকেলে onCreate এর আগে আপনাকে অবশ্যই সংরক্ষিত লোকেলগুলি প্রদান করতে হবে এবং Android 12 (API লেভেল 32) বা তার নিচের AppCompatDelegate.setApplicationLocales() -এ গেট কল করতে হবে।

যদি আপনার অ্যাপের একটি কাস্টম লোকেল স্টোরেজ অবস্থান থাকে, তাহলে আমরা আপনার কাস্টম লোকেল স্টোরেজ সলিউশন এবং autoStoreLocales মধ্যে এক-বারের হ্যান্ডঅফ ব্যবহার করার পরামর্শ দিই যাতে ব্যবহারকারীরা তাদের পছন্দের ভাষায় আপনার অ্যাপ উপভোগ করতে পারে। এটি বিশেষত সেই ক্ষেত্রে প্রযোজ্য যখন আপনার অ্যাপটি Android 13-এ আপগ্রেড করার পরে প্রথমে চালানো হয়৷ এই ক্ষেত্রে, আপনি আপনার কাস্টম স্টোরেজ থেকে লোকেলগুলি পুনরুদ্ধার করে এবং AppCompatDelegate.setApplicationLocales() এ লোকেলগুলি পাস করে আগে থেকে বিদ্যমান, ব্যবহারকারীর অনুরোধ করা লোকেলগুলি প্রদান করতে পারেন৷ AppCompatDelegate.setApplicationLocales()

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক API ব্যবহার করে বাস্তবায়ন করুন

যদিও আমরা দৃঢ়ভাবে সুপারিশ করি যে আপনি অ্যাপ-মধ্যস্থ ভাষা বাছাইকারীদের বাস্তবায়নের জন্য AndroidX সমর্থন লাইব্রেরি ব্যবহার করুন, আপনি Android 13 চালিত ডিভাইসগুলির জন্য Android ফ্রেমওয়ার্কে setApplicationLocales() এবং getApplicationLocales() পদ্ধতিগুলিও ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, ব্যবহারকারীর পছন্দের ভাষা সেট করতে, আপনি ব্যবহারকারীকে ভাষা চয়নকারীতে একটি লোকেল নির্বাচন করতে বলবেন, তারপর সিস্টেমে সেই মানটি সেট করুন:

// 1. Inside an activity, in-app language picker gets an input locale "xx-YY"
// 2. App calls the API to set its locale
mContext.getSystemService(LocaleManager.class
    ).setApplicationLocales(new LocaleList(Locale.forLanguageTag("xx-YY")));
// 3. The system updates the locale and restarts the app, including any configuration updates
// 4. The app is now displayed in "xx-YY" language

ভাষা চয়নকারীতে প্রদর্শনের জন্য ব্যবহারকারীর বর্তমান পছন্দের ভাষা পেতে, আপনার অ্যাপ সিস্টেম থেকে মান ফিরে পেতে পারে:

// 1. App calls the API to get the preferred locale
LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales();
// 2. App uses the returned LocaleList to display languages to the user

অতিরিক্ত সেরা অনুশীলন

নিম্নলিখিত সেরা অনুশীলন নোট নিন.

অন্য অ্যাপে অভিপ্রায় আহ্বান করার সময় ভাষা বিবেচনা করুন

ভাষা-কেন্দ্রিক অভিপ্রায় আপনাকে যে ভাষাতে আমন্ত্রণ জানাতে চান তা নির্দিষ্ট করার অনুমতি দিতে পারে৷ একটি উদাহরণ হল স্পিচ রিকগনিজার API থেকে EXTRA_LANGUAGE বৈশিষ্ট্য৷

Chrome কাস্টম ট্যাবের জন্য Accept-Language হেডারটি বিবেচনা করুন

একটি Chrome কাস্টম ট্যাব চালু করার সময় আপনার অ্যাপের ভাষায় একটি ওয়েব পৃষ্ঠা খুলতে Browser.EXTRA_HEADERS মাধ্যমে Accept-Language Header যোগ করার কথা বিবেচনা করুন৷ EXTRA_HEADERS৷

আপনি যদি সিস্টেম সেটিংসের মধ্যে প্রতি-অ্যাপ ভাষার পছন্দগুলি সরিয়ে দেন, আপনার অ্যাপ লোকেল সিস্টেম লোকেলে রিসেট করুন

আপনি যদি সিস্টেম সেটিংস থেকে আপনার অ্যাপের ভাষা পছন্দগুলি সরিয়ে দেন (আপনার অ্যাপের AndroidManifest.xml থেকে android:localeConfig সরিয়ে), ব্যবহারকারীরা সহজেই তাদের অ্যাপের ভাষা সিস্টেমের ডিফল্টে রিসেট করতে পারবেন না।

এই কারণে, আপনি যদি android:localeConfig মুছে ফেলেন, তাহলে নিম্নলিখিত কোড স্নিপেটে দেখানো LocaleListCompat.getEmptyLocaleList() বা LocaleList.getEmptyLocaleList() ব্যবহার করে অ্যাপ লোকেলকে সিস্টেম লোকেলে রিসেট করার কথা বিবেচনা করুন:

কোটলিন

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
)

// Or use the Framework APIs for Android 13 and above to reset to the system locale
val context = LocalContext.current
context.getSystemService(LocaleManager::class.java)
  .applicationLocales = LocaleList.getEmptyLocaleList()

জাভা

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
);

// Or use the Framework APIs for Android 13 and above to reset to the system locale
mContext.getSystemService(LocaleManager.class)
  .setApplicationLocales(LocaleList.getEmptyLocaleList());

অতিরিক্ত সম্পদ

অতিরিক্ত তথ্যের জন্য আমাদের কোড নমুনা, ব্লগ নিবন্ধ এবং ভিডিও দেখুন।

নমুনা locale_config.xml ফাইল

ডিফল্টরূপে, অ্যান্ড্রয়েড সবচেয়ে বেশি ব্যবহৃত লোকেলের একটি আদর্শ সেটের জন্য অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্টে (AOSP) সিস্টেম-স্তরের অনুবাদ অন্তর্ভুক্ত করে। এই বিভাগে অন্তর্ভুক্ত নমুনা locale_config.xml ফাইল এই প্রতিটি লোকেলের জন্য প্রস্তাবিত বিন্যাস দেখায়। আপনার অ্যাপ সমর্থন করে এমন ভাষার সেটের জন্য আপনার নিজস্ব locale_config.xml ফাইল তৈরি করতে সাহায্য করার জন্য এই নমুনা ফাইলটি উল্লেখ করুন।

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
   <locale android:name="af"/> <!-- Afrikaans -->
   <locale android:name="am"/> <!-- Amharic -->
   <locale android:name="ar"/> <!-- Arabic -->
   <locale android:name="as"/> <!-- Assamese -->
   <locale android:name="az"/> <!-- Azerbaijani -->
   <locale android:name="be"/> <!-- Belarusian -->
   <locale android:name="bg"/> <!-- Bulgarian -->
   <locale android:name="bn"/> <!-- Bengali -->
   <locale android:name="bs"/> <!-- Bosnian -->
   <locale android:name="ca"/> <!-- Catalan -->
   <locale android:name="cs"/> <!-- Czech -->
   <locale android:name="da"/> <!-- Danish -->
   <locale android:name="de"/> <!-- German -->
   <locale android:name="el"/> <!-- Greek -->
   <locale android:name="en-AU"/> <!-- English (Australia) -->
   <locale android:name="en-CA"/> <!-- English (Canada) -->
   <locale android:name="en-GB"/> <!-- English (United Kingdom) -->
   <locale android:name="en-IN"/> <!-- English (India) -->
   <locale android:name="en-US"/> <!-- English (United States) -->
   <locale android:name="es"/> <!-- Spanish (Spain) -->
   <locale android:name="es-US"/> <!-- Spanish (United States) -->
   <locale android:name="et"/> <!-- Estonian -->
   <locale android:name="eu"/> <!-- Basque -->
   <locale android:name="fa"/> <!-- Farsi -->
   <locale android:name="fi"/> <!-- Finnish -->
   <locale android:name="fil"/> <!-- Filipino -->
   <locale android:name="fr"/> <!-- French (France) -->
   <locale android:name="fr-CA"/> <!-- French (Canada) -->
   <locale android:name="gl"/> <!-- Galician -->
   <locale android:name="gu"/> <!-- Gujarati -->
   <locale android:name="hi"/> <!-- Hindi -->
   <locale android:name="hr"/> <!-- Croatian -->
   <locale android:name="hu"/> <!-- Hungarian -->
   <locale android:name="hy"/> <!-- Armenian -->
   <locale android:name="in"/> <!-- Indonesian -->
   <locale android:name="is"/> <!-- Icelandic -->
   <locale android:name="it"/> <!-- Italian -->
   <locale android:name="iw"/> <!-- Hebrew -->
   <locale android:name="ja"/> <!-- Japanese -->
   <locale android:name="ka"/> <!-- Georgian -->
   <locale android:name="kk"/> <!-- Kazakh -->
   <locale android:name="km"/> <!-- Khmer -->
   <locale android:name="kn"/> <!-- Kannada -->
   <locale android:name="ko"/> <!-- Korean -->
   <locale android:name="ky"/> <!-- Kyrgyz -->
   <locale android:name="lo"/> <!-- Lao -->
   <locale android:name="lt"/> <!-- Lithuanian -->
   <locale android:name="lv"/> <!-- Latvian -->
   <locale android:name="mk"/> <!-- Macedonian -->
   <locale android:name="ml"/> <!-- Malayalam -->
   <locale android:name="mn"/> <!-- Mongolian -->
   <locale android:name="mr"/> <!-- Marathi -->
   <locale android:name="ms"/> <!-- Malay -->
   <locale android:name="my"/> <!-- Burmese -->
   <locale android:name="nb"/> <!-- Norwegian -->
   <locale android:name="ne"/> <!-- Nepali -->
   <locale android:name="nl"/> <!-- Dutch -->
   <locale android:name="or"/> <!-- Odia -->
   <locale android:name="pa"/> <!-- Punjabi -->
   <locale android:name="pl"/> <!-- Polish -->
   <locale android:name="pt-BR"/> <!-- Portuguese (Brazil) -->
   <locale android:name="pt-PT"/> <!-- Portuguese (Portugal) -->
   <locale android:name="ro"/> <!-- Romanian -->
   <locale android:name="ru"/> <!-- Russian -->
   <locale android:name="si"/> <!-- Sinhala -->
   <locale android:name="sk"/> <!-- Slovak -->
   <locale android:name="sl"/> <!-- Slovenian -->
   <locale android:name="sq"/> <!-- Albanian -->
   <locale android:name="sr"/> <!-- Serbian (Cyrillic) -->
   <locale android:name="sr-Latn"/> <!-- Serbian (Latin) -->
   <locale android:name="sv"/> <!-- Swedish -->
   <locale android:name="sw"/> <!-- Swahili -->
   <locale android:name="ta"/> <!-- Tamil -->
   <locale android:name="te"/> <!-- Telugu -->
   <locale android:name="th"/> <!-- Thai -->
   <locale android:name="tr"/> <!-- Turkish -->
   <locale android:name="uk"/> <!-- Ukrainian -->
   <locale android:name="ur"/> <!-- Urdu -->
   <locale android:name="uz"/> <!-- Uzbek -->
   <locale android:name="vi"/> <!-- Vietnamese -->
   <locale android:name="zh-Hans"/> <!-- Chinese (Simplified) -->
   <locale android:name="zh-Hant"/> <!-- Chinese (Traditional) -->
   <locale android:name="zu"/> <!-- Zulu -->
</locale-config>