deprecate(i18n): legacy crowdin infrastructure#17165
Conversation
- Remove 5 GH workflows (crowdin-ci, contributors, leaderboard, progress, review-report) - Delete 25+ scripts (import, translations, reports, leaderboard, source-files) - Remove @crowdin/crowdin-api-client package and related npm scripts - Clean up unused constants (CROWDIN_PROJECT_ID, CROWDIN_API_MAX_LIMIT, languagePathRootRegExp) - Preserve static data files for historical contributor recognition - LanguagePicker dependencies (translationProgress.json, ProjectProgressData) kept for backward compatibility
✅ Deploy Preview for ethereumorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
PR #17165 Review:
|
| Category | Items | Status |
|---|---|---|
| Workflows | crowdin-ci, generate-review-report, get-crowdin-contributors, get-leaderboard-reports, get-translation-progress |
All script references they call are also deleted |
| Scripts | Entire src/scripts/crowdin/ tree + src/scripts/crowdin-import.ts |
Self-contained; no remaining imports from these |
| Constants | CROWDIN_PROJECT_ID, CROWDIN_API_MAX_LIMIT, languagePathRootRegExp |
Only consumers were deleted scripts |
| Dependency | @crowdin/crowdin-api-client |
Only imported by deleted scripts |
| npm scripts | crowdin-import, crowdin-clean, crowdin-contributors, crowdin-needs-review |
Pointed at deleted scripts |
| Data | translation-buckets-dirs.json |
Only consumed by deleted scripts |
What's correctly preserved
| Item | Still Used By |
|---|---|
combined-translators.json, file-ids.json, excluded-translators.json |
src/lib/utils/crowdin.ts (contributor display) |
translationProgress.json |
src/lib/nav/localeToDisplayInfo.ts (LanguagePicker) |
ProjectProgressData type |
localeToDisplayInfo.ts |
CROWDIN_PROJECT_URL constant |
Translatathon/StepByStepInstructions.tsx, DatesAndTimeline.tsx |
src/data/translation-reports/ |
Leaderboard data (static historical) |
Nits / Minor Issues
-
Orphaned constant:
FIRST_CROWDIN_CONTRIBUTION_DATE— This constant is kept inconstants.ts(line 68), but its only consumer (src/scripts/crowdin/reports/reportsHelpers.ts) is being deleted. After this PR it becomes dead code. Not a break, just lint debt. Could be cleaned up here or in a follow-up. -
AGENTS.md only partially updated — The PR removes the
pnpm crowdin-importline (good), butAGENTS.mdstill mentions Crowdin at lines 119 and 122 in the i18n section ("60+ languages supported via Crowdin", "Content translations managed through Crowdin platform"). These are general factual statements about the project, not references to deleted code, so arguably fine. Just flagging. -
CLAUDE.md not updated —
CLAUDE.mdline 103 still listspnpm crowdin-importin the Available Scripts section. Since the PR updatesAGENTS.md,CLAUDE.mdshould get the same treatment for consistency.
No Broken Logic Found
- No remaining TypeScript file imports from any deleted path
- No remaining workflow references to deleted scripts
src/lib/utils/crowdin.ts(the runtime contributor lookup) is untouched and its data files are preservedlocaleToDisplayInfo.tsis untouched andtranslationProgress.jsonis preserved- The
@crowdin/crowdin-api-clientpackage has zero remaining imports after the deletions - Constants removal is clean —
CROWDIN_PROJECT_URL(still used by Translatathon components) is correctly kept
Bottom Line
This is a straightforward, well-scoped deprecation. The only actionable item I'd suggest before merge is removing FIRST_CROWDIN_CONTRIBUTION_DATE from constants.ts (dead code) and updating the CLAUDE.md script listing. Neither is a blocker.
🤖 Reviewed with Claude Code (claude-opus-4-6)
✅ Deploy Preview for ethereumorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |

Workflows
.github/workflows/crowdin-ci.yml.github/workflows/generate-review-report.yml.github/workflows/get-crowdin-contributors.yml.github/workflows/get-leaderboard-reports.yml.github/workflows/get-translation-progress.ymlScripts
src/scripts/crowdin-import.tssrc/scripts/crowdin/api-client/crowdinClient.tssrc/scripts/crowdin/import/main.tssrc/scripts/crowdin/import/types.tssrc/scripts/crowdin/import/utils.tssrc/scripts/crowdin/leaderboard/constants.tssrc/scripts/crowdin/leaderboard/getLeaderboardReports.tssrc/scripts/crowdin/leaderboard/utils.tssrc/scripts/crowdin/reports/dataHelpers.tssrc/scripts/crowdin/reports/fileHelpers.tssrc/scripts/crowdin/reports/generateReviewReport.tssrc/scripts/crowdin/reports/getTranslationCostsReports.tssrc/scripts/crowdin/reports/reportsHelpers.tssrc/scripts/crowdin/source-files/fetchAndSaveDirectories.tssrc/scripts/crowdin/source-files/fetchAndSaveFileIds.tssrc/scripts/crowdin/translations/awaitLatestBuild.tssrc/scripts/crowdin/translations/constants.tssrc/scripts/crowdin/translations/getApprovedBuckets.tssrc/scripts/crowdin/translations/getBucketDirectoryIds.tssrc/scripts/crowdin/translations/getTranslations.tssrc/scripts/crowdin/translations/postLangPRs.tssrc/scripts/crowdin/translations/triggerBuild.tssrc/scripts/crowdin/translations/types.tssrc/scripts/crowdin/translations/utils.tssrc/scripts/crowdin/getCrowdinContributors.tssrc/scripts/crowdin/getTranslationProgress.tsUtils (from
src/scripts/crowdin/utils.ts)getDirectoryIdsFromJson()findFileIdsByPaths()getCrowdinCode()default exportConstants (from
src/lib/constants.ts)CROWDIN_PROJECT_ID363359CROWDIN_API_MAX_LIMIT500languagePathRootRegExp/^.+\/content\/translations\/[a-z-]*\//Packages (from
package.json)@crowdin/crowdin-api-clientNPM Scripts (from
package.json)crowdin-contributorscrowdin-cleancrowdin-importcrowdin-needs-reviewData
src/data/crowdin/translation-buckets-dirs.jsonPreserved (Static Data)
These files are kept as static historical data honoring past contributions:
src/data/crowdin/file-ids.jsonsrc/data/crowdin/combined-translators.jsonsrc/data/crowdin/excluded-translators.jsonsrc/data/translation-reports/LanguagePicker Preservation
The following are preserved temporarily to maintain the existing LanguagePicker functionality. These will be deprecated in a future update when the LanguagePicker is refactored:
translationProgress.jsonsrc/data/translationProgress.jsonProjectProgressDatatypesrc/lib/types.tslocaleToDisplayInfo()src/lib/nav/localeToDisplayInfo.tsRelated