Skip to content
Developer Preview — APIs and language features may change before 1.0

Localization

mashinTalk is written in your language. Keywords, type names, modifiers, expression vocabulary, and error messages are localized in seven locales, and for head-final languages the natural word order parses too. This page explains the model; the full per-locale tables are in Localized Keywords.

There is exactly one canonical form of every machine, and its spellings are English. A locale is a surface for that same form. Everything localized is normalized at parse time, so the compiler, runtime, governance, and ledger never see locale at all. A machine written in Japanese and its English twin produce the same compiled machine, the same execution, and the same receipts.

That design has three consequences you can rely on:

  1. Localization can never change meaning. If a localized surface parsed to a different machine than its English twin, that would be a bug, and it is gated: a conformance matrix executes every language feature in every locale and requires the output to be identical to English.
  2. Machines are portable. A machine authored in Korean can be read, run, audited, and remixed by someone working in French. The canonical form is the interchange format; the surface is a projection.
  3. Your language is not a second-class mode. There is no translation layer at runtime and nothing to keep in sync. The locale dictionary is data the parser reads directly.

Head-final languages such as Japanese and Korean place role markers after the phrase they mark and predicates last. mashinTalk accepts that natural surface:

English: compute check when input.score > 80
日本語: check を 計算 入力.score > 80 の場合
한국어: check 를 계산 입력.score > 80 의때

Field declarations bind naturally as well, with the topic marker on the name and the type connector after the type:

English: name as text, required
日本語: 名前は テキストとして、必須
한국어: 이름은 텍스트로서, 필수

Comparisons read as prose: input.x is greater than 3 is 入力.xは3より大きい in Japanese and 입력.x는3보다 크다 in Korean.

Mistakes in a localized surface produce errors in that language, and grammar mistakes teach rather than guess. If a field name carries the wrong particle, the compiler names the correct marker instead of silently picking an interpretation. If a role marker marks the wrong phrase, the error says so. mashinTalk never reorders a line it is not certain about, because a wrong guess would change what the machine means.

A locale is data, not code. A head-initial language is a keyword dictionary plus content patterns; a head-final language adds a particle table and a small grammar descriptor that captures its word order. Dictionaries can start partial, because untranslated keywords fall back to English. Every contribution passes the same conformance gates that protect the shipped locales: equivalence to English at parse, identical execution per feature, and collision checks on the dictionary itself.

Two different things get called “supported”, and it is worth being exact about which one each locale has.

Machine-checked means the gates above have run against that locale: the dictionary has no collisions, every keyword round-trips, and the feature matrix executes in that locale and is compared against English. Those gates catch a keyword that maps to two things, a surface that parses to a different machine, and a feature that behaves differently once translated. That is real, and it is what protects meaning.

Those gates are also live rather than decorative, which means they sometimes catch something. In late August 2026 one held a real defect for a day: a machine failed its own specs after translation into Japanese and Korean because a compiler diagnostic rendered with its placeholders unsubstituted. The defect was fixed and the gate went green again; it is mentioned here because a page that says “gated” and never says “and here is what a gate actually caught” is describing an intention.

Natively reviewed means a person who speaks the language has read the dictionary and confirmed the words are the right words: correct register, natural to a normal adult speaker, no misleading connotation. No gate can do that. A keyword can be collision-free, round-trip perfectly, execute identically to English, and still be the wrong word.

Here is where each locale actually stands.

Locale Machine-checked Compared by models Natively reviewed
English yes canonical form canonical form
Français yes yes not yet
Español yes yes not yet
日本語 yes yes not yet
中文 yes yes not yet
Deutsch yes yes not yet
한국어 yes yes not yet

“Compared by models” is the middle rung, and it is worth explaining because it is neither nothing nor review. Two language models read all six dictionaries independently and their verdicts were diffed. Where both agreed a word was wrong, the change was applied: thirty-six spellings, plus two concepts that had been left in English while their partners were localized. Where they disagreed, the item was written down for a native reviewer rather than guessed at. That pass found real mistakes, including one word that read as the economy in all six locales when it means the resource budget, and one that reads as deletion in Korean when it means masking. It also cannot substitute for a speaker: agreement between two models is agreement, not correctness.

So: none of the six non-English dictionaries has had native-speaker review. The review sheets exist, one per locale, listing every keyword in context with its concept gloss; recruiting has not started. Until a locale’s review lands, treat its keyword spellings as provisional. What is not provisional is what those spellings mean: the canonical machine, the execution, and the receipts are the same in every locale, and that is the part the gates prove.