Skip to content

Internationalization requirements

Mandatory locales for specific markets live on the Regions pages.

  • MUST use FRVR.profile.getLocale() to get the player’s locale.
  • MUST NOT read navigator.language / navigator.languages yourself. They’re unreliable in channel webviews, and some channels forbid them.
const locale   = FRVR.profile.getLocale();   // "en-US", "ja", "pt-BR"
const language = locale.split('-')[0];       // "en", "ja", "pt"

The SDK returns the language the channel reports when it has one (YouTube Playables, Facebook Instant), the browser’s otherwise, and en-US when neither is usable. The value is always a BCP 47 tag, so Facebook’s en_US arrives as en-US.

Call it after FRVR.bootstrapper.init() has resolved. There is no change event: read it once at startup.

  • MUST ship en (or en-US) strings for every UI string. Unsupported locales fall back to English. Never to a hard‑coded other language; never to empty strings.
  • MUST NOT display untranslated copy or raw translation keys (menu.play, etc.).
  • MUST use a font that covers every script you ship.
  • MUST support text expansion (German, French, Russian commonly run 30–50% longer than English). Don’t pin button widths.
  • SHOULD support RTL (Arabic, Hebrew) where shipped. Mirror UI direction, not just alignment.
  • MUST use Intl.NumberFormat / Intl.DateTimeFormat for any user‑facing values.
  • MUST NOT hand‑roll currency conversion or invent symbols. Use FRVR.iap catalog values.
  • MUST NOT use imagery, copy, or audio restricted in any market the channel distributes to (national flags, religious symbols, political content).