Merge feature/react-intl
branch with git.
Because react-intl integration is built on top of feature/redux
, you’ll also get all the features.
Adjust INTL_REQUIRE_DESCRIPTIONS
constant in tools/webpack.config.js
around line 17:
const INTL_REQUIRE_DESCRIPTIONS = true;
When this boolean is set to true, the build will only succeed if a description
is set for every message descriptor.
Adjust locales
settings in src/config.js
:
// default locale is the first one
export const locales = ['en-GB', 'cs-CZ'];
Add locale support in src/client.js
:
import en from 'react-intl/locale-data/en';
import cs from 'react-intl/locale-data/cs';
...
[en, cs].forEach(addLocaleData);
Execute yarn run messages
or yarn start
to strip out messages.
Message files are created in src/messages
directory.
Edit src/messages/*.json
files, change only message
property.
Execute yarn run build
,
your translations should be copied to build/messages/
directory.
Just import the appropriate component from react-intl
<FormattedMessage>
.You can also use it with
the defineMessages()
helper.
For date and time:
<FormattedDate>
<FormattedTime>
<FormattedRelative>
For numbers and currencies:
<FormattedNumber>
<FormattedPlural>
If possible, do not use <FormattedHTMLMessage>
, see how to use Rich Text Formatting with
<FormattedMessage>
injectIntl
High-Order Component.import {
defineMessages,
FormattedMessage,
injectIntl,
intlShape,
} from 'react-intl';
const messages = defineMessages({
text: {
id: 'example.text',
defaultMessage: 'Example text',
description: 'Hi Pavel',
},
textTemplate: {
id: 'example.text.template',
defaultMessage: 'Example text template',
description: 'Hi {name}',
},
});
function Example(props) {
const text = props.intl.formatMessage(messages.textTemplate, {
name: 'Pavel',
});
return (
<div>
<FormattedMessage
id="example.text.inlineDefinition"
defaultMessage="Hi Pavel"
description="Example of usage without defineMessages"
/>
<FormattedMessage {...messages.text} />
<FormattedMessage
{...messages.textTemplate}
values=
/>
</div>
);
}
Example.propTypes = {
intl: intlShape,
};
export default injectIntl(Example);
When running the development server, every source file is watched and parsed for changed messages.
Messages files are updated on the fly.
If a new definition is found, this definition is added to the end of every used src/messages/xx-XX.json
file so when committing, new translations will be at the tail of file.
When an untranslated message is removed and its message
field is empty as well, the message will be deleted from all translation files. This is why the files
array is present.
When editing a translation file, it should be copied to build/messages/
directory.
Intl documentation on MDN