l10n_mode exclude

A field configured with "l10n_mode" => "exclude" belongs to the record in the default language: its value is not translated, and every translation shows the value of its default language record. Each scenario below runs once through the DataHandler and once through Extbase against the same expected database state. The DataHandler run defines the reference; where the DataHandler itself is wrong, the scenario is marked as a core bug.

Provenance

Tests ran on main (15.0-dev), which is assumed to behave as TYPO3 14.3.

Summary

27 scenarios, by Extbase status:

Comparison

ScenarioCoreExtbase
Excluded values of a translation are read from its own row with overlays on The German and the French translation of a post store their own copy of author, reviewer and date. Read with the overlay of either language and overlays on, the post returns Anna as author, Ben as reviewer and 2026-01-15 as date. DeviatesWith overlays "on" Extbase drops related persons that have no translation, while core resolves them.
Excluded values of a translation are read from its own row with overlays mixed The German and the French translation of a post store their own copy of author, reviewer and date. Read with the overlay of either language and overlays mixed, the post returns Anna as author, Ben as reviewer and 2026-01-15 as date. Same as coreSame result as the core.
Info of excluded inline relation is the copy of the translation with overlays on Every translation owns a copy of the info of the default post. Read with the overlay of the German or the French translation and overlays on, the post returns the info of that translation, not the one of the English post. Same as coreSame result as the core.
Info of excluded inline relation is the copy of the translation with overlays mixed Every translation owns a copy of the info of the default post. Read with the overlay of the German or the French translation and overlays mixed, the post returns the info of that translation, not the one of the English post. Same as coreSame result as the core.
Comments of excluded inline relation are the copies of the translation with overlays on The German translation of the third post owns copies of both comments of the English post. Read with the overlay of the German translation and overlays on, the post returns these two comments. Same as coreSame result as the core.
Comments of excluded inline relation are the copies of the translation with overlays mixed The German translation of the third post owns copies of both comments of the English post. Read with the overlay of the German translation and overlays mixed, the post returns these two comments. Same as coreSame result as the core.
Excluded many to many relation of a translation is read from its own rows with overlays on Every translation owns its relations to the tags PHP and TYPO3. Read with the overlay of the German or the French translation and overlays on, the post returns both tags. DeviatesWith overlays "on" Extbase drops related tags that have no translation, while core resolves them.
Excluded many to many relation of a translation is read from its own rows with overlays mixed Every translation owns its relations to the tags PHP and TYPO3. Read with the overlay of the German or the French translation and overlays mixed, the post returns both tags. Same as coreSame result as the core.
Query by excluded author finds the translated post with overlays on Anna is the author of the English post and of both its translations. A query for the posts of Anna, run with the overlay of the German or the French translation and overlays on, finds that translation (uid and language) and not the English post. Same as coreSame result as the core.
Query by excluded author finds the translated post with overlays mixed Anna is the author of the English post and of both its translations. A query for the posts of Anna, run with the overlay of the German or the French translation and overlays mixed, finds that translation (uid and language) and not the English post. Same as coreSame result as the core.
Author changed on the default record is written to every translation The author of the English post is changed from Anna to Ben through DataHandler. The German and French translations take over Ben as well; DataHandler synchronizes excluded fields into every translation. DeviatesExtbase writes the new author to the English post only; the translations keep Anna.
Date changed on the default record is written to every translation The date of the English post is changed from 2026-01-15 to 2026-02-20 through DataHandler. The German and French translations take over the new date. DeviatesExtbase writes the new date to the English post only; the translations keep 2026-01-15.
Translatable value changed on the default record leaves the translations untouched The title of the English post is changed through DataHandler. The title is not excluded from translation, so the German and French translations keep their own titles. Same as coreSame result as the core.
Comment added on the default record is copied to the translation The English post "Third post" has the comments "Nice read" and "Well written", and its German translation owns a copy of each. A third comment "Thanks" is added to the English post through DataHandler, and DataHandler creates a copy of it for the German translation as well. DeviatesExtbase adds the comment to the English post only; the German translation gets no copy.
Info added on the default record is copied to every translation The English post "Second post" has no info, neither have its German and French translations. The info "More info" is added to the English post through DataHandler, and DataHandler creates a copy of it for each translation. DeviatesExtbase creates the info for the English post only; the translations get no copy.
Comment removed from the default record stays in the translation Core bugThe comment "Nice read" is deleted from the English post "Third post" through DataHandler. The comment table is not language aware, so DataHandler neither deletes the copy of the translation together with the default comment nor on synchronization; the German translation keeps both of its comments. Same as coreSame result as the core.
Info removed from the default record is removed from every translation The English post, the German and the French translation each have an info. The info of the English post is deleted through DataHandler, which deletes the infos of both translations with it. DeviatesExtbase deletes the info of the English post only; the translations keep their infos.
Tag added on the default record is written to every translation The English post has the tags PHP and TYPO3, and so have both translations. The tag Fluid is added to the English post through DataHandler, and the German and French translations get it as well. DeviatesExtbase adds the tag to the English post only; the translations keep PHP and TYPO3.
Tag removed from the default record is removed from every translation The English post has the tags PHP and TYPO3, and so have both translations. The tag TYPO3 is removed from the English post through DataHandler, and the German and French translations lose it as well. DeviatesExtbase removes the tag from the English post only; the translations keep TYPO3.
Author changed on the default record is recorded in the history of every changed record The author of the English post is changed from Anna (1) to Ben (2) through DataHandler. The history records the change once for every changed record: the English post and both translations, each from Anna to Ben. DeviatesExtbase records the change of the English post only.
Author changed through a translation is dropped The author of the German translation is changed from Anna to Ben through DataHandler. The author is excluded from translation, so DataHandler drops the value and nothing changes. DeviatesExtbase writes the new author to the German translation.
Date changed through a translation is dropped The date of the German translation is changed from 2026-01-15 to 2026-02-20 through DataHandler. The date is excluded from translation, so DataHandler drops the value and nothing changes. DeviatesExtbase writes the new date to the German translation.
Translatable value changed through a translation changes only that translation The title of the German translation is changed through DataHandler. The title is not excluded from translation, so only the German translation gets the new title; the English post and the French translation keep theirs. Same as coreSame result as the core.
Comment added through the translation is dropped The English post "Third post" has the comments "Nice read" and "Well written", and its German translation owns a copy of each. A comment "Thanks" is added through the German translation with DataHandler. The comments are excluded from translation, so DataHandler drops the new comment and nothing changes. DeviatesExtbase adds the comment to the German translation.
Comment removed through the translation removes only the copy of the translation The German translation of "Third post" owns copies of the comments "Nice read" and "Well written". The copy of "Nice read" is deleted through the German translation with DataHandler. Only that copy is deleted; the comments of the English post stay. Same as coreSame result as the core.
Tag added through a translation is dropped The English post has the tags PHP and TYPO3, and so have both translations. The tag Fluid is added through the German translation with DataHandler. The tags are excluded from translation, so DataHandler drops the change and nothing changes. DeviatesExtbase adds the tag Fluid to the German translation.
Tag removed through a translation is dropped The English post has the tags PHP and TYPO3, and so have both translations. The tag TYPO3 is removed through the German translation with DataHandler. The tags are excluded from translation, so DataHandler drops the change and nothing changes. DeviatesExtbase removes the tag TYPO3 from the English post instead; the German translation keeps it.

Scenarios

Excluded values of a translation are read from its own row with overlays on

Deviates

In 14.3

Core: The German and the French translation of a post store their own copy of author, reviewer and date. Read with the overlay of either language and overlays on, the post returns Anna as author, Ben as reviewer and 2026-01-15 as date.

Extbase: With overlays "on" Extbase drops related persons that have no translation, while core resolves them.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:97 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:132 (Extbase)
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationReadTest::excludedValuesOfATranslationAreReadFromItsOwnRowWithOverlaysOnByExtbase (Failure without skip)
Failed asserting that null is identical to 'Anna'.

Excluded values of a translation are read from its own row with overlays mixed

Same as core

In 14.3

Core: The German and the French translation of a post store their own copy of author, reviewer and date. Read with the overlay of either language and overlays mixed, the post returns Anna as author, Ben as reviewer and 2026-01-15 as date.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:162 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:194 (Extbase)

Info of excluded inline relation is the copy of the translation with overlays on

Same as core

In 14.3

Core: Every translation owns a copy of the info of the default post. Read with the overlay of the German or the French translation and overlays on, the post returns the info of that translation, not the one of the English post.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:221 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:248 (Extbase)

Info of excluded inline relation is the copy of the translation with overlays mixed

Same as core

In 14.3

Core: Every translation owns a copy of the info of the default post. Read with the overlay of the German or the French translation and overlays mixed, the post returns the info of that translation, not the one of the English post.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:270 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:297 (Extbase)

Comments of excluded inline relation are the copies of the translation with overlays on

Same as core

In 14.3

Core: The German translation of the third post owns copies of both comments of the English post. Read with the overlay of the German translation and overlays on, the post returns these two comments.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:319 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:344 (Extbase)

Comments of excluded inline relation are the copies of the translation with overlays mixed

Same as core

In 14.3

Core: The German translation of the third post owns copies of both comments of the English post. Read with the overlay of the German translation and overlays mixed, the post returns these two comments.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:364 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:389 (Extbase)

Excluded many to many relation of a translation is read from its own rows with overlays on

Deviates

In 14.3

Core: Every translation owns its relations to the tags PHP and TYPO3. Read with the overlay of the German or the French translation and overlays on, the post returns both tags.

Extbase: With overlays "on" Extbase drops related tags that have no translation, while core resolves them.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:408 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:449 (Extbase)
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationReadTest::excludedManyToManyRelationOfATranslationIsReadFromItsOwnRowsWithOverlaysOnByExtbase (Failure without skip)
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
-Array &0 [
-    0 => 'PHP',
-    1 => 'TYPO3',
-]
+Array &0 []

Excluded many to many relation of a translation is read from its own rows with overlays mixed

Same as core

In 14.3

Core: Every translation owns its relations to the tags PHP and TYPO3. Read with the overlay of the German or the French translation and overlays mixed, the post returns both tags.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:478 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:516 (Extbase)

Query by excluded author finds the translated post with overlays on

Same as core

In 14.3

Core: Anna is the author of the English post and of both its translations. A query for the posts of Anna, run with the overlay of the German or the French translation and overlays on, finds that translation (uid and language) and not the English post.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:543 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:574 (Extbase)

Query by excluded author finds the translated post with overlays mixed

Same as core

In 14.3

Core: Anna is the author of the English post and of both its translations. A query for the posts of Anna, run with the overlay of the German or the French translation and overlays mixed, finds that translation (uid and language) and not the English post.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:608 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationReadTest.php:639 (Extbase)

Author changed on the default record is written to every translation

Deviates

In 14.3

Core: The author of the English post is changed from Anna to Ben through DataHandler. The German and French translations take over Ben as well; DataHandler synchronizes excluded fields into every translation.

Extbase: Extbase writes the new author to the English post only; the translations keep Anna.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:92 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:111 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/AuthorChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::authorChangedOnTheDefaultRecordIsWrittenToEveryTranslationByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_post:2":
Fields|Assertion|Record
author|2        |1

Assertion in data-set failed for "tx_blogexample_domain_model_post:3":
Fields|Assertion|Record
author|2        |1

Date changed on the default record is written to every translation

Deviates

In 14.3

Core: The date of the English post is changed from 2026-01-15 to 2026-02-20 through DataHandler. The German and French translations take over the new date.

Extbase: Extbase writes the new date to the English post only; the translations keep 2026-01-15.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:137 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:159 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/DateChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::dateChangedOnTheDefaultRecordIsWrittenToEveryTranslationByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_post:2":
Fields|Assertion |Record
date  |1771588800|1768478400

Assertion in data-set failed for "tx_blogexample_domain_model_post:3":
Fields|Assertion |Record
date  |1771588800|1768478400

Translatable value changed on the default record leaves the translations untouched

Same as core

In 14.3

Core: The title of the English post is changed through DataHandler. The title is not excluded from translation, so the German and French translations keep their own titles.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:184 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:201 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/TitleChanged.csv

Comment added on the default record is copied to the translation

Deviates

In 14.3

Core: The English post "Third post" has the comments "Nice read" and "Well written", and its German translation owns a copy of each. A third comment "Thanks" is added to the English post through DataHandler, and DataHandler creates a copy of it for the German translation as well.

Extbase: Extbase adds the comment to the English post only; the German translation gets no copy.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:224 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:251 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/CommentAdded.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::commentAddedOnTheDefaultRecordIsCopiedToTheTranslationByExtbase (Failure without skip)
Record "tx_blogexample_domain_model_comment:6" not found in database

Info added on the default record is copied to every translation

Deviates

In 14.3

Core: The English post "Second post" has no info, neither have its German and French translations. The info "More info" is added to the English post through DataHandler, and DataHandler creates a copy of it for each translation.

Extbase: Extbase creates the info for the English post only; the translations get no copy.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:281 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:306 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/InfoAdded.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::infoAddedOnTheDefaultRecordIsCopiedToEveryTranslationByExtbase (Failure without skip)
Record "tx_blogexample_domain_model_info:5" not found in database
Record "tx_blogexample_domain_model_info:6" not found in database

Comment removed from the default record stays in the translation

Same as core

In 14.3

Core: The comment "Nice read" is deleted from the English post "Third post" through DataHandler. The comment table is not language aware, so DataHandler neither deletes the copy of the translation together with the default comment nor on synchronization; the German translation keeps both of its comments.

Core bug When a child of an excluded inline relation is removed from the default language record, the DataHandler keeps the copy of that child in the translation. The synchronization computes the copies to remove but returns early, because it only checks for children that were removed from or are missing at the default language record.

Extbase: Same result as the core.

Target for 15.x

Removing a child from the default language record also removes its copy from every translation, for the DataHandler and for Extbase.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:335 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:355 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/CommentRemoved.csv
Filetypo3/sysext/core/Classes/DataHandling/Localization/DataMapProcessor.php:551
$removeIds = array_diff($persistedIds, array_values($dependentIdMap));
Filetypo3/sysext/core/Classes/DataHandling/Localization/DataMapProcessor.php:569
if (empty($removeAncestorIds) && empty($missingAncestorIds)) {
IssueForge #111068: Child removed from default record stays in translation (monoglot inline)
ReviewGerrit 96695, work in progress: a failing DataHandler test, no fix yet

Info removed from the default record is removed from every translation

Deviates

In 14.3

Core: The English post, the German and the French translation each have an info. The info of the English post is deleted through DataHandler, which deletes the infos of both translations with it.

Extbase: Extbase deletes the info of the English post only; the translations keep their infos.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:379 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:401 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/InfoRemoved.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::infoRemovedFromTheDefaultRecordIsRemovedFromEveryTranslationByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_info:2":
Fields |Assertion|Record
deleted|1        |0

Assertion in data-set failed for "tx_blogexample_domain_model_info:3":
Fields |Assertion|Record
deleted|1        |0

Tag added on the default record is written to every translation

Deviates

In 14.3

Core: The English post has the tags PHP and TYPO3, and so have both translations. The tag Fluid is added to the English post through DataHandler, and the German and French translations get it as well.

Extbase: Extbase adds the tag to the English post only; the translations keep PHP and TYPO3.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:428 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:447 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/TagAdded.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::tagAddedOnTheDefaultRecordIsWrittenToEveryTranslationByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '3',
   'uid_foreign' => '2',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)

Assertion in data-set failed for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '3',
   'uid_foreign' => '3',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)

Tag removed from the default record is removed from every translation

Deviates

In 14.3

Core: The English post has the tags PHP and TYPO3, and so have both translations. The tag TYPO3 is removed from the English post through DataHandler, and the German and French translations lose it as well.

Extbase: Extbase removes the tag from the English post only; the translations keep TYPO3.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:475 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:494 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteDefaultRecord/TagRemoved.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::tagRemovedFromTheDefaultRecordIsRemovedFromEveryTranslationByExtbase (Failure without skip)
Not asserted record found for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '1',
   'uid_foreign' => '2',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)

Not asserted record found for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '1',
   'uid_foreign' => '3',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)

Author changed on the default record is recorded in the history of every changed record

Deviates

In 14.3

Core: The author of the English post is changed from Anna (1) to Ben (2) through DataHandler. The history records the change once for every changed record: the English post and both translations, each from Anna to Ben.

Extbase: Extbase records the change of the English post only.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:521 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteDefaultRecordTest.php:552 (Extbase)
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteDefaultRecordTest::authorChangedOnTheDefaultRecordIsRecordedInTheHistoryOfEveryChangedRecordByExtbase (Failure without skip)
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
         1 => 1,
         2 => 2,
     ],
-    1 => Array &2 [
-        0 => 2,
-        1 => 1,
-        2 => 2,
-    ],
-    2 => Array &3 [
-        0 => 3,
-        1 => 1,
-        2 => 2,
-    ],
 ]

Author changed through a translation is dropped

Deviates

In 14.3

Core: The author of the German translation is changed from Anna to Ben through DataHandler. The author is excluded from translation, so DataHandler drops the value and nothing changes.

Extbase: Extbase writes the new author to the German translation.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:81 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:100 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/NothingChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteTranslationTest::authorChangedThroughATranslationIsDroppedByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_post:2":
Fields|Assertion|Record
author|1        |2

Date changed through a translation is dropped

Deviates

In 14.3

Core: The date of the German translation is changed from 2026-01-15 to 2026-02-20 through DataHandler. The date is excluded from translation, so DataHandler drops the value and nothing changes.

Extbase: Extbase writes the new date to the German translation.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:127 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:146 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/NothingChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteTranslationTest::dateChangedThroughATranslationIsDroppedByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_post:2":
Fields|Assertion |Record
date  |1768478400|1771588800

Translatable value changed through a translation changes only that translation

Same as core

In 14.3

Core: The title of the German translation is changed through DataHandler. The title is not excluded from translation, so only the German translation gets the new title; the English post and the French translation keep theirs.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:172 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:189 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/TitleChanged.csv

Comment added through the translation is dropped

Deviates

In 14.3

Core: The English post "Third post" has the comments "Nice read" and "Well written", and its German translation owns a copy of each. A comment "Thanks" is added through the German translation with DataHandler. The comments are excluded from translation, so DataHandler drops the new comment and nothing changes.

Extbase: Extbase adds the comment to the German translation.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:213 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:240 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/CommentAdded.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteTranslationTest::commentAddedThroughTheTranslationIsDroppedByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_comment:5":
Fields|Assertion|Record
post  |0        |8

Comment removed through the translation removes only the copy of the translation

Same as core

In 14.3

Core: The German translation of "Third post" owns copies of the comments "Nice read" and "Well written". The copy of "Nice read" is deleted through the German translation with DataHandler. Only that copy is deleted; the comments of the English post stay.

Extbase: Same result as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:270 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:287 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/CommentRemoved.csv

Tag added through a translation is dropped

Deviates

In 14.3

Core: The English post has the tags PHP and TYPO3, and so have both translations. The tag Fluid is added through the German translation with DataHandler. The tags are excluded from translation, so DataHandler drops the change and nothing changes.

Extbase: Extbase adds the tag Fluid to the German translation.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:311 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:330 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/NothingChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteTranslationTest::tagAddedThroughATranslationIsDroppedByExtbase (Failure without skip)
Not asserted record found for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '3',
   'uid_foreign' => '2',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)

Tag removed through a translation is dropped

Deviates

In 14.3

Core: The English post has the tags PHP and TYPO3, and so have both translations. The tag TYPO3 is removed through the German translation with DataHandler. The tags are excluded from translation, so DataHandler drops the change and nothing changes.

Extbase: Extbase removes the tag TYPO3 from the English post instead; the German translation keeps it.

Target for 15.x

Extbase behaves as the core.

Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:358 (Core)
Testtypo3/sysext/extbase/Tests/Functional/Persistence/ExcludedFromTranslationWriteTranslationTest.php:377 (Extbase)
Filetypo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/ExcludedFromTranslation/WriteTranslation/NothingChanged.csv
SkipExtbase differs from core, see https://forge.typo3.org/issues/111055
TestExcludedFromTranslationWriteTranslationTest::tagRemovedThroughATranslationIsDroppedByExtbase (Failure without skip)
Assertion in data-set failed for "tx_blogexample_domain_model_tag_mm":
array(
   'uid_local' => '1',
   'uid_foreign' => '1',
   'tablenames' => 'tx_blogexample_domain_model_post',
   'fieldname' => 'tags'
)