Skip to content

lamualfa/i18next-node-mongodb-backend-next

Repository files navigation

npm license code style: prettier

Are you a Deno user? If true, we provide the same library for Deno. See: Mongo Backend for Deno 🦖

Inspired from i18next-node-mongodb-backend with support for mongodb@3.5.x and some bug fixes and more improvements

Integrate i18next with MongoDB

Banner

Introduction

This is a i18next backend to be used Node JS. It will load resources from a MongoDB database with official node mongodb driver.

Prevously is i18next-node-mongo-backend. Because i lost my NPM account, the package was renamed to i18next-node-mongodb-backend-next.

Getting started

yarn add mongodb i18next-node-mongodb-backend-next
# or
npm install mongodb i18next-node-mongodb-backend-next

Important: This library doesn't include mongodb library. You need to install it yourself.

Usage

const i18next = require('i18next');
const Backend = require('i18next-node-mongodb-backend-next');

i18next.use(Backend).init({
  // Backend Options
  backend: options,
});

Backend Options

{
  // Database Name
  dbName: '<DB Name>', // Required

  // MongoDB Uri
  uri: '<DB URI>',

  // Or

   // MongoDB standard configuration
  host: '<DB Host>',
  port: 27017,

  // Or

  // If you have your own `MongoClient`, put in here:
  // Note: If this has already been entered, the other MongoDB configurations will be ignored
  client: new MongoClient(), // work with connected client or not

  // MongoDB authentication. Remove it if not needed
  // Choose one, `user` or `username`. Both are the same.
  user: '<DB User>',
  username: '<DB User>',
  password: '<DB Password>',

  // Collection name in database will be used to store i18next data
  collectionName: 'i18n',

  // MongoDB field name
  languageFieldName: 'lang',
  namespaceFieldName: 'ns',
  dataFieldName: 'data',

  // Remove MongoDB special character from field name. See https://jira.mongodb.org/browse/SERVER-3229
  sanitizeFieldNameCharacter: true,

  // Error handlers
  readOnError: console.error,
  readMultiOnError: console.error,
  createOnError: console.error,

  // MongoClient Options. See https://mongodb.github.io/node-mongodb-native/3.5/api/MongoClient.html
  mongodb: {
    useUnifiedTopology: true
  }
};

Example Backend Options

Connect with uri:

{
  uri: 'mongodb://localhost:27017/test',
  dbName: 'test' // Required field
}

Connect with host and port:

{
  host: 'localhost',
  port: 27017,
  dbName: 'test' // Required field
}

Connect with MongoClient instance (Recommended):

If you already have your own connection, use this to avoid useless connections

{
  client: new MongoClient(), // Change with your MongoClient instance
  dbName: 'test', // Required field
}

Example of the MongoDB document that will be created:

{
  "lang": "en-US",
  "ns": "translations",
  "data": {
    "key": "Thank you!"
  }
}

Key name is according to provided in options

Visit here for more example usage

Changelog:

v1.0.1 (19-05-2022)

  • Add support to both of user & username options.

v1.0.0 (19-05-2022)

  • Add support to mongodb v4 #18
  • Refactor the entire codebase
  • Testing improvement

v0.0.5 (13-07-2021):

v0.0.4 (08-04-2020):

  • Critical bug fixed
  • Remove persistConnection option
  • Rename filterFieldNameCharacter option to sanitizeFieldNameCharacter

v0.0.3 (DEPRECATED):

  • Add testing code with Jest
  • Add JSDOC
  • Add support for the uri option
  • Add filterFieldNameCharacter option
  • Some improvements