24

当推送到来时,我面临更改横幅中警报语言的问题。实际上我正在开发一个以两种语言工作的应用程序。一是英语,二是挪威语。我从我的 Web 服务器端收到的推送以及它在alert密钥中的字符串在推送到来并且您在应用程序之外时显示在横幅中。但是作为一项要求,如果我将语言设置从英语更改为挪威语,那么当推送到来时,其横幅的警报字符串也将更改为挪威语。是否有可能在我结束时,或者每当我更改语言时我必须从服务器更改它?

4

1 回答 1

78

在 iOS 中,有两种方法可以在推送通知中显示本地化文本:

在您的服务器中本地化消息

在这种情况下,您必须将设备语言发送到您的服务器。您需要添加到 iOS 应用程序的代码类似于以下内容:

NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
const char *langStr = [preferredLanguage UTF8String];
[self sendCurrentLanguage:langStr]; // Method that communicates with your server

alert然后,您可以使用通知 JSON 有效负载中的密钥以适当的语言发送通知消息。

发送带有通知负载的本地化字符串

您可以在有效负载中发送本地化字符串。该alert键接受loc-key可用于发送本地化字符串的子键:

"alert" : { 
    "loc-key" : "My Localized String",
    ...
}

然后,在Localizable.strings对应语言标识符内的文件中,添加以下内容:

"My Localized String" = "The localized string in the language you want.";

如果您需要传递参数来构建最终的本地化字符串,您也可以loc-args在通知负载中将其作为 JSON 数组传递:

"alert" : { 
        "loc-key" : "My Localized String",
        "loc-args" : [ "First argument", "Second argument" ],
        ...
    }

而且,在你的Localizable.strings

 "My Localized String" = "The localized string with first argument %@, and second argument %@."

或者,如果您需要更改位置:

 "My Localized String" = "The localized string with second argument %2$@, and first argument %1$@.";
于 2013-09-04T09:30:03.860 回答