localize-to

1.0.4 • Public • Published

Localize.To React Client

This module allows you to get and use localization strings from Localize.to service.

Localize.To REST API

  • GET /language/{language}

  • GET /languages/{language1,language2}

  • GET /snapshots

  • GET /snapshot/latest/info

  • GET /snapshot/latest

  • GET /snapshot/{version}

  • GET /snapshot/{version}/language/{language}

  • GET /snapshot/{version}/languages/{language1,language2}

Currently, this module implements only these API calls:

  • GET /languages/{language1,language2}
  • GET /snapshot/{version}
  • GET /snapshot/{version}/languages/{language1,language2}

this is enough for the most cases.

Installation

yarn add localize-to
npm i localize-to --save

Demo project

Demo project could be found there: Localize.to Demo Project

Usage

localize-to exports several components/functions:

  • LocalizeToProvider //provider, wrap an app in the provider
  • useLocalizeTo //custom hook, use it with functional components
  • withLocalizeTo //wrap a class or a component to provide access to localizedContext
  • LocalizeToContext //context, usually you do not access it directly
  • LocalizeToConsumer //consumer, usually you do not need it as well

Wrap your application in LocalizeToProvider

import { LocalizeToProvider } from 'localize-to';

const initialTranslations = {
    en: {
        key: "value_english",
        /* and so on */
    },
    de: {
        key: "value_german",
        /* and so on */
    },
}

const LocalizedApp = () => {
    return (
        <LocalizeToProvider
            language={'en'}  //by default "en"
            fallbackLanguage={'en'}  //could be null, by default "en"
            translations={initialTranslations}  //object
            apiKey={PROJECT_API_KEY}    //string
        >
            <App />
        </LocalizeToProvider>
    )
}

export default LocalizedApp;

Get localization strings

import { useLocalizeTo } from 'localize-to'

const MyComponent = () => {

    const { ls, localize, localizeTo, translations } = useLocalizeTo()

    return (
        <div>
            {localize('key')}
            {localizeTo('key', 'de')}
            {ls['key']}
            {ls.key}
            {translations['en']['key']}
        </div>
    )
}

localize(key) returns a translation for current language or a key if a translation does not exist

localizeTo(key, language) returns a translation for particular language or a key if a translation does not exist

ls is an object that contains translations for current language

translations is an object that contains translations for all languages

localize, localizeTo, ls also can return a translation for the fallback language

Special unlocalized function

import { useLocalizeTo } from 'localize-to'

const NewComponent = () => {

    const { unlocalized } = useLocalizeTo()

    return (
        <div>
        {unlocalized('localization key or any string')}
        </div>
    )
}

It does nothing. Use it when you do not know localization keys yet and then you can easily find all of them in your project.

Set current and/or fallback language

import { useLocalizeTo } from 'localize-to'

const LanguageSelect = () => {

    const { language, setLanguage, fallbackLanguage, setFallbackLanguage } = useLocalizeTo()

    return (
        <div>
            <div>Current {language}, Fallback: {fallbackLanguage}</div>
            <button onClick={()=>setLanguage('fr')}>
                Switch to French
            </button>
            <button onClick={()=>setFallbackLanguage('en')}>
                Set English as a fallback language
            </button>
        </div>
    )
}

export default LanguageSelect

Download new localization strings from the service

There are several functions:

downloadLanguage(language, callback) Get localized strings for particular language

downloadLanguages([language1, language2], callback) Get localized strings for particular languages

downloadLanguages([], callback) Get localized strings for all available languages

downloadVersion(version, [language1, ...], callback) Get localized strings for particular version and/or languages

callback is optional, it returns an error or null

import { useLocalizeTo } from 'localize-to'

const Downloads = () => {

    const { localizeIsLoading, downloadLanguage, downloadLanguages, downloadVersion } = useLocalizeTo()

    return (
        <div>
            <div>
                {localizeIsLoading ? 'Loading...' : null}
            </div>
            <button onClick={()=>downloadLanguage('sk')}>
                Get [SK]
            </button>
            <button onClick={()=>downloadLanguages(['pl', 'de'])}>
                Get [PL, DE]
            </button>
            <button onClick={()=>downloadLanguages([])}>
                Get [All languages]
            </button>
            <button onClick={()=>downloadVersion('v1.0.1', ['uk'])}>
                Get v1.0.1 [UK]
            </button>
            <button onClick={()=>downloadVersion('v1.0.1')}>
                Get v1.0.1 [All languages]
            </button>
        </div>
    )
}

export default Downloads

withLocalizeTo

If you prefer not to use hooks, you can wrap your components or classes in withLocalizeTo function.

import { withLocalizeTo } from 'localize-to'

class Welcome extends React.Component {

    render() {

        // ls is an object with localized strings for current language
        // ls is a localizedContext
        const { ls, lc } = this.props

        // lc prop contains properties and functions described above
        const { language, fallbackLanguage, setLanguage, ...rest } = lc

        return (
            <div>
                <div>{lc.localize('welcome')}</div>
                <div>{ls['welcome']}</div>
                <div>{ls.welcome}</div>
                <div>{lc.localizeTo('welcome', 'de')}</div>
            </div>
        )
    }
}

export default withLocalizeTo(Welcome)

Dependencies (2)

Dev Dependencies (9)

Package Sidebar

Install

npm i localize-to

Weekly Downloads

0

Version

1.0.4

License

ISC

Unpacked Size

365 kB

Total Files

9

Last publish

Collaborators

  • whitetown