feat: add lingui/no-unlocalized-strings ESLint rule and fix translations (#16610)

## Summary
This PR adds the `lingui/no-unlocalized-strings` ESLint rule to detect
untranslated strings and fixes translation issues across multiple
components.

## Changes

### ESLint Configuration (`eslint.config.react.mjs`)
- Added comprehensive `ignore` patterns for non-translatable strings
(CSS values, HTML attributes, technical identifiers)
- Added `ignoreNames` for props that don't need translation (className,
data-*, aria-*, etc.)
- Added `ignoreFunctions` for console methods, URL APIs, and other
non-user-facing functions
- Disabled rule for debug files, storybook, and test files

### Components Fixed (~19 files)
- Object record components (field inputs, pickers, merge dialogs)
- Settings components (accounts, admin panel)
- Serverless function components
- Record table and title cell components

## Status
🚧 **Work in Progress** - ~124 files remaining to fix

This PR is being submitted as draft to allow progressive fixing of
remaining translation issues.

## Testing
- Run `npx eslint "src/**/*.tsx"` in `packages/twenty-front` to check
remaining issues
This commit is contained in:
Félix Malfait
2025-12-17 22:08:33 +01:00
committed by GitHub
parent c13b955a36
commit 1088f7bbab
368 changed files with 56823 additions and 836 deletions
@@ -94,7 +94,7 @@ export const SettingsSSOIdentitiesProvidersForm = () => {
value={value}
onChange={onChange}
fullWidth
placeholder="Google OIDC"
placeholder={t`Google OIDC`}
/>
)}
/>
@@ -1,5 +1,6 @@
/* @license Enterprise */
import { t } from '@lingui/core/macro';
import { SettingsListCard } from '@/settings/components/SettingsListCard';
import { SettingsSSOIdentityProviderRowRightContainer } from '@/settings/security/components/SSO/SettingsSSOIdentityProviderRowRightContainer';
import { SSOIdentitiesProvidersState } from '@/settings/security/states/SSOIdentitiesProvidersState';
@@ -26,7 +27,7 @@ export const SettingsSSOIdentitiesProvidersListCardWrapper = () => {
<SettingsSSOIdentityProviderRowRightContainer SSOIdp={SSOIdp} />
)}
hasFooter
footerButtonLabel="Add SSO Identity Provider"
footerButtonLabel={t`Add SSO Identity Provider`}
onFooterButtonClick={() => navigate(SettingsPath.NewSSOIdentityProvider)}
/>
);
@@ -173,7 +173,7 @@ export const SettingsSSOSAMLForm = () => {
<SettingsTextInput
instanceId="sso-saml-acs-url"
disabled={true}
label="ACS Url"
label={t`ACS Url`}
value={acsUrl}
fullWidth
/>
@@ -194,7 +194,7 @@ export const SettingsSSOSAMLForm = () => {
<SettingsTextInput
instanceId="sso-saml-entity-id"
disabled={true}
label="Entity ID"
label={t`Entity ID`}
value={entityID}
fullWidth
/>
@@ -70,7 +70,7 @@ export const SettingsApprovedAccessDomainsListCard = () => {
RowRightComponent={({ item: approvedAccessDomain }) => (
<>
{!approvedAccessDomain.isValidated && (
<Status color="orange" text="Pending" />
<Status color="orange" text={t`Pending`} />
)}
<SettingsSecurityApprovedAccessDomainRowDropdownMenu
approvedAccessDomain={approvedAccessDomain}
@@ -78,7 +78,7 @@ export const SettingsApprovedAccessDomainsListCard = () => {
</>
)}
hasFooter
footerButtonLabel="Add Approved Access Domain"
footerButtonLabel={t`Add Approved Access Domain`}
onFooterButtonClick={() =>
navigate(getSettingsPath(SettingsPath.NewApprovedAccessDomain))
}