במסמך הזה מוסבר איך להשתמש בשדות הלוקליזציה של FCM (*_loc_key ו-*_loc_args) כדי לשלוח התראות שמותאמות באופן אוטומטי להגדרות השפה של המשתמש ב-Android וב-iOS. כך השרת יכול לשלוח מטען ייעודי (payload) אחד, ללא קשר לשפה, ולהעביר את התרגום למכשיר הלקוח.
FCM סקירה כללית על לוקליזציה
כדי להתאים את האפליקציה לשוק המקומי, אתם יכולים לשלוח מפתח שתואם לרשומה של משאב מחרוזת בתוך האפליקציה של המשתמש. מערכת ההפעלה של המכשיר מטפלת בחיפוש ובהוספה של ארגומנטים דינמיים.
| שדה FCM | תיאור | פעולת הלקוח |
|---|---|---|
title_loc_key |
המפתח למחרוזת הכותרת במשאבי המחרוזת של אפליקציית הלקוח. | מערכת ההפעלה מוצאת את המחרוזת התואמת בקבצים המותאמים לשוק המקומי של האפליקציה. |
body_loc_key |
המפתח למחרוזת גוף ההודעה במשאבי המחרוזות של אפליקציית הלקוח. | מערכת ההפעלה מוצאת את המחרוזת התואמת בקבצים המותאמים לשוק המקומי של האפליקציה. |
title_loc_args |
מערך של ערכי מחרוזת דינמיים שיוחלפו במחרוזת title_loc_key. |
מערכת ההפעלה מוסיפה את הארגומנטים האלה למפרטי הפורמט של המחרוזת המותאמת לשוק המקומי. |
body_loc_args |
מערך של ערכי מחרוזת דינמיים שיוחלפו במחרוזת body_loc_key. |
מערכת ההפעלה מוסיפה את הארגומנטים האלה למפרטי הפורמט של המחרוזת המותאמת לשוק המקומי. |
שלב 1: מגדירים משאבי מחרוזות מותאמים לשוק המקומי באפליקציות
כדי להתחיל בתהליך הלוקליזציה של FCM, חשוב לוודא שהתרגומים הנדרשים זמינים בפרויקטים שלכם ב-Android וב-iOS.
הגדרת Android
הגדרת משאבי מחרוזות: מזינים את מחרוזות שפת ברירת המחדל בקובץ res/values/strings.xml.
משתמשים במפרטי פורמט (%1$s, %2$d וכו') לכל ערך דינמי שרוצים להעביר ב-*_loc_args.
ברירת המחדל (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 ספציפיות לשפה (או מוסיפים לוקליזציות באמצעות String Catalog) ומתרגמים את המפתחות.
צרפתית (fr.lproj/Localizable.strings):
"WELCOME_TITLE" = "Bienvenue, %@!";
"NEW_MESSAGE_BODY" = "Vous avez %ld nouveau(x) message(s) de %@.";
מידע נוסף זמין במשאבי העזרה הבאים:
שלב 2: יצירת המטען הייעודי (payload) של ההודעה ב-FCM
כששולחים את ההתראה באמצעות FCM HTTP v1 API, השרת יוצר מטען ייעודי (payload) אחד שמשתמש במפתחות המשאבים (*_loc_key) ובנתונים הדינמיים (*_loc_args) כמערך של מחרוזות.
מטען ייעודי (payload) לדוגמה של 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"]
}
}
}
}
}
}
נקודות מרכזיות לגבי ארגומנטים של מטען ייעודי (payload)
הסדר חשוב: המחרוזות ב-
*_loc_argsצריכות להיות בסדר המדויק שנדרש על ידי הפלייסהולדרים בקובץ משאבי המחרוזות (למשל,%1$s,%2$s).מחרוזות בלבד: כל הרכיבים במערך
*_loc_argsחייבים להיות מחרוזות, גם אם הם מייצגים מספרים (כמו"3"בדוגמה). מעצב המחרוזות של מערכת ההפעלה של הלקוח מטפל בהמרה הסופית של הסוג על סמך מפרט הפורמט (%ldאו%1$d).
שלב 3: עיבוד והצגה בצד הלקוח
כשהמכשיר מקבל את ההתראה, הפעולות הבאות מתרחשות באופן אוטומטי:
בדיקת שפה: המכשיר מזהה את הלוקאל הראשי של המשתמש (למשל, גרמנית, איטלקית).
חיפוש מפתח: מערכת ההפעלה משתמשת בערך
*_loc_key(welcome_title) כדי לחפש את המחרוזת המתורגמת המתאימה בקובצי המשאבים של האפליקציה, בהתאם ללוקאל של המכשיר.הוספת ארגומנט: מערכת ההפעלה לוקחת את המערך מ-
*_loc_args(["Alice"]) ומכניסה את הערכים למחרוזת המותאמת לשוק המקומי, בהתאם לכללי העיצוב של הלוקאל (סימני פיסוק, סדר המילים וכו').
| הגדרות המיקום והשפה של המכשיר | title_loc_key: welcome_title |
title_loc_args: ["Alice"] |
הצגת השם הסופי |
|---|---|---|---|
| אנגלית | "Welcome, %1$s!" |
Alice | "Welcome, Alice!" |
| צרפתית | "Bienvenue, %1$s!" |
Alice | "Bienvenue, Alice!" |
| גרמנית | "Willkommen, %1$s!" |
Alice | "Willkommen, Alice!" |
התהליך הזה מבטיח שכל משתמש יקבל הודעה שמותאמת להעדפות השפה שלו, עם המבנה הלשוני הנכון, תוך שמירה על מטען ייעודי (payload) סטנדרטי מהשרת שלכם.
דוגמה: הודעה עם אפשרויות לוקליזציה
בקשת השליחה שבדוגמה הבאה שולחת התראה לנושא 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"]
}
}
}
}
}
}'
למידע נוסף, ראו AndroidNotification ו-ApnsConfig במאמרי העזרה של HTTP v1, שבהם מפורטים כל המפתחות שזמינים בבלוקים ספציפיים לפלטפורמה בגוף ההודעה. במסמך העזר של אפל בנושא מפתחות מטען ייעודי (payload) מפורטים המפתחות שנתמכים על ידי APNS.