2015-12-04 80 views
5

我正在使用Jade模板引擎,並使用gulp,gulp-jadegulp-data以兩種語言構建一個非常基本的單頁網站。結果應該是靜態HTML文檔,不需要進一步的服務器端或客戶端處理。根據我在index.jade中定義的語言,是否可以從JSON文件加載網站內容,以及如何執行此操作的最佳方法是什麼?多語言Jade模板?

我現在的嘗試會導致一個錯誤:

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 

這將導致以下錯誤,當我運行一飲而盡:

Cannot read property 'foo' of undefined 

我不介意分裂的JSON爲每種語言不同的文件,如果使事情變得更容易,但我不知道我怎麼將包括index_en.jade內的相應文件。

一些背景:

我要指出,我伸出的默認佈局文件(default.jade),其本身包括像header.jadefooter.jade了一堆東西,以保持模板系統儘可能乾燥。這些文件也需要使用多種語言,這就是爲什麼我想在我的index_en.jade,lang="de",index_de.jade中定義lang="en",並且只是將其傳播到所有其他部分,而不必重複這些部分(例如,否否header_de.jade或這樣)。

我還合併這些功能回到我yeoman generator,所以我想找到一個系統,我可不必調整gulpfile.js如果我添加其他語言以後。

回答

4

錯誤在於#{lang.foo}。你已經將lang設置爲一個字符串,並且它沒有foo ...如果你將lang設置爲你正在加載的實際對象(在這種情況下是en或de),它可以正常工作:

extends /_layouts/default.jade 

block content 

    - var lang = en 

    h1 #{lang.foo} // load text from json 

請注意丟失的引號。

編輯:變量聲明需要在塊內(有時)。

+0

完美,謝謝。字符串和塊範圍都是一個問題。 –