How to configure internationalization for koa2

I follow the demo code provided by i18next

const i18next = require("i18next");
const i18m = require("koa-i18next-middleware");
 
// add custom detector.
i18m.LanguageDetector.addDetector({
    name: "mySessionDetector",
 
    lookup(ctx, options) {
        let found;
        if (options.lookupSession && ctx && ctx.sessions) {
            found = ctx.sessions[options.lookupMySession];
        }
        return found;
    },
 
    cacheUserLanguage(ctx, lng, options = {}) {
        if (options.lookupMySession && ctx && ctx.session) {
            ctx.session[options.lookupMySession] = lng;
        }
    }
});
 
i18next.use(i18m.LanguageDetector).init({
    fallbackLng: "en",
    preload: ["en", "es"],
    resources: {
        en: {
            translation: {
                "key": "hello world"
            }
        },
        es: {
            translation: {
                "key": "es hello world es"
            }
        }
    },
    detection: {
        order: ["querystring", "path", /*"cookie", "header",*/ "session", "mySessionDetector"],
 
        lookupQuerystring: "lng",
 
        lookupParam: "lng", // for route like: "path1/:lng/result"
        lookupFromPathIndex: 0,
 
        // currently using ctx.cookies
        lookupCookie: "i18next",
        // cookieExpirationDate: new Date(), // default: +1 year
        // cookieDomain: "", // default: current domain.
 
        // currently using ctx.session
        lookupSession: "lng",
 
        // other options
        lookupMySession: "lang",
 
        // cache user language
        caches: ["cookie", "mySessionDetector"]
    }
}, (err, t) => {
    // initialized and ready to go!
    const hw = i18next.t("key"); // hw = "hello world"
    console.log(hw);
});
 
app.use(i18m.getHandler(i18next, {
        locals: "locals",
        ignoreRoutes: ["/no-lng-route"],
    })
);
 

console prompt error

clipboard.png

what to do with this!

Mar.03,2021

I also went to get koa-i18next-middleware . Visually, it is the problem of this library. issue has been mentioned by someone, but the owner of the library has not fixed it yet. You can try koa's official i18n and locales instead.

Menu