I18n
The I18n component is a set of different translation components. Its basic role is to convert the provided translation string into translated text.
If you have not read how the translation system works in Shopgate Engage, please read the guide for Using Translation System first.
Available components
Section titled “Available components”I18n.Text
Section titled “I18n.Text”I18n.Text is the most commonly used translation component that renders a translated text by connecting the provided translation string with the language dictionary provided by the Shopgate Engage Theme or your extension.
| Name | Type | Default | Description |
|---|---|---|---|
| string* | string |
translation string (e.g. myExtension.myTranslationString) |
|
| children | node |
null | See Advanced Use section |
| params | Object |
null | Set of named parameters for the translation string |
| className | string |
null | CSS class name |
Advanced use
Section titled “Advanced use”For simple translations, you only need to use string props to translate the translation string.
// Dictionary: { someString: 'This is an example text' };import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Text string="someString" />);This component produces the following HTML:
<span>This is an example text</span>Use params for dynamic values
Section titled “Use params for dynamic values”If your translation is more complex, use params for dynamic values:
// Dictionary: { someString: 'This is a complex test translation with a full component as params. Component is: {component}' };import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Text string="someString" params={{ component: 'just a string' }} />);This produces the following HTML:
<span> This is a complex test translation with a full component as params. Component is: just a string</span>Use params for dynamic values as nodes
Section titled “Use params for dynamic values as nodes”Params accept any valid React node (so, string, null, or an actual node).
// Dictionary: { someString: 'This is a complex test translation with a full component as params. Component is: {component}' };import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Text string="someString" params={{ component: (<strong>React node</strong>) }} />);This produces the following HTML:
<span> This is a complex test translation with a full component as params. Component is: <strong>React node</strong></span>This approach can be very handy for dynamic values, but as your params get more complex, your jsx code becomes more difficult to read.
This is why we prepared another way of translating complex translations.
Children as params.
Section titled “Children as params.”If your translation expects params to be passed, it can also be done by passing children with a forKey prop.
The forKey prop declares that a node should be treated as a translation string parameter. For example:
// Dictionary: { someString: 'This is a complex test translation with a full component as params. Component is: {component}' };import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Text string="someString"> <strong forKey="component"> a child component injected into a translation </strong> </I18n.Text>);This produces following HTML:
<span> This is a complex test translation with a full component as params. Component is: <strong>a child component injected into a translation</strong></span>I18n.Date
Section titled “I18n.Date”I18n.Date translates an unix epoch (in milliseconds) to a localized date format.
| Name | Type | Default | Description |
|---|---|---|---|
| timestamp* | number |
Epoch timestamp in milliseconds | |
| format | string |
medium |
Date format. Possible values same as in native DateTimeFormat |
Example:
Section titled “Example:”import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Date timestamp={new Date(0).getTime()} format="long" />);<span>January 1, 1970</span>I18n.Time
Section titled “I18n.Time”I18n.Time translates an unix epoch (in milliseconds) to a localized time format.
| Name | Type | Default | Description |
|---|---|---|---|
| timestamp* | number |
Epoch timestamp in milliseconds | |
| format | string |
medium |
Time format. Possible values same as in native DateTimeFormat |
Example:
Section titled “Example:”import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Time timestamp={new Date(0).getTime()} format="long" />);<span>1:00:00 AM GMT+1</span>I18n.Number
Section titled “I18n.Number”I18n.Number translates a number into a localized string.
| Name | Type | Default | Description |
|---|---|---|---|
| number* | number |
Epoch timestamp in milliseconds | |
| fractions | number |
0 | Number of fraction digits to use |
| className | string |
null | CSS class name |
Example:
Section titled “Example:”import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Number number={1000} fractions={2}/>);<span>1,000.00</span>I18n.Price
Section titled “I18n.Price”I18n.Price translates a number into a localized price.
| Name | Type | Default | Description |
|---|---|---|---|
| price* | number |
Amount ($100.50 === 100.5) | |
| currency* | string |
Currency code | |
| className | string |
null | CSS class name |
| fractions | boolean |
true | Whether to always show fraction digits (100 => $100.00) |
Example:
Section titled “Example:”import { I18n } from '@shopgate/engage/components';
export default () => ( <I18n.Price price={1000} currency="USD"/>);<span>$1,000.00</span>
