Android অনেক অঞ্চলে অনেক ডিভাইসে চলে। সর্বাধিক ব্যবহারকারীর কাছে পৌঁছাতে, নিশ্চিত করুন যে আপনার অ্যাপ টেক্সট, অডিও ফাইল, সংখ্যা, মুদ্রা এবং গ্রাফিক্স এমন ভাবে ম্যানেজ করে যা আপনার অ্যাপ যেখানে ব্যবহার করা হয় সেই লোকেলে উপযুক্ত।
এই পৃষ্ঠায় Android অ্যাপ লোকালকরণের পেশাদার পদ্ধতি বর্ণনা করা হয়েছে।
আপনাকে Kotlin সম্পর্কে কার্যকরী জ্ঞান থাকতে হবে এবং Android রিসোর্স লোডিং, অ্যাক্টিভিটি লাইফসাইকেল-এর মতো ডেভেলপমেন্ট সংক্রান্ত বিষয় এবং আন্তর্জাতিকীকরণ ও লোকালাইজেশনের সাধারণ নীতি সম্পর্কে জানতে হবে।
আপনার অ্যাপের মূল কার্যকারিতা থেকে যতটা সম্ভব অ্যাপের লোকালাইজ করা অংশ আলাদা করতে Android রিসোর্স ফ্রেমওয়ার্ক ব্যবহার করা ভাল।
- এই পৃষ্ঠায় এবং অ্যাপ রিসোর্স ওভারভিউতে বর্ণিত আপনার অ্যাপের ইউজার ইন্টারফেসের বেশিরভাগ বা সব কন্টেন্ট রিসোর্স ফাইলে রাখুন।
- অন্যদিকে, ইউজার ইন্টারফেসের আচরণ আপনার Kotlin-ভিত্তিক কোড দ্বারা পরিচালিত হয়। যেমন, ব্যবহারকারীরা যদি এমন ডেটা ইনপুট করেন যা লোকেল অনুযায়ী আলাদাভাবে ফর্ম্যাট বা সাজাতে হবে, তাহলে আপনি Kotlin ব্যবহার করে ডেটা প্রোগ্রাম্যাটিক উপায়ে ম্যানেজ করেন। এই পৃষ্ঠায় আপনার Kotlin-ভিত্তিক কোড কীভাবে লোকালাইজ করবেন সেই বিষয়ে কিছু বলা নেই।
এই গাইডটি সমস্ত Android অ্যাপ জুড়ে ব্যবহৃত মূল Android লোকালাইজেশন সিস্টেমকে কভার করে। আপনার Jetpack Compose UI-তে কীভাবে এইসব লোকালাইজ করা রিসোর্স লোড করবেন তা জানতে, Compose-এ রিসোর্স দেখুন।
আপনার অ্যাপে স্ট্রিং লোকালাইজ করার একটি সংক্ষিপ্ত নির্দেশিকা পেতে, বিভিন্ন ভাষা ও সংস্কৃতিতে সহায়তা করুন দেখুন।
এক নজরে: Android-এ রিসোর্স পাল্টানো
আপনার Android অ্যাপের প্রয়োজনীয় টেক্সট স্ট্রিং, সাউন্ড, গ্রাফিক্স ও অন্যান্য স্ট্যাটিক ডেটা হল রিসোর্স। কোনও অ্যাপে একাধিক রিসোর্স সেট থাকতে পারে, প্রতিটি আলাদা ডিভাইস কনফিগারেশনের জন্য কাস্টমাইজ করা হয়। কোনও ব্যবহারকারী অ্যাপ চালালে, Android অটোমেটিক সেইসব রিসোর্স বেছে নেয় ও লোড করে যা ডিভাইসের সাথে সবচেয়ে ভাল ম্যাচ করে।
এই পৃষ্ঠায় লোকালাইজেশন ও লোকেল সম্পর্কে বলা হয়েছে। সম্পূর্ণ বিবরণের জন্য রিসোর্স-সুইচিং এবং আপনি নির্দিষ্ট করতে পারেন এমন সব ধরনের কনফিগারেশন যেমন স্ক্রিন ওরিয়েন্টেশন বা টাচস্ক্রিনের ধরন দেখুন বিকল্প রিসোর্স প্রদান করুন।
আপনি অ্যাপ লেখার সময়, আপনার অ্যাপ ব্যবহারের জন্য ডিফল্ট ও বিকল্প রিসোর্স
তৈরি করেন। ব্যবহারকারীরা আপনার অ্যাপ চালালে, Android সিস্টেম
ডিভাইসের লোকেল অনুযায়ী কোন রিসোর্স লোড করতে হবে তা বেছে নেয়।
রিসোর্স তৈরি করতে, প্রোজেক্টের res/ ডিরেক্টরির মধ্যে
বিশেষভাবে নামকরণ করা সাবডিরেক্টরিগুলিতে ফাইল প্লেস করুন।
ডিফল্ট রিসোর্স কেন গুরুত্বপূর্ণ
আপনি লোকেল-নির্দিষ্ট টেক্সট প্রদান করেননি এমন কোনও লোকেলে অ্যাপ রান করলে, Android res/values/strings.xml থেকে ডিফল্ট স্ট্রিং লোড করে।
এই ডিফল্ট ফাইলটি না থাকলে অথবা আপনার অ্যাপের প্রয়োজনীয় কোনও স্ট্রিং
এতে না থাকলে, আপনার অ্যাপ রান করবে না
এবং একটি সমস্যা দেখাবে। নিচের উদাহরণ থেকে বোঝা যায় যে
ডিফল্ট টেক্সট ফাইল অসম্পূর্ণ থাকলে কী হতে পারে।
উদাহরণ:
কোনও অ্যাপের Kotlin-ভিত্তিক কোড শুধুমাত্র দুটি স্ট্রিং, text_a
এবং text_b-এর কথা উল্লেখ করে। অ্যাপে একটি স্থানীয়কৃত রিসোর্স ফাইল
(res/values-en/strings.xml) আছে যা ইংরেজিতে text_a ও text_b-এর সংজ্ঞা দেয়।
অ্যাপটিতে একটি ডিফল্ট রিসোর্স ফাইল (res/values/strings.xml) আছে যাতে
text_a-এর সংজ্ঞা দেওয়া আছে, কিন্তু text_b-এর সংজ্ঞা নেই।
- ইংরেজি লোকেলে সেট করা কোনও ডিভাইসে এই অ্যাপ লঞ্চ করা হলে, অ্যাপটি
কোনও সমস্যা ছাড়াই চলতে পারে, কারণ
res/values-en/strings.xml-এ প্রয়োজনীয় টেক্সট স্ট্রিং দু'টিই আছে। - তবে, এই অ্যাপটি যদি এমন কোনও ডিভাইসে লঞ্চ করা হয় যেটি ইংরেজি ছাড়া অন্য কোনও ভাষায় সেট করা আছে, তাহলে ব্যবহারকারী একটি সমস্যার মেসেজ এবং 'জোর করে বন্ধ করুন' বোতাম দেখতে পাবেন। অ্যাপটি লোড হয় না।
এই পরিস্থিতি এড়াতে, নিশ্চিত করুন যে res/values/strings.xml ফাইল আছে
এবং এতে প্রয়োজনীয় প্রতিটি স্ট্রিং সংজ্ঞায়িত করা আছে। এই পরিস্থিতি সব ধরনের
রিসোর্সের ক্ষেত্রে প্রযোজ্য, শুধু স্ট্রিংয়ের ক্ষেত্রে নয়: আপনার অ্যাপ কল করে এমন সব রিসোর্স
থাকা ডিফল্ট রিসোর্স ফাইলের একটি সেট আপনাকে তৈরি করতে হবে, যেমন ড্রয়েবল, ফন্ট,
বা কালার। পরীক্ষা সম্পর্কে তথ্য পেতে, ডিফল্ট রিসোর্সের জন্য পরীক্ষা বিভাগ দেখুন।
লোকালাইজেশনের জন্য রিসোর্স ব্যবহার করা
এই বিভাগে কীভাবে ডিফল্ট রিসোর্স এবং বিকল্প রিসোর্স তৈরি করতে হয় তা আলোচনা করা হয়েছে। এছাড়াও, এটি ব্যাখ্যা করে যে কীভাবে রিসোর্সকে অগ্রাধিকার অ্যাসাইন করা হয় এবং কীভাবে আপনি কোডে আপনার রিসোর্স উল্লেখ করবেন।
ডিফল্ট রিসোর্স তৈরি করা
res/values/strings.xml-এ অ্যাপের ডিফল্ট টেক্সট লিখুন। এইসব স্ট্রিংয়ের জন্য, ডিফল্ট ভাষা ব্যবহার করুন—যে ভাষা আপনার অ্যাপের বেশিরভাগ ব্যবহারকারী বলবেন বলে আপনি আশা করেন।
ডিফল্ট রিসোর্স সেটে যেকোনও ডিফল্ট ড্রয়েবলও অন্তর্ভুক্ত থাকে এবং এতে আইকন বা স্ট্রিংয়ের মতো অন্যান্য ধরনের রিসোর্সও থাকতে পারে। এইসব রিসোর্স নিম্নলিখিত ডিরেক্টরিতে যায়:
res/drawable/: Google Play-তে অ্যাপের আইকনের জন্য অন্তত একটি গ্রাফিক ফাইল সহ প্রয়োজনীয় ডিরেক্টরিres/xml/: আপনার কোনওres/xml-<qualifiers>ফোল্ডার থাকলে প্রয়োজনres/raw/: আপনার কোনওres/raw-<qualifiers>ফোল্ডার থাকলে প্রয়োজন
বিকল্প রিসোর্স তৈরি করা
অ্যাপ লোকালকরণের একটি বড় অংশ হল, বিভিন্ন ভাষার জন্য অল্টারনেটিভ টেক্সট প্রদান করা। কিছু ক্ষেত্রে, আপনি বিকল্প গ্রাফিক্স, সাউন্ড এবং অন্যান্য লোকেল-নির্দিষ্ট রিসোর্সও প্রদান করেন।
কোনও অ্যাপ অনেক res/<qualifiers>/
ডিরেক্টরি নির্দিষ্ট করতে পারে, প্রত্যেকটির আলাদা আলাদা কোয়ালিফায়ার থাকে। আলাদা লোকেলে
বিকল্প রিসোর্স তৈরি করতে, আপনি এমন কোয়ালিফায়ার ব্যবহার করেন যা ভাষা বা
ভাষা-অঞ্চল কম্বিনেশন নির্দিষ্ট করে। কোনও রিসোর্স ডিরেক্টরির নামকে অবশ্যই
বিকল্প রিসোর্স প্রদান করুন-এ বর্ণিত
নামকরণ স্কিম মেনে চলতে হবে, তা না হলে আপনার অ্যাপ কম্পাইল করা যাবে না।
উদাহরণ:
ধরে নিন, আপনার অ্যাপের ডিফল্ট ভাষা হল ইংরেজি এবং আপনি চান যে আপনার অ্যাপের
সব টেক্সট ফরাসি ভাষায় এবং অ্যাপের নাম ছাড়া
সব টেক্সট জাপানি ভাষায় লোকালইজ করতে। এই ক্ষেত্রে, আপনি তিনটি strings.xml ফাইল তৈরি করেন, প্রতিটি
লোকাল-নির্দিষ্ট রিসোর্স ডিরেক্টরিতে সেভ করা হয়:
res/values/strings.xml
অ্যাপ ব্যবহার করে এমন সব স্ট্রিংয়ের জন্য ইংরেজি টেক্সট আছে, এর মধ্যেtitleনামের স্ট্রিংয়ের টেক্সটও আছে।res/values-fr/strings.xml
titleসহ সব স্ট্রিংয়ের জন্য ফরাসি টেক্সট আছে।res/values-ja/strings.xml
সব স্ট্রিংয়ের জন্য জাপানি টেক্সট আছে এগুলি ছাড়াtitle।
আপনার Kotlin-ভিত্তিক কোড R.string.title-এর রেফারেন্স দিলে, রানটাইমে
কী ঘটে তা এখানে দেওয়া হল:
- ডিভাইসে ফরাসি ভাষা ছাড়া অন্য কোনও ভাষা সেট করা থাকলে, Android
titleres/values/strings.xmlফাইল থেকে লোড করে। - ডিভাইসটি ফরাসি ভাষায় সেট করা থাকলে, Android
titleফাইল থেকেres/values-fr/strings.xmlলোড করে।
ডিভাইস জাপানি ভাষায় সেট করা থাকলে, Android res/values-ja/strings.xml ফাইলে
title খোঁজে। কিন্তু যেহেতু সেই
ফাইলে এই ধরনের কোনও স্ট্রিং নেই, তাই Android ডিফল্ট সেটিংসে ফিরে যায় এবং res/values/strings.xml ফাইল থেকে
title ইংরেজি ভাষায় লোড করে।
কোন রিসোর্সকে অগ্রাধিকার দেওয়া হয়?
একাধিক রিসোর্স ফাইল কোনও ডিভাইসের কনফিগারেশনের সাথে ম্যাচ করলে, কোন ফাইল ব্যবহার করা হবে তা ঠিক করার জন্য Android একগুচ্ছ নিয়ম মেনে চলে। কোনও রিসোর্স ডিরেক্টরির নামে উল্লেখ করা যায় এমন কোয়ালিফায়ারগুলির মধ্যে, লোকাল প্রায় সবসময়ই অগ্রাধিকার পায়।
উদাহরণ:
ধরে নিন যে কোনও অ্যাপে গ্রাফিক্সের একটি ডিফল্ট সেট এবং গ্রাফিক্সের দুটি অন্যান্য সেট আছে, প্রতিটি আলাদা আলাদা ডিভাইস সেট-আপের জন্য অপ্টিমাইজ করা হয়েছে:
res/drawable/
ডিফল্ট গ্রাফিক্স আছে।res/drawable-small-land-stylus/
এমন ডিভাইসের সাথে ব্যবহারের জন্য অপ্টিমাইজ করা গ্রাফিক্স আছে যা স্টাইলাস থেকে ইনপুট আশা করে এবং ল্যান্ডস্কেপ ওরিয়েন্টেশনে QVGA লো-ডেনসিটি স্ক্রিন আছে।res/drawable-ja/
জাপানি ভাষায় ব্যবহারের জন্য অপ্টিমাইজ করা গ্রাফিক্স আছে।
অ্যাপটি যদি এমন কোনও ডিভাইসে চলে যা জাপানি ব্যবহার করার জন্য কনফিগার করা হয়েছে,
তাহলে Android res/drawable-ja/ থেকে গ্রাফিক্স লোড করে, এমনকি ডিভাইসটি
যদি এমন হয় যা স্টাইলাস থেকে ইনপুট আশা করে এবং ল্যান্ডস্কেপ ওরিয়েন্টেশনে QVGA লো-ডেনসিটি
স্ক্রিন থাকে।
ব্যতিক্রম: বাছাই করার প্রসেসে শুধুমাত্র মোবাইল কান্ট্রি কোড (MCC) এবং মোবাইল নেটওয়ার্ক কোড (MNC) লোকেলকে অগ্রাধিকার দেয়।
উদাহরণ:
ধরে নিন যে আপনার নিম্নলিখিত পরিস্থিতি হয়েছে:
R.string.text_a-এর জন্য অ্যাপ কোড কল করে।- দুটি প্রাসঙ্গিক রিসোর্স ফাইল উপলভ্য আছে:
res/values-mcc404/strings.xml, যার মধ্যে অ্যাপের ডিফল্ট ভাষা হিসেবেtext_aঅন্তর্ভুক্ত, এই ক্ষেত্রে ইংরেজি।res/values-hi/strings.xml, যার মধ্যে হিন্দি ভাষায়text_aরয়েছে।
- অ্যাপটি এমন একটি ডিভাইসে চলছে যার নিম্নলিখিত কনফিগারেশন আছে:
- সিম কার্ডটি ভারতের (MCC 404) একটি মোবাইল নেটওয়ার্কের সাথে কানেক্ট করা আছে।
- ভাষা হিন্দি (
hi) হিসেবে সেট করা আছে।
ডিভাইস হিন্দির জন্য কনফিগার করা থাকলেও, Android res/values-mcc404/strings.xml থেকে text_a (ইংরেজিতে) লোড করে।
এর কারণ হল, রিসোর্স বেছে নেওয়ার
প্রক্রিয়ায়, Android ভাষার মিলের চেয়ে MCC-এর মিলকে বেশি অগ্রাধিকার দেয়।
এইসব উদাহরণে যেভাবে দেখানো হয়েছে, বেছে নেওয়ার প্রসেস সবসময় ততটা সহজ হয় না। এই প্রসেসের আরও বিস্তারিত বিবরণ পেতে, দেখুন Android কীভাবে সবচেয়ে ভাল ম্যাচিং রিসোর্স খুঁজে পায়। সব কোয়ালিফায়ারকে অ্যাপ রিসোর্স ওভারভিউতে অগ্রাধিকারের ক্রম অনুসারে বর্ণনা ও তালিকাভুক্ত করা হয়েছে।
কোডে রিসোর্স উল্লেখ করা
আপনার অ্যাপের কোটলিন-ভিত্তিক কোডে, আপনি এই সিনট্যাক্স ব্যবহার করে রিসোর্স উল্লেখ করেন
R.resource_type.resource_name অথবা
android.R.resource_type.resource_name।
আরও তথ্যের জন্য, আপনার অ্যাপ রিসোর্স অ্যাক্সেস করুন দেখুন।
লোকালাইজেশনের জন্য স্ট্রিং ম্যানেজ করা
এই বিভাগে, লোকালইজেশন সম্পর্কিত স্ট্রিং ম্যানেজ করার পেশাদার পদ্ধতি বর্ণনা করা হয়েছে।
সব স্ট্রিং strings.xml-এ সরান
অ্যাপ তৈরি করার সময় কোনও স্ট্রিং হার্ডকোড করবেন না। এর পরিবর্তে, ডিফল্ট strings.xml ফাইলে আপনার সব
স্ট্রিং রিসোর্স হিসেবে ঘোষণা করুন, যা এগুলিকে
আপডেট ও লোকালাইজ করা সহজ করে তোলে। strings.xml ফাইলের স্ট্রিংগুলি সহজেই
এক্সট্র্যাক্ট, অনুবাদ করা এবং উপযুক্ত
কোয়ালিফায়ার সহ আপনার অ্যাপে আবার ইন্টিগ্রেট করা যেতে পারে, এর জন্য কম্পাইল করা কোডে কোনও পরিবর্তন করতে হয় না।
যেমন, Compose-এর মাধ্যমে আপনি এই ধরনের স্ট্রিং লোড করতে পারবেন:
// In the res/values/strings.xml file // <string name="compose">Jetpack Compose</string> // In your Compose code Text( text = stringResource(R.string.compose) )
আপনি টেক্সট সহ ছবি জেনারেট করলে, সেইসব স্ট্রিং strings.xml-এও রাখুন
এবং অনুবাদ করার পরে ছবিগুলি আবার জেনারেট করুন।
UI স্ট্রিংয়ের জন্য Android নির্দেশিকা অনুসরণ করুন
UI ডিজাইন ও ডেভেলপ করার সময়, আপনি কীভাবে ব্যবহারকারীর সাথে কথা বলছেন সেটির উপর বিশেষ মনোযোগ দিন। সাধারণত, বন্ধুত্বপূর্ণ কিন্তু সংক্ষিপ্ত এবং আপনার পুরো UI জুড়ে একই ধরনের স্টাইল ব্যবহার করুন।
লেখার স্টাইল ও শব্দ বেছে নেওয়া সংক্রান্ত মেটেরিয়াল ডিজাইন সাজেশন আপনি পড়েছেন ও মেনে চলছেন কিনা তা নিশ্চিত করুন। এটি করলে, আপনার অ্যাপ ব্যবহারকারীর কাছে আরও পরিমার্জিত মনে হবে এবং ব্যবহারকারীদের আপনার UI আরও দ্রুত বুঝতে সাহায্য করবে।
এছাড়াও, যেখানেই সম্ভব, সবসময় Android-এর স্ট্যান্ডার্ড পরিভাষা ব্যবহার করুন, যেমন অ্যাপ বার, বিকল্প মেনু, সিস্টেম বার ও বিজ্ঞপ্তির মতো UI এলিমেন্টের ক্ষেত্রে। Android শব্দগুলি সঠিকভাবে ও ধারাবাহিকভাবে ব্যবহার করলে অনুবাদ করা সহজ হয় এবং ব্যবহারকারীদের জন্য আরও ভালো ফাইনাল প্রোডাক্ট পাওয়া যায়।
ঘোষিত স্ট্রিংয়ের জন্য পর্যাপ্ত প্রসঙ্গ প্রদান করা
আপনার strings.xml ফাইলে স্ট্রিং ঘোষণা করার সময়, স্ট্রিংটি যে
প্রেক্ষিতে ব্যবহার করা হয়েছে তা বর্ণনা করতে ভুলবেন না। এই তথ্য অনুবাদকের কাছে অমূল্য এবং এর ফলে আরও ভালো কোয়ালিটির অনুবাদ পাওয়া যায়। এছাড়াও, এটি আপনাকে আরও দক্ষতার সাথে
আপনার স্ট্রিং ম্যানেজ করতে সাহায্য করে।
এখানে একটি উদাহরণ দেওয়া হল:
<!-- The action for submitting a form. This text is on a button that can fit 30 chars --> <string name="login_submit_button">Sign in</string>
নিম্নলিখিত তথ্যের মতো প্রাসঙ্গিক তথ্য দেওয়ার কথা বিবেচনা করুন:
- এই স্ট্রিং কীসের জন্য? ব্যবহারকারীকে কখন এবং কোথায় এটি দেখানো হয়?
- UI-তে এটি কোথায় আছে? যেমন, টেক্সট বক্সের তুলনায় বোতামে অনুবাদ কম নমনীয় হয়।
মেসেজের যে অংশ অনুবাদ করার প্রয়োজন নেই তা চিহ্নিত করুন
প্রায়শই, স্ট্রিংয়ে এমন টেক্সট থাকে যা অন্য ভাষায় অনুবাদ করার প্রয়োজন হয় না। সাধারণ উদাহরণ হল কোডের অংশ, ভ্যালুর জন্য প্লেসহোল্ডার, একটি বিশেষ চিহ্ন বা নাম। অনুবাদ করার জন্য স্ট্রিং প্রস্তুত করার সময়, যে টেক্সটকে কোনও পরিবর্তন না করে, অনুবাদ না করে যেমন আছে তেমন রাখতে হবে, তা খুঁজে বের করে চিহ্নিত করুন, যাতে অনুবাদক সেটি পরিবর্তন না করেন।
যে টেক্সট অনুবাদ করার প্রয়োজন নেই সেটি চিহ্নিত করতে, <xliff:g> প্লেসহোল্ডার ট্যাগ ব্যবহার করুন।
এখানে একটি উদাহরণ ট্যাগ দেওয়া হল যা থেকে বোঝা যায় যে, মেসেজ যাতে ভেঙে না যায় সেই জন্য "%1$s" টেক্সটটি
অনুবাদ করার সময় পরিবর্তন করা যাবে না:
<string name="countdown"> <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday </string>
আপনি কোনও প্লেসহোল্ডার ট্যাগ ঘোষণা করলে, একটি ID অ্যাট্রিবিউট যোগ করুন যা ব্যাখ্যা করে যে প্লেসহোল্ডারটি কীসের জন্য। আপনার অ্যাপ পরে প্লেসহোল্ডার ভ্যালু পরিবর্তন করলে, প্রত্যাশিত ব্যবহার স্পষ্ট করতে একটি উদাহরণ অ্যাট্রিবিউট দিতে ভুলবেন না।
প্লেসহোল্ডার ট্যাগের আরও কিছু উদাহরণ এখানে দেওয়া হল:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Example placeholder for a special Unicode symbol --> <string name="star_rating">Check out our 5 <xliff:g id="star">\u2605</xliff:g> </string> <!-- Example placeholder for a URL --> <string name="app_homeurl"> Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> </string> <!-- Example placeholder for a name --> <string name="prod_name"> Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> </string> <!-- Example placeholder for a literal --> <string name="promo_message"> Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount. </string> ... </resources>
লোকালাইজেশন চেকলিস্ট
Android অ্যাপ লোকালাইজ ও ডিস্ট্রিবিউট করার প্রসেসের সম্পূর্ণ ওভারভিউ পেতে, আপনার অ্যাপ অনুবাদ ও লোকালাইজ করুন দেখুন।
লোকালাইজেশন সংক্রান্ত পরামর্শ
আপনার অ্যাপ লোকালাইজ করার সময় এইসব পরামর্শ মেনে চলুন।
যেকোনও লোকেলে কাজ করার জন্য আপনার অ্যাপ ডিজাইন করা
ব্যবহারকারী যে ডিভাইসে আপনার অ্যাপ চালান, সেই ডিভাইস সম্পর্কে কোনও কিছু ধরে নেবেন না। ডিভাইসে এমন হার্ডওয়্যার থাকতে পারে যা আপনি আশা করেননি অথবা এটি এমন লোকেলে সেট করা থাকতে পারে যা আপনি পরিকল্পনা করেননি বা যা আপনি পরীক্ষা করতে পারবেন না। আপনার অ্যাপ এমনভাবে ডিজাইন করুন যাতে এটি যে ডিভাইসেই চলুক না কেন, সেটি যেন স্বাভাবিকভাবে কাজ করে বা কোনও সমস্যা হলে তা যেন সহজে সমাধান করা যায়।
গুরুত্বপূর্ণ: আপনার অ্যাপে
ডিফল্ট রিসোর্সের সম্পূর্ণ সেট আছে কিনা তা নিশ্চিত করুন: এর মধ্যে
res/drawable/ এবং res/values/ ফোল্ডার থাকতে হবে। ফোল্ডারের নামে কোনও
অতিরিক্ত মডিফায়ার থাকা চলবে না। এই ফোল্ডারে আপনার অ্যাপের
প্রয়োজনীয় সব ছবি ও টেক্সট থাকতে হবে।
কোনও অ্যাপে একটি ডিফল্ট রিসোর্সও না থাকলে, সেটি এমন
ডিভাইসে রান করে না যেটিতে কাজ করে না এমন লোকেল সেট করা আছে। যেমন, যদি
res/values/strings.xml ডিফল্ট ফাইলে এমন একটি স্ট্রিং না থাকে যা
অ্যাপের প্রয়োজন, তাহলে অ্যাপটি কাজ করে না এমন লোকেলে রান করলে এবং
res/values/strings.xml লোড করার চেষ্টা করলে, ব্যবহারকারী একটি সমস্যার
মেসেজ এবং 'জোর করে বন্ধ করুন' বোতাম দেখতে পাবেন।
আরও তথ্যের জন্য, ডিফল্ট রিসোর্সের জন্য পরীক্ষা করুন বিভাগ দেখুন।
প্রয়োজনের অতিরিক্ত রিসোর্স ফাইল ও টেক্সট স্ট্রিং তৈরি করা এড়িয়ে চলুন
আপনার অ্যাপের প্রতিটি রিসোর্সের জন্য আপনাকে সম্ভবত লোকেল-নির্দিষ্ট বিকল্প তৈরি করতে হবে না।
যেমন, res/drawable/ ডিরেক্টরিতে সংজ্ঞায়িত একটি অ্যাপ লোগো
যেকোনও লোকেলে কাজ করতে পারে, সেক্ষেত্রে কোনও বিকল্প গ্রাফিক ফাইল তৈরি করার
প্রয়োজন নেই।
এছাড়াও, আপনাকে প্রতিটি স্ট্রিংয়ের জন্য অল্টারনেটিভ টেক্সট তৈরি করতে নাও হতে পারে। যেমন, ধরে নিন যে:
- আপনার অ্যাপের ডিফল্ট ভাষা হল আমেরিকান ইংরেজি। অ্যাপটি
ব্যবহার করে এমন প্রতিটি স্ট্রিং
res/values/strings.xml-এ আমেরিকান ইংরেজি বানান ব্যবহার করে সংজ্ঞায়িত করা হয়েছে। - কয়েকটি গুরুত্বপূর্ণ বাক্যাংশের ক্ষেত্রে, আপনি ব্রিটিশ ইংরেজি বানান দিতে চান। যুক্তরাজ্যে কোনও ডিভাইসে আপনার অ্যাপ রান করলে, আপনি চান যে এইসব বিকল্প স্ট্রিং ব্যবহার করা হোক।
এটি করতে, res/values-en-rGB/strings.xml নামের একটি ছোট ফাইল তৈরি করুন
যেটিতে শুধুমাত্র সেইসব স্ট্রিং অন্তর্ভুক্ত থাকে যেগুলি অ্যাপটি যুক্তরাজ্যে চালানোর সময় আলাদা হয়।
বাকি সব স্ট্রিংয়ের জন্য, অ্যাপটি ডিফল্ট সেটিংসে ফিরে যায় এবং res/values/strings.xml-এ
সংজ্ঞায়িত করা মান ব্যবহার করে।
ম্যানুয়াল লোকেল লুক-আপের জন্য LocalConfiguration ব্যবহার করুন
আপনি LocalConfiguration
ব্যবহার করে লোকেল দেখতে পারেন যা Android উপলভ্য করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
val locale = LocalConfiguration.current.locales[0]
অ্যাপ অনুবাদ পরিষেবা ব্যবহার করা
অ্যাপ অনুবাদ পরিষেবা Play Console-এর সাথে ইন্টিগ্রেট করা আছে। এটি আপনাকে তাৎক্ষণিক কোট পেতে এবং অনুবাদ কোম্পানির সাথে অর্ডার প্লেস করতে দেয়। আপনি অ্যাপ UI স্ট্রিং, Play Store তালিকা টেক্সট, IAP নাম ও বিজ্ঞাপন ক্যাম্পেন টেক্সটের জন্য এক বা একাধিক ভাষায় অনুবাদ অর্ডার করতে পারবেন।
অ্যাপ স্ট্রিং অনুবাদ করতে Gemini ব্যবহার করা
আপনার প্রোজেক্টে সরাসরি অ্যাপের স্ট্রিং রিসোর্স অনুবাদ করার জন্য আপনি Android Studio-তে Gemini ব্যবহার করতে পারবেন। আরও তথ্যের জন্য, আপনার অ্যাপ অনুবাদ ও লোকালাইজ করা দেখুন।
লোকালাইজ করা অ্যাপ পরীক্ষা করা
ডিভাইসে বা Android এমুলেটর ব্যবহার করে আপনার লোকালাইজ করা অ্যাপ পরীক্ষা করুন। বিশেষ করে, আপনার অ্যাপে সব প্রয়োজনীয় ডিফল্ট রিসোর্স অন্তর্ভুক্ত করা হয়েছে কিনা তা নিশ্চিত করতে টেস্ট করুন।
ডিভাইসে পরীক্ষা করা
মনে রাখবেন, আপনি যে ডিভাইস ব্যবহার করে পরীক্ষা করছেন সেটি অন্যান্য জায়গায় গ্রাহকদের জন্য উপলভ্য ডিভাইসের থেকে অনেক আলাদা হতে পারে। আপনার ডিভাইসে উপলভ্য লোকেল অন্য ডিভাইসে উপলভ্য লোকেল থেকে আলাদা হতে পারে। এছাড়াও, ডিভাইসের স্ক্রিনের রেজোলিউশন ও ডেনসিটি আলাদা হতে পারে, যা আপনার UI-তে স্ট্রিং ও ড্রয়েবল ডিসপ্লেকে প্রভাবিত করতে পারে।
কোনও ডিভাইসে লোকেল বা ভাষা পরিবর্তন করতে, সেটিংস অ্যাপ ব্যবহার করুন।
কম্পোজ করা যায় এমন প্রিভিউয়ের মাধ্যমে পরীক্ষা করা
কোনও ডিভাইসে পরীক্ষা করার আগে, আপনি Android Studio-তে কম্পোজ করা যায় এমন প্রিভিউ
ব্যবহার করে এমুলেটরে ডেপ্লয় না করেই স্থানীয়করণ করা UI পরীক্ষা করতে পারবেন। বিভিন্ন ভাষায় আপনার UI-এর প্রিভিউ দেখতে, @Preview
অ্যানোটেশন (যেমন @Preview(locale = "fr")) ব্যবহার করুন। এছাড়াও, আপনি ডানদিক-থেকে-বাঁদিকে
(RTL) লেআউট পরীক্ষা করতে, @Preview(locale = "ar")-এর মতো RTL লোকেল নির্দিষ্ট করতে পারেন।
ইমুলেটরে পরীক্ষা করা
এমুলেটর ব্যবহার করা সম্পর্কে বিস্তারিত জানতে, Android এমুলেটরে অ্যাপ রান করানো দেখুন।
কাস্টম লোকেল তৈরি ও ব্যবহার করা
"কাস্টম" লোকেল হল ভাষা বা অঞ্চলের এমন একটি কম্বিনেশন যা Android সিস্টেম ইমেজ স্পষ্টভাবে সাপোর্ট করে না। আপনি এমুলেটরে কাস্টম লোকেল তৈরি করে কাস্টম লোকেলে আপনার অ্যাপ কীভাবে চলে তা পরীক্ষা করে দেখতে পারেন। এটি করার দুটি উপায় আছে:
- অ্যাপ ট্যাব থেকে অ্যাক্সেস করা যায় এমন কাস্টম লোকেল অ্যাপ ব্যবহার করুন। আপনি কাস্টম লোকেল তৈরি করার পরে, লোকেলের নামে টাচ করে ধরে রেখে সেটি পাল্টে নিন।
- নিম্নলিখিত
বিভাগে বর্ণিত
adbশেল থেকে কাস্টম লোকেলে পরিবর্তন করুন।
আপনি এমুলেটরকে এমন লোকেলে সেট করলে যা Android সিস্টেম ইমেজে উপলভ্য নেই, সিস্টেমটি নিজেই তার ডিফল্ট ভাষায় দেখায়। আপনার অ্যাপ, তবে, সঠিকভাবে লোকালাইজ করে।
adb শেল থেকে এমুলেটরের লোকেল পরিবর্তন করা
adb শেল ব্যবহার করে এমুলেটরে লোকেল পরিবর্তন করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- আপনি যে লোকেল পরীক্ষা করতে চান সেটি বেছে নিন এবং এর BCP-47 ল্যাঙ্গুয়েজ ট্যাগ নির্ধারণ করুন,
যেমন
fr-CAহল কানাডিয়ান ফরাসি। - ইমুলেটর লঞ্চ করুন।
- হোস্ট কম্পিউটারের কমান্ড-লাইন শেল থেকে, নিম্নলিখিত কমান্ডটি রান করুন:
adb shell
অথবা, আপনার কোনও ডিভাইস অ্যাটাচ করা থাকলে, আপনি যে এমুলেটর চান তা নির্দিষ্ট করুন-eবিকল্প যোগ করে:
adb -e shell adbশেল প্রম্পটে (#), এই কমান্ডটি চালান:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
ধাপ ১ থেকে উপযুক্ত কোড দিয়ে ব্র্যাকেটের মধ্যে থাকা অংশগুলি পাল্টে দিন।
যেমন, কানাডিয়ান ফরাসি ভাষায় পরীক্ষা করতে:
setprop persist.sys.locale fr-CA;stop;sleep 5;start
এর ফলে এমুলেটর রিস্টার্ট হয়। হোম স্ক্রিন আবার দেখা গেলে, আপনার অ্যাপ আবার লঞ্চ করুন এবং অ্যাপটি নতুন লোকেলে লঞ্চ হবে।
ডিফল্ট রিসোর্স পরীক্ষা করা
কোনও অ্যাপে প্রয়োজনীয় সব স্ট্রিং রিসোর্স আছে কিনা তা পরীক্ষা করে দেখতে, নিম্নলিখিত কাজগুলি করুন:
- আপনার অ্যাপ কাজ করে না এমন কোনও ভাষায় এমুলেটর বা ডিভাইস সেট করুন। যেমন, অ্যাপে
res/values-fr/-এ ফরাসি স্ট্রিং থাকলেওres/values-es/-এ কোনও স্প্যানিশ স্ট্রিং না থাকলে, এমুলেটরের লোকেলকে স্প্যানিশ হিসেবে সেট করুন। আপনি Custom Locale অ্যাপ ব্যবহার করে এমুলেটরকে কাজ করে না এমন লোকেলে সেট করতে পারবেন। - অ্যাপটি চালান।
- অ্যাপটি যদি কোনও সমস্যার মেসেজ এবং 'জোর করে বন্ধ করুন' বোতাম দেখায়, তাহলে এটি
এমন কোনও স্ট্রিং খুঁজছে যা উপলভ্য নেই। আপনার
res/values/strings.xmlফাইলে অ্যাপ ব্যবহার করে এমন প্রতিটি স্ট্রিংয়ের সংজ্ঞা অন্তর্ভুক্ত আছে কিনা তা নিশ্চিত করুন।
পরীক্ষা সফল হলে, অন্যান্য কনফিগারেশনের জন্য এটি আবার করুন। যেমন, অ্যাপে res/values-land/strings.xml নামের একটি স্ট্রিং ফাইল থাকলেও res/values-port/strings.xml নামের
কোনও ফাইল না থাকলে, এমুলেটর বা ডিভাইসটি
পোর্ট্রেট ওরিয়েন্টেশনে সেট করে দেখুন অ্যাপটি চলছে কিনা।
অতিরিক্ত রিসোর্স
লোকালাইজেশন সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত অতিরিক্ত রিসোর্স দেখুন: