T3DD26 · Eric Harrer

Translation Handling
in TYPO3

Where we are and where we could go

Overview

Three gaps, four responsibilities, one path

1Where we arecurrent behavior and missing case
2What we separatefour explicit responsibilities
3Where we could goidentity, sync, structure, output
4How we proceedevidence, cooperation, next steps

Current

Who we are

Translation Handling Initiative

Listenproject use cases
VerifyCore behavior
Contributefocused changes

Editors · integrators · developers · translators

Problem

The missing case sits in the middle

identicalreducedenrichedchangedindependent

Mostly connected, selectively different

Problem

Three use cases reveal three different gaps

Local additionContent only in the target languageGap: Connected Mode requires a default partner
Global storageShared records across sitesGap: Numeric IDs have only site-local meaning
Regional fallbacken-GB may reuse en, not deGap: One chain cannot express per-position intent

Current · Interacting contracts

Four questions use different contracts

Language identitySite config maps IDs to languages0 default · −1 all
Synchronization intentWhich fields or records stay in sync?l10n_state · −1
Structural identityDo records belong together? If so, which ones?l10n_parent · mode
Output policyWhich records may render?fallbackType · fallbacks

Vision · Problem decomposition

Separate four responsibilities

1Language identityWhich human language does this content represent?
2Synchronization intentWhich fields or records stay in sync, and where may they differ?
3Structural identityWhich records are the same logical node across languages?
4Output policyWhat should render when the requested variant is missing?

Make each contract explicit, then decide how the database represents it.

Vision · 1 Language identity

Site language IDs have only local meaning

Site A · ID 9→en-GB←Site B · ID 14

Direction: BCP 47 provides shared language identity.

Vision · 2 Synchronization intent

All Languages becomes an explicit rule

Todayone record labelled All Languages
→
Directionone source + named targetsde · en · fr

Exact API and target set remain open

Open · 2 Synchronization intent

Synchronization needs rules for start, change and stop

Starthandle existing language versions
Changedefine allowed local differences
Stopkeep, detach or delete generated versions

A flag alone is not enough

Vision · 3 Structural identity

Connected Mode needs local additions

Default languageA→B→C
Target languageA→B→C→Local

Need: add Local without a default-language placeholder

Vision · 3 Structural identity

Editors choose the language they translate from

Site defaultGerman

Editing languageEnglish

Translate intoChinese

The editing view shows English instead of German as its source

Open · 3 Structural identity

A complete layer gives every language the same record positions

Potentialmissing positions are explicitless runtime lookup
↔
Costmore recordsmore sync and workspace work

Direction: complete layers. Representation remains open.

Current · 4 Output policy

Backend connection is not frontend fallback

Backend
record→l10n_parent→relation
Frontend
request→fallback policy→output

Open · 4 Output policy

Absence must tell fallback whether to continue

Configured chainen-GB → en → de (default)
missing translationcontinue through allowed fallbacks
intentionally omittedstop and render nothing

Current fallback configuration has no per-position intent

In Progress

Today is preparation, not rollout

Mergedfocused fixes
Activeinventory + behavior tests
Openarchitecture + migration

Open

Our place in the proposed Unit model

Expected startStability & Complianceprepare refactoring with the Core Team
→
PerspectiveFeaturedevelop multilingual functions with the Core Team

Working Group role, charters and priorities remain open

In Progress

Change only after the contracts are explicit

Understand→Test→Decide→Change→Prove

Compatibility first. No release promise.

Join us

Thank you for your attention

#typo3-translation-handling

Bring a use case. Review a test. Shape the next step.