Developers manage code with branches, pull requests, and automated pipelines, while translators often work in spreadsheets or disconnected SaaS platforms. The split causes synchronization problems, stale translations, and delayed releases. Keeping translations in Git as the single source of truth puts engineers and translators in the same version control system and ends the file shuffling between them.
Diagnose the localization synchronization gap
Developers write code, extract strings, commit them to a repository, then export the strings and hand them to a localization manager. Translators work on them in a separate tool. During that time developers keep building features, changing source strings, and merging code. By the time the translated files return, the source codebase has drifted.
Teams then reconcile translation keys by hand. The Inlang Show HN discussion points out that syncing state between teams is painful when they do not share the same version control backend. Translators outside the repository cannot see the context of a change, and the translation tool strips away the application layout, so they have to ask developers for screenshots. Developers cannot easily verify that translations are complete before deploying to production. The result is a brittle process where localization blocks release cycles and introduces runtime errors.
The root cause is a tool mismatch. Developers use a distributed version control system that tracks every change precisely, while translators use tools that treat translation as a static batch process. Putting both code and translations in Git ties every translation to a specific commit.
Implement a Git-based localization pipeline
Treat translations as code contributions
Translation files live in the repository next to the application code. A developer who adds a feature adds its source strings to the localization files in the feature branch, and translators edit those files through specialized editors that commit changes back to the branch.
Translations stay bound to the code that uses them. When the feature branch merges, the code and the translations deploy together, with no external sync scripts or manual imports.
Automate branching and pull requests
Submit finished translations as a pull request. As GitHub explains in its documentation on pull requests, a pull request lets teams propose changes, discuss them, and run automated checks before merging.
CI tools can automate the rest. When the main branch receives new source strings, a GitHub Action can create a localization branch. Translators commit their work to this branch, and once they finish, they open a pull request back to the main branch. The workflow below only creates and pushes the branch; it does not open the pull request.
name: Localization Workflow
on:
push:
branches:
- main
jobs:
create_localization_branch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create branch
run: |
git checkout -b l10n/update-strings
git push origin l10n/update-strings
Developers no longer need to remember to send files to translators, and translators do not need to email files back.
Integrate continuous integration checks
Because translations arrive as pull requests, CI can validate every update. Validation scripts can check for missing keys, malformed placeholders, and invalid syntax. For example, the i18n-validate project offers automated checks that fail the build if a translation contains a broken variable. Running them on every pull request keeps broken translations out of the main branch, and translators get immediate feedback if they accidentally delete a formatting tag, so they can fix it without a developer.
Manage repository architecture and permissions
External localization vendors should not get full commit access to the repository.
Isolate language assets
Store all localization files in a dedicated directory. That keeps translators away from application code, and CI can trigger translation workflows only when files in the language directory change.
Component-based architectures often put translation files next to their code modules. That works well for developers but complicates the translator experience. A hybrid approach uses build scripts to aggregate the scattered strings into a single translation interface, then writes the translated results back to their original locations during the commit phase.
Some teams worry that large localization files bloat the repository and slow down clones. That holds for massive binary assets, but text-based translation files compress well. For a very large application, Git submodules can keep the localization assets in a separate repository, which keeps the primary codebase lean while preserving the branch-based workflow. The build pipeline pulls the correct commit from the submodule during compilation.
Implement fine-grained access control
Use code owners and branch protection rules. Assign the engineering team as owner of the application code and the localization manager as owner of the language directories.
When a pull request modifies localization files, the system should automatically request a review from the localization manager. If a translator's automated pull request touches a code file, the system must block the merge until an engineer approves it.
Scale the workflow for enterprise environments
As the number of strings and languages grows, manual branch management becomes a bottleneck.
Deploy specialized translation editors
Translators should not need command-line Git clients or basic text editors. Give them a web-based editor that connects to the Git backend. It reads the current branch state, presents the strings in a friendly interface, and pushes commits back to the repository on the translator's behalf. Translators work in a familiar dashboard while the infrastructure underneath stays Git-centric, so they skip the steep learning curve of version control software.
Parallelize translation efforts
Large releases often need translation into dozens of languages at once. Create a parallel localization branch for each vendor or language team so each pushes changes independently. CI pipelines merge the branches automatically as they pass validation, so no language waits on the slowest one. The software can ship with the languages that are ready, and later languages go out in minor patch releases through the same workflow.
Handle failures and manage translation drift
Resolve merge conflicts gracefully
Merge conflicts happen when several translators edit the same file, or when a developer changes a source string while its translation is in progress. In a Git-based system the conflict is visible immediately.
Train localization managers on basic Git conflict resolution, or give them visual tools that hide the Git commands. Configure the CI pipeline to block merges while a conflict exists, so the broken file cannot affect production.
Git resolves trivial discrepancies on its own. If a developer appends a new key at the bottom of the English file while a translator updates an existing key in the Spanish file, a standard Git merge handles the combination.
Prevent translation drift
Translation drift happens when a developer changes an English source string without updating its translations, so the foreign language strings keep the old meaning.
To catch it, store a hash of the source string alongside each translation. The continuous localization guide describes hash-based freshness tracking and shows a file-level hash check; the steps here apply the same idea per string. During the build, hash the current source string and compare it to the stored hash. If they do not match, flag the translation as stale and require a review.
Revert a stale translation to English instead of leaving it in place, and flag it visually in the staging UI. The old text still reads as finished and correct while it describes a source string that has since changed. English at least looks unfinished, so QA testers spot the regression right away.
Establish clear communication channels
Use pull requests as discussion forums
Have translators and developers talk in pull request comments. A translator who does not understand the context of a string should comment on that line of the localization file. The developer can answer in the thread, attaching screenshots or explaining the intended behavior. Unlike an email, the answer stays attached to the code and gives future translators a permanent reference.
Standardize localization notes
Developers should write a localization note whenever they create a new source string, describing the context, explaining any variables, and specifying character limits. Store the notes in the repository, ideally right next to the source strings in code comments or resource files. When the pipeline generates translation branches, it should extract these notes and present them to translators. Notes written up front cut the questions that otherwise arrive during pull request review.
Optimize the review and approval process
Automate staging environment deployments
When a localization pull request opens, CI should automatically deploy a preview environment built with the new translations, so reviewers see the localized text in its final context. In-context review catches layout issues, truncated text, and contextual errors that are impossible to spot in a spreadsheet. Reviewers can navigate the preview and request changes in the pull request.
Implement phased rollouts
Use feature flags and progressive delivery to roll out new languages gradually. Merge the localization pull requests into the main branch, but keep the new language hidden behind a feature flag in production. Enable it for internal employees first, then a small group of beta users, and finally the general public. This surfaces translation errors before they reach every user and decouples the translation merge from the product launch schedule.
Verify the unified workflow
Monitor cycle time
Track how long a new string takes to go from the developer's feature branch to the published application. It should fall once the manual file handoffs are gone. Also track how long localization pull requests stay open and how often they fail CI checks. Frequent failures mean the validation rules may be too strict or translators need better context.
Audit repository hygiene
Periodically review the Git history of your translation files. It should show clear, atomic commits tied to specific features or localization updates, and it doubles as an audit trail of who changed a translation and when.
Plan your next steps for localization
Start with a small, non-critical project. Migrate its translation files into the repository, set up an automated branch creation script, and configure a pull request validation check. Train one developer and one translator on the new workflow, then roll it out to your primary applications once the pilot works.
