Функция асинхронного перевода в помощнике Handlebars.js - PullRequest
0 голосов
/ 17 января 2019

Я использую экспресс-руль для проекта.

Мы хотим поместить все языковые строки в базу данных Firebird следующим образом:

---------------------------------   
| ID | CODE  | LANG |   STRING  |
---------------------------------
| 1  | HELLO | dut  |  Hallo.   |
---------------------------------
| 2  | HELLO | fre  |  Bonjour. |
---------------------------------
| 3  | HELLO | eng  |  Hello.   |
---------------------------------
...

Я сделал функцию переводчика, которая выбирает строку в соответствии с переданным КОДОМ и языком, конечно, это асинхронный вызов.

Я определяю помощника следующим образом:

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 голосов
/ 28 января 2019

Я, вероятно, просто извлеку всю таблицу строк для определенного языка и полностью извлечу ее в сеансе при входе в систему. Таким образом, строка перевода всегда доступна при загрузке страницы.

...