Why Crowdin, Lokalise, and Phrase are overkill for most browser extension projects — and three real alternatives for indie developers who need to translate messages.json without a monthly subscription.
crowdin alternative extensionlokalise alternativemessages.json translator no accountbrowser extension i18n
Practical comparison of the three leading Next.js i18n libraries — App Router support, file format, TypeScript safety, pluralization syntax, and when to pick each one.
next.js i18nnext-intl vs react-i18nextnext.js app router i18nnext-intl
How the __MSG_key__ substitution syntax works in Chrome and Firefox extension manifests: which fields support it, how Chrome resolves tokens at load time, and the pitfalls that cause silent failures or upload rejections.
__MSG_key__ manifest.json__MSG_appName__manifest.json i18nchrome extension name localization
How to catch every class of messages.json error before your users do: JSON syntax, missing required fields, missing keys across locales, malformed placeholder syntax, and manifest key mismatches.
Step-by-step guide to adding i18n to a Chrome extension: _locales structure, default_locale, messages.json syntax, chrome.i18n.getMessage(), placeholder preservation, and how to test locale switching.
how to localize chrome extension_localesmessages.jsonchrome.i18n
A complete reference for the WebExtension messages.json format: the message, description, and placeholders fields, $PLACEHOLDER$ syntax, $1 positional substitutions, and common mistakes.
Using browser.i18n in Firefox add-ons: the messages.json format, AMO localization requirements, and how to avoid common pitfalls on addons.mozilla.org.