messages.json. It emits locale JSON assets into the browser-specific build. During development, it picks up edits to any locale file without a full restart.
Template example
action-locales

_locales support.
Locale capabilities
Expected structure
default_locale in manifest.json should map to an existing _locales/<default>/messages.json.
Sample locales declaration in manifest.json
Here is how to declare locales in manifest.json:
_locales folder:
Sample messages.json file
Example messages.json file for translations:
Output path
Extension.js emits locale JSON files under:Development behavior
- Extension.js adds locale JSON files to compilation dependencies and watches them.
- Locale changes trigger extension reload behavior (hard reload), not component-style hot module replacement (HMR).
- Extension.js fails validation with actionable diagnostics when required locale files are missing or invalid.
Validation behavior
Extension.js validates:default_localepresence when the project uses_locales- Existence of
_locales/<default>/messages.json - JSON validity for locale files
__MSG_*__references in manifest against default locale keys
Troubleshooting missing locale keys
If your manifest uses__MSG_extension_description__, ensure the default locale file contains extension_description:
Best practices
- Keep
messages.jsonkeys consistent across locales. - Update default locale first, then propagate keys to other locales.
- Validate locale JSON in continuous integration (CI) to catch malformed files before packaging.
- Keep locale files close to manifest (
manifestDir/_locales) for predictable resolution.
Next steps
- Understand update outcomes in dev update behavior.
- Continue with JSON in development.
- Learn about manifest development behavior.

