ভাষা এবং লোকেল রেজোলিউশন ওভারভিউ

Android 7.0 (API স্তর 24) থেকে শুরু করে, Android বহুভাষিক ব্যবহারকারীদের জন্য উন্নত সমর্থন প্রদান করে, যা তাদেরকে সেটিংসে একাধিক লোকেল নির্বাচন করতে দেয়। অ্যান্ড্রয়েড সমর্থিত লোকেলের সংখ্যা ব্যাপকভাবে প্রসারিত করে এবং সিস্টেমের সংস্থানগুলি সমাধান করার উপায় পরিবর্তন করে এই ক্ষমতা প্রদান করে।

এই ডকুমেন্টটি Android এর 7.0 (API লেভেল 24) এর চেয়ে কম সংস্করণে রিসোর্স রেজোলিউশন কৌশল ব্যাখ্যা করে শুরু হয়। এর পরে, এটি Android 7.0-এ উন্নত রিসোর্স রেজোলিউশন কৌশল বর্ণনা করে। অবশেষে, এটি ব্যাখ্যা করে যে কীভাবে আরও বহুভাষিক ব্যবহারকারীদের সমর্থন করার জন্য বর্ধিত সংখ্যক লোকেলের সুবিধা নেওয়া যায়।

ভাষা সম্পদ সমাধানে চ্যালেঞ্জ

অ্যান্ড্রয়েড 7.0-এর আগে, অ্যান্ড্রয়েড সবসময় অ্যাপ এবং সিস্টেম লোকেলে সফলভাবে মেলে না।

উদাহরণস্বরূপ, অনুমান করুন যে আপনার নিম্নলিখিত পরিস্থিতি রয়েছে:

  • আপনার অ্যাপের ডিফল্ট ভাষা হল en_US (ইউএস ইংরেজি), এবং এটিতে es_ES রিসোর্স ফাইলগুলিতে স্থানীয় স্প্যানিশ স্ট্রিংও রয়েছে।
  • একটি ডিভাইস es_MX এ সেট করা আছে

যখন আপনার জাভা কোড স্ট্রিংগুলিকে নির্দেশ করে, তখন সিস্টেমটি ডিফল্ট ( en_US ) রিসোর্স ফাইল থেকে স্ট্রিংগুলি লোড করবে, এমনকি যদি অ্যাপটিতে es_ES অধীনে স্প্যানিশ রিসোর্স স্থানীয় করা থাকে। এর কারণ হল যখন সিস্টেমটি একটি সঠিক মিল খুঁজে পায় না, তখন এটি লোকেল থেকে দেশের কোড বাদ দিয়ে সংস্থানগুলি সন্ধান করতে থাকে। অবশেষে, যদি কোন মিল পাওয়া না যায়, সিস্টেমটি ডিফল্টে ফিরে যায়, যা en_US

সিস্টেমটি ডিফল্ট en_US তেও হবে যদি ব্যবহারকারী এমন একটি ভাষা বেছে নেয় যা অ্যাপটি সমর্থন করে না, যেমন ফরাসি। যেমন:

সারণী 1. সঠিক লোকেলের মিল ছাড়াই রিসোর্স রেজোলিউশন।

ব্যবহারকারীর সেটিংস অ্যাপ সম্পদ রিসোর্স রেজোলিউশন
fr_CH ডিফল্ট (en)
de_DE
es_ES
fr_FR
it_IT
চেষ্টা করুন fr_CH => ব্যর্থ
চেষ্টা করুন fr => ব্যর্থ
ডিফল্ট ব্যবহার করুন (en)

এই উদাহরণে, ব্যবহারকারী ইংরেজি বুঝতে পারে কিনা তা না জেনে সিস্টেমটি ইংরেজি স্ট্রিংগুলি প্রদর্শন করে। এই আচরণ আজ বেশ সাধারণ.

সম্পদ-রেজোলিউশন কৌশলের উন্নতি

Android 7.0 (API স্তর 24) আরও শক্তিশালী রিসোর্স রেজোলিউশন নিয়ে আসে এবং স্বয়ংক্রিয়ভাবে আরও ভাল ফলব্যাক খুঁজে পায়। যাইহোক, রেজোলিউশনের গতি বাড়ানোর জন্য এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করতে, আপনার সবচেয়ে সাধারণ অভিভাবক উপভাষায় সম্পদ সংরক্ষণ করা উচিত। উদাহরণস্বরূপ, যদি আপনি আগে values-es-rUS ডিরেক্টরিতে স্প্যানিশ সংস্থানগুলি সঞ্চয় করে থাকেন তবে সেগুলিকে values-b+es+419 ডিরেক্টরিতে নিয়ে যান, যেখানে ল্যাটিন আমেরিকান স্প্যানিশ রয়েছে। একইভাবে, যদি আপনার কাছে values-en-rGB নামের একটি ডিরেক্টরিতে রিসোর্স স্ট্রিং থাকে, তাহলে ডিরেক্টরিটির নাম পরিবর্তন করে values-b+en+001 (আন্তর্জাতিক ইংরেজি), কারণ en-GB স্ট্রিংগুলির জন্য সবচেয়ে সাধারণ প্যারেন্ট হল en-001 । নিম্নলিখিত উদাহরণগুলি ব্যাখ্যা করে যে কেন এই অনুশীলনগুলি কার্যক্ষমতা এবং সংস্থান রেজোলিউশনের নির্ভরযোগ্যতা উন্নত করে।

সম্পদ সমাধান উদাহরণ

অ্যান্ড্রয়েডের 7.0-এর বেশি সংস্করণের সাথে, সারণী 1 এ বর্ণিত কেসটি ভিন্নভাবে সমাধান করা হয়েছে:

সারণি 2. যখন কোন সঠিক লোকেল মিল নেই তার জন্য একটি উন্নত রেজোলিউশন কৌশল।

ব্যবহারকারীর সেটিংস অ্যাপ সম্পদ রিসোর্স রেজোলিউশন
  1. fr_CH
ডিফল্ট (en)
de_DE
es_ES
fr_FR
it_IT
চেষ্টা করুন fr_CH => ব্যর্থ
চেষ্টা করুন fr => ব্যর্থ
fr => fr_FR এর বাচ্চাদের চেষ্টা করুন
fr_FR ব্যবহার করুন

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

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

সারণী 3. রিসোর্স রেজোলিউশন যখন অ্যাপটি শুধুমাত্র ব্যবহারকারীর দ্বিতীয়-পছন্দের লোকেল সেটিং এর সাথে মেলে।

ব্যবহারকারীর সেটিংস অ্যাপ সম্পদ রিসোর্স রেজোলিউশন
  1. fr_CH
  2. it_CH
ডিফল্ট (en)
de_DE
es_ES
it_IT
চেষ্টা করুন fr_CH => ব্যর্থ
চেষ্টা করুন fr => ব্যর্থ
fr => ব্যর্থ শিশুদের চেষ্টা করুন
চেষ্টা করুন_CH => ব্যর্থ
চেষ্টা করুন => ব্যর্থ
এটি শিশুদের চেষ্টা করুন => it_IT
এটি_আইটি ব্যবহার করুন

অ্যাপটি ফ্রেঞ্চ সমর্থন না করলেও ব্যবহারকারীরা এখনও একটি ভাষা পায় যা তারা বোঝে।

অতিরিক্ত লোকেল সমর্থন করার জন্য আপনার অ্যাপ ডিজাইন করা

অ্যান্ড্রয়েড এমন সরঞ্জামগুলি সরবরাহ করে যা অ্যাপের বিষয়বস্তু স্থানীয়করণ এবং ব্যবহারকারীদের তাদের পছন্দের ভাষায় যুক্ত করা সহজ করে তোলে। আমরা আপনার অ্যাপকে কনফিগার করতে নিম্নলিখিত কৌশলগুলি ব্যবহার করার পরামর্শ দিই যাতে এটি একটি মাপযোগ্য উপায়ে বিভিন্ন ভাষা এবং ফর্ম্যাটিং কনভেনশনগুলিকে মিটমাট করতে পারে৷

আপনার অ্যাপ যে ভাষাগুলি সমর্থন করে তা নির্দিষ্ট করুন৷

ভাষাগুলি সঠিকভাবে সমাধান করা হয়েছে তা নিশ্চিত করতে, মডিউল-স্তরের build.gradle ফাইলে resConfigs বৈশিষ্ট্য ব্যবহার করে আপনার অ্যাপ যে ভাষাগুলিকে সমর্থন করে তা নির্দিষ্ট করুন৷

নিম্নলিখিত কোড নমুনা সমর্থিত ভাষাগুলি বোঝাতে resConfigs কীভাবে ব্যবহার করবেন তা দেখায়। এই উদাহরণে, অ্যাপটি ইংরেজি এবং স্প্যানিশ উভয়ই সমর্থন করে।

গ্রোভি

android {
    defaultConfig {
        ...
        resConfigs "en", "es"
    }
}

কোটলিন

android {
    defaultConfig {
        ...
        resConfigs("en", "es")
    }
}
বিল্ড সিস্টেম যেভাবে আপনার অ্যাপ এবং এর নির্ভরতা থেকে সংস্থানগুলিকে একত্রিত করে তার কারণে, ব্যবহারকারীর ভাষা সেটিংস সঠিকভাবে প্রাপ্ত হয়েছে তা নিশ্চিত করতে আপনাকে অবশ্যই এইভাবে সমর্থিত ভাষাগুলি নির্দিষ্ট করতে হবে।

LocaleList API

অ্যান্ড্রয়েড 7.0 (এপিআই লেভেল 24) দিয়ে শুরু করে, অ্যান্ড্রয়েড LocaleList.getDefault() API প্রকাশ করে যা অ্যাপগুলিকে ব্যবহারকারীর নির্দিষ্ট করা ভাষার তালিকা সরাসরি জিজ্ঞাসা করতে দেয়। এই API আপনাকে আরও পরিশীলিত অ্যাপ্লিকেশন আচরণ এবং সামগ্রীর আরও ভাল-অপ্টিমাইজ করা প্রদর্শন তৈরি করতে দেয়। উদাহরণস্বরূপ, ব্যবহারকারীর সেটিংসের উপর ভিত্তি করে অনুসন্ধান একাধিক ভাষায় ফলাফল দেখাতে পারে। ব্রাউজার অ্যাপ্লিকেশানগুলি ব্যবহারকারী ইতিমধ্যেই জানে এমন একটি ভাষায় পৃষ্ঠাগুলি অনুবাদ করার প্রস্তাব এড়াতে পারে এবং কীবোর্ড অ্যাপ্লিকেশনগুলি সমস্ত উপযুক্ত লেআউটগুলি স্বয়ংক্রিয়ভাবে সক্ষম করতে পারে৷

ফরম্যাটার

অ্যান্ড্রয়েড 6.0 (এপিআই লেভেল 23) এর মাধ্যমে, অ্যান্ড্রয়েড অনেক সাধারণ ভাষার (en, es, ar, fr, ru) জন্য শুধুমাত্র এক বা দুটি লোকেল সমর্থন করে। যেহেতু প্রতিটি ভাষার মাত্র কয়েকটি রূপ ছিল, অ্যাপগুলি রিসোর্স ফাইলগুলিতে হার্ড কোডেড স্ট্রিং হিসাবে কিছু নম্বর এবং তারিখ সংরক্ষণ করে দূরে যেতে পারে। যাইহোক, অ্যান্ড্রয়েডের সমর্থিত লোকেলের বিস্তৃত সেটের সাথে, তারিখ, সময়, মুদ্রা, এবং একই ধরনের তথ্যের জন্য ফরম্যাটে উল্লেখযোগ্য পার্থক্য এমনকি একটি লোকেলের মধ্যেও হতে পারে। আপনার ফর্ম্যাটগুলিকে হার্ড-কোডিং শেষ ব্যবহারকারীদের জন্য একটি বিভ্রান্তিকর অভিজ্ঞতা তৈরি করতে পারে৷ অতএব, যখন Android 7.0 বা উচ্চতর সংস্করণগুলির জন্য বিকাশ করা হচ্ছে, তখন হার্ড কোডিং নম্বর এবং তারিখের স্ট্রিংগুলির পরিবর্তে ফর্ম্যাটারগুলি ব্যবহার করা নিশ্চিত করুন৷

উদাহরণস্বরূপ, Android 7.0 এবং উচ্চতর 27টি আরবি লোকেলের জন্য সমর্থন অন্তর্ভুক্ত করে। এই লোকেলগুলি বেশিরভাগ সংস্থান ভাগ করতে পারে, তবে কিছু ASCII সংখ্যা পছন্দ করে, অন্যরা স্থানীয় সংখ্যা পছন্দ করে। উদাহরণস্বরূপ, যখন আপনি একটি ডিজিট ভেরিয়েবল সহ একটি বাক্য তৈরি করতে চান, যেমন "একটি 4 সংখ্যার পিন চয়ন করুন", নীচে দেখানো ফর্ম্যাটারগুলি ব্যবহার করুন:

 format(locale, "Choose a %d-digit PIN", 4)