npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@edx/frontend-i18n

v3.0.4

Published

Frontend i18n client code for managing internationalization and localization.

Downloads

32

Readme

frontend-i18n

|Build Status| |Coveralls| |npm_version| |npm_downloads| |license| |semantic-release|

frontend-i18n contains a shared interface for internationalizing and localizing frontend code. For detailed soup-to-nuts instructions on internationalizing your React app, see the _HOWTO .

.. _HOWTO: https://github.com/edx/frontend-i18n/blob/master/docs/how_tos/i18n.rst

Installation

To install frontend-i18n into your project::

npm i --save @edx/frontend-i18n

Configuration

The frontend-i18n library needs to be configured on application initialization. The configure() function takes two arguments, a configuration object and a messages object.

Example of messages object::

import arMessages from './messages/ar.json'; import es419Messages from './messages/es_419.json';

const messages = { ar: arMessages, // 'en' should not be included here, as it is the default/fallback language. 'es-419': es419Messages, };

Example of es_419.json messages JSON file::

{ "siteheader.links.courses": "Cursos", "siteheader.links.programs": "Programas y Titulos", }

Configuration Example::

import { configure as configureI18n } from '@edx/frontend-i18n';

// frontend-i18n relies on two pieces of configuration. const configuration = { ENVIRONMENT: 'production', LANGUAGE_PREFERENCE_COOKIE_NAME: 'openedx-language-preference' } const messages = { ar: require('./messages/ar.json') // ... other languages ... } configureI18n(configuration, messages);

Exports

configure(configObject, messages)

Configures the i18n library with messages for your application.

The first argument is the application configuration object.

The second argument is an object containing messages for each supported locale, indexed by locale name.

Example of second parameter::

{ en: { "message.key": "Message Value" }, 'es-419': { "message.key": "Valor del mensaje" } ... }

Logs a warning if it detects a locale it doesn't expect (as defined by the supportedLocales list in lib.js), or if an expected locale is not provided.

getPrimaryLanguageSubtag

Some of our dependencies function on primary language subtags, rather than full locales. This function strips a locale down to that first subtag. Depending on the code, this may be 2 or more characters.

getLocale([locale])

Gets the locale from the cookie or, failing that, the browser setting.

Falls back to a more general primary language subtag, or, if the more general language isn't one we support, to English (en). Throws an error if i18n has not yet been configured.

locale (Optional): If a locale is provided, returns the closest supported locale.

getMessages([locale])

Returns messages for the provided locale, or for the user's preferred locale if no argument is provided.

isRtl()

Determines if the provided locale is a right-to-left language.

handleRtl()

If the current locale is an RTL language, adds a "dir=rtl" attribute to the html tag.

Passthrough components from react-intl <https://github.com/formatjs/react-intl/wiki/Components>_.

  • FormattedDate
  • FormattedMessage
  • FormattedNumber
  • FormattedPlural
  • FormattedRelative
  • FormattedTime
  • defineMessages
  • injectIntl (shimmed by this library to throw errors instead of crashing when it gets a nonexistent message id)
  • IntlProvider
  • intlShape

Redux Related API:


**setLocale()**

A redux action creator. It creates an action in the form below::

  {
    type: 'I18N__SET_LOCALE',
    payload: {
      locale: 'the-locale',
    }
  }

**reducer**

The reducer for locale actions.

**localeSelector**

A selector that returns the locale when given the redux state.


Localized country lists:

getCountryList(locale)

Provides a list of countries represented as objects of the following shape::

{ key, // The ID of the country name // The localized name of the country }

The list should be sorted alphabetically in the current locale (but see ARCH-878 <https://openedx.atlassian.net/browse/ARCH-878>_). This is useful for populating a dropdown.

getCountryMessages(locale)

Provides a lookup table of country IDs to country names in the current locale.

Localized language lists:


**getLanguageList(locale)**

Provides a lookup table of language IDs to language names in the current locale.

**getLanguageMessages(locale)**

Provides a list of languages represented as objects of the following shape::

  {
    key, // The ID of the language
    name // The localized name of the language
  }

This is useful for populating a dropdown. The list should be sorted alphabetically in the current locale, but we had to skip that for performance reasons. See `ARCH-878 <https://openedx.atlassian.net/browse/ARCH-878>`_.


.. |Build Status| image:: https://api.travis-ci.org/edx/frontend-i18n.svg?branch=master
   :target: https://travis-ci.org/edx/frontend-i18n
.. |Coveralls| image:: https://img.shields.io/coveralls/edx/frontend-i18n.svg?branch=master
   :target: https://coveralls.io/github/edx/frontend-i18n
.. |npm_version| image:: https://img.shields.io/npm/v/@edx/frontend-i18n.svg
   :target: @edx/frontend-i18n
.. |npm_downloads| image:: https://img.shields.io/npm/dt/@edx/frontend-i18n.svg
   :target: @edx/frontend-i18n
.. |license| image:: https://img.shields.io/npm/l/@edx/frontend-i18n.svg
   :target: @edx/frontend-i18n
.. |semantic-release| image:: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
   :target: https://github.com/semantic-release/semantic-release