多语种的模板?

我正在使用Jade模板引擎,使用两种语言构build一个非常基本的单页网站。 结果应该是静态HTML文档,不需要进一步的服务器端或客户端处理。 是否有可能根据我在index.jade定义的语言从JSON文件加载网站内容,以及如何去执行此操作的最佳方法是什么?

我目前的尝试会导致错误:

gulpfile.js:

 gulp.task('views', function () { return gulp.src('app/**/*.jade') .pipe($.data(function(file) { return require('./app/data/text.json'); // load language file })) .pipe($.jade({pretty: true, basedir: 'app/'})) .pipe(gulp.dest('.tmp')); }); 

text.json:

 { "de": { "foo": "deutsch" }, "en": { "foo": "english" } } 

index_en.jade:

 extends /_layouts/default.jade var lang = "en" block content h1 #{lang.foo} // load text from json 

运行gulp时,会导致以下错误:

 Cannot read property 'foo' of undefined 

我不介意把每个语言的JSON分成不同的文件,但是我不知道如何在index_en.jade包含相应的文件。

一些背景:

我应该注意到我正在扩展一个默认的布局文件( default.jade ),它本身包含了一些诸如header.jadefooter.jade类的footer.jade以使模板系统尽可能地保持干​​燥。 这些文件也需要使用多种语言,这就是为什么我想在index_en.jadelang="de"中定义lang="en" ,并且将其传播到所有其他部分而不必重复这些(例如没有header_de.jade等)。

我也将这些function合并到我的yeoman生成器 ,所以我想find一个系统,我可以避免必须调整gulpfile.js如果我以后再添加另一种语言。

错误在于#{lang.foo} 。 你已经将lang设置为一个string,并且没有foo对象…如果将lang设置为你正在加载的实际对象(在这种情况下为en或de),它可以正常工作:

 extends /_layouts/default.jade block content - var lang = en h1 #{lang.foo} // load text from json 

请注意缺less的引号。

编辑:variables声明需要在块内(有时)。