LocalePack
ChromeFirefoxEdgeOperaSafariCWS 掲載ページ
Vue.jsReact
Next.jsi18nextReact Native
開発者向けガイド導入事例
Placeholder-safe messages.json translation

AI ローカリゼーションで messages.json files

元の messages.json をアップロードし、対象言語を選び、1回の支払いで、すぐに公開できる _locales の ZIP をダウンロードできます。

プレースホルダー安全な翻訳
WebExtension の messages.json に準拠
明確な料金体系
messages.json
ソース言語(例)
{
  "appName": {
    "message": "My Extension",
    "description": "Name"
  },
  "welcomeMsg": {
    "message": "Hello, $USER$!",
    "placeholders": {
      "user": {
        "content": "$1"
      }
    }
  }
}
ドイツ語(出力)
{
  "appName": {
    "message": "Meine Erweiterung",
    "description": "Name"
  },
  "welcomeMsg": {
    "message": "Hallo, $USER$!",
    "placeholders": {
      "user": {
        "content": "$1"
      }
    }
  }
}
52 locales

仕組み

browser extension をローカライズするための簡単な3ステップ。翻訳は支払い後に実行され、ジョブをキューに入れて数分で ZIP を生成します。

01

アップロード

元の messages.json ファイルをドロップしてください。すぐに解析し、browser extension の形式を検証します。

02

言語を選択して料金を確認

52言語から選べます。支払い前に、ファイルサイズに基づく明確な料金を確認できます。

03

ZIP をダウンロード

Stripe で1回だけ支払います。すべての _locales/{lang}/messages.json ファイルを生成し、ZIP にまとめます。

リアルタイム料金デモ

明確な料金見積もり

アップロード前に支払い金額を正確に確認できます。最終見積もりは、アップロード後に文字列の長さと選択した言語に基づいて算出されます。

1. ファイルをアップロード

ここにmessages.jsonをドロップ

またはクリックして参照

messages.json input. Max 500KB.

2. 言語を選択

|

55言語中3言語を選択

3. お見積もり

選択した言語数3

最終価格は、チェックアウトページでファイルをアップロード後に算出されます

一括払い • サブスクリプションなし

開発者のために設計

browser extensionのロケール形式に特化。汎用的な翻訳ツールではありません。

WebExtension形式に対応

browser extensionのmessages.json構造(message、description、placeholders)に特化して構築されています。

プレースホルダー保護

$PLACEHOLDER$構文をそのまま正確に保持します。変数はすべての言語でそのまま維持されます。

説明のコンテキスト

descriptionフィールドを読み取り、より正確なAI翻訳のためのコンテキストヒントとして活用します。

ZIPでエクスポート可能

正しい_locales/{lang}/messages.jsonのフォルダ構成でZIPをダウンロードできます。拡張機能にそのまま入れるだけです。

並列処理

すべての言語を同時に翻訳します。ほとんどのジョブは5分以内に完了します。

一括払い

サブスクなし、月額料金なし。ジョブごとに一度支払えば、いつでもダウンロードできます。

WebExtension 拡張機能の i18n の仕組み

A messages.json entry pairs a key with a "message" string, an optional "description" used as translation context, and an optional "placeholders" map. LocalePack parses all three: it translates only the message text, forwards the description to the model as context, and returns $PLACEHOLDER$ and $1 substitution tokens byte-identical.

_locales/ フォルダー構成
_locales/
├── en/
│   └── messages.json   ← default_locale
├── de/
│   └── messages.json
├── fr/
│   └── messages.json
└── ja/
    └── messages.json
messages.json
{
  "appName": {
    "message": "My Extension",
    "description": "Extension name"
  },
  "greeting": {
    "message": "Hello, $USER$!",
    "placeholders": {
      "user": { "content": "$1" }
    }
  }
}

ランタイムAPI

chrome.i18n / browser.i18n

呼び出し例

getMessage("key")

マニフェストで必須

"default_locale"

The same translated messages.json drops into _locales/{locale}/ for Chrome, Firefox, Edge, Opera and Safari without further edits.

messages.json format explained →

What the translator has to preserve

A messages.json entry is more than a key and a string. Getting these four pieces wrong is what breaks extensions after machine translation.

message
The user-visible string, and the only field that should ever change during translation.
description
Context for whoever — or whatever — translates the string. LocalePack feeds this to the model as translation context, so a good description measurably improves output quality.
placeholders
Named substitutions written as $PLACEHOLDER$ in the message, with their own content definitions. These must survive translation exactly, including the dollar signs and casing.
Positional substitutions
$1 through $9 map to arguments passed to getMessage(). A translator that reorders a sentence must keep these tokens intact, not renumber them.

Most generic translation tools treat $PLACEHOLDER$ and $1 as ordinary words. Once they are translated or reordered, the extension ships with broken interpolation.

なぜ汎用ツールではダメなのか?

汎用の翻訳ツールはbrowser extension形式を理解しません。

LocalePack
手動翻訳
汎用TMS
セットアップ時間2分言語ごとに数時間30分以上
料金の透明性
WebExtension形式の安全性
プレースホルダー保護
速度(52言語)5分未満週時間
最適な用途Any messages.json file小規模プロジェクトエンタープライズ向け Web アプリ

導入事例

LocalePack を使って、最大 52 言語でグローバルなユーザーに届けた実際のプロジェクト。

AstrologerAI AI astrology app localized into 52 languages

AstrologerAI: an AI astrology app localized into 52 languages

How the AstrologerAI app translated its entire experience into 52 languages with LocalePack — 6.3M tokens for $58.73 — to reach a worldwide audience in their own language.

DevToys.pro developer tools web app localized into 52 languages

DevToys.pro: 400% international traffic growth across 52 languages

How the DevToys.pro web app translated its entire UI into 52 languages with LocalePack — 5.8M tokens for $58.44 — and quadrupled its international organic traffic.

DevToys New Tab Chrome extension localized into 52 languages

DevToys New Tab: a Chrome extension localized UI + store listing in 52 languages

How the DevToys New Tab Chrome extension localized both its in-extension UI and its Chrome Web Store listing into 52 languages to reach a global audience.

The LocalePack site localized into 52 languages with LocalePack

LocalePack localized itself into 52 languages — with LocalePack

We used our own tool to translate the entire LocalePack site into 52 languages — 2.9M tokens for $27.37 — so developers worldwide find us in their own language.

成功事例をすべて見る

拡張機能開発者に信頼されています

“面倒な作業を何時間も節約できました。messages.json をアップロードしたら、必要な形式そのままで完璧な翻訳が返ってきました。”

Sarah K.

個人開発者、AdBlock 拡張機能

“Our $PLACEHOLDER$ tokens came back untouched in all 52 locales. That is the whole reason we stopped scripting it ourselves.”

Marcus T.

拡張機能メンテナー

“透明な料金体系が決め手でした。何かをアップロードする前に、支払う金額が正確に分かりました。”

Dev J.

オープンソース貢献者

52

対応ロケール

100%

プレースホルダーを安全に保持

ZIP

すぐにリリース可能

よくある質問

LocalePack について知っておくべきことをまとめました。

Related developer guides

Deep dives on the formats, APIs and errors behind this page — written for developers, not translators.

messages.json format explained (with placeholders)

A complete reference for the WebExtension messages.json format: the message, description, and placeholders fields, $PLACEHOLDER$ syntax, $1 positional substitutions, and common mistakes.

Validate messages.json before shipping

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.

__MSG_key__ in manifest.json explained

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.

chrome.i18n.getMessage() returns empty

getMessage() returns an empty string when a message is missing, and logs nothing at all. Every cause of the silent empty string, how to tell it apart from undefined, and how to confirm each one.

Browse all guides →

browser extension を世界中にリリースする準備はできましたか?

一度支払い - ZIP をダウンロード - 世界中にリリース

LocalePackを試す
LocalePack
ガイドプライバシー利用規約サポート

© 2025 LocalePack. All rights reserved.

このプロジェクトは次を使用して翻訳されました LocalePack logoLocalePack