## 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
182 lines
5.3 KiB
JSON
182 lines
5.3 KiB
JSON
{
|
|
"name": "twenty-front",
|
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
"projectType": "application",
|
|
"tags": ["scope:frontend"],
|
|
"targets": {
|
|
"build": {
|
|
"outputs": ["{options.outputPath}"],
|
|
"options": {
|
|
"outputPath": "{projectRoot}/build"
|
|
},
|
|
"dependsOn": ["^build"]
|
|
},
|
|
"build:sourcemaps": {
|
|
"outputs": ["{options.outputPath}"],
|
|
"options": {
|
|
"outputPath": "{projectRoot}/build"
|
|
},
|
|
"dependsOn": ["^build"]
|
|
},
|
|
"serve": {
|
|
"executor": "nx:run-commands",
|
|
"options": {
|
|
"command": "npx serve -s {projectRoot}/build"
|
|
}
|
|
},
|
|
"start": {
|
|
"executor": "@nx/vite:dev-server",
|
|
"options": {
|
|
"buildTarget": "twenty-front:build",
|
|
"hmr": true
|
|
}
|
|
},
|
|
"preview": {
|
|
"executor": "@nx/vite:preview-server",
|
|
"options": {
|
|
"buildTarget": "twenty-front:build",
|
|
"port": 3001,
|
|
"open": true
|
|
}
|
|
},
|
|
"reset:env": {
|
|
"executor": "nx:run-commands",
|
|
"inputs": ["{projectRoot}/.env.example"],
|
|
"outputs": ["{projectRoot}/.env"],
|
|
"cache": true,
|
|
"options": {
|
|
"cwd": "{projectRoot}",
|
|
"command": "cp .env.example .env"
|
|
}
|
|
},
|
|
"typecheck": {},
|
|
"lint": {
|
|
"options": {
|
|
"maxWarnings": 0
|
|
},
|
|
"configurations": {
|
|
"ci": {},
|
|
"fix": {}
|
|
}
|
|
},
|
|
"lint:changed": {
|
|
"executor": "nx:run-commands",
|
|
"cache": false,
|
|
"options": {
|
|
"command": "git diff --name-only --diff-filter=d {args.base} | grep -E '\\.(ts|tsx|js|jsx)$' | grep '^packages/twenty-front/' | xargs -r npx eslint --config packages/twenty-front/eslint.config.mjs",
|
|
"base": "main"
|
|
},
|
|
"configurations": {
|
|
"fix": {
|
|
"command": "git diff --name-only --diff-filter=d {args.base} | grep -E '\\.(ts|tsx|js|jsx)$' | grep '^packages/twenty-front/' | xargs -r npx eslint --config packages/twenty-front/eslint.config.mjs --fix"
|
|
},
|
|
"staged": {
|
|
"command": "git diff --cached --name-only --diff-filter=d | grep -E '\\.(ts|tsx|js|jsx)$' | grep '^packages/twenty-front/' | xargs -r npx eslint --config packages/twenty-front/eslint.config.mjs"
|
|
}
|
|
}
|
|
},
|
|
"fmt": {
|
|
"options": {
|
|
"files": "src"
|
|
},
|
|
"configurations": {
|
|
"fix": {}
|
|
}
|
|
},
|
|
"test": {},
|
|
"storybook:build": {
|
|
"options": {
|
|
"env": { "NODE_OPTIONS": "--max_old_space_size=8000" }
|
|
},
|
|
"configurations": {
|
|
"docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } },
|
|
"modules": { "env": { "STORYBOOK_SCOPE": "modules" } },
|
|
"pages": { "env": { "STORYBOOK_SCOPE": "pages" } },
|
|
"performance": { "env": { "STORYBOOK_SCOPE": "performance" } }
|
|
}
|
|
},
|
|
"storybook:serve:dev": {
|
|
"options": { "port": 6006 },
|
|
"configurations": {
|
|
"docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } },
|
|
"modules": { "env": { "STORYBOOK_SCOPE": "modules" } },
|
|
"pages": { "env": { "STORYBOOK_SCOPE": "pages" } },
|
|
"performance": { "env": { "STORYBOOK_SCOPE": "performance" } }
|
|
}
|
|
},
|
|
"storybook:serve:static": {
|
|
"options": { "port": 6006 },
|
|
"configurations": {
|
|
"docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } },
|
|
"modules": { "env": { "STORYBOOK_SCOPE": "modules" } },
|
|
"pages": { "env": { "STORYBOOK_SCOPE": "pages" } },
|
|
"performance": { "env": { "STORYBOOK_SCOPE": "performance" } }
|
|
}
|
|
},
|
|
"storybook:coverage": {
|
|
"configurations": {
|
|
"text": {},
|
|
"docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } },
|
|
"modules": { "env": { "STORYBOOK_SCOPE": "modules" } },
|
|
"pages": { "env": { "STORYBOOK_SCOPE": "pages" } },
|
|
"performance": { "env": { "STORYBOOK_SCOPE": "performance" } }
|
|
}
|
|
},
|
|
"storybook:test": {
|
|
"options": { "port": 6006 },
|
|
"configurations": {
|
|
"docs": { "env": { "STORYBOOK_SCOPE": "ui-docs" } },
|
|
"modules": { "env": { "STORYBOOK_SCOPE": "modules" } },
|
|
"pages": { "env": { "STORYBOOK_SCOPE": "pages" } },
|
|
"performance": { "env": { "STORYBOOK_SCOPE": "performance" } }
|
|
}
|
|
},
|
|
"storybook:serve-and-test:static": {
|
|
"options": {
|
|
"port": 6006
|
|
},
|
|
"configurations": {
|
|
"docs": { "scope": "ui-docs" },
|
|
"modules": { "scope": "modules" },
|
|
"pages": { "scope": "pages" },
|
|
"performance": { "scope": "performance" }
|
|
}
|
|
},
|
|
"graphql:generate": {
|
|
"executor": "nx:run-commands",
|
|
"defaultConfiguration": "data",
|
|
"options": {
|
|
"cwd": "{projectRoot}",
|
|
"command": "dotenv graphql-codegen -- --config={args.config}"
|
|
},
|
|
"configurations": {
|
|
"data": {
|
|
"config": "codegen.cjs"
|
|
},
|
|
"metadata": {
|
|
"config": "codegen-metadata.cjs"
|
|
}
|
|
}
|
|
},
|
|
"chromatic": {
|
|
"configurations": {
|
|
"ci": {}
|
|
}
|
|
},
|
|
"lingui:extract": {
|
|
"executor": "nx:run-commands",
|
|
"options": {
|
|
"cwd": "{projectRoot}",
|
|
"command": "lingui extract --overwrite --clean"
|
|
}
|
|
},
|
|
"lingui:compile": {
|
|
"executor": "nx:run-commands",
|
|
"options": {
|
|
"cwd": "{projectRoot}",
|
|
"command": "lingui compile --typescript"
|
|
}
|
|
}
|
|
}
|
|
}
|