@bytesoftio/use-translator
TypeScript icon, indicating that this package has built-in type declarations

4.2.0 • Public • Published

@bytesoftio/use-translator

Installation

yarn add @bytesoftio/use-translator or npm install @bytesoftio/use-translator

Table of contents

Description

React integration for the @bytesoftio/translator package.

useTranslator

Subscribe to any updates on a external translatorinstance.

import React from "react"
import { createTranslator } from "@bytesoftio/translator"
import { useTranslate, useTranslator } from "@bytesoftio/use-translator"

const translatorInstance = createTranslator({ en: { title: "Foo", nested: { title: "Bar" } } }, "en")

const Component = () => {
  // connect to all translation related changes
  const translator = useTranslator(translatorInstance)

  const t = useTranslate(translator)
  // create a scoped translate function, all translation keys will be prefixed with "nested"
  const tt = useTranslate(translator, "nested")

  return (
    <div>
      <h1>Title: {t("title")}</h1>
      <h2>Nested title: {tt("title")}, same as: {t("nested.title")}</h2>
    </div>
  )
}

useTranslate

Use translations inside your React components.

import React from "react"
import { createTranslator } from "@bytesoftio/translator"
import { useTranslate } from "@bytesoftio/use-translator"

const translator = createTranslator({ en: { title: "Foo", nested: { title: "Bar" } } }, "en")

const Component = () => {
  // connect component to language and translation changes
  const t = useTranslate(translator)
  // create a scoped translate function, all translation keys will be prefixed with "nested"
  const tt = useTranslate(translator, "nested")

  return (
    <div>
      <h1>Title: {t("title")}</h1>
      <h2>Nested title: {tt("title")}, same as: {t("nested.title")}</h2>
    </div>
  )
}

useLanguage

Use language related information inside your React component.

import React from "react"
import { createTranslator } from "@bytesoftio/translator"
import { useLanguage } from "@bytesoftio/use-translator"

const translator = createTranslator({ en: { title: "Foo", nested: { title: "Bar" } } }, "en")

const Component = () => {
  // connect component to language and translation changes
  const l = useLanguage(translator)
  
  return (
    <div>
      <div>Current: {l.current}</div>
      <div>Fallback: {l.fallback}</div>
      <div>Available: {JSON.stringify(l.available)}</div>
      <button onClick={()=> l.set("de")}>Set language to "de"</button>
    </div>
  )
}

TranslatorContext

You can share the translator instance through a predefined TranslatorContext.

import React ,{useContext}from "react"
import { createTranslator } from "@bytesoftio/translator"
import { 
  TranslatorContext,
  useTranslator, 
  useTranslate, 
  useLanguage,
} from "@bytesoftio/use-translator" 

const translator = createTranslator({ en: { title: "Foo" }, de: { title: "Bar" } }, "en")

const RootComponent = () => {
  return (
    <TranslatorContext.Provider value={translator}>
      <ChildComponent/>
    </TranslatorContext.Provider>
  )
}

const ChildComponent = () => {
  const translator1 = useContext(TranslatorContext)
  // or use insance in context
  const translator2 = useTranslator()
  
  const t1 = useTranslate(translator)
  // or use insance in context
  const t2 = useTranslate()

  const l1 = useLanguage(translator)
  // or use instance in context
  const l2 = useLanguage()

  const changeLanguage = () => translator1.setLanguage("de")

  return (
    <div>
      <h1>Title: {t2("title")}</h1>
      <button onClick={changeLanguage}>Change language</button>
    </div>
  )
}

Readme

Keywords

none

Package Sidebar

Install

npm i @bytesoftio/use-translator

Weekly Downloads

0

Version

4.2.0

License

MIT

Unpacked Size

9.33 kB

Total Files

16

Last publish

Collaborators

  • maximkott