
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
localize-react
Advanced tools
✈️ Lightweight React Localization Library 🇺🇸
Creating really simple lightweight library for localization in React applications without any dependencies, which is built on top of new React Context Api
Library has just 737 Bytes gzipped size
npm:
npm install localize-react --save
yarn:
yarn add localize-react
LocalizationProvider is used to provide data for translations into React context. The root application component should be wrapped into LocalizationProvider. Component has the next props:
children - children to renderlocale - [OPTIONAL] locale to be used for translations. If locale is not specified regular translations object will be used as map of { key: translations }translations - object with translationsdisableCache - boolean variable to disable cache on runtime (false by default). Setting this to true could affect runtime performance, but could be useful for development.Example:
import React from 'react';
import ReactDOM from 'react-dom';
import { LocalizationConsumer, LocalizationProvider } from 'localize-react';
const TRANSLATIONS = {
en: {
name: 'Alex',
},
};
const App = () => (
<LocalizationProvider
disableCache
locale="en"
translations={TRANSLATIONS}
>
<LocalizationConsumer>
{({ translate }) => translate('name')}
</LocalizationConsumer>
</LocalizationProvider>
);
ReactDOM.render(<App />, node); // "Alex" will be rendered
Message component is used to provide translated message by specified key, which should be passed via props. Component has the next props:
descriptor - translation key (descriptor)defaultMessage - message to be used in case translation is not provided (values object are applied to default message as well)values - possible values to use with template string (Template should be passed in next format: Hello {{name}})Example:
import React from 'react';
import ReactDOM from 'react-dom';
import { LocalizationProvider, Message } from 'localize-react';
const TRANSLATIONS = {
en: {
name: 'Alex',
},
};
const App = () => (
<LocalizationProvider
locale="en"
translations={TRANSLATIONS}
>
<Message descriptor="name" />
</LocalizationProvider>
);
ReactDOM.render(<App />, node); // "Alex" will be rendered
To use with templates:
import React from 'react';
import ReactDOM from 'react-dom';
import { LocalizationProvider, Message } from 'localize-react';
const TRANSLATIONS = {
en: {
name: 'Hello, {{name}}!',
},
};
const App = () => (
<LocalizationProvider
locale="en"
translations={TRANSLATIONS}
>
<Message descriptor="name" values={{ name: 'Alex' }} />
</LocalizationProvider>
);
ReactDOM.render(<App />, node); // "Alex" will be rendered
To use with default message:
import React from 'react';
import ReactDOM from 'react-dom';
import { LocalizationProvider, Message } from 'localize-react';
const TRANSLATIONS = {
en: {},
};
const App = () => (
<LocalizationProvider
locale="en"
translations={TRANSLATIONS}
>
<Message
descriptor="name"
defaultMessage="Hello, {{name}}!"
values={{ name: 'Alex' }}
/>
</LocalizationProvider>
);
ReactDOM.render(<App />, node); // "Alex" will be rendered
useLocalize hook is used to provide localization context, which can be used for translation.
NOTE
Keep in mind, that hooks are not supported in class components!
Example:
import React from 'react';
import ReactDOM from 'react-dom';
import { LocalizationProvider, useLocalize } from 'localize-react';
const TRANSLATIONS = {
en: {
name: 'Alex',
},
};
function Test() {
const { translate } = useLocalize();
return translate('name');
}
const App = () => {
return (
<LocalizationProvider
locale="en"
translations={TRANSLATIONS}
>
<Test />
</LocalizationProvider>
);
}
ReactDOM.render(<App />, node); // "Alex" will be rendered
It's possible to use templates inside translation strings with highlighting templates using double curly braces. To pass correpospondent values:
const translation = translate('My name is {{name}}. I am {{age}}', { name: 'Alex', age: 25 });
Or with React component:
<Message descriptor="My name is {{name}}. I am {{age}}" values={{ name: 'Alex', age: 25 }} />
Alternative way of usage inside class components:
import React from 'react';
import { LocalizationContext, LocalizationProvider } from 'localize-react';
const TRANSLATIONS = {
en: {
name: 'Alex',
},
};
class Translation extends React.PureComponent {
render() {
return (
<span>
{this.context.translate('name')}
</span>
)
}
}
Translation.contextType = LocalizationContext;
const App = () => {
return (
<LocalizationProvider
locale="en"
translations={TRANSLATIONS}
>
<Translation />
</LocalizationProvider>
);
}
ReactDOM.render(<App />, node); // "Alex" will be rendered
Locale could be passed in short or long option.
Valid examples:
en-us
EN_US
en
eN-uS
Translations could be passed in any object form (plain or with deep properties)
Valid examples:
const translations = {
n: {
a: {
m: {
e: 'Alex',
},
},
},
},
You could use key with dot delimiter to access that property:
<Message descriptor="n.a.m.e" /> // will print "Alex"
If there is no exact match in translations, then the value of locale will be sanitized and formatted to lower_case_separate_by_underscore. Make sure you provide translations object with keys in this format. If translations for long locale will not be found, and translations will be found for shorten alternative - that version will be used
At least React 16.8.0 is required to use this library, because new React Context API & React Hooks
localize-react is open-source library, opened for contributions
Current test coverage is 100%
jest is used for tests. To run tests:
yarn test
localize-react is MIT licensed
FAQs
React Localization Library
The npm package localize-react receives a total of 151 weekly downloads. As such, localize-react popularity was classified as not popular.
We found that localize-react demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.