আপনার অ্যাপ লোকালাইজ করা

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 ফাইল তৈরি করেন, প্রতিটি লোকেল-নির্দিষ্ট রিসোর্স ডিরেক্টরিতে স্টোর করা হয়:

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

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

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

ডিভাইস জাপানি ভাষায় সেট করা থাকলে, 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 কীভাবে সবচেয়ে মানানসই রিসোর্স খুঁজে পায় দেখুন। সব কোয়ালিফায়ার বর্ণনা করা হয়েছে এবং অগ্রাধিকারের ক্রম অনুযায়ী অ্যাপ রিসোর্স ওভারভিউ-এ তালিকাভুক্ত করা হয়েছে।

কোডে রিসোর্স রেফার করা

আপনার অ্যাপের Kotlin-ভিত্তিক কোডে, আপনি 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>

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

  • What is this string for? এটি কখন এবং কোথায় ব্যবহারকারীকে দেখানো হয়?
  • UI-তে এটি কোথায় আছে? যেমন, টেক্সট বক্সের তুলনায় বোতামে অনুবাদ কম নমনীয়।

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

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

যে টেক্সট অনুবাদ করা হবে না সেটি চিহ্নিত করতে, <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>

লোকালাইজেশন চেকলিস্ট

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 ব্যবহার করুন

Android-এর উপলভ্য করা LocalConfiguration ব্যবহার করে আপনি লোকেল দেখতে পারবেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

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")) ব্যবহার করুন। আপনি @Preview(locale = "ar")-এর মতো RTL লোকেল নির্দিষ্ট করে ডান-থেকে-বাঁদিকে (RTL) লেআউটও পরীক্ষা করতে পারেন।

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

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

কাস্টম লোকেল তৈরি ও ব্যবহার করা

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

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

আপনি এমুলেটরকে এমন কোনও লোকেলে সেট করলে যা 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
    ব্র্যাকেটের মধ্যে থাকা বিভাগগুলি ধাপ ১-এর উপযুক্ত কোড দিয়ে পরিবর্তন করুন।

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

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

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

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

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

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

অতিরিক্ত রিসোর্স

লোকালাইজেশন সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত অতিরিক্ত রিসোর্স দেখুন:

ডকুমেন্টেশন

কন্টেন্ট দেখে