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

How to localize numbers in a GCM/FCM notification message?

当通过 GCM(即将切换到 FCM)向 Android 设备发送推送通知时,如何根据 [=] 的语言本地化消息 title/body 中出现的数字33=]?

示例消息:

John Doe 137

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

本地化消息

John Doe ١٣٧

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

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

   "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",
    }

一般情况下不去尝试。阿拉伯数字(正常的 0-9)很好理解。如果你想坚持尝试,你可以在客户端用字符串替换来做。或者在服务器端将您的区域设置发布到它并让服务器在发送之前进行翻译。

为了解决这个问题,我最终只创建了一个助手 class,其中包含一个处理转换的方法。我 运行 通过它的消息文本和它 returns 翻译的值。到目前为止,它对我来说效果很好。

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');
    }
}