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
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
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
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.
Site A · ID 9→en-GB←Site B · ID 14
Direction: BCP 47 provides shared language identity.
Todayone record labelled All Languages
→
Directionone source + named targetsde · en · fr
Exact API and target set remain open
Starthandle existing language versions
Changedefine allowed local differences
Stopkeep, detach or delete generated versions
A flag alone is not enough
Default languageA→B→C
Target languageA→B→C→Local
Need: add Local without a default-language placeholder
Site defaultGerman
Editing languageEnglish
Translate intoChinese
The editing view shows English instead of German as its source
Potentialmissing positions are explicitless runtime lookup
↔
Costmore recordsmore sync and workspace work
Direction: complete layers. Representation remains open.
Backendrecord→l10n_parent→relation
Frontendrequest→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.