প্রতি অ্যাপে ভাষার অভিরুচি

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

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

  • সিস্টেম সেটিংস: একটি সেন্ট্রালাইজড লোকেশন যেখানে ব্যবহারকারীরা প্রতিটি অ্যাপের জন্য একটি পছন্দের ভাষা বেছে নিতে পারেন।

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

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

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

    Android-এর আগের ভার্সনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য, AndroidX-এও সমতুল্য API উপলভ্য। তবে, Android 12 (API লেভেল 32) এবং তার আগের ভার্সনের জন্য, ব্যাকওয়ার্ড কম্প্যাটিবল API, অ্যাপ্লিকেশন কন্টেক্সটের সাথে নয়, AppCompatActivity কন্টেক্সটের সাথে কাজ করে। Appcompat 1.6.0 বা তার পরবর্তী ভার্সনের মাধ্যমে ব্যাকওয়ার্ড কম্প্যাটিবল API অ্যাক্সেস করুন।

এই ফিচার প্রয়োগ করার ওভারভিউ

নিচের সারণীতে বিভিন্ন ব্যবহারের ক্ষেত্রে সাজেস্ট করা ইমপ্লিমেন্টেশন দেখানো হয়েছে।

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

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

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

অ্যাপ-প্রতি অটোমেটিক ভাষা সংক্রান্ত সহায়তা চালু করুন

আপনার অ্যাপে অ্যাপ-প্রতি ভাষা সংক্রান্ত সহায়তা যোগ করার জন্য এটিই সাজেস্ট করা পদ্ধতি, কারণ এতে XML পরিবর্তন করার প্রয়োজন হয় না।

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

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

অ্যাপ-প্রতি অটোমেটিক ভাষা সংক্রান্ত সহায়তা চালু করতে, এই ধাপগুলি অনুসরণ করুন:

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

Kotlin

    android {
      androidResources {
        generateLocaleConfig = true
      }
    }

গ্ৰুভি

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

AGP এই ডিফল্ট লোকেল এবং আপনার উল্লেখ করা যেকোনও বিকল্প লোকেল, res ফোল্ডারে values-* ডিরেক্টরি ব্যবহার করে, অটোমেটিক জেনারেট করা LocaleConfig ফাইলে যোগ করে।

লোকেল নাম কীভাবে তৈরি করবেন

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

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

যেমন, আপনার ডিফল্ট লোকেল আমেরিকান ইংরেজি হলে:

unqualifiedResLocale=en-US

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

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

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

  1. res/xml/locale_config.xml নামে একটি ফাইল তৈরি করুন এবং আপনার অ্যাপের ভাষা উল্লেখ করুন, যার মধ্যে আপনার অ্যাপের আল্টিমেট ফলব্যাক লোকেল অন্তর্ভুক্ত, যা res/values/strings.xml-এ উল্লেখ করা লোকেল।

    ফর্ম্যাট সংক্রান্ত প্রয়োজনীয়তার জন্য লোকেল নাম কীভাবে তৈরি করতে হয় দেখুন। এছাড়াও, সবচেয়ে বেশি ব্যবহৃত লোকেলগুলির তালিকার জন্য স্যাম্পেল 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="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/locale_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()

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

val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).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 ব্যবহার করেন, তাহলে ব্যবহারকারী আপনার অ্যাপ-মধ্যস্থ অভিজ্ঞতার মাধ্যমে যে ভাষাই বেছে নিন না কেন, তার সাথে মিল রেখে ডিভাইসের সিস্টেম সেটিংস অটোমেটিক আপডেট হয়ে যায়।

Jetpack Compose ব্যবহার করে প্রয়োগ করা

সম্পূর্ণভাবে Jetpack Compose-এর মাধ্যমে তৈরি করা অ্যাপের ক্ষেত্রে, অ্যাপের লোকেল পরিবর্তন হলে সিস্টেম অটোমেটিক UI আপডেট ম্যানেজ করে। নতুন ভাষা সেট করার জন্য API কল করলে কনফিগারেশন পরিবর্তন ট্রিগার হয়। Compose আপনার UI রিকম্পোজ করে এবং নতুন লোকেল ব্যবহার করে যেকোনও stringResource কল অটোমেটিক সমাধান করে প্রতিক্রিয়া জানায়।

Android 12 (API লেভেল ৩২) এবং তার আগের ভার্সনের সাথে ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য, অ্যাপ-মধ্যস্থ ভাষা বাছাইকারী প্রয়োগ করার সময় আমরা AndroidX সহায়তা লাইব্রেরি (AppCompatDelegate) ব্যবহার করার জন্য জোরালোভাবে সাজেস্ট করি। আপনি এই পদ্ধতি ব্যবহার করলে, আপনার Compose UI হোস্ট করা অ্যাক্টিভিটি অবশ্যই AppCompatActivity এক্সটেন্ড করতে হবে। তবে, প্রয়োজন হলে আপনি সরাসরি ফ্রেমওয়ার্ক API প্রয়োগ করতে পারেন।

নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যায় যে কীভাবে বর্তমান অ্যাপ লোকেল পড়তে হয় এবং কম্পোজেবল ফাংশনের মধ্যে নতুন একটি সেট করতে হয়:

import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.core.os.LocaleListCompat

@Composable
fun LanguageSelector() {
    // Retrieve the currently configured app locale.
    // If no app-specific locale is set, LocaleListCompat.get(0) returns null,
    // so we safely fall back to a default (e.g., "en").
    val appLocales = AppCompatDelegate.getApplicationLocales()
    val currentLocaleTag = appLocales.get(0)?.toLanguageTag() ?: "en"

    // Example UI: A button to toggle between English and Spanish
    Button(
        onClick = {
            val newLanguageTag = if (currentLocaleTag == "en") "es" else "en"
            val localeList = LocaleListCompat.forLanguageTags(newLanguageTag)

            // Setting the locale re-creates the Activity by default,
            // which automatically applies the new configuration to Compose.
            AppCompatDelegate.setApplicationLocales(localeList)
        }
    ) {
        Text(
            text = if (currentLocaleTag == "en") "Switch to Spanish" else "Switch to English"
        )
    }
}

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

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

মনে রাখবেন যে setApplicationLocales কল করলে আপনার Activity আবার তৈরি হয়, যদি না আপনার অ্যাপ নিজেই লোকেল কনফিগারেশন পরিবর্তন ম্যানেজ করে।

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

Android 12 ও এর আগের যেকোনও ভার্সনে কাজ করে

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

<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-এ লোকেল পাস করে আগে থেকে থাকা, ব্যবহারকারীর অনুরোধ করা লোকেল প্রদান করতে পারবেন।

Android ফ্রেমওয়ার্ক API ব্যবহার করে প্রয়োগ করুন

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

LocaleManager সিস্টেম সার্ভিস ব্যবহার করে কীভাবে ব্যবহারকারীর পছন্দের ভাষা সেট করা ও পাওয়া যায় তা নিম্নলিখিত কোড স্নিপেট থেকে জানতে পারবেন:

import android.app.LocaleManager
import android.content.Context
import android.os.Build
import android.os.LocaleList
import androidx.annotation.RequiresApi
import java.util.Locale

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun setAppLanguage(context: Context, languageTag: String) {
    // 1. Retrieve the system service
    val localeManager = context.getSystemService(LocaleManager::class.java)

    // 2. Create a LocaleList from the language tag (e.g., "es-ES" or "ja")
    val localeList = LocaleList(Locale.forLanguageTag(languageTag))

    // 3. Set the locale. The system automatically updates the locale and
    // restarts the app, including any necessary configuration updates.
    localeManager.applicationLocales = localeList
}

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun getAppLanguage(context: Context): String {
    val localeManager = context.getSystemService(LocaleManager::class.java)
    val currentLocales = localeManager.applicationLocales

    // Return the primary app locale, or fall back to the system default
    return if (!currentLocales.isEmpty) {
        currentLocales.get(0).toLanguageTag()
    } else {
        Locale.getDefault().toLanguageTag()
    }
}

অতিরিক্ত পেশাদার পদ্ধতি

নিম্নলিখিত পেশাদার পদ্ধতিগুলি মনে রাখবেন।

অন্য অ্যাপে ইনটেন্ট ইনভোক করার সময় ভাষা বিবেচনা করা

ভাষা-কেন্দ্রিক ইনটেন্ট আপনাকে সেই ভাষা নির্দিষ্ট করার অনুমতি দিতে পারে যে ভাষায় আপনি ইনভোক করা অ্যাপটি দেখতে চান। একটি উদাহরণ হল Speech Recognizer API-এর EXTRA_LANGUAGE ফিচার।

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

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

আপনি যদি সিস্টেম সেটিংস থেকে প্রতি অ্যাপে ভাষার অভিরুচি সরিয়ে দেন, তাহলে আপনার অ্যাপের লোকেল সিস্টেম লোকেলে রিসেট করুন

আপনি যদি সিস্টেম সেটিংস থেকে আপনার অ্যাপের পছন্দের ভাষা সরিয়ে দেন (আপনার অ্যাপের 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()

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

ডিফল্ট হিসেবে, Android ওপেন সোর্স প্রজেক্টে (AOSP) Android সিস্টেম-লেভেল অনুবাদ অন্তর্ভুক্ত করে, যা সবচেয়ে বেশি ব্যবহৃত লোকেলগুলির স্ট্যান্ডার্ড সেটের জন্য প্রযোজ্য। এই বিভাগে অন্তর্ভুক্ত স্যাম্পেল 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>

অতিরিক্ত রিসোর্স

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