[英]Async translation function within Handlebars.js helper
我正在為項目使用快遞車把。
我們希望將所有語言字符串都像這樣放置在Firebird數據庫中
---------------------------------
| ID | CODE | LANG | STRING |
---------------------------------
| 1 | HELLO | dut | Hallo. |
---------------------------------
| 2 | HELLO | fre | Bonjour. |
---------------------------------
| 3 | HELLO | eng | Hello. |
---------------------------------
...
我做了一個翻譯器函數,該函數根據傳遞的CODE和語言來獲取字符串,這當然是一個異步調用。
我這樣定義一個助手:
app.engine('handlebars', exphbs({
defaultLayout: 'portal',
helpers: {
translate: function(language,code) {
dbfunctions.getDictionaryString(pool,code,language,function(translation,error) {
if (error) {
console.log('Error translating code ' + code + ' for language ' + language + '.')
return '[' + code + ' | '+ language + ']'
} else if (translation) {
console.log(translation) //this logs the correct database string
return translation
}
})
}
}
})
)
在我的home.handlebars文件中,編寫以下代碼:
<h1>{{{translate session.language 'HELLO' }}}</h1>
這將返回空白值,但是會記錄應返回的正確字符串。
我已經讀過把手不支持異步功能。 對解決這個有什么建議嗎?
我可能只會獲取特定語言的整個字符串表,並在登錄時將其完全拉入會話中。 這樣,在加載頁面時,翻譯字符串始終可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.