多语种的模板?
我正在使用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.jade
和footer.jade
类的footer.jade
以使模板系统尽可能地保持干燥。 这些文件也需要使用多种语言,这就是为什么我想在index_en.jade
, lang="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声明需要在块内(有时)。