Skip to content

ci: add Crowdin translation sync workflow - #130

Merged
frankea merged 2 commits into
mainfrom
chore/crowdin-localization
Jul 17, 2026
Merged

ci: add Crowdin translation sync workflow#130
frankea merged 2 commits into
mainfrom
chore/crowdin-localization

Conversation

@frankea

@frankea frankea commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds a Crowdin workflow: pushes to main touching Whisky/Localizable.xcstrings upload new English sources to Crowdin; a Monday cron (plus workflow_dispatch) pulls translations and opens an l10n/crowdin PR.
  • The workflow stays dormant (with a notice) until the Crowdin secrets exist, so it can merge independently of Crowdin setup.
  • crowdin.yml gains preserve_hierarchy: true — without it the CLI flattens the file to /Localizable.xcstrings on upload and the download step can't map the export back to Whisky/Localizable.xcstrings.
  • Rewrites the CONTRIBUTING localization section: English-only strings in PRs, translations via Crowdin; updates the AUDIT.md entry for upstream #1375.

Setup already completed (out-of-repo)

  • Crowdin project frankea-whisky (ID 913423) created: public, English source, 22 target languages matching the catalog.
  • CROWDIN_PROJECT_ID / CROWDIN_PERSONAL_TOKEN repo secrets configured.
  • Existing catalog translations seeded into Crowdin (per-language import, --import-eq-suggestions), and skipUntranslatedStrings enabled on the project so exports omit untranslated entries instead of filling them with English source-copies.
  • Round-trip verified lossless: a test download reproduces every translated string in the repo catalog with correct Apple-style language keys (es, zh-Hans, pt-BR, …).

Testing

  • crowdin upload sources / upload translations / download translations all exercised against the live project with this exact config.
  • First real run: trigger the workflow manually after merge and eyeball the resulting l10n/crowdin PR for mass deletions before merging it.

frankea added 2 commits July 4, 2026 13:26
Reconnect a translation pipeline for Localizable.xcstrings. On push to main
the workflow uploads new English source strings to Crowdin; on a weekly
schedule (or manual dispatch) it pulls translated strings back as a
"New translations from Crowdin" PR. It stays dormant until the maintainer
adds the CROWDIN_PROJECT_ID and CROWDIN_PERSONAL_TOKEN secrets, so it never
fails on pushes before setup is complete.

Reconcile the localization docs to match: CONTRIBUTING.md now describes the
Crowdin flow (English source strings only; translate via Crowdin, not in
PRs), and docs/AUDIT.md no longer claims a Crowdin project that wasn't
actually wired up on this fork.
Without preserve_hierarchy the CLI flattens the source path to
/Localizable.xcstrings on upload, and the download step can no longer
map the exported file back to Whisky/Localizable.xcstrings (it warns
'missing respective sources' and skips it). Keeping the repo hierarchy
in Crowdin makes upload and download symmetric.
@frankea
frankea merged commit 244ba27 into main Jul 17, 2026
10 checks passed
@frankea
frankea deleted the chore/crowdin-localization branch July 17, 2026 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant