npm package: @openquantum/i18next-node-mongo-backend
Description: Use i18next with mongodb as backend
Author: Laode Muhammad Al Fatih
Latest version: 0.0.8

[![npm](https://badgen.net/npm/v/i18next-node-mongo-backend?color=red)](https://www.npmjs.com/package/i18next-node-mongo-backend)
[![license](https://badgen.net/github/license/lamualfa/i18next-node-mongo-backend?color=purple)](https://github.com/lamualfa/i18next-node-mongo-backend/blob/master/LICENSE)

[![Build Status](https://travis-ci.com/lamualfa/i18next-node-mongo-backend.svg)](https://travis-ci.com/lamualfa/i18next-node-mongo-backend)
[![codecov](https://codecov.io/gh/lamualfa/i18next-node-mongo-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/lamualfa/i18next-node-mongo-backend)
[![Maintainability](https://api.codeclimate.com/v1/badges/5fc60912b2776f1e1a53/maintainability)](https://codeclimate.com/github/lamualfa/i18next-node-mongo-backend/maintainability)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)

## Are you a Deno user? If `true`, we provide the same library for Deno. See: [Mongo Backend for Deno](https://github.com/lamualfa/dn-i18next-mongo-backend) 🦖

#### Inspired from [i18next-node-mongodb-backend](https://github.com/gian788/i18next-node-mongodb-backend) with support for `mongodb@3.5.x` and some bug fixes and more improvements

# Integrate [i18next](https://github.com/i18next/i18next) with [MongoDB](https://www.mongodb.com/)

<div align="center">
<img src="asset/banner.png" alt="Banner"/>
</div>


# Introduction

This is a [i18next](https://github.com/i18next/i18next) backend to be used Node JS. It will load resources from a [MongoDB](https://www.mongodb.org) database with official node mongodb [driver](https://mongodb.github.io/node-mongodb-native/3.5/).

# Getting started

```bash
yarn add mongodb i18next-node-mongo-backend
# or
npm install mongodb i18next-node-mongo-backend
```

> Important: This library doesn't include `mongodb` library. You have to install it yourself

# Usage

```js
const i18next = require('i18next');
const Backend = require('i18next-node-mongo-backend');

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

# Backend Options

```js
{
  // 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
  user: '<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`:

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

#### Connect with `host` and `port`:

```js
{
  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

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

## Example of the MongoDB document that will be created:

```json
// Key name is according to provided in options
{
  "lang": "en-US",
  "ns": "translations",
  "data": {
    "key": "Thank you!"
  }
}
```

## Visit [here](https://github.com/lamualfa/i18next-node-mongo-backend/tree/v0.0.4-examples) for more example usage

# Change Log:

### v0.0.4 _(08-04-20)_:

- Critical bug fixed
- Remove `persistConnection` option
- Rename `filterFieldNameCharacter` option to `sanitizeFieldNameCharacter`

### v0.0.3 _(DEPRECATED)_:

- Add testing code with [Jest](https://jestjs.io/)
- Add [JSDOC](https://jsdoc.app/)
- Add support for the `uri` option
- Add `filterFieldNameCharacter` option
- Some improvements