Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fastify-i18n

Package Overview
Dependencies
Maintainers
0
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fastify-i18n

Internationalization plugin for Fastify. Built upon node-polyglot.

  • 3.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1.2K
increased by39.81%
Maintainers
0
Weekly downloads
 
Created
Source

fastify-i18n

Internationalization plugin for Fastify. Built upon node-polyglot.

Installation

Install fastify-i18n with your favorite package manager:

$ npm i fastify-i18n
# or
$ yarn add fastify-i18n
# or
$ pnpm i fastify-i18n
# or
$ bun add fastify-i18n

Usage

// esm
import i18n, { defineI18n, useI18n } from 'fastify-i18n';

// cjs
const { default: i18n, defineI18n, useI18n } = require('fastify-i18n');

Global Scope

import i18n from 'fastify-i18n';

fastify.register(i18n, {
  fallbackLocale: 'en',
  messages: {
    en: { text: 'Text' },
    ja: { text: 'テキスト' },
    ko: { text: '텍스트' },
    zh: { text: '文字' },
  },
});

/*
  curl --request GET \
    --url http://127.0.0.1:3000/api/i18n \
    --header 'accept-language: ja'
  */
fastify.get('/api/i18n', async (req, reply) => {
  return reply.send({ message: req.i18n.t('text') });
});

Local Scope

import type { FastifyInstance } from 'fastify';
import { defineI18n, useI18n } from 'fastify-i18n';

export default async (app: FastifyInstance) => {
  defineI18n(app, {
    en: { hello: 'Hello, World!' },
    ja: { hello: 'こんにちは世界!' },
    ko: { hello: '안녕하세요, 월드입니다!' },
    zh: { hello: '你好,世界!' },
  });

  /*
  curl --request GET \
    --url http://127.0.0.1:3000/api/hello-world \
    --header 'accept-language: ja'
  */
  app.get('/hello-world', async (req, reply) => {
    const i18n = useI18n(req);

    return reply.send({
      // global scope
      text: req.i18n.t('text'),

      // local scope
      hello: i18n.t('hello'),
    });
  });
};

Automatic Conversion

xx-XX to xx
fastify.register(i18n, {
  fallbackLocale: 'en',
  messages: {
    en: { text: 'Text' },
    ja: { text: 'テキスト' },
  },
});
$ curl --request GET \
       --url http://127.0.0.1:3000/api/i18n \
       --header 'Accept-Language: ja-JP'
# Output: { text: 'テキスト' } (ja)
xx to xx-XX
fastify.register(i18n, {
  fallbackLocale: 'en',
  messages: {
    'en-US': { text: 'Text' },
    'ja-JP': { text: 'テキスト' },
  },
});
$ curl --request GET \
       --url http://127.0.0.1:3000/api/i18n \
       --header 'Accept-Language: ja'
# Output: { text: 'テキスト' } (ja-JP)
Priority
fastify.register(i18n, {
  fallbackLocale: 'en',
  messages: {
    'en-US': { text: 'Text' },
    'zh-CN': { text: '文本' },
    'zh-TW': { text: '文字' },
  },
});
$ curl --request GET \
       --url http://127.0.0.1:3000/api/i18n \
       --header 'Accept-Language: zh'
# Output: { text: '文本' } (zh-CN)
fastify.register(i18n, {
  fallbackLocale: 'en',
  messages: {
    'en-US': { text: 'Text' },
    'zh-TW': { text: '文字' },
    'zh-CN': { text: '文本' },
  },
});
$ curl --request GET \
       --url http://127.0.0.1:3000/api/i18n \
       --header 'Accept-Language: zh'
# Output: { text: '文字' } (zh-TW)

Glob Import (Vite Only)

// global
fastify.register(i18n, {
  fallbackLocale: 'en-US',
  messages: import.meta.glob(['~/locales/*.ts'], { eager: true }),
});
// local scope
defineI18n(app, import.meta.glob(['./locales/*.ts'], { eager: true }));

Type-safe Resources

Coming soon...

V2 Migration Guide

This guide is intended to help with migration from fastify-i18n v1 to v2.

V2 no longer distinguishes between scopes; each scope's language will override the previous layer's key with the same scope. So, useI18n is no longer needed; you can now access the instance of node-polyglot from fastify.i18n or request.i18n.

app.get('/hello-world', async (req, reply) => {
- const i18n = useI18n(req);

  return reply.send({
    // global scope
    text: req.i18n.t('text'),

    // local scope
-   hello: i18n.t('hello'),
+   hello: req.i18n.t('hello'),
  });
});

Please note that i18n must be registered before your routes, otherwise the global scope will trigger only at the last layer unless you require it.

fastify.register(i18n);
fastify.register(router);

V3 Migration Guide

Support Fastify v5

Keywords

FAQs

Package last updated on 19 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc