Bu dokümanda, Android ve iOS'te kullanıcının dil ayarlarına otomatik olarak uyum sağlayan bildirimler göndermek için FCM yerelleştirme alanlarının (*_loc_key
ve *_loc_args
) kullanımı açıklanmaktadır. Bu sayede sunucunuz, çeviriyi istemci cihazına devrederek tek bir dil bağımsız yük gönderebilir.
FCM Yerelleştirmeye Genel Bakış
Uygulamanızı yerelleştirmek için kullanıcının uygulamasındaki bir dize kaynağı girişine karşılık gelen bir anahtar gönderebilirsiniz. Cihazın işletim sistemi (OS), dinamik bağımsız değişkenlerin aranmasını ve eklenmesini sağlar.
FCM Alanı | Açıklama | İstemci İşlemi |
---|---|---|
title_loc_key |
İstemci uygulamasının dize kaynaklarındaki başlık dizesinin anahtarı. | İşletim sistemi, uygulamanın yerelleştirilmiş dosyalarında ilgili dizeyi bulur. |
body_loc_key |
İstemci uygulamasının dize kaynaklarındaki gövde dizesinin anahtarı. | İşletim sistemi, uygulamanın yerelleştirilmiş dosyalarında ilgili dizeyi bulur. |
title_loc_args |
title_loc_key dizesine yerleştirilecek dinamik dize değerleri dizisi. |
İşletim sistemi bu bağımsız değişkenleri yerelleştirilmiş dizenin biçim belirleyicilerine ekler. |
body_loc_args |
body_loc_key dizesine yerleştirilecek dinamik dize değerleri dizisi. |
İşletim sistemi bu bağımsız değişkenleri yerelleştirilmiş dizenin biçim belirleyicilerine ekler. |
1. adım: Uygulamalarınızda yerelleştirilmiş dize kaynaklarını tanımlayın
FCM yerelleştirmeyi kullanmaya başlamak için Android ve iOS projelerinizde gerekli çevirilerin bulunduğundan emin olmanız önemlidir.
Android Kurulumu
Dize kaynaklarını tanımlayın: Varsayılan dil dizelerinizi res/values/strings.xml
içine girin.
*_loc_args
içinde iletmeyi planladığınız tüm dinamik değerler için biçim belirleyicileri (%1$s
, %2$d
vb.) kullanın.
Varsayılan (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>
Çeviri ekleme: ISO dil kodlarını kullanarak dile özel dizinler oluşturun (ör. values-fr
(Fransızca için), values-es
(İspanyolca için) ve anahtarları çevirin.
Fransızca (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>
Daha fazla bilgi için aşağıdaki dokümanları inceleyin:
iOS Kurulumu
Dize kaynaklarını tanımlama: Temel dizelerinizi Localizable.strings
dosyasında (genellikle Base.lproj
klasöründe veya bir dize kataloğunda) tanımlayın. Dinamik değerler için biçim belirleyiciler (%@
, %ld
vb.) kullanın. Tuşlar genellikle kural gereği büyük harflerle tanımlanır.
Varsayılan (İngilizce Localizable.strings
):
"WELCOME_TITLE" = "Welcome, %@!";
"NEW_MESSAGE_BODY" = "You have %ld new message(s) from %@.";
Çeviri ekleme: Dile özgü .lproj
klasörler oluşturun (veya bir dize kataloğu kullanarak yerelleştirmeler ekleyin) ve anahtarları çevirin.
Fransızca (fr.lproj/Localizable.strings
):
"WELCOME_TITLE" = "Bienvenue, %@!";
"NEW_MESSAGE_BODY" = "Vous avez %ld nouveau(x) message(s) de %@.";
Daha fazla bilgi için aşağıdaki dokümanları inceleyin:
2. adım: FCM mesaj yükünü oluşturun
FCM HTTP v1 API'si kullanılarak bildirim gönderilirken sunucunuz, kaynak anahtarlarını (*_loc_key
) ve dinamik verileri (*_loc_args
) dize dizisi olarak kullanan tek bir yük oluşturur.
Örnek FCM HTTP v1 yükü
Yerelleştirme anahtarları, platforma özel geçersiz kılma bloklarına (android.notification
ve apns.payload.aps.alert
) yerleştirilir.
{
"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"]
}
}
}
}
}
}
Yük bağımsız değişkenleri için dikkat edilmesi gereken önemli noktalar
Sıra önemlidir:
*_loc_args
içindeki dizeler, dize kaynak dosyasındaki yer tutucuların gerektirdiği sırayla olmalıdır (ör.%1$s
,%2$s
).Yalnızca dizeler:
*_loc_args
dizisindeki tüm öğeler, sayıları temsil etseler bile (örnekteki"3"
gibi) dize olmalıdır. İstemci işletim sisteminin dize biçimlendiricisi, biçim belirleyiciye (%ld
veya%1$d
) göre son tür dönüştürme işlemini gerçekleştirir.
3. adım: İstemci işleme ve görüntüleme
Cihaz bildirimi aldığında aşağıdaki adımlar otomatik olarak gerçekleşir:
Dil kontrolü: Cihaz, kullanıcının birincil yerel ayarını (ör. Almanca, İtalyanca).
Anahtar arama: İşletim sistemi, cihazın yerel ayarı için uygulamanın kaynak dosyalarında karşılık gelen çevrilmiş dizeyi aramak üzere
*_loc_key
değerini (welcome_title
) kullanır.Bağımsız değişken ekleme: İşletim sistemi,
*_loc_args
(["Alice"]
) dizisini alır ve değerleri yerelleştirilmiş dizeye eklerken yerel ayarın biçimlendirme kurallarına (noktalama, kelime sırası vb.) uyar.
Cihazın yerel ayarı | title_loc_key : welcome_title |
title_loc_args : ["Alice"] |
Son Başlık Görüntüsü |
---|---|---|---|
İngilizce | "Welcome, %1$s!" |
Ayşe | "Welcome, Alice!" |
Fransızca | "Bienvenue, %1$s!" |
Ayşe | "Bienvenue, Alice!" |
Almanca | "Willkommen, %1$s!" |
Ayşe | "Willkommen, Alice!" |
Bu işlem, her kullanıcının dil tercihlerine göre uyarlanmış bir mesaj almasını sağlar. Bu mesaj, sunucunuzdan standartlaştırılmış bir yükü korurken doğru dilbilimsel yapıyı kullanır.
Örnek: yerelleştirme seçenekleri içeren bildirim mesajı
Aşağıdaki örnek gönderme isteği, istemcinin yerelleştirilmiş mesajları göstermesi için yerelleştirme seçenekleri de dahil olmak üzere Tech
konusuna bir bildirim gönderir.
Kullanıcının cihazındaki görsel efekt örneğini aşağıda görebilirsiniz:
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"]
}
}
}
}
}
}'
Daha fazla bilgi edinmek için HTTP v1 referans dokümanlarındaki
AndroidNotification
ve
ApnsConfig
bölümlerine bakın.
Bu bölümlerde, ileti gövdesindeki platforma özel bloklarda bulunan anahtarlar hakkında ayrıntılı bilgi verilmektedir. APNS tarafından desteklenen anahtarlar için Apple'ın Payload Key Reference (Yük Anahtarı Referansı) başlıklı makalesine bakın.