i18n-node icon indicating copy to clipboard operation
i18n-node copied to clipboard

Object Notation: Cannot read property 'indexOf' of undefined

Open mrgcl opened this issue 7 years ago • 1 comments
trafficstars

I'm using Express + Handlebars with the library. When I enable objectNotation, the project crashes. With object notation disabled, regular key/value pairs work just fine.

Relevant code:

i18n.configure({
    locales: availableLocales,
    defaultLocale: 'en',
    directory: __dirname + '/locales',
    cookie: 'locale',
    objectNotation: true
});

app.use(favicon(path.join(__dirname, 'public', 'images', 'favicon.png'))); // TODO: ver por que no funciona
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs', hbs.__express);
app.use(cookieParser());
app.use(i18n.init);
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

hbs.registerHelper('__', function () {
    return i18n.__.apply(this, arguments);
});
hbs.registerHelper('__n', function () {
    return i18n.__n.apply(this, arguments);
});

app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);

Route

router.get('/', function(req, res) {
    res.render('index', {});
});

Template

<p>{{{__ "this.is.nested"}}}</p>

Locale

{
    "this": {
        "is": {
            "nested": "whatever"
        }
    }
}

Error message:

TypeError: /Users/mrg/WebstormProjects/myproj/views/error.hbs: Cannot read property 'indexOf' of undefined
    at translate (/Users/mrg/WebstormProjects/myproj/node_modules/i18n/i18n.js:862:34)
    at Object.i18nTranslate (/Users/mrg/WebstormProjects/myproj/node_modules/i18n/i18n.js:220:13)
    at Object.<anonymous> (/Users/mrg/WebstormProjects/myproj/app.js:33:20)
    at Object.eval [as main] (eval at createFunctionContext (/Users/mrg/WebstormProjects/myproj/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js:254:23), <anonymous>:6:66)
    at main (/Users/mrg/WebstormProjects/myproj/node_modules/handlebars/dist/cjs/handlebars/runtime.js:173:32)
    at ret (/Users/mrg/WebstormProjects/myproj/node_modules/handlebars/dist/cjs/handlebars/runtime.js:176:12)
    at ret (/Users/mrg/WebstormProjects/myproj/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:525:21)
    at /Users/mrg/WebstormProjects/myproj/node_modules/hbs/lib/hbs.js:87:17
    at /Users/mrg/WebstormProjects/myproj/node_modules/hbs/lib/hbs.js:69:11
    at Object.done (/Users/mrg/WebstormProjects/myproj/node_modules/hbs/lib/async.js:74:20)

mrgcl avatar Jul 04 '18 21:07 mrgcl

Just encountered the same issue today in 2021. You have to turn that feature on by specifying the field "objectNotation" to be true in the configuration

lxinghe avatar Jul 26 '21 09:07 lxinghe