Video Stabilizer — contributing a translation

Single source of truth
  extension/_locales/<Chrome-locale>/messages.json contains all 162 messages.
  src/languages.json lists the supported Chrome locale, BCP47 formatting tag,
  the language's own name and its text direction. No country flags are used.
  extension/locales.js is generated from those files; do not edit it by hand.
  Chrome uses the catalogs for extension metadata. The same bundled messages
  provide live language overrides in the player and popup without network IO.

Add or edit
  1. Copy the English messages.json into a supported Chrome locale directory.
  2. Translate every message. Keep keys and {named} placeholders unchanged.
     The builder rejects missing keys, mismatched placeholders and HTML.
  3. Add the locale to src/languages.json with an autonym and dir=ltr or rtl.
     Use neutral technical wording. Keep native codes such as dxmax in code.
     Keep the manifest description within 132 Unicode characters.
  4. Run npm run build:locales, then npm test. No npm dependencies are needed.
  5. Run npm run serve and use the visible UI regression button. Check long
     labels, a 320x180 player, error messages, keyboard controls, number input,
     pending drafts, and language changes while video keeps playing.
     If a new numbering system is not accepted, extend the input parser and
     its round-trip tests before claiming support for that locale.
  6. Reload the unpacked extension and refresh YouTube to test the real build.

Text / formatting rules
  Use complete messages instead of concatenating translated fragments.
  Numbers come from Intl.NumberFormat; do not format interpolated numbers
  inside a translation. The runtime isolates interpolated values for bidi.
  Do not add markup, directional-control workarounds or embedded code.
  Use logical CSS properties for spacing and placement. Labels can wrap;
  buttons must stay reachable without horizontal scrolling.
  Keep input validation, saved-setting migration and error recovery working.
  English is the final fallback. Sparse or unreviewed catalogs must not be
  advertised as complete; every shipped catalog currently has all keys.

References
  https://developer.chrome.com/docs/extensions/reference/api/i18n
  https://developer.chrome.com/docs/extensions/reference/manifest/default-locale

Translation review by native speakers is welcome. Structural/placeholder
checks do not establish that every phrase is idiomatic in every region.
