The fallback to English was removed with 2025.06. It is documented as a breaking change of @com.mgmtp.a12.utils/utils-localization, Default FallbackLocales Implementation Changed:
In the defaultLocalizerFactory, the default implementation for looking up fallback locales has been changed to not return Locales or PartialLocales of the language “en”, if the given locale is of a different language. Now, by default only PartialLocales of the same language are returned.
Therefore, for a French locale only partial locales of fr are searched. It hits exactly the labels you did not translate yourself, because every localizable created by A12 internally carries default texts for the English and German locale only, see the Localizer section of the Client documentation. Your abort message is found because you provided it.
The documented way to get the old behavior back is to pass fallbackLocales when you configure your localizer. From the same migration entry:
const localizer = defaultLocalizerFactory({
locale,
fallbackLocales: createFallbackLocales(locale)
});
function createFallbackLocales(locale: PartialLocale): PartialLocale[] {
if (Locale.isLocale(locale)) {
if (locale.language === "en") {
return [{ language: "en" }];
} else {
return [{ language: locale.language }, { language: "en" }];
}
}
if (locale.language !== "en") {
return [{ language: "en" }];
}
return [];
}
If the fallback is only wanted for French, fallbackLocales: [{ language: "fr" }, { language: "en" }] is sufficient, see Custom defaultLocalizerFactory Parameters.
The two alternatives:
- Pass a
TranslationFinder as translationSource and implement the resolving from fr to en yourself. This is more code and it is only needed if the fallback has to differ per key.
- Your current workaround, a French text for every A12-default key. The cost is the complete A12 key set plus every key that a future release adds, so from my point of view this is not maintainable.
I would recommend the fallbackLocales option.
Note: the localization entry of the Client withLocalization feature is documented with supportedLocales, translationSource and getDateTimeResource only, see Localization Setup. As far as I am aware, fallbackLocales is not part of it. Please check the TypeScript type of that config in your version. In the case that it is missing, you can create the LocalizerContext yourself with defaultLocalizerFactory as shown above, and please feel free to create an A12 Requirement to make fallbackLocales configurable through withLocalization.