বার্তা স্থানীয়করণ

এই ডকুমেন্টেশনে অ্যান্ড্রয়েড এবং আইওএস-এ ব্যবহারকারীর ভাষা সেটিংস অনুযায়ী স্বয়ংক্রিয়ভাবে মানিয়ে নেওয়া নোটিফিকেশন পাঠানোর জন্য FCM লোকালাইজেশন ফিল্ড ( *_loc_key এবং *_loc_args )-এর ব্যবহার বর্ণনা করা হয়েছে। এর মাধ্যমে আপনার সার্ভার একটিমাত্র, ভাষা-নিরপেক্ষ পেলোড পাঠাতে পারে এবং অনুবাদের দায়িত্ব ক্লায়েন্ট ডিভাইসের উপর ছেড়ে দেয়।

FCM স্থানীয়করণের সংক্ষিপ্ত বিবরণ

আপনার অ্যাপকে স্থানীয়করণ করতে, আপনি ব্যবহারকারীর অ্যাপ্লিকেশনের ভেতরের একটি স্ট্রিং রিসোর্স এন্ট্রির সাথে সঙ্গতিপূর্ণ একটি কী (key) পাঠাতে পারেন। ডিভাইসের অপারেটিং সিস্টেম (OS) ডাইনামিক আর্গুমেন্টগুলোর অনুসন্ধান এবং সন্নিবেশের কাজটি পরিচালনা করে।

এফসিএম ফিল্ড বর্ণনা ক্লায়েন্ট অ্যাকশন
title_loc_key ক্লায়েন্ট অ্যাপের স্ট্রিং রিসোর্সে টাইটেল স্ট্রিং-এর জন্য কী। অপারেটিং সিস্টেম অ্যাপটির স্থানীয় ফাইলগুলোতে সংশ্লিষ্ট স্ট্রিংটি খুঁজে বের করে।
body_loc_key ক্লায়েন্ট অ্যাপের স্ট্রিং রিসোর্সে বডি স্ট্রিং-এর জন্য কী। অপারেটিং সিস্টেম অ্যাপটির স্থানীয় ফাইলগুলোতে সংশ্লিষ্ট স্ট্রিংটি খুঁজে বের করে।
title_loc_args title_loc_key স্ট্রিং-এ প্রতিস্থাপন করার জন্য ডাইনামিক স্ট্রিং ভ্যালুগুলোর একটি অ্যারে। অপারেটিং সিস্টেম এই আর্গুমেন্টগুলোকে স্থানীয়কৃত স্ট্রিং-এর ফরম্যাট স্পেসিফায়ারগুলোতে অন্তর্ভুক্ত করে।
body_loc_args body_loc_key স্ট্রিং-এ প্রতিস্থাপন করার জন্য ডাইনামিক স্ট্রিং ভ্যালুগুলোর একটি অ্যারে। অপারেটিং সিস্টেম এই আর্গুমেন্টগুলোকে স্থানীয়কৃত স্ট্রিং-এর ফরম্যাট স্পেসিফায়ারগুলোতে অন্তর্ভুক্ত করে।

ধাপ ১: আপনার অ্যাপে স্থানীয় স্ট্রিং রিসোর্স সংজ্ঞায়িত করুন

FCM লোকালাইজেশন শুরু করার জন্য, আপনার অ্যান্ড্রয়েড এবং আইওএস প্রজেক্টগুলোতে প্রয়োজনীয় অনুবাদগুলো আছে কিনা তা নিশ্চিত করা জরুরি।

অ্যান্ড্রয়েড সেটআপ

স্ট্রিং রিসোর্স নির্ধারণ করুন : আপনার ডিফল্ট ভাষার স্ট্রিংগুলো res/values/strings.xml ফাইলে লিখুন। *_loc_args এ যে কোনো ডাইনামিক ভ্যালু পাস করার জন্য ফরম্যাট স্পেসিফায়ার ( %1$s , %2$d , ইত্যাদি) ব্যবহার করুন।

ডিফল্ট ( res/values/strings.xml ):

<resources>
    <string name="welcome_title">Welcome, %1$s!</string>
    <string name="new_message_body">You have %1$d new message(s) from %2$s.</string>
</resources>

অনুবাদ যোগ করুন : ISO ভাষা কোড ব্যবহার করে ভাষা-নির্দিষ্ট ডিরেক্টরি তৈরি করুন (যেমন, ফরাসি ভাষার জন্য values-fr , স্প্যানিশ ভাষার জন্য values-es ) এবং কী-গুলো অনুবাদ করুন।

ফরাসি ( res/values-fr/strings.xml ):

<resources>
    <string name="welcome_title">Bienvenue, %1$s!</string>
    <string name="new_message_body">Vous avez %1$d nouveau(x) message(s) de %2$s.</string>
</resources>

আরও তথ্যের জন্য, নিম্নলিখিত নথিপত্র ব্যবহার করুন:

iOS সেটআপ

স্ট্রিং রিসোর্স সংজ্ঞায়িত করুন : আপনার বেস স্ট্রিংগুলো Localizable.strings ফাইলে (সাধারণত Base.lproj ফোল্ডারে বা একটি স্ট্রিং ক্যাটালগে) সংজ্ঞায়িত করুন। ডাইনামিক ভ্যালুর জন্য ফরম্যাট স্পেসিফায়ার ( %@ , %ld , ইত্যাদি) ব্যবহার করুন। প্রচলিত রীতি অনুসারে কী-গুলো প্রায়শই সব বড় হাতের অক্ষরে সংজ্ঞায়িত করা হয়।

ডিফল্ট (ইংরেজি Localizable.strings ):

"WELCOME_TITLE" = "Welcome, %@!";
"NEW_MESSAGE_BODY" = "You have %ld new message(s) from %@.";

অনুবাদ যোগ করুন : ভাষা-নির্দিষ্ট .lproj ফোল্ডার তৈরি করুন (অথবা স্ট্রিং ক্যাটালগ ব্যবহার করে স্থানীয়করণ যোগ করুন) এবং কীগুলো অনুবাদ করুন।

ফরাসি ( fr.lproj/Localizable.strings ):

"WELCOME_TITLE" = "Bienvenue, %@!";
"NEW_MESSAGE_BODY" = "Vous avez %ld nouveau(x) message(s) de %@.";

আরও তথ্যের জন্য, নিম্নলিখিত নথিপত্র ব্যবহার করুন:

ধাপ ২: FCM মেসেজ পেলোড তৈরি করুন

FCM HTTP v1 API ব্যবহার করে নোটিফিকেশন পাঠানোর সময়, আপনার সার্ভার একটি একক পেলোড তৈরি করে যা রিসোর্স কী ( *_loc_key ) এবং ডাইনামিক ডেটা ( *_loc_args )-কে স্ট্রিং-এর একটি অ্যারে হিসেবে ব্যবহার করে।

উদাহরণ FCM HTTP v1 পেলোড

স্থানীয়করণ কীগুলি প্ল্যাটফর্ম-নির্দিষ্ট ওভাররাইড ব্লকের ( android.notification এবং apns.payload.aps.alert ) মধ্যে রাখা হয়।

{
  "message": {
    "token": "DEVICE_REGISTRATION_TOKEN",

    "android": {
      "notification": {
        // Android keys match strings.xml resource names
        "title_loc_key": "welcome_title",
        "title_loc_args": ["Alice"],
        "body_loc_key": "new_message_body",
        "body_loc_args": ["3", "Bob"]
      }
    },

    "apns": {
      "payload": {
        "aps": {
          "alert": {
            // iOS uses 'title-loc-key' and 'loc-key' (for the body)
            "title-loc-key": "WELCOME_TITLE",
            "title-loc-args": ["Alice"],
            "loc-key": "NEW_MESSAGE_BODY",
            "loc-args": ["3", "Bob"]
          }
        }
      }
    }
  }
}

পেলোড আর্গুমেন্টের জন্য মূল বিবেচ্য বিষয়গুলি

  • ক্রম গুরুত্বপূর্ণ : *_loc_args এর ভেতরের স্ট্রিংগুলো অবশ্যই স্ট্রিং রিসোর্স ফাইলের প্লেসহোল্ডারগুলোর জন্য প্রয়োজনীয় সঠিক ক্রমে থাকতে হবে (যেমন, %1$s , %2$s )।

  • শুধুমাত্র স্ট্রিং : *_loc_args অ্যারের সমস্ত উপাদান অবশ্যই স্ট্রিং হতে হবে, এমনকি যদি সেগুলি সংখ্যাও হয় (যেমন উদাহরণে "3" )। ক্লায়েন্ট OS-এর স্ট্রিং ফরম্যাটার ফরম্যাট স্পেসিফায়ারের ( %ld বা %1$d ) উপর ভিত্তি করে চূড়ান্ত টাইপ রূপান্তরটি পরিচালনা করে।

ধাপ ৩: ক্লায়েন্ট প্রক্রিয়াকরণ এবং প্রদর্শন

ডিভাইসটি নোটিফিকেশন পেলে, নিম্নলিখিত ধাপগুলো স্বয়ংক্রিয়ভাবে সম্পন্ন হয়:

  1. ভাষা যাচাই : ডিভাইসটি ব্যবহারকারীর প্রধান ভাষা (যেমন, জার্মান, ইতালীয়) শনাক্ত করে।

  2. কী লুকআপ : অপারেটিং সিস্টেম ডিভাইসের লোকেল অনুযায়ী অ্যাপের রিসোর্স ফাইলগুলোতে সংশ্লিষ্ট অনূদিত স্ট্রিংটি খুঁজে বের করার জন্য *_loc_key ভ্যালুটি ( welcome_title ) ব্যবহার করে।

  3. আর্গুমেন্ট সন্নিবেশ : অপারেটিং সিস্টেম *_loc_args ( ["Alice"] ) থেকে অ্যারেটি নেয় এবং লোকেলের ফরম্যাটিং নিয়ম (বিরামচিহ্ন, শব্দক্রম, ইত্যাদি) মেনে মানগুলিকে স্থানীয় স্ট্রিং-এ সন্নিবেশ করে।

ডিভাইসের অবস্থান title_loc_key : welcome_title title_loc_args : ["অ্যালিস"] চূড়ান্ত শিরোনাম প্রদর্শন
ইংরেজি "Welcome, %1$s!" অ্যালিস "Welcome, Alice!"
ফরাসি "Bienvenue, %1$s!" অ্যালিস "Bienvenue, Alice!"
জার্মান "Willkommen, %1$s!" অ্যালিস "Willkommen, Alice!"

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

উদাহরণ: স্থানীয়করণের বিকল্পসহ বিজ্ঞপ্তি বার্তা

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

ইংরেজি ও স্প্যানিশ ভাষায় লেখা প্রদর্শনকারী দুটি ডিভাইসের সরল চিত্র।

নোড.জেএস

var topicName = 'industry-tech';

var message = {
  android: {
    ttl: 3600000,
    notification: {
      bodyLocKey: 'STOCK_NOTIFICATION_BODY',
      bodyLocArgs: ['FooCorp', '11.80', '835.67', '1.43']
    }
  },
  apns: {
    payload: {
      aps: {
        alert: {
          locKey: 'STOCK_NOTIFICATION_BODY',
          locArgs: ['FooCorp', '11.80', '835.67', '1.43']
        }
      }
    }
  },
  topic: topicName,
};

getMessaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

বিশ্রাম

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
  "message": {
    "topic":"Tech",
    "android": {
      "ttl":"3600s",
      "notification": {
        "body_loc_key": "STOCK_NOTIFICATION_BODY",
        "body_loc_args": ["FooCorp", "11.80", "835.67", "1.43"]
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "loc-key": "STOCK_NOTIFICATION_BODY",
            "loc-args": ["FooCorp", "11.80", "835.67", "1.43"]
          }
        }
      }
    }
  }
}'

আরও জানতে, মেসেজ বডিতে প্ল্যাটফর্ম-নির্দিষ্ট ব্লকগুলিতে উপলব্ধ কীগুলির সম্পূর্ণ বিবরণের জন্য HTTP v1 রেফারেন্স ডকুমেন্টেশনে AndroidNotification এবং ApnsConfig দেখুন। APNS দ্বারা সমর্থিত কীগুলির জন্য, Apple-এর Payload Key Reference দেখুন।