LocalePack vs Lokalise for Chrome Extensions
Lokalise is a mature, team-focused localization platform. LocalePack is a format-specific translation tool with no subscription. This guide compares both for the specific job of translating a Chrome extension’s messages.json into multiple locales.
What Lokalise is built for
Lokalise is a translation management system (TMS) built for software teams running continuous localization pipelines. Its core strength is connecting source repositories, machine translation engines, professional translators, and QA reviewers in a single managed workflow — across web apps, mobile apps, and extensions simultaneously.
Lokalise natively supports the Chrome JSON format (messages.json) and correctly parses $PLACEHOLDER$ tokens. It also offers over-the-air (OTA) updates, translation memory, glossary enforcement, and tight GitHub/GitLab integration. For a team shipping a product across many locales on a continuous cadence, it is a genuinely capable platform.
The question is whether that platform is the right fit for a developer who needs to translate a Chrome extension’s messages.json once or a few times a year.
How to use Lokalise for Chrome extension messages.json: the actual steps
Here is the complete setup path for translating a Chrome extension’s messages.json with Lokalise as of early 2026:
Create a Lokalise account
Register with an email or SSO provider and verify your account. Lokalise does not have a permanent free tier for commercial projects — you start with a free trial of the paid plan.
Create a project and configure languages
Set a project name, define the source language (English), and add all target locales. Lokalise uses its own locale code system — some codes differ from Chrome's _locales folder names.
Upload your source messages.json
Select "Chrome JSON" as the file format so Lokalise correctly identifies the message/description/placeholders structure and treats $PLACEHOLDER$ tokens as non-translatable segments. Upload via dashboard or configure a GitHub integration.
Configure a machine translation provider
Lokalise does not automatically translate your strings after upload. You configure a machine translation integration — Google Translate, DeepL, OpenAI, or Lokalise AI — and trigger a pre-translation run manually.
Run pre-translation and review in the editor
Trigger MT for all target languages. Review translated strings in the Lokalise editor, where untranslated and auto-translated strings are staged separately. Approve or edit as needed.
Download the translated files
Export per-language files or use the ZIP download. Lokalise exports use its internal locale codes — verify that folder names match Chrome's expected _locales format (e.g. zh_CN vs zh-CN) before building your extension.
Subscribe to maintain access
Lokalise's feature set is behind an ongoing subscription. After the trial ends, you must choose a paid plan to continue accessing your project and translations.
messages.json translated today, this is 30–60 minutes of setup before translation work begins — followed by an ongoing subscription decision.How LocalePack handles the same job
LocalePack is purpose-built for the messages.json format. There is no account to create, no project to configure, and no MT provider to wire up.
Upload your messages.json
Drag and drop or select your source file. The Chrome JSON format is detected automatically — message, description, and placeholders fields are all recognized on upload.
Choose target languages
Select from 52 supported locales. Output folder names are mapped to Chrome's _locales format automatically — no manual locale code verification needed.
Review the price and pay
Pricing is shown before checkout based on your string count and language count. One-time payment — no subscription, no recurring charge, no trial expiry.
Download the _locales ZIP
The ZIP contains _locales/{lang}/messages.json files ready to drop into your extension. $PLACEHOLDER$ tokens are preserved exactly in every output file.
Side-by-side comparison
| Feature | Lokalise | LocalePack |
|---|---|---|
| Account required | Yes — email registration or SSO | No |
| Project setup | Yes — project name, languages, file format, MT provider | No — format detected on upload |
| Pricing model | Monthly/annual subscription (no pay-per-job option) | One-time payment per job |
| Free tier | Time-limited trial only for commercial projects | No free tier — transparent pricing shown before checkout |
| Chrome JSON / messages.json support | Yes — native format with placeholder protection | Yes — purpose-built for this format |
| $PLACEHOLDER$ protection | Yes — tokens treated as non-translatable segments | Yes — tokens preserved exactly in all output files |
| Output format | Per-language files; locale codes may differ from Chrome _locales names | _locales/{lang}/messages.json ZIP with Chrome-compatible folder names |
| Time to first translated file | 30–60 min (account + project + MT provider + pre-translation run) | Minutes (upload → select → pay → download) |
| OTA updates (push translations without a new release) | Yes — via Lokalise OTA SDK | No |
| Translation memory | Yes — reuses previous translations across jobs | No — each job is independent |
| Human translator workflow | Yes — assignment, review, approval, glossary, comments | No — AI translation only |
| GitHub / repo integration | Yes — automatic sync on push or PR | No — manual upload per job |
| Languages supported | 3000+ locales | 52 locales |
Pricing and features verified as of March 2026. Verify current pricing on lokalise.com before purchasing.
How each tool handles messages.json specifics
Chrome’s messages.json has three fields per key: message, description, and placeholders. Correct handling of $PLACEHOLDER$ tokens is critical — a corrupted token causes the extension to render raw token text instead of the substituted value.
// _locales/en/messages.json
{
"welcomeUser": {
"message": "Welcome back, $NAME$!",
"description": "Greeting shown when extension opens",
"placeholders": {
"name": {
"content": "$1",
"example": "Alice"
}
}
},
"filesSaved": {
"message": "$COUNT$ files saved",
"placeholders": {
"count": { "content": "$1" }
}
}
}Lokalise
- •Supports Chrome JSON format — correctly parses message/description/placeholders structure.
- •$PLACEHOLDER$ tokens are treated as non-translatable segments during MT pre-translation.
- •description fields are surfaced to translators as context notes, not translated.
- •MT must be triggered manually after upload — strings are staged as 'unverified' until approved.
- •Export uses Lokalise locale codes. Some differ from Chrome _locales folder names (zh-CN vs zh_CN). Manual folder verification may be needed before your extension loads them.
LocalePack
- •Detects Chrome JSON format automatically on upload — no format selection required.
- •$PLACEHOLDER$ tokens are preserved exactly in all output files — content and example fields in placeholders objects are untouched.
- •description fields are used as translation context, not translated.
- •Output uses Chrome-compatible _locales folder names — zh_CN, not zh-CN.
- •Full _locales structure is ready in the downloaded ZIP — no post-processing or folder renaming needed.
Cost comparison
For a developer translating an extension once or twice a year, the pricing model difference is significant.
Lokalise
One extension, 100 keys, 10 languages, one translation job
- •No permanent free tier for commercial projects — starts with a time-limited trial.
- •Essential plan (as of 2026): approximately $120/month billed monthly.
- •Annual minimum for a one-time job: ~$120–$1,400/year depending on plan and billing cycle.
- •MT costs may be billed additionally depending on the provider configured.
- •No pay-per-job option — you commit to a subscription plan.
LocalePack
One extension, 100 keys, 10 languages, one translation job
- •Flat one-time price shown before checkout — based on string count and language count.
- •No subscription, no monthly minimum, no trial expiry.
- •Pay again only when you translate another job.
- •No separate MT cost — translation is included in the job price.
When Lokalise is the right tool
Lokalise is genuinely the better choice in several real scenarios:
You ship continuous string updates across many locales
If your extension updates strings every sprint and you maintain 15+ locales, Lokalise's GitHub integration automatically detects new and changed keys and queues them for translation. The workflow automation justifies the subscription cost at this cadence.
You work with professional or community translators
Lokalise's core product is a translator collaboration platform — assignment, review workflows, glossary enforcement, translation memory, and comments. If localization quality requires human review at scale, a TMS provides the right infrastructure.
You need OTA (over-the-air) translation updates
Lokalise supports pushing translation updates to your app without a new release, using its OTA SDK. This is a genuine differentiator for teams who need to fix copy without going through the Chrome Web Store review process.
You manage multiple products in one workspace
If you have an extension, a web app, and a mobile app sharing terminology, Lokalise lets you manage all of them with shared translation memory and consistent glossary terms across one account.
Your team already has a Lokalise subscription
Adding an extension project to an existing Lokalise workspace may cost nothing extra if your current plan covers the string volume. Reusing existing infrastructure is always worth considering.
When LocalePack makes more sense
You need translations today, not after a 45-minute setup
LocalePack has no onboarding — upload a file, select languages, pay, download. The workflow is measured in minutes. Lokalise requires account creation, project configuration, MT provider setup, and a pre-translation run before you see any translated strings.
You translate once or a few times a year
A subscription is a poor match for infrequent localization jobs. If you localize when shipping a major version — two or three times a year — paying per job is significantly cheaper than maintaining a $120+/month plan for work you do occasionally.
You are a solo developer or small team without a localization workflow
Lokalise is built around multi-person translation workflows — translators, reviewers, managers. That depth adds friction for a developer who just wants to ship one extension to more markets without managing a platform.
You need a ready _locales ZIP with Chrome-compatible folder names
LocalePack outputs a ZIP with correct _locales/{lang}/messages.json paths using Chrome's locale code naming. Lokalise exports may use different locale codes that require folder renaming before Chrome will load them correctly.
You want to see the price before committing
LocalePack shows the exact cost before checkout based on your string count and language selection. Lokalise requires subscribing to a plan before you can translate anything — you commit to a monthly cost before seeing the output quality.
Summary: which fits your situation
Solo or small team, commercial extension, translate 1–4× per year
LocalePack — no account, no subscription, pay per job.
Team shipping weekly or bi-weekly string updates across 10+ locales
Lokalise — GitHub sync and translation memory pay off at this cadence.
Extension that needs OTA translation updates without new releases
Lokalise — the OTA SDK is a unique feature not available elsewhere.
Multiple products sharing glossary and translation memory
Lokalise — unified workspace is the right abstraction.
Need translated _locales ZIP in under 30 minutes with no setup
LocalePack — upload → pay → download ZIP.
Want to see the exact price before committing
LocalePack — pricing shown before checkout, no plan required.
Translate Chrome extension strings without a subscription
Upload your source messages.json, choose target languages, and download a ZIP with the correct _locales/{lang}/messages.json structure. Placeholder tokens preserved. No account required. One-time payment.
Related guides
LocalePack vs Crowdin for messages.json
Crowdin is a full TMS with GitHub integration and subscription pricing. LocalePack is upload → pay once → download. Honest breakdown for browser extension developers.
Browser extension i18n without a TMS subscription
Why Crowdin, Lokalise, and Phrase are overkill for most browser extension projects — and three real alternatives for indie developers.
messages.json format explained (with placeholders)
Complete reference for the WebExtension messages.json format: message, description, and placeholders fields, $PLACEHOLDER$ syntax, and $1 positional substitutions.