ধারণা এবং জেটপ্যাক কম্পোজ বাস্তবায়ন
অ্যান্ড্রয়েড অনেক অঞ্চলের অনেক ডিভাইসে চলে। সর্বাধিক সংখ্যক ব্যবহারকারীর কাছে পৌঁছানোর জন্য, নিশ্চিত করুন যে আপনার অ্যাপটি যে অঞ্চলে ব্যবহৃত হচ্ছে, সেখানকার উপযোগী উপায়ে টেক্সট, অডিও ফাইল, সংখ্যা, মুদ্রা এবং গ্রাফিক্স পরিচালনা করে।
এই পৃষ্ঠায় অ্যান্ড্রয়েড অ্যাপ স্থানীয়করণ করার কিছু সেরা পদ্ধতি বর্ণনা করা হয়েছে।
আপনার কোটলিন অথবা জাভা প্রোগ্রামিং ভাষার যেকোনো একটিতে কার্যকরী জ্ঞান থাকতে হবে এবং অ্যান্ড্রয়েড রিসোর্স লোডিং , এক্সএমএল-এ ইউজার ইন্টারফেস এলিমেন্ট ঘোষণা করা , অ্যাক্টিভিটি লাইফসাইকেলের মতো ডেভেলপমেন্ট সংক্রান্ত বিষয়সমূহ এবং আন্তর্জাতিকীকরণ ও স্থানীয়করণের সাধারণ নীতি সম্পর্কে পরিচিতি থাকতে হবে।
আপনার অ্যাপের স্থানীয়করণ করা অংশগুলোকে মূল কার্যকারিতা থেকে যথাসম্ভব আলাদা রাখতে অ্যান্ড্রয়েড রিসোর্স ফ্রেমওয়ার্ক ব্যবহার করা একটি ভালো অভ্যাস।
- এই পৃষ্ঠায় এবং 'অ্যাপ রিসোর্স ওভারভিউ'- তে বর্ণিত পদ্ধতি অনুযায়ী আপনার অ্যাপের ইউজার ইন্টারফেসের অধিকাংশ বা সমস্ত বিষয়বস্তু রিসোর্স ফাইলে রাখুন।
- অন্যদিকে, ইউজার ইন্টারফেসের আচরণ আপনার কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোড দ্বারা চালিত হয়। উদাহরণস্বরূপ, যদি ব্যবহারকারীরা এমন ডেটা ইনপুট করে যা লোকেল (locale) অনুযায়ী ভিন্নভাবে ফরম্যাট বা সর্ট করার প্রয়োজন হয়, তাহলে আপনি প্রোগ্রাম্যাটিকভাবে ডেটাটি পরিচালনা করার জন্য কোটলিন বা জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করেন। এই পৃষ্ঠায় আপনার কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোডকে কীভাবে স্থানীয়করণ (localize) করবেন তা আলোচনা করা হয়নি।
আপনার অ্যাপে স্ট্রিং স্থানীয়করণ করার একটি সংক্ষিপ্ত নির্দেশিকার জন্য, ‘বিভিন্ন ভাষা ও সংস্কৃতি সমর্থন করুন’ দেখুন।
স্থানীয়করণের জন্য সম্পদ ব্যবহার করুন
এই অংশে ডিফল্ট রিসোর্স এবং বিকল্প রিসোর্স কীভাবে তৈরি করতে হয় তা আলোচনা করা হয়েছে। এছাড়াও, রিসোর্সগুলোকে কীভাবে অগ্রাধিকার দেওয়া হয় এবং কোডে কীভাবে আপনার রিসোর্সগুলোকে উল্লেখ করতে হয়, তাও ব্যাখ্যা করা হয়েছে।
ডিফল্ট রিসোর্স তৈরি করুন
অ্যাপটির ডিফল্ট টেক্সট res/values/strings.xml ফাইলে রাখুন। এই স্ট্রিংগুলোর জন্য ডিফল্ট ভাষা ব্যবহার করুন—অর্থাৎ, আপনার অ্যাপের অধিকাংশ ব্যবহারকারী যে ভাষায় কথা বলবেন বলে আপনি আশা করেন।
ডিফল্ট রিসোর্স সেটে যেকোনো ডিফল্ট ড্রয়েবল ও লেআউট অন্তর্ভুক্ত থাকে এবং এতে অ্যানিমেশনের মতো অন্যান্য ধরনের রিসোর্সও থাকতে পারে। এই রিসোর্সগুলো নিম্নলিখিত ডিরেক্টরিগুলোতে রাখা হয়:
-
res/drawable/: গুগল প্লে-তে অ্যাপটির আইকনের জন্য প্রয়োজনীয় ডিরেক্টরি, যেখানে অন্তত একটি গ্রাফিক ফাইল থাকবে। -
res/layout/: প্রয়োজনীয় ডিরেক্টরি, যেখানে একটি XML ফাইল থাকে যা ডিফল্ট লেআউট নির্ধারণ করে। -
res/anim/: যদি আপনার কোনোres/anim- <qualifiers>ফোল্ডার থাকে তবে এটি আবশ্যক। -
res/xml/: যদি আপনার কোনোres/xml- <qualifiers>ফোল্ডার থাকে তবে এটি আবশ্যক। -
res/raw/: যদি আপনার কোনোres/raw- <qualifiers>ফোল্ডার থাকে তবে এটি আবশ্যক।
পরামর্শ: আপনার কোডে, অ্যান্ড্রয়েড রিসোর্সের প্রতিটি রেফারেন্স পরীক্ষা করুন। নিশ্চিত করুন যে প্রতিটির জন্য একটি ডিফল্ট রিসোর্স সংজ্ঞায়িত করা আছে। এছাড়াও নিশ্চিত করুন যে ডিফল্ট স্ট্রিং ফাইলটি সম্পূর্ণ: একটি স্থানীয়কৃত স্ট্রিং ফাইলে স্ট্রিংগুলির একটি উপসেট থাকতে পারে, কিন্তু ডিফল্ট স্ট্রিং ফাইলে অবশ্যই সবগুলো থাকতে হবে।
স্থানীয়করণের টিপস
আপনার অ্যাপটি স্থানীয়করণ করার সময় এই পরামর্শগুলো অনুসরণ করুন।
একটি নমনীয় বিন্যাস ডিজাইন করুন
কোনো নির্দিষ্ট ভাষার সাথে মানিয়ে নেওয়ার জন্য যদি আপনার লেআউট পুনর্বিন্যাস করার প্রয়োজন হয়, তবে আপনি সেই ভাষার জন্য একটি বিকল্প লেআউট তৈরি করতে পারেন, যেমন জার্মান ভাষার লেআউটের জন্য res/layout-de/main.xml । তবে, এমনটা করলে আপনার অ্যাপ রক্ষণাবেক্ষণ করা কঠিন হয়ে যেতে পারে। এর চেয়ে বরং একটি একক লেআউট তৈরি করাই শ্রেয়, যা আরও বেশি নমনীয়।
আরেকটি সাধারণ পরিস্থিতি হলো এমন একটি ভাষা, যার লেআউটে ভিন্ন কিছুর প্রয়োজন হয়। উদাহরণস্বরূপ, আপনার একটি কন্টাক্ট ফর্ম থাকতে পারে, যেখানে অ্যাপটি জাপানি ভাষায় চললে দুটি নামের ফিল্ড থাকে, কিন্তু অন্য কোনো ভাষায় চললে তিনটি নামের ফিল্ড থাকে। আপনি দুটি উপায়ের যেকোনো একটিতে এটি সামলাতে পারেন:
- ভাষার ওপর ভিত্তি করে, প্রোগ্রাম্যাটিকভাবে সক্রিয় বা নিষ্ক্রিয় করা যায় এমন একটি ফিল্ডসহ একটি লেআউট তৈরি করুন।
- মূল লেআউটে এমন আরেকটি লেআউট অন্তর্ভুক্ত করুন, যাতে পরিবর্তনযোগ্য ফিল্ডটি থাকবে। দ্বিতীয় লেআউটটিতে বিভিন্ন ভাষার জন্য ভিন্ন ভিন্ন কনফিগারেশন থাকতে পারে।
ম্যানুয়াল লোকেল অনুসন্ধানের জন্য অ্যান্ড্রয়েড কনটেক্সট অবজেক্ট ব্যবহার করুন
অ্যান্ড্রয়েডের দেওয়া Context অবজেক্ট ব্যবহার করে আপনি লোকেল খুঁজে নিতে পারেন, যেমনটা নিচের উদাহরণে দেখানো হয়েছে:
কোটলিন
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();