Runtime requirements
Browser
The source code of next-intl is compiled for the same browsers that Next.js supports (opens in a new tab).
Based on the features you're using, you have to make sure your target browsers support the following APIs:
- Basic usage: Intl.Locale(compatibility (opens in a new tab))
- Date & time formatting: Intl.DateTimeFormat(compatibility (opens in a new tab))
- Number formatting: Intl.NumberFormat(compatibility (opens in a new tab))
- Pluralization: Intl.PluralRules(compatibility (opens in a new tab))
- Relative time formatting: Intl.RelativeTimeFormat(compatibility (opens in a new tab))
- List formatting: Intl.ListFormat(compatibility (opens in a new tab))
If you target a browser that doesn't support all the required APIs, consider using polyfills. Polyfill.io (opens in a new tab) is a valuable solution for this that helps you to load only the polyfills you need for a given locale.
Example:
import {useLocale} from 'next-intl';
import Script from 'next/script';
 
function IntlPolyfills() {
  const locale = useLocale();
 
  const polyfills = [
    'Intl',
    'Intl.Locale',
    'Intl.DateTimeFormat',
    `Intl.DateTimeFormat.~locale.${locale}`,
    `Intl.NumberFormat`,
    `Intl.NumberFormat.~locale.${locale}`,
    'Intl.PluralRules',
    `Intl.PluralRules.~locale.${locale}`,
    'Intl.RelativeTimeFormat',
    `Intl.RelativeTimeFormat.~locale.${locale}`,
    'Intl.ListFormat',
    `Intl.ListFormat.~locale.${locale}`
  ];
 
  return (
    <Script
      strategy="beforeInteractive"
      src={
        'https://polyfill.io/v3/polyfill.min.js?features=' + polyfills.join(',')
      }
    />
  );
}Note that Polyfill.io doesn't support every locale. You can find a list of the
available polyfills in the polyfill-service GitHub
repository (opens in a new tab)
(e.g. search for Intl.DateTimeFormat.~locale.de-AT).
Node
The minimum version to support all relevant Intl APIs is Node.js 13. Starting from this version, all required APIs are available.