在CloudeCode中支持parse.com国际化(i18n)

时间:2014-12-09 10:32:55

标签: javascript internationalization parse-platform

我正在玩解析推送通知,并想到一种实现i18n支持用户到用户通知的好方法。

我的想法:

  • 对于每个安装对象,我们存储“语言”id
  • 消息发送始终只是消息密钥
  • 我们使用带翻译的i18n.json
  • 每当用户发送通知时,我们都会检查所有已定义的语言,并为每种语言创建一个带语言的收件人查询。
  • 对于每种语言,我们必须抓取消息并替换所有占位符值

它工作正常,但我认为还有优化空间。我没有进行任何性能测试,看看它在生产中是如何工作的。

我目前正在运行10种语言的设置。如果收件人在他的所有设备上使用相同的语言,则10个Parse.Push.send({})中的9个;实际上没有必要进行操作。但我现在不知道如何避免它们。

var translations = require('cloud/translations.js');
var languages = ["en", "de"];


Parse.Cloud.define("sendPushToUser", function(request, response) {

    var recipientUserId = request.params.recipient;
    var message = request.params.message;
    var key = request.params.messageKey;
    var senderName = request.params.name;

    var language;

    var translationsObj = translations["translations"];

    for(var i = 0; i < languages.length; i++){

        language = languages[i];

        pushQuery = new Parse.Query(Parse.Installation);
        pushQuery.equalTo("userId", recipientUserId);
        pushQuery.equalTo("language", language);

        var alertMessage = message;

        if(translationsObj[key] && translationsObj[key][language]){
            console.log("found translation for " + key + " (" + language + ")");
            var rawMessage = translationsObj[key][language];
            alertMessage = rawMessage.split("[[senderName]]").join(senderName);
        }

        Parse.Push.send({
                where: pushQuery,
            data: {alert: alertMessage}
            }).then(function() {
                console.log("successfully send push '" + alertMessage + "' to " + recipientUserId + "")
            }, function(error) {
        });
    }
    response.success("Push was sent successfully"); 
});

0 个答案:

没有答案
相关问题