diff --git a/apps/nextjs/src/components/navigation/dynamic-breadcrumb.tsx b/apps/nextjs/src/components/navigation/dynamic-breadcrumb.tsx
index 2ed6bc5f8..221736260 100644
--- a/apps/nextjs/src/components/navigation/dynamic-breadcrumb.tsx
+++ b/apps/nextjs/src/components/navigation/dynamic-breadcrumb.tsx
@@ -65,24 +65,19 @@ export const DynamicBreadcrumb = ({
const isNonInteractable =
nonInteractable?.includes(pathnamePart) === true || categorySegments.has(pathnamePart);
- if (mappedValue) {
- if (isNonInteractable) {
- return {mappedValue};
- }
- return (
-
- {mappedValue}
-
- );
- }
+ // Dynamic segments (ids) have no translation and may not be mapped yet while
+ // their page is still loading. Fall back to the raw segment instead of
+ // raising MISSING_MESSAGE.
+ const labelKey = `${translationKey}.label` as TranslationKeys;
+ const label = mappedValue ?? (t.has(labelKey) ? t(labelKey) : pathnamePart);
if (isNonInteractable) {
- return {t(`${translationKey}.label` as TranslationKeys)};
+ return {label};
}
return (
- {t(`${translationKey}.label` as TranslationKeys)}
+ {label}
);
})}