2.1.1 • Published 2 years ago

@paprika/l10n v2.1.1

Weekly downloads
4,965
License
MIT
Repository
github
Last release
2 years ago

@paprika/l10n

Description

L10n component can be used in one of two ways: Translating Paprika components, or Translating your own components.

Installation

yarn add @paprika/l10n

or with npm:

npm install @paprika/l10n

Props

L10n

PropTyperequireddefaultDescription
localestringfalse"en"Sets the preferred language
localesobjectfalsenull
childrennodetrue-Children of the L10n

Usage

This component can be used in one of two ways: Translating Paprika components, or Translating your own components.

Translating Paprika components

When someone wants to use a Paprika component that has translatable text (like the <Collapsible>) in a language other than English, they'd do it like this:

import L10n from "@paprika/l10n";
import Collapsible from "@paprika/collapsible";

<L10n locale="fr">
  ...
  <h4>Mon app</h4>
  <Collapsible />
  ...
</L10n>;

Translating your own components

When someone wants to add their own translations to their own app/components, they'd do it like this:

// App.js
import React from "react";
import L10n from "@paprika/l10n";
import YourLocales from "./YourLocales";
import GreetingHeader from "./GreetingHeader";

export default function FakeAppWithLocales(props) {
  return (
    <L10n locale="fr" locales={YourLocales}>
      ...
      <GreetingHeader />
      ...
    </L10n>
  );
}
// GreetingHeader.js
import React from "react";
import useI18n from "@paprika/l10n/lib/useI18n";

export default function GreetingHeader() {
  const i18n = useI18n();
  return <h1>{i18n.t("greeting")}</h1>;
}
// YourLocales/index.js
const locales = {};

["en", "fr"].forEach(lng => {
  // eslint-disable-next-line
  Object.assign(locales, require(`./${lng}.js`).default);
});

export default locales;
// YourLocales/en.js
const locales = {
  en: {
    translation: {
      greeting: "Hello",
      farewell: "Goodbye",
    },
  },
};
export default locales;
// YourLocales/fr.js
const locales = {
  fr: {
    translation: {
      greeting: "Bonjour",
      farewell: "Au revoir",
    },
  },
};
export default locales;

Please do not using the same translation key as paprika's to avoid overriding. You can check them from here: https://github.com/acl-services/paprika/blob/master/packages/L10n/src/locales/en.yml

Interpolating components within a translation

Imagine you have the string: Processing failed with 3 errors. Click here to try again. and you want to make the "Click here" substring a <Button onClick={...}> component. You can accomplish this with @paprika/l10n and react-i18next's Trans component:

// YourApp.js
const Locales = {
  en: {
    translation: {
      error: "Processing failed with {{count}} errors. <0>Click here</0> to try again.",
      ...

return (
  <L10n locale="en" locales={Locales}>
    <YourComponent />
  </L10n>
);
// YourComponent.js
import { Trans } from "react-i18next";
import useI18n from "@paprika/l10n/lib/useI18n";

export default function YourComponent() {
  const x = useI18n();
  return (
    <Trans i18nKey="error" i18n={x.i18n} count={3}>
      <Button
        kind="link"
        onClick={...}
      />
    </Trans>
  );
}

Adding new translations

After you have added a new translation to en.yml, in order to see it in Storybook you will need to delete the lib folder and regenerate it:

rm -rf packages/L10n/lib/ && npx lerna bootstrap

Links

2.1.1-next.0

2 years ago

2.1.1

2 years ago

2.1.0-next.0

2 years ago

2.1.0

2 years ago

2.0.0

2 years ago

2.0.0-next.0

2 years ago

1.2.2

3 years ago

1.2.2-next.0

3 years ago

1.2.1

3 years ago

1.2.1-next.0

3 years ago

1.2.0

3 years ago

1.2.0-next.0

3 years ago

1.1.15

4 years ago

1.1.15-next.0

4 years ago

1.1.15-next.1

4 years ago

1.1.14

4 years ago

1.1.14-next.0

4 years ago

1.1.13-next.0

4 years ago

1.1.13

4 years ago

1.1.12

4 years ago

1.1.12-next.0

4 years ago

1.1.11-next.0

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.10-alpha.4

4 years ago

1.1.10-alpha.3

4 years ago

1.1.10-alpha.2

4 years ago

1.1.10-alpha.1

4 years ago

1.1.10-alpha.0

4 years ago

1.1.9

4 years ago

1.1.9-alpha.1

4 years ago

1.1.9-alpha.0

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.7-alpha.1

4 years ago

1.1.7-alpha.0

4 years ago

1.1.6

4 years ago

1.1.6-alpha.0

4 years ago

1.1.5

4 years ago

1.1.5-alpha.0

4 years ago

1.1.5-alpha.1

4 years ago

1.1.4

4 years ago

1.1.4-alpha.4

5 years ago

1.1.4-alpha.3

5 years ago

1.1.4-alpha.2

5 years ago

1.1.4-alpha.1

5 years ago

1.1.4-alpha.0

5 years ago

1.1.3

5 years ago

1.1.3-alpha.0

5 years ago

1.1.2

5 years ago

1.1.2-alpha.1

5 years ago

1.1.2-alpha.0

5 years ago

1.1.1

5 years ago

1.1.1-alpha.1

5 years ago

1.1.1-alpha.0

5 years ago

1.1.0

5 years ago

1.0.2-alpha.4

5 years ago

1.0.2-alpha.3

5 years ago

1.0.2-alpha.2

5 years ago

1.0.2-alpha.1

5 years ago

1.0.1

5 years ago

1.0.2-alpha.0

5 years ago

1.0.1-alpha.1

5 years ago

1.0.1-alpha.0

5 years ago

1.0.0

5 years ago

0.4.12

5 years ago

0.4.12-alpha.2

5 years ago

0.4.12-alpha.1

5 years ago

0.4.12-alpha.0

5 years ago

0.4.11

5 years ago

0.4.10

5 years ago

0.4.9

5 years ago

0.4.8

5 years ago

0.4.7

5 years ago

0.4.6

5 years ago

0.4.5

5 years ago

0.4.4

5 years ago

0.4.3

5 years ago

0.4.2

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.3.22

5 years ago

0.3.21

5 years ago

0.3.20

5 years ago

0.3.19

5 years ago

0.3.18

5 years ago

0.3.17

5 years ago

0.3.16

5 years ago

0.3.15

5 years ago

0.3.14

5 years ago

0.3.13

5 years ago

0.3.12

5 years ago

0.3.11

5 years ago

0.3.10

5 years ago

0.3.9

5 years ago

0.3.8

5 years ago

0.3.7

5 years ago

0.3.6

5 years ago

0.3.5

6 years ago

0.3.4

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.5

6 years ago

0.2.4

6 years ago

0.2.3

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago