diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/__tests__/resolve-field-metadata-standard-override.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/__tests__/resolve-field-metadata-standard-override.util.spec.ts index 3b5e6082267..0da0b6957fe 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/__tests__/resolve-field-metadata-standard-override.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/__tests__/resolve-field-metadata-standard-override.util.spec.ts @@ -385,6 +385,52 @@ describe('resolveFieldMetadataStandardOverride', () => { expect(result).toBe('Standard Label'); }); + + it('should return original field value without calling i18n when message is not compiled', () => { + const fieldMetadata = { + label: 'Dynamic Field Label', + description: 'Standard Description', + icon: 'default-icon', + isCustom: false, + standardOverrides: undefined, + }; + + mockGenerateMessageId.mockReturnValue('missing.message.id'); + mockI18n.messages = {}; + + const result = resolveFieldMetadataStandardOverride( + fieldMetadata, + 'label', + 'fr-FR', + mockI18n, + ); + + expect(result).toBe('Dynamic Field Label'); + expect(mockI18n._).not.toHaveBeenCalled(); + }); + + it('should return original field value without calling i18n when message is not compiled', () => { + const fieldMetadata = { + label: 'Dynamic Field Label', + description: 'Standard Description', + icon: 'default-icon', + isCustom: false, + standardOverrides: undefined, + }; + + mockGenerateMessageId.mockReturnValue('missing.message.id'); + mockI18n.messages = {}; + + const result = resolveFieldMetadataStandardOverride( + fieldMetadata, + 'label', + 'fr-FR', + mockI18n, + ); + + expect(result).toBe('Dynamic Field Label'); + expect(mockI18n._).not.toHaveBeenCalled(); + }); }); describe('Priority order - Standard fields', () => { diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util.ts index b854796c317..aae163f20f0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util.ts @@ -44,6 +44,14 @@ export const resolveFieldMetadataStandardOverride = ( const messageId = generateMessageId(fieldMetadata[labelKey] ?? ''); + const isMessageCompiled = + !isDefined(i18nInstance.messages) || + isDefined(i18nInstance.messages[messageId]); + + if (!isMessageCompiled) { + return fieldMetadata[labelKey] ?? ''; + } + const translatedMessage = i18nInstance._(messageId); if (translatedMessage === messageId) { diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/__tests__/resolve-object-metadata-standard-override.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/__tests__/resolve-object-metadata-standard-override.util.spec.ts index 745d13a2622..496386ae3f1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/__tests__/resolve-object-metadata-standard-override.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/__tests__/resolve-object-metadata-standard-override.util.spec.ts @@ -503,6 +503,54 @@ describe('resolveObjectMetadataStandardOverride', () => { expect(result).toBe('Standard Label'); }); + + it('should return original object value without calling i18n when message is not compiled', () => { + const objectMetadata = { + labelSingular: 'Dynamic Override Label', + labelPlural: 'Standard Labels', + description: 'Standard Description', + icon: 'default-icon', + isCustom: false, + standardOverrides: undefined, + }; + + mockGenerateMessageId.mockReturnValue('missing.message.id'); + mockI18n.messages = {}; + + const result = resolveObjectMetadataStandardOverride( + objectMetadata, + 'labelSingular', + 'fr-FR', + mockI18n, + ); + + expect(result).toBe('Dynamic Override Label'); + expect(mockI18n._).not.toHaveBeenCalled(); + }); + + it('should return original object value without calling i18n when message is not compiled', () => { + const objectMetadata = { + labelSingular: 'Dynamic Override Label', + labelPlural: 'Standard Labels', + description: 'Standard Description', + icon: 'default-icon', + isCustom: false, + standardOverrides: undefined, + }; + + mockGenerateMessageId.mockReturnValue('missing.message.id'); + mockI18n.messages = {}; + + const result = resolveObjectMetadataStandardOverride( + objectMetadata, + 'labelSingular', + 'fr-FR', + mockI18n, + ); + + expect(result).toBe('Dynamic Override Label'); + expect(mockI18n._).not.toHaveBeenCalled(); + }); }); describe('Priority order - Standard objects', () => { diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/resolve-object-metadata-standard-override.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/resolve-object-metadata-standard-override.util.ts index 22440b5c689..f1c8d7f8475 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/resolve-object-metadata-standard-override.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/resolve-object-metadata-standard-override.util.ts @@ -52,6 +52,15 @@ export const resolveObjectMetadataStandardOverride = ( } const messageId = generateMessageId(objectMetadata[labelKey] ?? ''); + + const isMessageCompiled = + !isDefined(i18nInstance.messages) || + isDefined(i18nInstance.messages[messageId]); + + if (!isMessageCompiled) { + return objectMetadata[labelKey] ?? ''; + } + const translatedMessage = i18nInstance._(messageId); if (translatedMessage === messageId) {