Skip to content

deprecate(i18n): legacy crowdin infrastructure#17165

Merged
wackerow merged 2 commits into
devfrom
deprecate-legacy-crowdin
Feb 24, 2026
Merged

deprecate(i18n): legacy crowdin infrastructure#17165
wackerow merged 2 commits into
devfrom
deprecate-legacy-crowdin

Conversation

@wackerow
Copy link
Copy Markdown
Member

@wackerow wackerow commented Jan 24, 2026

Workflows

File Purpose
.github/workflows/crowdin-ci.yml Full locale-by-locale import builds
.github/workflows/generate-review-report.yml Translation review report generation
.github/workflows/get-crowdin-contributors.yml Weekly contributor data updates
.github/workflows/get-leaderboard-reports.yml Monthly leaderboard data updates
.github/workflows/get-translation-progress.yml Weekly translation progress updates

Scripts

File Purpose
src/scripts/crowdin-import.ts Main import orchestration
src/scripts/crowdin/api-client/crowdinClient.ts Crowdin API client wrapper
src/scripts/crowdin/import/main.ts Import entry point
src/scripts/crowdin/import/types.ts Import type definitions
src/scripts/crowdin/import/utils.ts Import utilities
src/scripts/crowdin/leaderboard/constants.ts Leaderboard constants
src/scripts/crowdin/leaderboard/getLeaderboardReports.ts Leaderboard report generation
src/scripts/crowdin/leaderboard/utils.ts Leaderboard utilities
src/scripts/crowdin/reports/dataHelpers.ts Report data helpers
src/scripts/crowdin/reports/fileHelpers.ts Report file I/O
src/scripts/crowdin/reports/generateReviewReport.ts Review report generation
src/scripts/crowdin/reports/getTranslationCostsReports.ts Cost report fetching
src/scripts/crowdin/reports/reportsHelpers.ts Report API helpers
src/scripts/crowdin/source-files/fetchAndSaveDirectories.ts Directory structure sync
src/scripts/crowdin/source-files/fetchAndSaveFileIds.ts File ID mapping sync
src/scripts/crowdin/translations/awaitLatestBuild.ts Build polling
src/scripts/crowdin/translations/constants.ts Translation constants
src/scripts/crowdin/translations/getApprovedBuckets.ts Approved bucket fetching
src/scripts/crowdin/translations/getBucketDirectoryIds.ts Bucket directory mapping
src/scripts/crowdin/translations/getTranslations.ts Translation fetching
src/scripts/crowdin/translations/postLangPRs.ts Language PR creation
src/scripts/crowdin/translations/triggerBuild.ts Build triggering
src/scripts/crowdin/translations/types.ts Translation types
src/scripts/crowdin/translations/utils.ts Translation utilities
src/scripts/crowdin/getCrowdinContributors.ts Contributor data fetching
src/scripts/crowdin/getTranslationProgress.ts Progress data fetching

Utils (from src/scripts/crowdin/utils.ts)

Function Purpose
getDirectoryIdsFromJson() Read directory IDs from JSON
findFileIdsByPaths() Map file paths to Crowdin IDs
getCrowdinCode() Get Crowdin locale code from lang code
default export Removed default export

Constants (from src/lib/constants.ts)

Constant Value Purpose
CROWDIN_PROJECT_ID 363359 Crowdin project identifier
CROWDIN_API_MAX_LIMIT 500 API pagination limit
languagePathRootRegExp /^.+\/content\/translations\/[a-z-]*\// Path matching regex

Packages (from package.json)

Package Purpose
@crowdin/crowdin-api-client Crowdin API SDK

NPM Scripts (from package.json)

Script Command
crowdin-contributors Fetch contributor data
crowdin-clean Clean .crowdin directory
crowdin-import Run translation import
crowdin-needs-review Generate review report

Data

File Purpose
src/data/crowdin/translation-buckets-dirs.json Directory bucket mappings

Preserved (Static Data)

These files are kept as static historical data honoring past contributions:

File Purpose
src/data/crowdin/file-ids.json File ID mappings (used by contributor display)
src/data/crowdin/combined-translators.json Contributor data per file/language
src/data/crowdin/excluded-translators.json Contributor exclusion list
src/data/translation-reports/ Leaderboard data (alltime, month, quarter)

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:

Item Location Purpose
translationProgress.json src/data/translationProgress.json Language completion percentages
ProjectProgressData type src/lib/types.ts Type definition for progress data
localeToDisplayInfo() src/lib/nav/localeToDisplayInfo.ts Consumes progress data for picker

Note: The translationProgress.json data is now static and will not receive updates. When the LanguagePicker is redesigned, these items can be removed or refactored.

Related

- 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
@netlify
Copy link
Copy Markdown

netlify Bot commented Jan 24, 2026

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 613cff3
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/697522dacf7f4300085b454b
😎 Deploy Preview https://deploy-preview-17165.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 57 (🟢 up 4 from production)
Accessibility: 94 (no change from production)
Best Practices: 100 (no change from production)
SEO: 100 (no change from production)
PWA: 59 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions github-actions Bot added dependencies 📦 Changes related to project dependencies tooling 🔧 Changes related to tooling of the project labels Jan 24, 2026
@myelinated-wackerow
Copy link
Copy Markdown
Collaborator

PR #17165 Review: deprecate(i18n): legacy crowdin infrastructure

Author: wackerow | Target: dev | +0 / -2,498 across 38 files

Summary

Pure deletion PR. Removes the entire legacy Crowdin import/build pipeline: 5 GitHub workflows, 25+ TypeScript scripts, 1 npm dependency, 4 npm scripts, 3 constants, and 1 data file. Preserves static data files for historical contributor display and the LanguagePicker's translationProgress.json.

Verdict: Looks Clean (with minor nits)

Cross-referenced every deleted file against remaining imports and references. The deletions are self-consistent — everything that referenced the deleted code is also being deleted. No broken import chains.

What's correctly deleted together

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

  1. Orphaned constant: FIRST_CROWDIN_CONTRIBUTION_DATE — This constant is kept in constants.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.

  2. AGENTS.md only partially updated — The PR removes the pnpm crowdin-import line (good), but AGENTS.md still 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.

  3. CLAUDE.md not updatedCLAUDE.md line 103 still lists pnpm crowdin-import in the Available Scripts section. Since the PR updates AGENTS.md, CLAUDE.md should 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 preserved
  • localeToDisplayInfo.ts is untouched and translationProgress.json is preserved
  • The @crowdin/crowdin-api-client package 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)

@wackerow wackerow merged commit 04a8ad9 into dev Feb 24, 2026
2 checks passed
@wackerow wackerow deleted the deprecate-legacy-crowdin branch February 24, 2026 03:46
@netlify
Copy link
Copy Markdown

netlify Bot commented Feb 24, 2026

Deploy Preview for ethereumorg ready!

Name Link
🔨 Latest commit 2e1046e
🔍 Latest deploy log https://app.netlify.com/projects/ethereumorg/deploys/699d1ef3775fd300086965ae
😎 Deploy Preview https://deploy-preview-17165.ethereum.it
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
7 paths audited
Performance: 60 (🔴 down 2 from production)
Accessibility: 94 (🟢 up 1 from production)
Best Practices: 100 (no change from production)
SEO: 100 (🟢 up 1 from production)
PWA: 59 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@pettinarip pettinarip mentioned this pull request Feb 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies 📦 Changes related to project dependencies tooling 🔧 Changes related to tooling of the project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants