2015-12-04 31 views
5

İki dilde bir çok temel bir sayfalık web sitesi oluşturmak için, yudum ile gulp-jade ve gulp-data Yeşim şablon motoru kullanıyorum. Sonuç, sunucu tarafında veya istemci tarafında işlem yapılmayan statik HTML belgeleri olmalıdır. index.jade'umda tanımladığım bir dile bağlı olarak bir JSON dosyasından web sitesi içeriği yüklemek mümkün mü ve bunu yapmanın en iyi yolu ne olurdu?Çok Dilli Jade şablonları?

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:

Bulunduğum girişimi hataya neden oluyor

extends /_layouts/default.jade 

var lang = "en" 

block content 

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

ben yudum çalıştırdığınızda bu aşağıdaki hatası: Dil başına farklı dosyalar halinde JSON

Cannot read property 'foo' of undefined 

Ben bölme kadar umursamıyorum o şeyler daha kolay yaparsa, ama hiçbir fikrim yok nasıl Uygun dosyayı index_en.jade içinden içerir.

Bazı bağlam:

Ben kendisini mümkün olduğunca KURU şablon sistemini korumak için header.jade ve footer.jade gibi şeyler bir demet içeren varsayılan bir düzen dosyası (default.jade), uzatıyorum belirtmeliyiz. Bu dosyaların çok dilli olması gerekiyordu, bu yüzden index_en.jade, lang="de"lang="de" benim index_de.jade içinde tanımlamak istiyorum ve sadece bunları çoğaltmak zorunda kalmadan tüm diğer kısmi (örneğin header_de.jade veya gibi).

Ayrıca, bu özellikleri benim yeoman generator içine birleştiriyorum, bu yüzden daha sonra başka bir dil eklemek için gulpfile.js ayarlamak zorunda kalmadan bir sistem bulmak istiyorum.

cevap

4

hata #{lang.foo} yatmaktadır. Bir dize lang ayarladınız ve üzerinde bir foo bulunmuyor… Eğer yüklediğiniz asıl nesneyi (en veya bu durumda de de dahil olmak üzere) lang olarak ayarlarsanız, o zaman iyi çalışır:

extends /_layouts/default.jade 

block content 

    - var lang = en 

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

Eksik tırnak işaretlerini not edin.

Düzenleme: Değişken bildiriminde bloğu (bazen) içinde olması gerekmektedir.

+0

Mükemmel, teşekkürler. Hem dize hem de blok kapsamı bir problemdi. –

İlgili konular