ধারণা ও Jetpack Compose-এর প্রয়োগ
Android অনেক অঞ্চলে অনেক ডিভাইসে চলে। সর্বাধিক ব্যবহারকারীর কাছে পৌঁছাতে, আপনার অ্যাপ যেখানে ব্যবহার করা হয় সেই লোকেলের জন্য উপযুক্ত উপায়ে টেক্সট, অডিও ফাইল, সংখ্যা, মুদ্রা ও গ্রাফিক্স ম্যানেজ করছে কিনা তা নিশ্চিত করুন।
এই পৃষ্ঠায় Android অ্যাপ লোকালাইজ করার কিছু পেশাদার পদ্ধতি বর্ণনা করা হয়েছে।
Kotlin বা Java প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে আপনার ব্যবহারিক জ্ঞান থাকতে হবে এবং Android রিসোর্স লোড করা, XML-এ ইউজার ইন্টারফেস এলিমেন্ট ঘোষণা করা, ডেভেলপমেন্ট সংক্রান্ত বিষয় যেমন অ্যাক্টিভিটি লাইফসাইকেল এবং আন্তর্জাতিকীকরণ ও স্থানীয়করণের সাধারণ নীতি সম্পর্কে পরিচিত হতে হবে।
Android রিসোর্স ফ্রেমওয়ার্ক ব্যবহার করে অ্যাপের মূল কার্যকারিতা থেকে যতটা সম্ভব স্থানীয়করণ করা দিকগুলি আলাদা করা একটি ভালো অভ্যাস।
- আপনার অ্যাপের ইউজার ইন্টারফেসের বেশিরভাগ বা সব কন্টেন্ট রিসোর্স ফাইলে রাখুন, যেমনটি এই পৃষ্ঠায় এবং অ্যাপ রিসোর্সের ওভারভিউ-এ বর্ণনা করা হয়েছে।
- অন্যদিকে, ইউজার ইন্টারফেসের আচরণ আপনার Kotlin-ভিত্তিক বা Java-ভিত্তিক কোড দ্বারা পরিচালিত হয়। যেমন, ব্যবহারকারী যদি এমন ডেটা ইনপুট করেন যা লোকেল অনুযায়ী আলাদাভাবে ফর্ম্যাট বা সাজাতে হয়, তাহলে আপনি Kotlin বা Java প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে প্রোগ্রাম্যাটিক্যালি ডেটা ম্যানেজ করতে পারেন। এই পৃষ্ঠায় Kotlin-ভিত্তিক বা Java-ভিত্তিক কোড কীভাবে লোকালাইজ করতে হয় তা কভার করা হয়নি।
আপনার অ্যাপে স্ট্রিং লোকালাইজ করার জন্য একটি সংক্ষিপ্ত নির্দেশিকা পেতে, বিভিন্ন ভাষা ও সংস্কৃতির জন্য সহায়তা দেখুন।
লোকালাইজেশনের জন্য রিসোর্স ব্যবহার করা
এই বিভাগে ডিফল্ট রিসোর্স এবং বিকল্প রিসোর্স কীভাবে তৈরি করতে হয় তা আলোচনা করা হয়েছে। এছাড়াও, এটি ব্যাখ্যা করে যে কীভাবে রিসোর্সকে অগ্রাধিকার দেওয়া হয় এবং কীভাবে আপনি কোডে আপনার রিসোর্স উল্লেখ করেন।
ডিফল্ট রিসোর্স তৈরি করুন
res/values/strings.xml-এ অ্যাপের ডিফল্ট টেক্সট লিখুন। এইসব স্ট্রিংয়ের জন্য, ডিফল্ট ভাষা ব্যবহার করুন—যে ভাষা আপনার অ্যাপের বেশিরভাগ ব্যবহারকারী বলেন বলে আপনি আশা করেন।
ডিফল্ট রিসোর্স সেটে যেকোনও ডিফল্ট ড্রয়েবল ও লেআউটও অন্তর্ভুক্ত থাকে এবং অ্যানিমেশনের মতো অন্যান্য ধরনের রিসোর্সও অন্তর্ভুক্ত থাকতে পারে। এইসব রিসোর্স নিম্নলিখিত ডিরেক্টরিতে যায়:
res/drawable/: Google Play-তে অ্যাপের আইকনের জন্য অন্তত একটি গ্রাফিক ফাইল সহ প্রয়োজনীয় ডিরেক্টরিres/layout/: XML ফাইল সহ প্রয়োজনীয় ডিরেক্টরি যা ডিফল্ট লেআউট সংজ্ঞায়িত করেres/anim/: আপনার কাছে কোনওres/anim-<qualifiers>ফোল্ডার থাকলে প্রয়োজনres/xml/: আপনার কাছে কোনওres/xml-<qualifiers>ফোল্ডার থাকলে প্রয়োজনres/raw/: আপনার কাছে কোনওres/raw-<qualifiers>ফোল্ডার থাকলে প্রয়োজন
পরামর্শ: আপনার কোডে, Android রিসোর্সের প্রতিটি রেফারেন্স পরীক্ষা করুন। প্রতিটির জন্য ডিফল্ট রিসোর্স উল্লেখ করা আছে কিনা তা নিশ্চিত করুন। এছাড়াও, ডিফল্ট স্ট্রিং ফাইলটি সম্পূর্ণ কিনা তা নিশ্চিত করুন: একটি লোকালাইজড স্ট্রিং ফাইলে স্ট্রিংয়ের একটি সাবসেট থাকতে পারে, তবে ডিফল্ট স্ট্রিং ফাইলে সেগুলি সব থাকতে হবে।
লোকালাইজেশন সংক্রান্ত পরামর্শ
আপনার অ্যাপ লোকালাইজ করার সময় এইসব পরামর্শ অনুসরণ করুন।
পরিবর্তন করা যায় এমন লেআউট ডিজাইন করা
কোনও নির্দিষ্ট ভাষার জন্য আপনার লেআউট নতুন করে সাজাতে হলে,
আপনি সেই ভাষার জন্য একটি বিকল্প লেআউট তৈরি করতে পারেন, যেমন
জার্মান-ভাষার লেআউটের জন্য res/layout-de/main.xml। তবে, এটি করলে
আপনার অ্যাপ ম্যানেজ করা কঠিন হতে পারে। আরও বেশি ফ্লেক্সিবল, এমন একটি লেআউট
তৈরি করা ভাল।
আরেকটি সাধারণ পরিস্থিতি হল এমন একটি ভাষা যার লেআউটে অন্য কিছু প্রয়োজন। যেমন, আপনার কাছে এমন একটি কন্ট্যাক্ট ফর্ম থাকতে পারে যাতে জাপানি ভাষায় অ্যাপটি চালানোর সময় নামের জন্য দুটি ফিল্ড থাকে, কিন্তু অন্য কোনও ভাষায় অ্যাপটি চালানোর সময় নামের জন্য তিনটি ফিল্ড থাকে। আপনি দুটি উপায়ের যেকোনও একটির মাধ্যমে এটি ম্যানেজ করতে পারবেন:
- এমন একটি ফিল্ড সহ লেআউট তৈরি করুন যা আপনি ভাষার উপর ভিত্তি করে প্রোগ্রামের সাহায্যে চালু বা বন্ধ করতে পারবেন।
- প্রধান লেআউটে অন্য একটি লেআউট অন্তর্ভুক্ত করুন যাতে পরিবর্তনযোগ্য ফিল্ড রয়েছে। দ্বিতীয় লেআউটে বিভিন্ন ভাষার জন্য আলাদা কনফিগারেশন থাকতে পারে।
ম্যানুয়ালি লোকাল খুঁজতে Android Context অবজেক্ট ব্যবহার করুন
আপনি Context অবজেক্ট ব্যবহার করে লোকেল দেখতে পারেন
যা Android উপলভ্য করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
val primaryLocale: Locale = context.resources.configuration.locales[0] val locale: String = primaryLocale.displayName
জাভা
Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0); String locale = primaryLocale.getDisplayName();