Messages লোকালইজ করা

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

FCM Localization Overview

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

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

ধাপ ১: আপনার অ্যাপে লোকালাইজ করা স্ট্রিং রিসোর্স নির্ধারণ করুন

FCM লোকালাইজেশন শুরু করতে, আপনার Android ও iOS প্রোজেক্টে প্রয়োজনীয় অনুবাদ উপলভ্য আছে কিনা তা নিশ্চিত করা গুরুত্বপূর্ণ।

Android সেট-আপ

স্ট্রিং রিসোর্স নির্ধারণ করুন: 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. কী লুকআপ: ডিভাইসের লোকেল অনুযায়ী অ্যাপের রিসোর্স ফাইলে সংশ্লিষ্ট অনুবাদ করা স্ট্রিং খুঁজতে OS *_loc_key ভ্যালু (welcome_title) ব্যবহার করে।

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

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

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

উদাহরণ: লোকালাইজেশন বিকল্প সহ বিজ্ঞপ্তির মেসেজ

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

দুটি ডিভাইসের সাধারণ ড্রয়িং যাতে ইংরেজি ও স্প্যানিশ ভাষায় টেক্সট দেখানো হচ্ছে

Node.js

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

REST

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-এর পেলোড 'কী' রেফারেন্স দেখুন।