---
id: two-stage-user-styled-translation/02-humans-ship-variants-only-where-the-choice
title: 'Two-stage styled translation exists only in pieces: 2. Humans ship variants
  only where the choice is closed-class'
report: https://ai.hiina.space/reports/two-stage-user-styled-translation.md
section: 2
version: 1
updated: '2026-10-27'
author: Hiina
---

Index of everything on this site: https://ai.hiina.space/index.md

# Two-stage styled translation exists only in pieces: 2. Humans ship variants only where the choice is closed-class

- Section 2 of 12 of the report "Two-stage styled translation exists only in pieces" by Hiina (v1, updated 2026-10-27)
- Report overview and contents: https://ai.hiina.space/reports/two-stage-user-styled-translation.md
- Previous: https://ai.hiina.space/reports/two-stage-user-styled-translation/01-summary.md
- Next: https://ai.hiina.space/reports/two-stage-user-styled-translation/03-research-covers-each-stage-separately-and-the.md

## 2. Humans ship variants only where the choice is closed-class

### Honorific toggles shipped in fan patches; publishers argued and declined

The strongest documented case is the Committee of Zero patch for the English Steam release of Steins;Gate 0. Its own project page lists "Option to include Japanese honorifics in text added" in the v2.0 changelog and describes restoring honorifics "alongside a new glossary definition explaining them" ([Committee of Zero project page](http://sonome.dareno.me/projects/sg0-steam.html)). VNDB's release record repeats that the patch "enables option to change honorifics and name orders" ([yorhel.org r50519](https://yorhel.org/r50519), secondary). The two sources disagree slightly: VNDB treats name order as optional too, while the project page frames name order as a fixed script change. A Chaos;Child patch report says only that name order can optionally change ([Siliconera](https://www.siliconera.com/fan-made-chaoschild-pc-patch-offers-more-fixes-subtitles-and-translated-cgs/), secondary). Neither page says where the toggle lives or how variants are stored. The team's Steins;Gate HD repo builds two parallel script sets, `cc-scripts` and `cc-scripts-consistency`, but its README does not say whether players choose between them ([CommitteeOfZero/sghd-patch](https://github.com/CommitteeOfZero/sghd-patch)). So the best-evidenced implementation of the "static variants" idea is human-authored, closed-class and of unknown storage format. Honorifics are cheap to toggle because they are a token insert or delete; puns and register shifts appeared as togglable in no source this search found.

Officially shipped variants exist on other axes. Final Fantasy Tactics: The Ivalice Chronicles offers an Enhanced script rewritten for voice acting and a Classic mode using the War of the Lions script ([Inverse](https://www.inverse.com/gaming/ivalice-chronicles-final-fantasy-tactics-japanese-only-feature-english-version), secondary). Taisho x Alice's English add-on lets players switch story text and choices between Japanese and English with a button press ([Nintendo eShop](https://www.nintendo.com/store/products/taisho-x-alice-all-in-one-plus-english-text-mode-add-on-bundle-switch)), and the Kanon port switches between English, Japanese and Simplified Chinese at any time ([RPG Fan](https://www.rpgfan.com/2024/05/25/kanon-to-receive-english-port/), secondary). Pokémon's Japanese releases have a Hiragana or Kanji text setting, a single-source, two-rendering option authored in advance ([Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Options), community wiki). The Great Ace Attorney Chronicles kept "-san" and "-sama" deliberately, to mark when characters speak Japanese to each other, and rendered faux-Meiji speech as faux-Victorian dialect ([Wikipedia](https://en.wikipedia.org/wiki/The_Great_Ace_Attorney_Chronicles), secondary). Yakuza 0's subtitles use a hybrid of retained honorifics and domestication ([Tradução em Revista](https://periodicos.ufsc.br/index.php/traducao/article/view/87234), abstract only).

Publishing shows why humans rarely go further. In a J-Novel Club forum thread started 3 May 2021, a reader proposed storing both forms inline, `[Mr. Joey|Jonouchi-san]`, and offering "Westernized" and "non-Westernized" EPUBs. A translator and readers objected on EPUB and print logistics, the slippery slope to sibling terms, speech tics and puns, extra translation and QA work, and jarring flow. Staff only redirected the thread to the feature-request channel ([J-Novel Club forum](https://forums.j-novel.club/topic/4422/may-we-get-light-novel-translations-with-honorifics/20?lang=en-US), low-authority forum). That inline markup is the only explicit dual-form honorific notation this search found, and it was never shipped. In anime, the honorifics debate was settled per release by distributor policy, such as MX Media dropping honorifics ([ANN forum](https://www.animenewsnetwork.com/bbs/phpBB2/viewtopic.php?p=3428755), forum) or AnimeNation's selective romanisation ([AnimeNation](https://www.animenation.net/blog/?p=1328), secondary retailer blog). This search found no release with paired honorific and no-honorific English tracks. Netflix's Japanese timed-text guide, which governs subtitles into Japanese, does not address honorifics and asks subtitlers to "match the tone of the original content" ([Netflix Partner Help Center](https://partnerhelp.netflixstudios.com/hc/en-us/articles/215767517-Japanese-Timed-Text-Style-Guide)).

Accent and voice have always been a localiser-side layer added on top of the source. Dragon Quest IV's Japanese used standard formal Japanese with no dialect markers, and the DS localisers added a Scottish dialect ("aboot tae make an announcement tae youse all") and turned the hero's name "Ryan" into "Ragnar McRyan" ([Legends of Localization](https://legendsoflocalization.com/articles/dragon-quest-iv-accents/)). The Mother 3 fan translation replaced the mice's Japanese dialect with Cockney-style English and shipped a 200-page handbook alongside the patch ([Wikipedia](https://en.wikipedia.org/wiki/Mother_3_fan_translation), secondary). Facebook offered a pirate language in 2009 and, per the article's "last year", in 2008, switchable from the language link ([TechCrunch](https://techcrunch.com/2009/09/19/once-again-facebook-owns-talk-like-a-pirate-day-on-the-web)). That joke locale is the proposed "talk like a pirate" setting as a static string table, and it shows users accept a whole interface in a stylised variant of the same strings. In the other direction, Japanese role language (yakuwarigo: pronouns, copula and sentence-final particles that mark character type) is flattened by standard English translation, and a Leiden thesis argues it can only be partly compensated for through lexical, punctuation and font choices ([Leiden thesis](https://openaccess.leidenuniv.nl/handle/1887/64352), single-work thesis). For this design, that means the record should note whether a voice marker is in the source or is a localisation choice, because "pirate" is additive while "keep her rough speech" is not.

### String formats already select variants at display time, on grammar rather than style

Engines and formats already separate line identity from rendered text, which is the substrate the render step needs. Ren'Py treats the source as the "None" language and stores translations as `translate <lang> <id>:` blocks keyed by generated IDs such as `start_636ae3f5`. Translations can run Python and conditionals, and `renpy.change_language` switches at runtime; the docs use `piglatin` as an example language ([Ren'Py translation docs](https://www.renpy.org/doc/html/translation.html)). A "no honorifics" or "pirate" variant could therefore ship as a pseudo-language (my inference; the docs show no per-player variant concept beyond languages). Python inside translate blocks should be side-effect free, because switching languages reruns it. Yarn Spinner gives every line a stable `#line:` ID, exports per-language string tables, and fetches the localised text and linked assets by ID at runtime ([Yarn Spinner localisation](https://docs.yarnspinner.dev/yarn-spinner-for-unity/assets-and-localization)). Its markup has `[select value={$gender} m="he" f="she" nb="they" /]`, `[plural]` and `[ordinal]`, and marks the speaker as a `character` attribute running from line start to the first colon, unless there is no colon or markup already supplies one ([Yarn Spinner markup](https://docs.yarnspinner.dev/write-yarn-scripts/advanced-scripting/markup.md)).

The message formats go further. Fluent lets each locale control its own complexity without touching the source, with dash-prefixed terms that carry variants and translator-authored logic that needs no code change ([Mozilla Hacks](https://hacks.mozilla.org/2019/04/fluent-1-0-a-localization-system-for-natural-sounding-translations/), no visible date, comments from 2019-04-26). Its selectors match strings or numbers and require a `*` default ([Fluent selectors](https://projectfluent.org/fluent/guide/selectors.html)). **Unicode MessageFormat 2.0 became Stable in CLDR 47 (2025-03-13), with only `:string`, `:number` and `:integer` stable and other functions Draft** ([CLDR 47](https://cldr.unicode.org/index/downloads/cldr-47)). The current UTS #35 Part 9 page header reads CLDR 49, dated 2026-10-21, while the CLDR downloads table lists CLDR 49 as 2026-10-22 without clearly marking it released ([UTS #35 Part 9](https://unicode.org/reports/tr35/tr35-messageFormat.html); [CLDR downloads](https://cldr.unicode.org/index/downloads)). The stability policy says updates "will not make any valid message become not valid". Since `:string` is stable, a style selector is spec-conformant today. My sketch, not an example from the spec:

```
.input {$honorifics :string}
.match $honorifics
keep {{You're still up, Tanaka-senpai?}}
title_only {{You're still up, senpai?}}
* {{You're still up, Tanaka?}}
```

Unreal's FText has `|plural`, `|ordinal`, `|gender` and a Korean particle modifier ([Unreal docs](https://dev.epicgames.com/documentation/en-us/unreal-engine/text-localization-in-unreal-engine?application_version=5.3)), i18next selects keys by `context` ([i18next](https://www.i18next.com/translation-function/context)), and gettext's `msgctxt` disambiguates identical source strings ([GNU gettext](https://www.gnu.org/software/gettext/manual/html_node/Contexts.html)). The gettext problem matters for live hooking: the same Japanese string in two scenes needs two keys. In every case a human authors every variant. The proposed pipeline replaces authoring with generation, and the format becomes the output contract of the renderer rather than its input.

### Localisation context kits list the fields a translator needs

Vendors converge on what a translator needs per line: speaker, listener, emotion, relationship notes (superior, close friend, stranger, rival), character gender, character profiles with speech habits, and screenshots tied to string IDs. Without them, lines come out "grammatically perfect and still wrong for the scene" ([Alconost](https://alconost.com/en/blog/game-translation-context), vendor blog, secondary). The complaint is old: "All too often translators are provided with a file containing a collection of strings with no description or context" ([Game Developer, 2014](https://www.gamedeveloper.com/production/developers-make-your-text-translator-friendly-a-few-tips-part-1-)). Fan practice also produces out-of-band notes: Legends of Localization publishes line-by-line diffs of Japanese against English with reasons for each change ([Zelda Dungeon interview](https://www.zeldadungeon.net/zelda-dungeon-exclusive-interview-with-legends-of-localization-creator-clyde-tomato-mandelin/)). The proposed intermediate representation is an automated version of the ideal context kit, made for a renderer to consume rather than a human to consult. Japanese-to-English is a hard case for that kit, because Japanese routinely omits subject, gender and relationship information that English grammar forces a translator to state.

---

Text licensed CC BY 4.0 (attribution: Hiina, ai.hiina.space). Source: https://github.com/hiinaspace/ai-hiina-space
