我遇到了一个似乎无法解决的问题。我尝试了几种不同的方式,但还没有任何工作。
我正在使用grunt-messageformat来创建我的i18n本地化副本。我有两个包含语言的文件夹,我想让grunt自动为每个文件夹(语言)生成正确的输出。
让我最接近的任务是:
grunt.registerTask("ReadFolders", "Read the language folders in app/data/i18n/", function () {
// Returns an array of the paths to the language folders.
// ['app/data/i18n/en', 'app/data/i18n/key', ...]
var languageFolders = grunt.file.expand("app/data/i18n/*");
var path;
var languageName;
var i;
for (i = 0; i < languageFolders.length; i++) {
path = languageFolders[i];
languageName = path.substring(path.lastIndexOf("/") + 1, path.length);
grunt.config.set("mFormat.locale", languageName);
grunt.config.set("mFormat.inputdir", "app/data/i18n/" + languageName);
grunt.config.set("mFormat.output", "app-dist/test/js/locales/" + languageName + "/i18n.js");
grunt.task.run("messageformat:all");
}
});
这也为我的messageformat任务使用以下代码,该任务在initConfig中设置:
messageformat: {
all: {
locale: "<%= mFormat.locale %>",
inputdir: "<%= mFormat.inputdir%>",
output: "<%= mFormat.output%>"
}
}
问题是我的'readFolders'循环在messageFormat任务运行之前运行了两次,这意味着任务运行了两次,但两次都使用了mFormat变量的最后一个值。
我没有看到任何关于如何访问使用initConfig设置的任务的回调的示例。
有什么想法?还是其他想法?
由于
答案 0 :(得分:1)
好吧,我没有办法做我原先问过的事情......但我找到了一个满足我需求的好方法。我没有为每个文件夹运行任务,而是为每种语言动态地重写messageformat配置。
grunt.registerTask("ReadFolders", "Read the language folders in app/data/i18n/", function () {
// Returns an array of the paths to the language folders.
// ['app/data/i18n/en', 'app/data/i18n/key', ...]
var languageFolders = grunt.file.expand("app/data/i18n/*");
var path;
var languageName;
var locale;
var messageFormat = {};
var i = 0;
for (i = 0; i < languageFolders.length; i++) {
path = languageFolders[i];
languageName = path.substring(path.lastIndexOf("/") + 1, path.length);
locale = languageName;
if (languageName === "key") {locale = "en"; }
messageFormat[languageName] = {
locale: locale,
inputdir: "app/data/i18n/" + languageName,
output: "app-dist/test/js/locales/" + languageName + "/i18n.js"
};
}
grunt.config.set("messageformat", messageFormat);
grunt.task.run("messageformat");
});
经过相当详尽的搜索后,我认为这是唯一可行的(坦白说,在我的情况下,更好)解决方案。
如果有人有任何其他想法,仍然很高兴听到。