আপনার অ্যাপ্লিকেশন স্থানীয়করণ

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

এই পৃষ্ঠাটি Android অ্যাপ্লিকেশানগুলির স্থানীয়করণের জন্য সর্বোত্তম অনুশীলনগুলি বর্ণনা করে৷

আপনার কোটলিন বা জাভা প্রোগ্রামিং ভাষার কাজের জ্ঞান থাকতে হবে এবং অ্যান্ড্রয়েড রিসোর্স লোডিং , এক্সএমএল-এ ইউজার ইন্টারফেস উপাদান ঘোষণা , কার্যকলাপ জীবনচক্রের মতো উন্নয়ন বিবেচনা এবং আন্তর্জাতিকীকরণ এবং স্থানীয়করণের সাধারণ নীতিগুলির সাথে পরিচিত হতে হবে।

মূল অ্যাপ কার্যকারিতা থেকে যতটা সম্ভব আপনার অ্যাপের স্থানীয় দিকগুলিকে আলাদা করতে Android রিসোর্স ফ্রেমওয়ার্ক ব্যবহার করা ভাল অভ্যাস।

  • আপনার অ্যাপের ইউজার ইন্টারফেসের বেশিরভাগ বা সমস্ত বিষয়বস্তু রিসোর্স ফাইলে রাখুন, যেমন এই পৃষ্ঠায় এবং অ্যাপ রিসোর্স ওভারভিউতে বর্ণনা করা হয়েছে।
  • অন্যদিকে ইউজার ইন্টারফেসের আচরণ আপনার কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোড দ্বারা চালিত হয়। উদাহরণস্বরূপ, যদি ব্যবহারকারীদের ইনপুট ডেটা যা ফরম্যাট করা বা লোকেলের উপর নির্ভর করে ভিন্নভাবে সাজানো প্রয়োজন, তাহলে আপনি প্রোগ্রামগতভাবে ডেটা পরিচালনা করতে Kotlin বা Java প্রোগ্রামিং ভাষা ব্যবহার করেন। এই পৃষ্ঠাটি আপনার কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোডকে কীভাবে স্থানীয়করণ করতে হয় তা কভার করে না।

আপনার অ্যাপে স্ট্রিং স্থানীয়করণের জন্য একটি সংক্ষিপ্ত নির্দেশিকা দেখুন, বিভিন্ন ভাষা এবং সংস্কৃতি সমর্থন করুন

ওভারভিউ: অ্যান্ড্রয়েডে রিসোর্স স্যুইচিং

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

এই পৃষ্ঠাটি স্থানীয়করণ এবং লোকেলে ফোকাস করে। রিসোর্স-স্যুইচিং এবং সমস্ত ধরণের কনফিগারেশনের সম্পূর্ণ বিবরণের জন্য যা আপনি নির্দিষ্ট করতে পারেন, যেমন স্ক্রীন ওরিয়েন্টেশন বা টাচস্ক্রীনের ধরন, বিকল্প সংস্থান সরবরাহ করুন দেখুন।

আপনি যখন আপনার অ্যাপ লেখেন, আপনি আপনার অ্যাপ ব্যবহারের জন্য ডিফল্ট এবং বিকল্প সংস্থান তৈরি করেন। যখন ব্যবহারকারীরা আপনার অ্যাপ চালান, তখন Android সিস্টেম ডিভাইসের লোকেলের উপর ভিত্তি করে কোন সংস্থানগুলি লোড করতে হবে তা নির্বাচন করে৷ সম্পদ তৈরি করতে, আপনি প্রকল্পের res/ ডিরেক্টরির বিশেষভাবে নামকৃত সাব-ডিরেক্টরির মধ্যে ফাইল রাখুন।

কেন ডিফল্ট সম্পদ গুরুত্বপূর্ণ

যখন অ্যাপটি এমন কোনো লোকেলে চলে যার জন্য আপনি লোকেল-নির্দিষ্ট পাঠ্য প্রদান করেননি, তখন Android res/values/strings.xml থেকে ডিফল্ট স্ট্রিংগুলি লোড করে। যদি এই ডিফল্ট ফাইলটি অনুপস্থিত থাকে, বা এটিতে আপনার অ্যাপের প্রয়োজন এমন একটি স্ট্রিং অনুপস্থিত থাকে, তাহলে আপনার অ্যাপটি চলে না এবং একটি ত্রুটি দেখায়। ডিফল্ট টেক্সট ফাইল অসম্পূর্ণ হলে কি ঘটতে পারে তা নিচের উদাহরণটি ব্যাখ্যা করে।

উদাহরণ:

একটি অ্যাপের কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোড শুধুমাত্র দুটি স্ট্রিংকে বোঝায়, 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/layout/ : একটি XML ফাইল ধারণ করে প্রয়োজনীয় ডিরেক্টরি যা ডিফল্ট বিন্যাস সংজ্ঞায়িত করে
  • res/anim/ : প্রয়োজন যদি আপনার কোনো res/anim- <qualifiers> ফোল্ডার থাকে
  • res/xml/ : প্রয়োজন যদি আপনার কোনো res/xml- <qualifiers> ফোল্ডার থাকে
  • res/raw/ : প্রয়োজন যদি আপনার কোনো res/raw- <qualifiers> ফোল্ডার থাকে

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

বিকল্প সম্পদ তৈরি করুন

একটি অ্যাপ স্থানীয়করণের একটি বড় অংশ বিভিন্ন ভাষার জন্য বিকল্প পাঠ্য প্রদান করছে। কিছু ক্ষেত্রে, আপনি বিকল্প গ্রাফিক্স, শব্দ, লেআউট এবং অন্যান্য লোকেল-নির্দিষ্ট সংস্থানও প্রদান করেন।

একটি অ্যাপ অনেকগুলি res/ <qualifiers> / ডিরেক্টরি নির্দিষ্ট করতে পারে, প্রতিটিতে আলাদা আলাদা কোয়ালিফায়ার রয়েছে। একটি ভিন্ন লোকেলের জন্য একটি বিকল্প সংস্থান তৈরি করতে, আপনি একটি কোয়ালিফায়ার ব্যবহার করেন যা একটি ভাষা বা একটি ভাষা-অঞ্চলের সমন্বয় নির্দিষ্ট করে। একটি রিসোর্স ডিরেক্টরির নাম অবশ্যই বিকল্প রিসোর্স প্রদানে বর্ণিত নামকরণ স্কিমের সাথে সঙ্গতিপূর্ণ হতে হবে, অন্যথায় আপনার অ্যাপ কম্পাইল করতে পারবে না।

উদাহরণ:

ধরুন যে আপনার অ্যাপের ডিফল্ট ভাষা ইংরেজি এবং আপনি আপনার অ্যাপের সমস্ত টেক্সটকে ফ্রেঞ্চ ভাষায় এবং অ্যাপের শিরোনাম ছাড়া সমস্ত টেক্সট জাপানি ভাষায় স্থানীয়করণ করতে চান। এই ক্ষেত্রে, আপনি তিনটি strings.xml ফাইল তৈরি করেন, প্রতিটি একটি লোকেল-নির্দিষ্ট রিসোর্স ডিরেক্টরিতে সংরক্ষণ করা হয়:

  1. res/values/strings.xml
    title নামের একটি স্ট্রিংয়ের পাঠ্য সহ অ্যাপটি ব্যবহার করে এমন সমস্ত স্ট্রিংয়ের জন্য ইংরেজি পাঠ্য রয়েছে।
  2. res/values-fr/strings.xml
    title সহ সমস্ত স্ট্রিংয়ের জন্য ফরাসি পাঠ্য ধারণ করুন।
  3. res/values-ja/strings.xml
    title ব্যতীত সমস্ত স্ট্রিংয়ের জন্য জাপানি পাঠ্য ধারণ করুন।

যদি আপনার কোটলিন-ভিত্তিক বা জাভা-ভিত্তিক কোড R.string.title কে বোঝায়, রানটাইমে যা হয় তা এখানে:

  • ডিভাইসটি ফ্রেঞ্চ ছাড়া অন্য কোনো ভাষায় সেট করা থাকলে, Android res/values/strings.xml ফাইল থেকে title লোড করে।
  • ডিভাইসটি ফ্রেঞ্চে সেট করা থাকলে, Android res/values-fr/strings.xml ফাইল থেকে title লোড করে।

ডিভাইসটি জাপানীতে সেট করা থাকলে, Android res/values-ja/strings.xml ফাইলে title খোঁজে। কিন্তু সেই ফাইলে এই ধরনের কোনো স্ট্রিং অন্তর্ভুক্ত না থাকায়, অ্যান্ড্রয়েড ডিফল্টে ফিরে আসে এবং 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 ফাইলের স্ট্রিংগুলিকে কম্পাইল করা কোডে কোনো পরিবর্তন ছাড়াই যথাযথ যোগ্যতার সাথে আপনার অ্যাপে সহজে বের করা, অনুবাদ করা এবং একত্রিত করা যায়।

আপনি যদি টেক্সট সহ ইমেজ তৈরি করেন, সেই স্ট্রিংগুলিকে strings.xml এও রাখুন এবং অনুবাদের পরে ছবিগুলিকে পুনরায় জেনারেট করুন।

UI স্ট্রিংগুলির জন্য Android নির্দেশিকা অনুসরণ করুন৷

আপনি যখন আপনার UI ডিজাইন করবেন এবং বিকাশ করবেন, তখন আপনি আপনার ব্যবহারকারীর সাথে কীভাবে কথা বলবেন সেদিকে গভীর মনোযোগ দিন। সাধারণভাবে, একটি সংক্ষিপ্ত শৈলী ব্যবহার করুন যা বন্ধুত্বপূর্ণ কিন্তু সংক্ষিপ্ত, এবং আপনার UI জুড়ে একটি সামঞ্জস্যপূর্ণ শৈলী ব্যবহার করুন।

লেখার শৈলী এবং শব্দ চয়নের জন্য আপনি মেটেরিয়াল ডিজাইনের সুপারিশগুলি পড়েছেন এবং অনুসরণ করেছেন তা নিশ্চিত করুন। এটি করার ফলে আপনার অ্যাপগুলি ব্যবহারকারীর কাছে আরও পালিশ দেখায় এবং ব্যবহারকারীদের আপনার UI আরও দ্রুত বুঝতে সাহায্য করে৷

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

ঘোষিত স্ট্রিংগুলির জন্য পর্যাপ্ত প্রসঙ্গ প্রদান করুন

আপনি আপনার 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>

নিম্নলিখিত মত প্রসঙ্গ তথ্য প্রদান বিবেচনা করুন:

  • এই স্ট্রিং কি জন্য? কখন এবং কোথায় এটি ব্যবহারকারীর কাছে উপস্থাপন করা হয়?
  • এই লেআউটে কোথায়? উদাহরণস্বরূপ, টেক্সট বক্সের তুলনায় বোতামে অনুবাদ কম নমনীয়।

বার্তার অংশগুলিকে চিহ্নিত করুন যা অনুবাদ করা যাবে না

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

অনুবাদ করা যাবে না এমন পাঠ্যকে চিহ্নিত করতে, একটি <xliff:g> স্থানধারক ট্যাগ ব্যবহার করুন। এখানে একটি উদাহরণ ট্যাগ রয়েছে যা নির্দেশ করে যে বার্তাটি ভাঙা এড়াতে অনুবাদের সময় "%1$s" পাঠ্যটি পরিবর্তন করা উচিত নয়:

<string name="countdown">
  <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday
</string>

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

এখানে প্লেসহোল্ডার ট্যাগের আরও কিছু উদাহরণ রয়েছে:

<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>

স্থানীয়করণ চেকলিস্ট

একটি অ্যান্ড্রয়েড অ্যাপ স্থানীয়করণ এবং বিতরণের প্রক্রিয়ার সম্পূর্ণ ওভারভিউয়ের জন্য, আপনার অ্যাপের অনুবাদ এবং স্থানীয়করণ দেখুন।

স্থানীয়করণ টিপস

আপনি আপনার অ্যাপ্লিকেশন স্থানীয়করণ হিসাবে এই টিপস অনুসরণ করুন.

যেকোনো লোকেলে কাজ করার জন্য আপনার অ্যাপ ডিজাইন করুন

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

গুরুত্বপূর্ণ: নিশ্চিত করুন যে আপনার অ্যাপে ডিফল্ট সংস্থানগুলির একটি সম্পূর্ণ সেট অন্তর্ভুক্ত রয়েছে: ফোল্ডারের নামগুলিতে কোনও অতিরিক্ত সংশোধক ছাড়াই res/drawable/ এবং একটি res/values/ ফোল্ডারগুলি অন্তর্ভুক্ত করুন, যাতে আপনার অ্যাপের প্রয়োজনীয় সমস্ত চিত্র এবং পাঠ্য থাকে৷

যদি একটি অ্যাপ এমনকি একটি ডিফল্ট সংস্থান অনুপস্থিত থাকে, তাহলে এটি একটি অসমর্থিত লোকেলে সেট করা কোনো ডিভাইসে চলবে না। উদাহরণস্বরূপ, যদি res/values/strings.xml ডিফল্ট ফাইলে একটি স্ট্রিং না থাকে যা অ্যাপটির প্রয়োজন হয়, যখন অ্যাপটি একটি অসমর্থিত লোকেলে চলে এবং res/values/strings.xml লোড করার চেষ্টা করে, ব্যবহারকারী একটি ত্রুটি বার্তা দেখতে পায় এবং একটি ফোর্স ক্লোজ বোতাম।

আরও তথ্যের জন্য, ডিফল্ট সম্পদের জন্য পরীক্ষা বিভাগটি দেখুন।

একটি নমনীয় লেআউট ডিজাইন করুন

একটি নির্দিষ্ট ভাষার সাথে মানানসই করার জন্য আপনার লেআউটটি পুনর্বিন্যাস করার প্রয়োজন হলে, আপনি সেই ভাষার জন্য একটি বিকল্প লেআউট তৈরি করতে পারেন, যেমন একটি জার্মান-ভাষার লেআউটের জন্য res/layout-de/main.xml । যাইহোক, এটি করার ফলে আপনার অ্যাপটি বজায় রাখা কঠিন হতে পারে। এটি একটি একক লেআউট তৈরি করা ভাল যা আরও নমনীয়।

আরেকটি সাধারণ পরিস্থিতি হল একটি ভাষা যার বিন্যাসে ভিন্ন কিছু প্রয়োজন। উদাহরণস্বরূপ, আপনার কাছে একটি পরিচিতি ফর্ম থাকতে পারে যাতে অ্যাপটি জাপানি ভাষায় চালানোর সময় দুটি নামের ক্ষেত্র থাকে, কিন্তু যখন অ্যাপটি অন্য কোনো ভাষায় চলে তখন তিনটি নামের ক্ষেত্র থাকে। আপনি দুটি উপায়ে এটি পরিচালনা করতে পারেন:

  • একটি ক্ষেত্র সহ একটি লেআউট তৈরি করুন যা আপনি ভাষার উপর ভিত্তি করে প্রোগ্রাম্যাটিকভাবে সক্ষম বা অক্ষম করতে পারেন।
  • প্রধান লেআউটে অন্য লেআউট অন্তর্ভুক্ত করুন যাতে পরিবর্তনযোগ্য ক্ষেত্র অন্তর্ভুক্ত থাকে। দ্বিতীয় লেআউটে বিভিন্ন ভাষার জন্য বিভিন্ন কনফিগারেশন থাকতে পারে।

আপনার প্রয়োজনের চেয়ে বেশি রিসোর্স ফাইল এবং টেক্সট স্ট্রিং তৈরি করা এড়িয়ে চলুন

আপনাকে সম্ভবত আপনার অ্যাপের প্রতিটি সংস্থানের জন্য একটি লোকেল-নির্দিষ্ট বিকল্প তৈরি করতে হবে না। উদাহরণস্বরূপ, res/layout/main.xml ফাইলে সংজ্ঞায়িত লেআউট যেকোন লোকেলে কাজ করতে পারে, সেক্ষেত্রে কোন বিকল্প লেআউট ফাইল তৈরি করার প্রয়োজন নেই।

এছাড়াও, আপনাকে প্রতিটি স্ট্রিংয়ের জন্য বিকল্প পাঠ্য তৈরি করতে হবে না। উদাহরণস্বরূপ, নিম্নলিখিত অনুমান করুন:

  • আপনার অ্যাপের ডিফল্ট ভাষা হল আমেরিকান ইংরেজি। অ্যাপটি ব্যবহার করে এমন প্রতিটি স্ট্রিং res/values/strings.xml এ আমেরিকান ইংরেজি বানান ব্যবহার করে সংজ্ঞায়িত করা হয়েছে।
  • কয়েকটি গুরুত্বপূর্ণ বাক্যাংশের জন্য, আপনি ব্রিটিশ ইংরেজি বানান প্রদান করতে চান। ইউনাইটেড কিংডমের একটি ডিভাইসে আপনার অ্যাপ চালানোর সময় আপনি এই বিকল্প স্ট্রিংগুলি ব্যবহার করতে চান৷

এটি করার জন্য, res/values-en-rGB/strings.xml নামে একটি ছোট ফাইল তৈরি করুন যাতে শুধুমাত্র সেই স্ট্রিংগুলি অন্তর্ভুক্ত থাকে যা ইউকে-তে অ্যাপটি চালানোর সময় আলাদা হয়, বাকি সমস্ত স্ট্রিংগুলির জন্য, অ্যাপটি ডিফল্টে ফিরে আসে। এবং res/values/strings.xml এ যা সংজ্ঞায়িত করা হয়েছে তা ব্যবহার করে।

ম্যানুয়াল লোকেল খোঁজার জন্য Android প্রসঙ্গ অবজেক্ট ব্যবহার করুন

আপনি Context অবজেক্ট ব্যবহার করে লোকেল দেখতে পারেন যা Android উপলব্ধ করে, নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

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();

অ্যাপ অনুবাদ পরিষেবা ব্যবহার করুন

অ্যাপ ট্রান্সলেশন সার্ভিসটি প্লে কনসোলে একত্রিত করা হয়েছে। এটি আপনাকে একটি তাত্ক্ষণিক উদ্ধৃতি পেতে এবং একটি অনুবাদ কোম্পানির সাথে একটি অর্ডার দিতে দেয়৷ আপনি অ্যাপ UI স্ট্রিং, প্লে স্টোর তালিকা পাঠ্য, IAP নাম এবং বিজ্ঞাপন প্রচারের পাঠ্যের জন্য এক বা একাধিক ভাষায় অনুবাদ অর্ডার করতে পারেন।

স্থানীয় অ্যাপ পরীক্ষা করুন

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

একটি ডিভাইসে পরীক্ষা করুন

মনে রাখবেন যে আপনি যে ডিভাইসটিতে পরীক্ষা করছেন তা অন্যান্য স্থানের ভোক্তাদের জন্য উপলব্ধ ডিভাইসগুলির থেকে উল্লেখযোগ্যভাবে আলাদা হতে পারে৷ আপনার ডিভাইসে উপলব্ধ লোকেলগুলি অন্যান্য ডিভাইসে উপলব্ধ লোকেলস থেকে আলাদা হতে পারে৷ এছাড়াও, ডিভাইস স্ক্রিনের রেজোলিউশন এবং ঘনত্ব ভিন্ন হতে পারে, যা আপনার UI-তে স্ট্রিং এবং ড্রয়েবলের প্রদর্শনকে প্রভাবিত করতে পারে।

একটি ডিভাইসে লোকেল বা ভাষা পরিবর্তন করতে, সেটিংস অ্যাপ ব্যবহার করুন।

একটি এমুলেটরে পরীক্ষা করুন

এমুলেটর ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য, Android এমুলেটরে অ্যাপ চালান দেখুন।

একটি কাস্টম লোকেল তৈরি করুন এবং ব্যবহার করুন

একটি "কাস্টম" লোকেল হল একটি ভাষা বা অঞ্চলের সমন্বয় যা অ্যান্ড্রয়েড সিস্টেমের ছবি স্পষ্টভাবে সমর্থন করে না৷ আপনি এমুলেটরে একটি কাস্টম লোকেল তৈরি করে আপনার অ্যাপটি একটি কাস্টম লোকেলে কীভাবে চলে তা পরীক্ষা করতে পারেন। এটি করার দুটি উপায় আছে:

  • কাস্টম লোকেল অ্যাপ ব্যবহার করুন, যা অ্যাপ ট্যাব থেকে অ্যাক্সেসযোগ্য। আপনি একটি কাস্টম লোকেল তৈরি করার পরে, লোকেলের নামটি স্পর্শ করে ধরে রেখে এটিতে স্যুইচ করুন৷
  • নিম্নলিখিত বিভাগে বর্ণিত হিসাবে adb শেল থেকে একটি কাস্টম লোকেলে পরিবর্তন করুন।

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

অ্যাডবি শেল থেকে এমুলেটর লোকেল পরিবর্তন করুন

adb শেল ব্যবহার করে এমুলেটরে লোকেল পরিবর্তন করতে, নিম্নলিখিতগুলি করুন:

  1. আপনি যে লোকেলটি পরীক্ষা করতে চান সেটি বেছে নিন এবং এর BCP-47 ভাষা ট্যাগ নির্ধারণ করুন, যেমন কানাডিয়ান ফ্রেঞ্চের জন্য fr-CA
  2. একটি এমুলেটর চালু করুন।
  3. হোস্ট কম্পিউটারে একটি কমান্ড-লাইন শেল থেকে, নিম্নলিখিত কমান্ডটি চালান:
    adb shell
    অথবা, যদি আপনার কাছে একটি ডিভাইস সংযুক্ত থাকে, তাহলে -e বিকল্পটি যোগ করে উল্লেখ করুন যে আপনি এমুলেটর চান:
    adb -e shell
  4. adb শেল প্রম্পটে ( # ), এই কমান্ডটি চালান:
    setprop persist.sys.locale [ BCP-47 language tag ];stop;sleep 5;start
    ধাপ 1 থেকে উপযুক্ত কোড দিয়ে বন্ধনী করা বিভাগগুলি প্রতিস্থাপন করুন।

    উদাহরণস্বরূপ, কানাডিয়ান ফরাসি ভাষায় পরীক্ষা করতে:
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

এর ফলে এমুলেটর পুনরায় চালু হয়। একবার হোম স্ক্রীনটি আবার প্রদর্শিত হলে, আপনার অ্যাপটি পুনরায় লঞ্চ করুন এবং অ্যাপটি নতুন লোকেলের সাথে চালু হবে।

ডিফল্ট সম্পদ জন্য পরীক্ষা

একটি অ্যাপে প্রয়োজনীয় প্রতিটি স্ট্রিং রিসোর্স রয়েছে কিনা তা পরীক্ষা করতে, নিম্নলিখিতগুলি করুন:

  1. এমুলেটর বা ডিভাইসটিকে এমন একটি ভাষায় সেট করুন যা আপনার অ্যাপ সমর্থন করে না। উদাহরণস্বরূপ, যদি অ্যাপটির res/values-fr/ এ ফরাসি স্ট্রিং থাকে কিন্তু res/values-es/ এ কোনো স্প্যানিশ স্ট্রিং না থাকে, তাহলে এমুলেটরের লোকেল স্প্যানিশ-এ সেট করুন। আপনি একটি অসমর্থিত লোকেলে এমুলেটর সেট করতে কাস্টম লোকেল অ্যাপ ব্যবহার করতে পারেন।
  2. অ্যাপটি চালান।
  3. যদি অ্যাপটি একটি ত্রুটি বার্তা এবং একটি ফোর্স ক্লোজ বোতাম দেখায় তবে এটি এমন একটি স্ট্রিং খুঁজছে যা উপলব্ধ নয়৷ নিশ্চিত করুন যে আপনার res/values/strings.xml ফাইলে অ্যাপটি ব্যবহার করা প্রতিটি স্ট্রিংয়ের জন্য একটি সংজ্ঞা রয়েছে।

পরীক্ষা সফল হলে, অন্য ধরনের কনফিগারেশনের জন্য এটি পুনরাবৃত্তি করুন। উদাহরণস্বরূপ, যদি অ্যাপটিতে res/layout-land/main.xml নামে একটি লেআউট ফাইল থাকে কিন্তু res/layout-port/main.xml নামে একটি ফাইল না থাকে, তাহলে এমুলেটর বা ডিভাইসটিকে পোর্ট্রেট ওরিয়েন্টেশনে সেট করুন এবং দেখুন কিনা অ্যাপটি চলে।