What is i18next-xhr-backend?
The i18next-xhr-backend package is a backend layer for the i18next internationalization framework, which allows you to load translations from a server using XMLHttpRequest (XHR). This is particularly useful for dynamic loading of translations in web applications.
What are i18next-xhr-backend's main functionalities?
Loading translations from a server
This feature allows you to load translation files from a server. The `loadPath` option specifies the path to the translation files, which can include placeholders for the language (`{{lng}}`) and namespace (`{{ns}}`).
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
i18next
.use(XHR)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
}
}, function(err, t) {
if (err) return console.error(err);
console.log('i18next is ready...');
});
Customizing XHR settings
This feature allows you to customize the XHR settings, such as using the Fetch API instead of the default XMLHttpRequest. The `ajax` function can be overridden to provide custom behavior for loading translation files.
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
i18next
.use(XHR)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json',
ajax: function (url, options, callback, data) {
// Custom AJAX request
fetch(url, options)
.then(response => response.json())
.then(data => callback(data, { status: '200' }))
.catch(error => callback(null, { status: '500' }));
}
}
});
Caching translations
This feature allows you to cache translations in localStorage to reduce the number of requests to the server. The `cache` option can be configured to enable caching and set a key prefix for the cached translations.
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
const Cache = require('i18next-localstorage-cache');
i18next
.use(XHR)
.use(Cache)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
},
cache: {
enabled: true,
prefix: 'i18next_res_' // Key prefix for localStorage
}
});
Other packages similar to i18next-xhr-backend
i18next-http-backend
The i18next-http-backend package is another backend layer for i18next that uses the Fetch API to load translations from a server. It is similar to i18next-xhr-backend but uses modern Fetch API instead of XMLHttpRequest, providing better support for modern browsers and environments.
i18next-localstorage-backend
The i18next-localstorage-backend package allows you to load translations from localStorage. This is useful for offline applications or scenarios where you want to avoid making network requests for translations. It differs from i18next-xhr-backend by focusing on localStorage as the source of translations.
i18next-fs-backend
The i18next-fs-backend package is designed for Node.js environments and allows you to load translations from the file system. This is useful for server-side rendering or Node.js applications. It differs from i18next-xhr-backend by focusing on file system access rather than network requests.
Introduction
This is a simple i18next backend to be used in the browser. It will load resources from a backend server using the xhr API.
Getting started
Source can be loaded via npm, bower or downloaded from this repo.
# npm package
$ npm install i18next-xhr-backend
# bower
$ bower install i18next-xhr-backend
Wiring up:
import i18next from 'i18next';
import XHR from 'i18next-xhr-backend';
i18next.use(XHR).init(i18nextOptions);
- As with all modules you can either pass the constructor function (class) to the i18next.use or a concrete instance.
- If you don't use a module loader it will be added to
window.i18nextXHRBackend
Backend Options
{
loadPath: '/locales/{{lng}}/{{ns}}.json',
addPath: 'locales/add/{{lng}}/{{ns}}',
allowMultiLoading: false,
parse: function(data) { return data.replace(/a/g, ''); },
parsePayload: function(namespace, key, fallbackValue) { return { key } },
crossDomain: false,
withCredentials: false,
overrideMimeType: false,
customHeaders: {
authorization: 'foo',
},
ajax: function (url, options, callback, data) {},
queryStringParams: { v: '1.3.5' }
}
Options can be passed in:
preferred - by setting options.backend in i18next.init:
import i18next from 'i18next';
import XHR from 'i18next-xhr-backend';
i18next.use(XHR).init({
backend: options,
});
on construction:
import XHR from 'i18next-xhr-backend';
const xhr = new XHR(null, options);
via calling init:
import XHR from 'i18next-xhr-backend';
const xhr = new XHR();
xhr.init(null, options);
Misc
TypeScript definitions
-
Install from @types
(for TypeScript v2 and later):
npm install --save-dev @types/i18next-xhr-backend
-
Install from typings
:
typings install --save --global dt~i18next-xhr-backend