This n8n workflow automatically identifies missing translations in .strings files across iOS localizations (e.g., Base.lproj vs fr.lproj) and generates a report in Google Sheets. Optionally, it creates a GitHub Pull Request to insert placeholder strings ("__TODO_TRANSLATE__") so builds don’t fail. Supports DRY_RUN mode.
- Import the Workflow JSON into your n8n instance.
- Set Config Node values, for example:
{ "GITHUB_OWNER": "your-github-user-name", "GITHUB_REPO": "your-iOS-repo-name", "BASE_BRANCH": "develop", "SHEET_ID": "<YOUR_GOOGLE_SHEET_ID>", "ENABLE_PR": "true", "IOS_SOURCE_GLOB": "**/Base.lproj/*.strings,**/en.lproj/*.strings", "IOS_TARGET_GLOB": "**/*.lproj/*.strings", "PLACEHOLDER_VALUE": "__TODO_TRANSLATE__", "BRANCH_TEMPLATE": "chore/l10n-gap-{{YYYYMMDD}}" } ```
- Listens for GitHub push or pull request events.
- Scans the iOS repository for
.stringsfiles under source and target language directories. - Compares translation keys between source and target to identify missing entries.
- Updates or creates Google Sheet tabs (e.g.,
fr) with missing entries. - Optionally creates a GitHub PR with placeholder values so missing translations don’t break builds.
- Supports DRY_RUN mode (sheet only, no PR).
- iOS development teams who want fast feedback on missing localizations.
- Localization managers who want a shared sheet to assign work to translators.
| Tool | Purpose | Notes |
| -------------------- | -------------------- | ----------------------------------- | --- |
| GitHub Repo | Webhook, API for PRs | Requires repo token or App access |
| Google Sheets | Sheet output | Needs valid SHEET_ID |
| Slack (optional) | Notifications | Requires chat:write scope |
| SMTP (optional) | Email fallback | Standard SMTP credentials | |
- GitHub Webhook Trigger — Fired on push or pull request.
- Scan Repository Tree — Finds
.stringssource and target files based on glob patterns. - Key Comparison — Detects missing translation keys.
- Update Sheets — Adds missing entries to the appropriate sheet tab.
- (Optional) Create GitHub PR — Opens a pull request with placeholder translations.
- Multiple Locales — Add comma‑separated values to
TARGET_LANGS_CSV(e.g.,fr,de,es). - Glob Patterns — Adjust
IOS_SOURCE_GLOBandIOS_TARGET_GLOBto scan only certain modules. - Ignore Rules — Add
IGNORE_KEY_PREFIXES_CSVto skip internal or debug strings. - Placeholder Value — Change
PLACEHOLDER_VALUEto something meaningful like"@@@". - Slack/Email — Set
SLACK_CHANNELandEMAIL_FALLBACK_TO_CSV. - DRY_RUN Mode — Set to
trueto update Sheets only without PR creation.
- Android support — Add a path for
strings.xml(values→values‑<lang>), diff → Sheets → placeholder PR. - Multiple languages — Expand
TARGET_LANGS_CSVand loop through tabs + placeholder commits per locale. .stringsdicthandling — Validate plural/format entries and open precise PRs.- Translator DMs — Map language → Slack handle/email to DM translators with their file/key counts.
- GitLab/Bitbucket variants — Replace GitHub API calls with equivalents to open merge requests.
- Before a test build, ensure the locale (e.g.,
fr) has all keys present — placeholders keep the app compiling. - Weekly runs create sheets for translators and PRs with placeholders, avoiding last‑minute breakages.
- When adding a new screen with new strings, the workflow flags missing keys across locales and pre‑fills them.
| Issue | Possible Cause | Solution |
|---|---|---|
| No source files found | Glob pattern doesn’t match Base.lproj or en.lproj |
Adjust IOS_SOURCE_GLOB |
| Target file missing | Locale folder doesn’t exist yet | Placeholder PR will create it |
| Parsing skips entries | Non‑standard .strings format | Ensure proper "key" = "value"; syntax |
| Sheet not updating | Invalid SHEET_ID or insufficient permission |
Provide a valid ID or allow write access |
| PR not created | ENABLE_PR=false or no keys missing |
Enable PR creation and confirm missing gaps |
| Slack/Email not received | Missing credentials/config | Configure Slack/SMTP and set recipients |
Want to expand this for Android? Loop through 5+ locales at once? Replace GitHub with GitLab?
Contact the WeblineIndia.n8n experts with your repo and locale setup and we’ll help tailor it to your translation workflow!