在推送通知的横幅中更改警报语言

iEi*_*ein 21 iphone push-notification apple-push-notifications ios

推进时,我正面临着改变横幅警报语言的问题.其实我正在开发一个以两种语言工作的应用程序.一个是英语,第二个是挪威语.我从我的网络服务器端收到的推送以及它在alert密钥中的字符串在推送到期时显示在横幅中,并且您在应用程序之外.但作为一项要求,我们希望如果我将语言从设置从英语更改为挪威语,那么当推送到来时,它的标语警报字符串也将更改为挪威语.是否可能在我的最后,或者每当我改变语言时我都必须从服务器更改它.

任何建议都会有所帮助.

谢谢

Dan*_*tín 73

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

在服务器中本地化消息

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

NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
const char *langStr = [preferredLanguage UTF8String];
[self sendCurrentLanguage:langStr]; // Method that communicates with your server
Run Code Online (Sandbox Code Playgroud)

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

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

您可以在有效负载中发送本地化字符串.该alert键接受一个子loc-key键,你可以用它来发送一个本地化的字符串:

"alert" : { 
    "loc-key" : "My Localized String",
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

"My Localized String" = "The localized string in the language you want.";
Run Code Online (Sandbox Code Playgroud)

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

"alert" : { 
        "loc-key" : "My Localized String",
        "loc-args" : [ "First argument", "Second argument" ],
        ...
    }
Run Code Online (Sandbox Code Playgroud)

而且,在你的Localizable.strings:

 "My Localized String" = "The localized string with first argument %@, and second argument %@."
Run Code Online (Sandbox Code Playgroud)

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

 "My Localized String" = "The localized string with second argument %2$@, and first argument %1$@.";
Run Code Online (Sandbox Code Playgroud)

  • 另一种选择是什么都不做,因为iOS客户端会自动添加首选语言HTTP标头.因此,服务器可以将其从注册推送令牌的请求中拉出来. (2认同)