Publishing & Deployment Issues May 24, 2026

Weblate Merge Conflict Blocks October Next Fest String Freeze for Store Capsules - How to Fix

Fix Weblate merge conflicts blocking October Next Fest string freeze. Resolve parallel translator edits, export clean PO, pass store-page QA, and file string_freeze_receipt_v1.json on BUILD_RECEIPT.

By GamineAI Team

Weblate Merge Conflict Blocks October Next Fest String Freeze for Store Capsules - How to Fix

Problem: Your Weblate project shows merge conflicts on multiple components. Export is blocked or produces stale PO files. October Next Fest is two weeks out, but Steam capsule screenshots and short description are still English-only while translators insist they “finished CN/JP/KR.”

Who is affected now: Teams that refreshed the 18 Free localization tooling list for CN/JP/KR capsules but skipped the dedicated Weblate string-freeze workflow. June–July 2026 fest prep stacks parallel translator edits, fuzzy flags, and wrong VCS branches into a hard stop the week before creative lock—not a missing translation API.

Fastest safe fix: Declare a string-freeze window → open Weblate Alerts / conflict list → resolve every conflict with glossary lock (no ad-hoc CSV bypass) → export clean PO per locale → run store-page QA checklist screenshot text vs PO → file string_freeze_receipt_v1.json with conflict_count: 0 → set string_freeze_date on BUILD_RECEIPT before trailer subtitle burn-in.

Direct answer

Weblate will not export trustworthy PO while merge conflicts exist—the TMS is protecting you from shipping two different truths for the same string key. Fix conflicts in Weblate, not by emailing CSVs around the repo. Store capsules stay English until exported PO is imported into the engine and screenshots are recaptured from the localized build.

Why this issue spikes in June–July 2026

  1. October creative lock — Trailer and capsule art need final UI strings; late PO breaks burn-in.
  2. CN/JP/KR rush — Three locales edited in parallel on the same keys.
  3. Fuzzy flags ignored — “100% translated” in dashboard but conflicts still open.
  4. Wrong branch — Weblate tracks main while fest strings live on fest_demo.
  5. CSV bypass temptation — Producer merges spreadsheets; Weblate state diverges from git.
  6. Store-truth week7-day metadata sprint expects localized screenshots, not English captures with translated PO sitting in Drive.

Symptoms and search phrases

  • Weblate Alerts: merge conflict on one or more components.
  • Download translation greyed out or exports old commit hash.
  • Translators marked done; English screenshots still on Steam backend.
  • Engine shows mixed languages—some keys CN, some EN on same screen.
  • Git shows manual .po edits bypassing Weblate.
  • Trailer already rendered with English subs; PO “finished” yesterday.
  • string_freeze_date missing on BUILD_RECEIPT row.

Root causes (check in order)

  1. Parallel edits on same string without review merge.
  2. Fuzzy / needs editing not cleared before export.
  3. Wrong repository branch in Weblate component settings.
  4. Manual CSV import desynced from VCS truth.
  5. Glossary not locked — translators invent conflicting terms for UI buttons.
  6. Export before conflict resolution — partial PO imported to Unity/Godot.
  7. Screenshot capture from English build — PO correct, store still wrong.

Beginner path (first 60 minutes)

Prerequisites: Weblate admin access, fest target locales listed (e.g. zh_Hans, ja, ko), engine project that imports PO or CSV.

  1. Open Weblate → ManageAlerts — note conflict count.
  2. Post freeze window in team chat: no new English source changes until receipt passes.
  3. Resolve top 10 conflicts using glossary (Step 2 below).
  4. Export one locale smoke PO → import to engine → launch localized build.
  5. Capture one screenshot — text must match PO for that locale.
  6. If pass → continue until all locales export; if fail → stop store uploads.

Common mistake: Recapturing screenshots from Editor English play mode while PO targets fest branch only.

Fastest safe fix path

Step 1 — String-freeze window policy

Rule Detail
Freeze start Document UTC timestamp in release-evidence/l10n/FREEZE.md
English source No new keys on fest branch without Weblate admin approval
Hotfix path Only P0 gameplay blockers; re-open freeze explicitly
Trailer No subtitle burn-in until string_freeze_receipt passes

Announce freeze before asking translators to “finish everything tonight.”

Step 2 — Resolve conflicts with glossary lock

  1. Lock glossary in Weblate — character names, ability names, UI verbs (Start, Options).
  2. Open Browse → filter “Has conflict” (or Alerts list).
  3. For each conflict: pick source-faithful or glossary-compliant side; never leave “both” ambiguous.
  4. Clear fuzzy on resolved rows.
  5. Re-run repository push / commit hook if your integration requires it.

Official: Weblate translating, Glossary and checks.

Step 3 — Verify component branch and export

Check Pass
Component tracks fest git branch (not stale main) Yes
Alerts show 0 merge conflicts Yes
Export produces new file hash vs yesterday Yes
msgfmt / engine import reports 0 errors Yes
# Example: verify PO compiles (gettext)
msgfmt --check -o NUL .\export\game_zh_Hans.po

Unity / Godot: import via your localization tooling path—do not hand-merge cells into production CSV on fest SKU.

Step 4 — Export proof bundle

Zip per locale for producers:

release-evidence/l10n/string-freeze-2026-10/
  game_zh_Hans.po
  game_ja.po
  game_ko.po
  weblate_export_log.txt
  screenshot_zh_Hans.png
  screenshot_ja.png
  screenshot_ko.png

Step 5 — string_freeze_receipt_v1.json

{
  "schema": "string_freeze_receipt_v1",
  "freeze_date": "2026-07-15",
  "weblate_project": "your-game",
  "conflict_count": 0,
  "locales_exported": ["zh_Hans", "ja", "ko"],
  "fuzzy_count": 0,
  "store_screenshot_parity_ok": true,
  "trailer_subtitle_burn_in_allowed": true,
  "pass": true
}

Attach to BUILD_RECEIPT:

Column Example
string_freeze_date 2026-07-15
string_freeze_receipt pass
locales zh_Hans,ja,ko

Step 6 — Store-page QA pass

Run 18 Free store-page QA localization checklist:

  • [ ] Short description matches supported languages matrix on Steamworks
  • [ ] Each capsule screenshot shows correct script (not English UI with “fully localized” claim)
  • [ ] FAQ rows match demo scope parity
  • [ ] Trailer frames audited per trailer frame checklist

Working dev path — CI gate

Fail promotion if Weblate API or export artifact reports conflicts:

import json, subprocess, sys

receipt = {
    "schema": "string_freeze_receipt_v1",
    "conflict_count": int(subprocess.check_output(
        ["weblate", "list-alerts", "--format=json"], text=True
    ).count("merge_conflict")),  # adapt to your CLI/wrapper
}
if receipt["conflict_count"] != 0:
    print(json.dumps(receipt, indent=2))
    sys.exit(1)
Check Artifact Pass
Conflicts Weblate Alerts 0
PO compile msgfmt --check exit 0
Screenshots screenshot_*.png script matches locale
Receipt string_freeze_receipt_v1.json pass: true
BUILD_RECEIPT upload log string_freeze_date set

Pair with Wednesday demo smoke metadata diff.

Verification checklist

  • [ ] Weblate 0 merge conflicts on fest components
  • [ ] All target locales export clean PO
  • [ ] Engine build shows localized UI for each locale smoke-tested
  • [ ] Store screenshots recaptured from localized builds
  • [ ] string_freeze_receipt_v1.json pass: true
  • [ ] BUILD_RECEIPT includes string_freeze_date
  • [ ] Trailer burn-in not started before receipt (or subs re-rendered after)
  • [ ] No manual CSV bypass on fest branch without Weblate sync

Prevention

  1. Use 14 Free Weblate string-freeze tools as the freeze-week bookmark spine.
  2. Lock glossary before inviting community translators.
  3. One fest branch in Weblate—mirror playtest isolation discipline for strings.
  4. Schedule freeze two weeks before creative lock, not two days.
  5. Ban spreadsheet bypass on fest SKU—Weblate is source of truth.

Troubleshooting

Symptom Fix
Conflicts return after export New English commits during freeze—re-freeze or cherry-pick
PO OK, screenshots English Wrong build captured—install localized fest build
100% translated, conflicts remain Dashboard metric ≠ conflict clearance—open Alerts
Only one locale blocked Component split per locale—fix branch on that component
Engine import errors Plural rules—see gettext manual in tooling resource
Trailer already wrong language Re-render after PO import; update receipt

FAQ

Can we ship English store page and patch locales after fest?
You can, but declare honest Supported Languages on Steam—do not claim CN/JP/KR on capsules you have not captured. Misrepresentation drives refunds per store-demo mismatch case study.

Is Crowdin/Poedit enough without Weblate?
Different stack—this article is Weblate merge conflicts. If you use POEditor only, enforce the same conflict_count: 0 discipline via review locks.

Does string freeze block gameplay bugfixes?
Freeze applies to user-visible strings on fest branch—code fixes without new keys are fine; new UI copy requires freeze exception logged on BUILD_RECEIPT.

Related links

Clear Weblate conflicts before PO export—English capsules with “done” translations in a spreadsheet are not a string freeze.