如何在GCM / FCM通知消息中本地化数字?

时间:2017-02-13 17:39:28

标签: android google-cloud-messaging firebase-cloud-messaging nativescript

通过GCM(即将切换到FCM)向Android设备发送推送通知时,如何根据手机语言本地化显示在消息标题/正文中的数字?

示例消息:

  

John Doe 137

如果设备语言设置为阿拉伯语,则数字应该本地化

本地化消息

  

John Doe 137

由于我在发送通知时不知道用户设备语言,如何在收到消息时本地化该号码?除非应用程序在前台运行,否则onMessageReceived回调不会执行,因此我无法对其中的数字执行字符串替换。

对于上下文下面是我从我的服务发送给GCM的gcmNotification JSON的示例,它利用了有效负载允许您使用的一些其他本地化参数。

   "gcmNotification": {
     "title_loc_key": "some_title_key",
     "title_loc_args": "[\"john\", \"Doe\", 137]",
     "icon": "TheIcon",
     "body_loc_key": "some_key",
     "sound": "somesound",
     "color": "Blue",
     "collapse_key": "somekey",
    }

2 个答案:

答案 0 :(得分:2)

一般来说,你不要试试。阿拉伯数字(正常的0-9)很好理解。如果你想坚持尝试,你可以使用字符串替换来做客户端。或者服务器端通过将您的语言环境发布到它并让服务器在发送之前进行翻译。

答案 1 :(得分:1)

为解决此问题,我最终只创建了一个带有处理转换方法的帮助器类。我通过它运行消息文本,它返回转换后的值。到目前为止,它对我来说效果很好。

public static class NumberHelper
{
    public static string ConvertToArabicNumbers(this string input)
    {
        return input.Replace('0', '\u0660')
            .Replace('1', '\u0661')
            .Replace('2', '\u0662')
            .Replace('3', '\u0663')
            .Replace('4', '\u0664')
            .Replace('5', '\u0665')
            .Replace('6', '\u0666')
            .Replace('7', '\u0667')
            .Replace('8', '\u0668')
            .Replace('9', '\u0669')
            .Replace('.', '\u066B');
    }
}