【问题标题】:Modify all leaf nodes of JSON file with gulp使用 gulp 修改 JSON 文件的所有叶子节点
【发布时间】:2015-07-14 19:29:14
【问题描述】:

我正在使用 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"
    }
  }
}

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

【问题讨论】:

    标签: json angularjs gulp angular-translate


    【解决方案1】:

    我能够自己解决这个问题,使用以下 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"));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多