All Projects → i18next → i18next-fs-backend

i18next / i18next-fs-backend

Licence: MIT license
i18next-fs-backend is a backend layer for i18next using in Node.js and for Deno to load translations from the filesystem.

Programming Languages

javascript
184084 projects - #8 most used programming language
Pug
443 projects
typescript
32286 projects

Projects that are alternatives of or similar to i18next-fs-backend

i18next-http-backend
i18next-http-backend is a backend layer for i18next using in Node.js, in the browser and for Deno.
Stars: ✭ 270 (+302.99%)
Mutual labels:  i18next, deno
superdeno
Super-agent driven library for testing Deno HTTP servers.
Stars: ✭ 119 (+77.61%)
Mutual labels:  deno
Go Storage
An application-oriented unified storage layer for Golang.
Stars: ✭ 87 (+29.85%)
Mutual labels:  fs
Nohost
A web server in your web browser
Stars: ✭ 164 (+144.78%)
Mutual labels:  fs
Unifile
Unified access to cloud storage services through a simple web API.
Stars: ✭ 105 (+56.72%)
Mutual labels:  fs
Draxt
draxt.js – NodeList/jQuery-like package for File System (node.js)
Stars: ✭ 192 (+186.57%)
Mutual labels:  fs
Write
Write data to the file system, creating any intermediate directories if they don't already exist. Used by flat-cache and many others!
Stars: ✭ 68 (+1.49%)
Mutual labels:  fs
astrodon
Make Desktop apps with Deno 🦕
Stars: ✭ 826 (+1132.84%)
Mutual labels:  deno
matched
Glob matching with support for multiple patterns and negation. Use `~` in cwd to find files in user home, or `@` for global npm modules.
Stars: ✭ 25 (-62.69%)
Mutual labels:  fs
Write Files Atomic
Write many files atomically
Stars: ✭ 126 (+88.06%)
Mutual labels:  fs
Litfs
A FUSE file system in Go extended with persistent file storage
Stars: ✭ 116 (+73.13%)
Mutual labels:  fs
Electron Storage
Simply save/load json files to/from file system in electron applications
Stars: ✭ 109 (+62.69%)
Mutual labels:  fs
Steno
Specialized fast async file writer
Stars: ✭ 236 (+252.24%)
Mutual labels:  fs
S3fs
S3 FileSystem (fs.FS) implementation
Stars: ✭ 93 (+38.81%)
Mutual labels:  fs
dmm
Lightweight Deno Module Manager
Stars: ✭ 59 (-11.94%)
Mutual labels:  deno
Zbox
Zero-details, privacy-focused in-app file system.
Stars: ✭ 1,185 (+1668.66%)
Mutual labels:  fs
Flint
Fast and configurable filesystem (file and directory names) linter
Stars: ✭ 115 (+71.64%)
Mutual labels:  fs
Riscv Fs
F# RISC-V Instruction Set formal specification
Stars: ✭ 173 (+158.21%)
Mutual labels:  fs
media types
Deprecated. Use std/media_types instead.
Stars: ✭ 21 (-68.66%)
Mutual labels:  deno
core
Server side rendering with The Elm Architecture in Deno
Stars: ✭ 16 (-76.12%)
Mutual labels:  deno

Introduction

Actions Actions deno Travis npm version

This is an i18next backend to be used in Node.js and Deno. It will load resources from the file system.

It's based on the deprecated i18next-node-fs-backend and can mostly be used as a drop-in replacement.

It will load resources from filesystem. Right now it supports following filetypes:

  • .json
  • .json5
  • .yml/.yaml
  • .js/.ts (very limited, checks for exports or export default)

Getting started

# npm package
$ npm install i18next-fs-backend

Wiring up:

import i18next from 'i18next';
import Backend from 'i18next-fs-backend';

i18next.use(Backend).init(i18nextOptions);

for Deno:

import i18next from 'https://deno.land/x/i18next/index.js'
import Backend from 'https://deno.land/x/i18next_fs_backend/index.js'

i18next.use(Backend).init(i18nextOptions);
  • As with all modules you can either pass the constructor function (class) to the i18next.use or a concrete instance.

Backend Options

{
  // path where resources get loaded from, or a function
  // returning a path:
  // function(lngs, namespaces) { return customPath; }
  // the returned path will interpolate lng, ns if provided like giving a static path
  loadPath: '/locales/{{lng}}/{{ns}}.json',

  // path to post missing resources
  addPath: '/locales/{{lng}}/{{ns}}.missing.json',

  // if you use i18next-fs-backend as caching layer in combination with i18next-chained-backend, you can optionally set an expiration time
  // an example on how to use it as cache layer can be found here: https://github.com/i18next/i18next-fs-backend/blob/master/example/caching/app.js
  // expirationTime: 60 * 60 * 1000
}

Options can be passed in:

preferred - by setting options.backend in i18next.init:

import i18next from 'i18next';
import Backend from 'i18next-fs-backend';

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

on construction:

import Backend from 'i18next-fs-backend';
const Backend = new Backend(null, options);

via calling init:

import Backend from 'i18next-fs-backend';
const Backend = new Backend();
Backend.init(null, options);

TypeScript

To properly type the backend options, you can import the FsBackendOptions interface and use it as a generic type parameter to the i18next's init method, e.g.:

import i18n from 'i18next'
import FsBackend, { FsBackendOptions } from 'i18next-fs-backend'

i18n
  .use(FsBackend)
  .init<FsBackendOptions>({
    backend: {
      // fs backend options
    },

    // other i18next options
  })

If set i18next initImmediate option to false it will load the files synchronously

// i18n.js
const { join } = require('path')
const { readdirSync, lstatSync } = require('fs')
const i18next = require('i18next')
const Backend = require('i18next-fs-backend')
i18next
  .use(Backend)
  .init({
    // debug: true,
    initImmediate: false,
    fallbackLng: 'en',
    lng: 'en',
    preload: readdirSync(join(__dirname, '../locales')).filter((fileName) => {
      const joinedPath = join(join(__dirname, '../locales'), fileName)
      const isDirectory = lstatSync(joinedPath).isDirectory()
      return isDirectory
    }),
    ns: 'backend-app',
    defaultNS: 'backend-app',
    backend: {
      loadPath: join(__dirname, '../locales/{{lng}}/{{ns}}.json')
    }
  })

Gold Sponsors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].