Tolgee CLI localization is the process of connecting your application’s language keys with a Tolgee translation project through a command-line workflow. Developers searching for how to use tolgee login, configure .tolgeerc, pull translations, extract keys or run tolgee compare and tolgee sync need more than a command list: they need to know which operation changes the project and which merely checks it.
This guide explains Tolgee CLI 2.x workflows for internationalized applications, from authenticated setup and source extraction to review-state-aware exports, project branching, backups and safe release gates. It is written for people who maintain multilingual software worldwide, including teams whose first language is not English.
Begin by connecting the correct Tolgee project and confirming the source-code patterns. Then distinguish ordinary push/pull of translation files from extraction-based synchronization of keys. Check warnings and diffs before removal, filter target languages and review states for release, and test Unicode, interpolation and the interface with realistic data. The sections below show what a sound workflow looks like and what can go wrong.
tolgee loginis designed for interactive browser authorization; automated jobs can use appropriately scoped API credentials..tolgeerckeeps project ID, optional branch, file patterns, formats and default paths together.- Use
tolgee compareto inspect proposed key changes beforetolgee syncmakes them. - Treat unused-key removal, automated confirmation and warning suppression as exceptional risk-bearing operations.
- Use language and review-state filtering on pulls, then test real text in the product and preserve build provenance.
A quick answer: what the CLI controls and what it cannot decide
The command-line client is a repeatable way to move or synchronize application language resources. A resource is not yet ready simply because a tool processed it: the correct file must be selected, the correct version must be approved, and the application must render the correct words for a human reader. Those requirements hold for products deployed anywhere in the world, including regions with different scripts, grammar systems, legal frameworks and accessibility expectations.
A helpful way to understand the workflow is to divide it into source ownership, translation work, export selection, release packaging and customer experience. The same content passes through several systems, but those systems are not equivalent. A source commit may be correct while its matching target-language file is old; a translation may be beautiful while its interpolation variable is broken. An efficient process recognizes the different failure modes instead of expecting one synchronization command to solve them all.
Configuration, safe setup and the first controlled run
Tolgee documents a Node.js-based CLI with installation through the JavaScript package ecosystem or a container. For team work, recording a compatible dependency version with the application is often more reproducible than assuming the newest globally installed command will always behave the same. The documentation describes Node.js requirements and the difference between local project installation and a global command.
The CLI can use interactive login for a developer or API credentials for an automated environment. A credential’s success says nothing about whether it has been given too much permission. Protect tokens as secrets, check which server is targeted and use credentials suitable for one project and one environment where feasible.
The project configuration can define a project ID, branch, format, source scan patterns and push or pull defaults. Tolgee calls the common configuration file .tolgeerc, and its documentation notes that multiple config filename forms are supported. Review the exact file loaded by your script rather than assuming the presence of one dotfile guarantees the right configuration.
Code extraction requires defined patterns or the corresponding CLI option. Static analysis has limits, especially where a translation key is assembled dynamically. Tolgee exposes extraction diagnostics and commands to print or compare extracted keys; use those to understand the proposed change before a synchronization creates or removes project keys.
An ordinary tolgee pull imports language files. The command can filter languages and translation states, including translated and reviewed values. Decide whether a release may contain unreviewed wording and record the policy before the build, because technical completeness and editorial approval are not interchangeable.
The commands below are a conceptual starting point, not a substitute for the current vendor options and your project’s existing configuration. Before you execute a write operation against a live translation project, inspect the selected paths, resource identity and permissions. Use a disposable test project or branch when first learning a feature whose effects are not yet familiar.
npm install --save-dev @tolgee/cli npx tolgee login npx tolgee compare # Inspect the proposed key differences before considering sync npx tolgee pull --path ./public/i18n
After the first run, compare the local file tree with the intended project structure. For a multilingual release, choose at least one base-language example, one language with a regional variant and one non-Latin-script example. Validate with the program that consumes the translations, not just the exported file. Remember that translators need screen context, character constraints and explanations of placeholders to produce dependable work.
A practical field guide: twenty-four localization decisions
Project identity and access
Login works locally but not in CI
Situation. A developer authenticates using the browser and tests a pull, then copies the same script into a noninteractive build job. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Browser approval and personal sessions are not the same as reliable automation; a release job might hang, expire or use a credential whose privileges are too broad. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Use a CI-supported API credential held in protected secrets, confirm the project and host explicitly, and test a read-only workflow before enabling writes. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The job succeeds after a fresh runner is created, displays no token material and accesses only the approved project. Think in terms of evidence rather than the green checkmark from a command. Did the correct resource move, can the application load it, does the target-language wording fit the intended context, and can another engineer reproduce the result? Every answer matters for a public release.
.tolgeerc points at another project
Situation. A monorepo contains a default configuration inherited from a sibling application with a different projectId and locale directory. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. A valid login can produce convincing output from the wrong translation project, and identical key names make accidental cross-project imports harder to detect. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Keep a reviewed project identifier per application and run a narrow pull of a distinctive test key before applying the general file set. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The downloaded key and value belong to the intended application, and the CLI’s project context is recorded in CI logs without secrets. A responsible synchronization should have a narrow scope, a clear owner and an inspectable diff. The smaller the first experiment, the easier it is to understand which assumption has failed. Apply a broad change only after the local test tells a coherent story.
The wrong config file takes precedence
Situation. A developer sets command options, environment variables and a .tolgeerc file without understanding which value wins for an active branch or project. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. One machine can fetch a staging branch while another retrieves main, leaving the same source commit with different translated files. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Document the expected precedence for the installed CLI version and print nonsecret context values during release diagnostics. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Two clean environments using the same release configuration produce the same locale set and the same effective project branch. Technical validity and linguistic accuracy are different tests. A parser can accept a file whose wording misleads a person, while perfect translation can still fail because a placeholder, locale identifier or file path changed. The final gate must cover both sides.
Translation files are written into build output
Situation. The project configuration downloads strings into a generated directory that is deleted and recreated by the frontend build. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The localization transfer succeeds, but a subsequent build phase removes the files before packaging, making the deployed bundle fall back to English. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Choose a stable translation input directory or deliberately order file generation before the packaging stage, and test the produced artifact. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The final bundle contains the expected locales, not merely the temporary workspace in which the CLI command ran. When several versions exist, determine which revision is authoritative before choosing to overwrite anything. A source code branch, a cloud project and a distributed build may all be internally consistent but mutually incompatible. Version recording prevents accidental mixing.
Broad extraction patterns scan irrelevant code
Situation. A configuration matches tests, vendor files and archived experiments as well as current application source. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Extracted keys may include obsolete experiments, fixtures or deliberately invalid data; an automated sync can pollute the active translation project. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Limit patterns to maintained source folders and exclude archives, generated outputs and test fixtures where appropriate. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The printed extracted key set corresponds to shipped product code, and reviewers recognize every new entry. Make the acceptance test visible to someone who was not present during implementation. If they can identify the expected paths, keys, target languages, review states and runtime behavior, the workflow is much safer to repeat as the product grows.
Dynamic keys cannot be resolved statically
Situation. Developers construct keys by concatenating runtime values, while the extractor expects usages that can be identified during source analysis. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The extractor may warn or miss keys even though the product uses them, so removing unreferenced keys can silently break translations. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Investigate warnings, refactor toward explicit keys where possible and maintain a reviewed inventory for legitimately dynamic keys. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Screens with runtime-generated identifiers find their translations and the project has no unexplained missing-key warnings. Think in terms of evidence rather than the green checkmark from a command. Did the correct resource move, can the application load it, does the target-language wording fit the intended context, and can another engineer reproduce the result? Every answer matters for a public release.
Code extraction and string ownership
Compare reveals a deletion storm
Situation. Running tolgee compare reports hundreds of proposed deletions after a seemingly harmless source reorganization. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. It may be detecting moved files rather than truly unused messages; a destructive synchronization would turn a path mistake into a language-coverage incident. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Stop before syncing, inspect the changed extraction patterns and compare with the last known good key inventory. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The corrected comparison is limited to intended additions and removals, and old production keys remain available until explicitly retired. A responsible synchronization should have a narrow scope, a clear owner and an inspectable diff. The smaller the first experiment, the easier it is to understand which assumption has failed. Apply a broad change only after the local test tells a coherent story.
Warning bypass is treated as routine
Situation. An engineer adds a continue-on-warning option to keep an automated sync green after extraction begins emitting unresolved-key diagnostics. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Warnings can signal incomplete analysis; bypassing them without review makes it possible to delete or change keys on incomplete evidence. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Classify the warnings, make dynamic keys explicit or add supported extraction guidance, and require review before any bypass. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Every remaining warning is understood, scoped and accepted with an owner, not merely hidden by a command flag. Technical validity and linguistic accuracy are different tests. A parser can accept a file whose wording misleads a person, while perfect translation can still fail because a placeholder, locale identifier or file path changed. The final gate must cover both sides.
Removing unused keys too early
Situation. A feature is hidden behind a rollout flag and not referenced in the currently scanned code paths, so a cleanup proposes its keys for deletion. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The feature may still ship in another branch, an older app version or a staggered rollout, and removing shared translations harms those customers. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Treat removal as a product lifecycle decision, checking old releases and branches before turning on an unused-key deletion option. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. No supported product version relies on a deleted key, and the removal has a rollback plan for already-installed clients. When several versions exist, determine which revision is authoritative before choosing to overwrite anything. A source code branch, a cloud project and a distributed build may all be internally consistent but mutually incompatible. Version recording prevents accidental mixing.
Sync runs without a backup
Situation. A team automates synchronization with a confirmation-skip option and no recoverable copy of the previous translation-project state. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. If extraction is wrong, the tool can apply many changes faster than reviewers can reconstruct what existed beforehand. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Use the documented backup facility or another verified export, review compare output and reserve automatic confirmation for tightly governed jobs. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. A test restore can recover the earlier key inventory, and the final sync diff matches a reviewed change request. Make the acceptance test visible to someone who was not present during implementation. If they can identify the expected paths, keys, target languages, review states and runtime behavior, the workflow is much safer to repeat as the product grows.
Two developers add the same ambiguous key
Situation. Separate features both choose a key such as status, but one describes delivery and the other describes account eligibility. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. English may tolerate the shared word while other languages require different grammatical forms, misleading people in one of the screens. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Use contextual key names, translator descriptions and screen references; consolidate only genuinely identical meanings. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Reviewers can identify the intended object and action for each key in every supported locale. Think in terms of evidence rather than the green checkmark from a command. Did the correct resource move, can the application load it, does the target-language wording fit the intended context, and can another engineer reproduce the result? Every answer matters for a public release.
A translation state is ignored
Situation. A production pull fetches translated but not necessarily reviewed strings while the release policy promises approved translations only. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The result is technically populated but may contain draft copy or disputed terminology that translators have not signed off. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Use documented state filters for the intended release policy and record how missing reviewed strings are handled. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The downloaded set meets the defined acceptance state, and fallback for unapproved values is deliberate and tested. A responsible synchronization should have a narrow scope, a clear owner and an inspectable diff. The smaller the first experiment, the easier it is to understand which assumption has failed. Apply a broad change only after the local test tells a coherent story.
Sync decisions and review-state policy
Watch mode produces moving artifacts
Situation. An engineer enables automatic pull watch mode in a local development environment and reuses the setup in a reproducible build. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. New translation changes may arrive mid-build, yielding an artifact whose strings do not correspond to a recorded revision. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Reserve watch mode for development feedback, use a fixed download operation in release builds and capture the resulting file hashes. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Rebuilding the same release candidate reproduces the reviewed translations despite later edits in the project. Technical validity and linguistic accuracy are different tests. A parser can accept a file whose wording misleads a person, while perfect translation can still fail because a placeholder, locale identifier or file path changed. The final gate must cover both sides.
Branch selection differs from Git
Situation. A developer checks out a feature Git branch but assumes Tolgee automatically switches to an equally named translation branch. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Source code and localized resources are independent systems; no naming coincidence establishes that both changed together. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Pass an explicit Tolgee branch or set the documented environment/config field, then verify the target branch exists. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The release manifest records both branches or revisions and review confirms that they contain compatible message keys. When several versions exist, determine which revision is authoritative before choosing to overwrite anything. A source code branch, a cloud project and a distributed build may all be internally consistent but mutually incompatible. Version recording prevents accidental mixing.
Branch merge leaves conflicts
Situation. Two translation branches contain separate regional revisions of the same product phrase and the team wants to merge them silently. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. A branch merge can choose a technically valid value that violates a market-specific term or drops approved reviewer changes. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Compare the branch content, assign linguistic conflict decisions and merge only after confirming the target branch’s current state. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. The resulting phrases meet the receiving market’s glossary and every conflict has a documented resolution. Make the acceptance test visible to someone who was not present during implementation. If they can identify the expected paths, keys, target languages, review states and runtime behavior, the workflow is much safer to repeat as the product grows.
File template has the wrong locale placeholder
Situation. The push configuration names one language per file but its template maps every target language into the same destination filename. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. A transfer may overwrite files or make the repository appear to support only one language even though several exist remotely. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Use the officially supported language template syntax, verify generated paths and avoid assuming generic shell interpolation matches Tolgee’s template rules. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Two distinct test languages round-trip into separate files, and their content remains different after sync. Think in terms of evidence rather than the green checkmark from a command. Did the correct resource move, can the application load it, does the target-language wording fit the intended context, and can another engineer reproduce the result? Every answer matters for a public release.
Namespace context is lost
Situation. An application groups keys by area, while a flattened export discards context used to distinguish identical labels in different screens. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Translators may be forced to choose one phrasing for words that mean different things in checkout, support and settings. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Align file format, structure delimiter and namespace design with the runtime library and preserve context where translations require it. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. A target locale renders each key in its intended screen without accidental collisions or misleading fallback. A responsible synchronization should have a narrow scope, a clear owner and an inspectable diff. The smaller the first experiment, the easier it is to understand which assumption has failed. Apply a broad change only after the local test tells a coherent story.
Plural text passes JSON validation
Situation. The imported files parse cleanly, but plural forms for another language do not match its grammatical categories or the runtime message format. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. A parser checks structure, not whether one, few, many and other cases are represented and interpreted appropriately for that locale. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Test the actual runtime plural implementation with representative numbers and ask qualified reviewers to approve resulting sentences. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Every required count renders a coherent message, with variables and punctuation preserved rather than hardcoded English assumptions. Technical validity and linguistic accuracy are different tests. A parser can accept a file whose wording misleads a person, while perfect translation can still fail because a placeholder, locale identifier or file path changed. The final gate must cover both sides.
Branches, files and reliable releases
Placeholder changes after extraction
Situation. A developer renames an interpolation variable in the source message without updating every translation or its runtime call site. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The key may remain recognizable while the variable no longer resolves, producing blanks or raw template syntax in certain languages. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Compare placeholder signatures between source and targets and exercise each changed message with realistic values. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. All released languages preserve the required variables and render the actual amount, date or person’s name correctly. When several versions exist, determine which revision is authoritative before choosing to overwrite anything. A source code branch, a cloud project and a distributed build may all be internally consistent but mutually incompatible. Version recording prevents accidental mixing.
Fonts render the wrong script
Situation. A language file contains correct Japanese or Arabic characters, but the shipping application uses a font without suitable glyph coverage. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The CLI cannot fix typography: empty boxes, truncated glyphs and mixed-direction punctuation are runtime presentation faults. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Test the installed fonts and screen layout across representative scripts, devices and increased text sizes. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Human reviewers confirm legibility, bidirectional order and button affordances in the actual application, not just raw files. Make the acceptance test visible to someone who was not present during implementation. If they can identify the expected paths, keys, target languages, review states and runtime behavior, the workflow is much safer to repeat as the product grows.
A reviewer approves a misleading deletion
Situation. A key removed by sync appears unimportant because its English name is short, but it labels an identity confirmation screen used by older app versions. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. The translation project’s active source scan cannot reveal every deployed historical dependency or product policy exception. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Check supported clients, release channels and feature flags before removal; schedule deprecation after the last dependent version expires. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. No active client makes a request for the removed key, and the regression suite covers historical supported versions. Think in terms of evidence rather than the green checkmark from a command. Did the correct resource move, can the application load it, does the target-language wording fit the intended context, and can another engineer reproduce the result? Every answer matters for a public release.
Default server assumptions fail
Situation. The engineering group works with a self-hosted Tolgee server, while one machine relies on the public service default. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Authentication and project IDs may be valid-looking in one context yet connect to an unintended environment or fail altogether. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Set the intended server endpoint by documented configuration, verify certificate trust and keep self-hosted environment ownership clear. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. A fresh workspace connects to the approved host and retrieves a known project key without silently switching providers. A responsible synchronization should have a narrow scope, a clear owner and an inspectable diff. The smaller the first experiment, the easier it is to understand which assumption has failed. Apply a broad change only after the local test tells a coherent story.
Review status is mistaken for runtime readiness
Situation. A language is marked reviewed in the translation platform, but its long labels clip in a modal on a small screen. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. A completed linguistic stage is necessary but not sufficient for an accessible, reliable multilingual application. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Run screenshot and accessibility checks at supported widths and text-scaling settings, prioritizing high-risk confirmation and error screens. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. All critical actions remain visible and distinguishable in the actual product across representative locales. Technical validity and linguistic accuracy are different tests. A parser can accept a file whose wording misleads a person, while perfect translation can still fail because a placeholder, locale identifier or file path changed. The final gate must cover both sides.
The team cannot reproduce a language regression
Situation. A user reports a wrong translated payment message, but developers cannot tell which project branch, state filter or download produced the release. This is an ordinary problem for a growing team, not a sign that localization is inherently unreliable. The difficulty comes from coordinating development, translation and release responsibilities when each group works from a different view of the same message.
What can go wrong. Without provenance, it is tempting to edit the live string and hope that future builds retain the correction. A fast synchronization is not a reliable diagnosis. First establish which file, key, language or branch is being discussed, and only then decide whether the remedy belongs in configuration, content review or runtime engineering.
A safer way forward. Record code commit, translation branch, export policy, build artifact and review approval as separate pieces of a release record. When uncertainty remains, begin with a small test and inspect the diff rather than applying a broad update. Preserve the earlier state until the changed resource has passed the relevant checks and the right owner has approved its use.
What success looks like. Investigators can recreate the exact text, identify the source of the error and verify that a corrective release cannot regress silently. When several versions exist, determine which revision is authoritative before choosing to overwrite anything. A source code branch, a cloud project and a distributed build may all be internally consistent but mutually incompatible. Version recording prevents accidental mixing.
Before publishing: an acceptance checklist that catches silent errors
- Identify the intended project, environment and translation branch, with nonsecret evidence in the build log.
- Check the authorized source language files, target locale list, filenames, paths and upload/download scopes.
- Keep credentials in protected secret storage and separate reading, writing and branch-changing privileges where the platform supports it.
- Inspect the proposed file or key changes before replacing reviewed remote translations or removing keys.
- Distinguish untranslated, translated and reviewed text where the service offers review stages.
- Validate encoding, required Unicode characters, plural forms, interpolation variables, escaping and actual runtime parsing.
- Test representative locales in the real user interface with text expansion, text scaling, mixed directionality and screen-reader navigation.
- Give high-risk content such as prices, deadlines, consent, healthcare and safety information qualified linguistic review.
- Capture the source revision, translation project state, configuration revision and artifact hashes for reproducibility.
- Run the deployment and a fresh-client smoke test, not just a command-line transfer test.
Frequently asked questions
Is tolgee compare the same as tolgee sync?
No. Compare is for examining what the extractor would change; synchronization applies changes and therefore needs an appropriate review and backup policy. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Can I use browser login inside a build server?
Interactive login is intended for people. Use the documented automation credentials with limited permissions for CI and avoid printing those secrets. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
What do the translation states mean for exporting?
They describe how far a translation has progressed through the project’s workflow. Decide whether your product may ship translated but unreviewed content, and configure the pull accordingly. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Why does extraction miss a dynamically constructed key?
Static extraction cannot always determine runtime values. Investigate the warning and refactor or explicitly manage the key instead of blindly deleting it. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Should sync remove unused keys automatically?
Only after a lifecycle review confirms that no supported branch, feature flag or older client still depends on the keys. Back up and inspect the proposed removal. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Do translation branches follow Git branches automatically?
No. Set the translation branch explicitly and record how it corresponds to the product code revision. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Can I use watch mode for production builds?
Watch mode is useful while developing; reproducible builds should capture a defined translation revision and use a finite import step. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
What must be checked after a successful pull?
Structure, placeholders, plurals, font coverage, bidirectional order, accessibility, review state and actual messages in the application. When the local project deviates from an example, follow the vendor’s maintained documentation and test with a small resource before making a project-wide change.
Further reading and the next useful exercise
Current official documentation: Tolgee CLI overview; Tolgee project configuration; Extraction, compare and sync; Pushing and pulling strings. Read the sections matching your installed CLI version and the actual file format used by your product. For related but separate workflows, see eduKateSG’s Phrase Strings CLI guide and Transifex CLI guide; their commands and service conventions should not be copied into another provider’s workflow.
The strongest first exercise is deliberately limited. Choose one real source message and one target language, identify the precise resource and review state, run the safest supported transfer, inspect the file changes and then open the affected screen in the running application. Ask a language reviewer whether the meaning is right and a developer whether the required placeholders and layout still work. Scale up only when both answers are supported by evidence.