使用gulp

时间:2015-07-14 19:29:14

标签: json angularjs gulp angular-translate

我正在使用angular-translate,并且有许多包含翻译字符串的JSON文件,我已经使用json-combine进行设置,将所有单个文件合并为每种语言的单个文件。生成的文件如下所示:

{
  "myNamespace" : {
    "CANCEL" : "Cancel",
    "PENDING" : "Pending", 
    "module" : {
      "USERNAME" : "User name",
      "PASSWORD" : "Password"
    }
  }
}

但是,我需要在每个翻译字符串的开头和结尾添加字符,以便执行测试,在应用程序的任何地方都没有任何硬编码字符串,并且似乎无法计算如何做到这一点。

我可以手动修改每个字符串并创建一个单独的语言文件,但我更愿意以编程方式执行,并在其余的gulp任务之后执行。基本上它应该采用完全组合的英文文件并修改每个叶节点,如下所示:

{
  "myNamespace" : {
    "CANCEL" : "\u4ECFCancel\u7D42",
    "PENDING" : "\u4ECFPending\u7D42", 
    "module" : {
      "USERNAME" : "\u4ECFUser name\u7D42",
      "PASSWORD" : "\u4ECFPassword\u7D42"
    }
  }
}

这可能吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我能够自己解决这个问题,使用以下gulp任务:

gulp.task("i18n-pseudo-locale", function() {
    return gulp.src(distDirectory + "/l10n/en_US.json")
        .pipe(jsoncombine(pseudoLocale + ".json", function(data) {
            var originalJson = data["en_US"];
            function processJson(json) {
                // Leaf node
                if (typeof(json) === "string") {
                    return "\u4ECF" + json +  "s\u7D42";
                }
                // object
                for(var propertyName in json) {
                    json[propertyName] = processJson(json[propertyName]);
                }
                return json;
            }
            finalJson = processJson(originalJson);
            return new Buffer(JSON.stringify(finalJson));
         }))
        .pipe(gulp.dest(distDirectory + "/l10n"));
});