## Translating Weekend Drops

Everything the mod shows you lives in `en.json`. To add a language, copy that file,
rename it, and translate the values. No code, no build, no rebuild of the mod.

Adding a language

1. Copy `en.json` to `<code>.json` using **the game's own language code**:

   | Code | Language | Code | Language | Code | Language |
   |------|----------|------|----------|------|----------|
   | `en` | English  | `ge` | German   | `jp` | Japanese |
   | `ru` | Russian  | `fr` | French   | `kr` | Korean   |
   | `ch` | Chinese  | `es` | Spanish  | `pl` | Polish   |
   | `cz` | Czech    | `it` | Italian  | `po` | Portuguese |
   | `hu` | Hungarian| `ro` | Romanian | `sk` | Slovak   |
   | `tu` | Turkish  | `es-mx` | Spanish (LatAm) | | |

   Note these are BSG's codes, not ISO: German is `ge` (not `de`), Chinese is `ch`,
   Japanese `jp`, Korean `kr`.

2. Translate the **values** on the right. Never touch the keys on the left.

3. Drop the file in `BepInEx/plugins/WeekendDrops/locales/` and restart the game.
   It is picked automatically when the game is set to that language.

Anything you leave untranslated (or delete) falls back to English, so a partial
translation is perfectly usable. You can ship 50 lines and add more later.

Rules

**Keep `{0}`, `{1}` exactly as they are.** They are filled in at runtime:

```json
"ui.notif.claimBoth": "{0} daily and {1} weekly waiting to claim"
```

You may reorder them if your language needs a different word order
(`"{1} weekly and {0} daily ..."`), but you may not invent new ones or drop the
existing ones. A mismatch shows the wrong number on screen.

**Keep the colour tags.** The tutorial text contains markup like
`<color=#CD8532><b>GP</b></color>`. Translate the words between the tags, leave the
tags themselves alone.

**Keep it short.** Most strings sit in fixed-width buttons and chips. German and
Russian run roughly 30% longer than English, and long text gets clipped rather than
wrapped. If a line does not fit, prefer a shorter phrasing over an exact translation.

**ALL CAPS is intentional** on headers and buttons. Match it where your script has
capitals; ignore it where it does not (Chinese, Japanese, Korean).

Fonts (important for Chinese, Japanese, Korean)

The panel is drawn with Unity's built-in font, which has Latin and Cyrillic but
**no CJK glyphs** - they render as empty boxes. Fix it by naming a system font in
your locale's `_meta` block:

```json
"_meta": {
  "name": "简体中文",
  "credit": "your name here",
  "font": "Microsoft YaHei, SimHei"
}
```

Comma-separated, tried in order, so you can list a fallback for older Windows
installs. Leave `font` empty for Latin and Cyrillic languages - the default is fine.

Changing the font needs a game restart. Changing text does not.

Testing your file

Set `Language` in the F12 config to your code (instead of `auto`) to force it on
without changing the whole game's language.

Then check the file is well-formed:

```bash
python tools/check-locale.py
```

It reports missing keys, keys that no longer exist, and broken `{0}` placeholders.

What the key prefixes mean

| Prefix | What it is |
|--------|-----------|
| `ui.*` | Menu, buttons, notifications, the tutorial |
| `challenge.*` | Weekly and daily challenge descriptions |
| `shop.*` | Shop item names and descriptions |
| `contract.*` | Bounty names, objectives, and radio chatter |
| `ui.map.*`, `ui.zone.*` | Map and landmark names - use the game's own wording |

For map and location names, copy whatever Escape from Tarkov itself calls them in
your language rather than translating the English literally.
