← Chrome 148 reference

v148 · web app · shipped

Manifest Localization

Web app manifests can now carry built-in translations for name, short name, description, and icons using _localized-suffixed fields. The browser picks the closest match to the user's language — no server-side manifest switching or separate manifest files needed.

at a glance

Shipped inChrome 148, Microsoft Edge 148
StatusEnabled by default
FlagNone
Standards positionW3C Web Application Manifest + Localizable Manifests
SpecDeveloping Localizable Manifests — W3C Working Draft
ExplainerLocalization support for web app manifests — Chrome for Developers
ChromeStatus5090807862394880 — Manifest Localization

why it exists

Before Chrome 148, a PWA that needed localized names had to either serve a different manifest from a different URL per locale, or use server-side content negotiation to rewrite the manifest dynamically. Neither approach integrates cleanly with install-time metadata or icon selection. Manifest Localization bakes translations directly into the manifest file using a standardised _localized suffix convention, matching the existing pattern used by the web app manifest specification's internationalization work in W3C.

Source: Chrome for Developers — Manifest Localization blog, W3C Localizable Manifests spec, May 2026.

the manifest fields

Any localizable manifest member gains a companion field whose name is the original field name with _localized appended. Each companion field is an object whose keys are BCP 47 language tags and whose values are localization entries.

Original fieldLocalized companionValue type
namename_localizedobject mapping lang tag → localization entry
short_nameshort_name_localizedsame
descriptiondescription_localizedsame
iconsicons_localizedobject mapping lang tag → array of icon objects

Localization entry

KeyRequiredDescription
valueYesThe translated string (or array of icon objects for icons_localized).
dirNoText direction override: "ltr", "rtl", or "auto". Defaults to the manifest's top-level dir.
langNoLanguage override for the value. Defaults to the map key.
Source: W3C Localizable Manifests spec and Chrome for Developers blog, May 2026.

example

Localizing name and short_name

{
  "name": "Weather Now",
  "name_localized": {
    "fr": { "value": "Météo en direct" },
    "de": { "value": "Aktuelles Wetter" },
    "ja": { "value": "天気ナウ" },
    "ar": { "value": "الطقس الآن", "dir": "rtl" }
  },
  "short_name": "Weather",
  "short_name_localized": {
    "fr": { "value": "Météo" },
    "de": { "value": "Wetter" },
    "ja": { "value": "天気" },
    "ar": { "value": "الطقس", "dir": "rtl" }
  },
  "description": "Real-time weather for your location.",
  "description_localized": {
    "fr": { "value": "Météo en temps réel pour votre emplacement." },
    "de": { "value": "Echtzeit-Wetter für Ihren Standort." }
  },
  "start_url": "/",
  "display": "standalone",
  "icons": [
    { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

Language selection

The browser matches the user's preferred language (from the OS or browser settings) against the keys in the localized maps using BCP 47 lookup (subtag fallback). A French-Canadian user (fr-CA) sees the fr value if no fr-CA key is present. If no matching key is found, the base (non-suffixed) field value is used.

Locale-specific icons

{
  "icons": [
    { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ],
  "icons_localized": {
    "ja": [
      { "src": "/icons/icon-512-ja.png", "sizes": "512x512", "type": "image/png" }
    ]
  }
}
Source: Chrome for Developers — Manifest Localization blog, May 2026.

browser support

BrowserSupport
Chrome 148+ (desktop + Android)Enabled by default
Microsoft Edge 148+Enabled by default
FirefoxNo position
SafariNo position
Source: chromestatus.com browser views, May 2026.

see also