Many apps have to be made usable by different users from various parts of the world.
To make this easier, we can use the react-intl to do the internationalization for us.
In this article, we’ll look at how to get started with formatting dates with the react-intl library.
FormattedRelativeTime
We can use the FormattedRelativeTime
component to format relative time.
For example, we can write:
import React from "react";
import { IntlProvider, FormattedRelativeTime } from "react-intl";
const messages = {
en: {
greeting: "Hello {name}! How's it going?"
},
es: {
greeting: "¡Hola {name}! ¿Cómo te va?"
},
fr: {
greeting: "Bonjour {name}! Comment ça va?"
},
de: {
greeting: "Hallo {name}! Wie geht's?"
}
};
export default function App() {
return (
<IntlProvider locale="en" messages={messages.en}>
<p>
<FormattedRelativeTime
value={1000}
numeric="auto"
updateIntervalInSeconds={10}
/>
</p>
</IntlProvider>
);
}
We use the FormattedRelativeTime
component with a few props.
value
has the relative time value in seconds.
numeric
meabns whether we display the item numerically.
updateIntervalInSeconds
is the time interval in seconds in which we update the formatted string.
Number Formatting Components
We can format numbers with a few components.
They include the FormattedNumber
, FormattedNumberParts
and FormattedPlural
components.
FormattedNumber
The FormattedNumber
complete renders the formatted number into a fragment.
We can customize this as we wish.
For instance, we can use it by writing:
import React from "react";
import { IntlProvider, FormattedNumber } from "react-intl";
const messages = {
en: {
greeting: "Hello {name}! How's it going?"
},
es: {
greeting: "¡Hola {name}! ¿Cómo te va?"
},
fr: {
greeting: "Bonjour {name}! Comment ça va?"
},
de: {
greeting: "Hallo {name}! Wie geht's?"
}
};
export default function App() {
return (
<IntlProvider locale="en" messages={messages.en}>
<p>
<FormattedNumber
value={1024}
style="unit"
unit="kilobyte"
unitDisplay="narrow"
/>
</p>
</IntlProvider>
);
}
We use the FormattedNumber
component with the value
to format.
style
is set to unit
so that we format it with the unit.
unit
is the unit we want to have with the number.
unitDisplay
is the style of the unit we display.
We can only pass in units that are allowed by the Inyl.NumberFormat
constructor.
narrow
means that we display the abbreviation.
So we get:
1,024kB
as a result.
FormattedNumberParts
The FormattedNumberParts
component lets us format each part of the number string individually.
For instance, we can write:
import React from "react";
import { IntlProvider, FormattedNumberParts } from "react-intl";
const messages = {
en: {
greeting: "Hello {name}! How's it going?"
},
es: {
greeting: "¡Hola {name}! ¿Cómo te va?"
},
fr: {
greeting: "Bonjour {name}! Comment ça va?"
},
de: {
greeting: "Hallo {name}! Wie geht's?"
}
};
export default function App() {
return (
<IntlProvider locale="en" messages={messages.en}>
<p>
<FormattedNumberParts value={1024}>
{parts => (
<>
<b>{parts[0].value}</b>
{parts[1].value}
<em>{parts[2].value}</em>
</>
)}
</FormattedNumberParts>
</p>
</IntlProvider>
);
}
to format each part of the number.
In our example, the first parts
entry is the thousands digit.
The 2nd part is the comma thousand separator.
The 3rd is the remaining digits.
FormattedPlural
We can format plural numbers with the FormattedPlural
component.
To use it, we can write:
import React from "react";
import { IntlProvider, FormattedPlural } from "react-intl";
const messages = {
en: {
greeting: "Hello {name}! How's it going?"
},
es: {
greeting: "¡Hola {name}! ¿Cómo te va?"
},
fr: {
greeting: "Bonjour {name}! Comment ça va?"
},
de: {
greeting: "Hallo {name}! Wie geht's?"
}
};
export default function App() {
return (
<IntlProvider locale="en" messages={messages.en}>
<p>
<FormattedPlural value={10} one="cat" other="cats" />
</p>
</IntlProvider>
);
}
We use the FormattedPlural
compoennt to render the singular or plural according to the value
that’s passed into the value
prop.
List Formatting Components
We can format lists with react-intl.
FormattedList
We can use the FormmatedList
component to format lists the way we want.
For instance, we can write:
import React from "react";
import { IntlProvider, FormattedList } from "react-intl";
const messages = {
en: {
greeting: "Hello {name}! How's it going?"
},
es: {
greeting: "¡Hola {name}! ¿Cómo te va?"
},
fr: {
greeting: "Bonjour {name}! Comment ça va?"
},
de: {
greeting: "Hallo {name}! Wie geht's?"
}
};
export default function App() {
return (
<IntlProvider locale="en" messages={messages.en}>
<p>
<FormattedList type="conjunction" value={["peter", "paul", "mary"]} />
</p>
</IntlProvider>
);
}
to combine the array in the value
prop into a string.
We specified that the type
of conjunction
so that we combine it with ‘and’ or their equivalent on other languages.
Since we set the locale to English, we get:
peter, paul, and mary
Conclusion
We can format relative time, lists, and numbers with react-intl.