LocalePack
ChromeFirefoxEdge오페라사파리CWS 등록 페이지
Vue.jsReact
Next.jsi18nextReact Native
개발자 가이드성공 사례
Placeholder-safe messages.json translation

AI 로컬라이제이션: messages.json files

원본 messages.json을 업로드하고 대상 언어를 선택한 뒤, 한 번만 결제하면 바로 배포 가능한 _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로 한 번만 결제하세요. 모든 _locales/{lang}/messages.json 파일을 생성하고 ZIP으로 묶어 제공합니다.

실시간 가격 데모

투명한 가격 추정기

업로드 전에 결제 금액을 정확히 확인하세요. 최종 견적은 업로드 후 문자열 길이와 선택한 언어를 기준으로 계산됩니다.

1. 파일 업로드

여기에 messages.json을 드롭하세요

또는 클릭하여 찾아보기

messages.json input. Max 500KB.

2. 언어 선택

|

총 55개 언어 중 3개 선택됨

3. 예상 견적

선택한 언어3

최종 가격은 결제 페이지에서 파일 업로드 후 계산됩니다

일회성 결제 • 구독 없음

개발자를 위해 만들었습니다

browser extension 로케일 형식에 맞춰 설계되었습니다. 범용 번역 도구가 아닙니다.

WebExtension 형식 지원

message, description, placeholder 지원을 포함한 browser extension messages.json 구조에 맞춰 특별히 제작되었습니다.

플레이스홀더 보호

$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")

manifest에 필수

"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소규모 프로젝트엔터프라이즈 웹 앱

성공 사례

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. 모든 권리 보유.

이 프로젝트는 다음으로 번역되었습니다: LocalePack logoLocalePack