Handlebars.js帮助器中的异步翻译功能

时间:2019-01-17 15:18:18

标签: node.js asynchronous handlebars.js

我在为项目使用快递把手。

我们想像这样将所有语言字符串放入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>

这将返回一个空白值,但是会记录应返回的正确字符串。

我已阅读到把手不支持异步功能。有什么解决建议吗?

1 个答案:

答案 0 :(得分:0)

我可能只会获取特定语言的整个字符串表,并在登录时将其完全拉入会话中。这样,在加载页面时,翻译字符串始终可用。