Working with localization in source control management


Does PhraseApp support branching?

No, PhraseApp does not support branching and we don’t think it should, either. Why? Translators and project managers are usually no experienced developers.

Branching (as in software development) is a complex topic and most developers need quite some time to learn the basic rules of branching:

  • How can branches be merged safely?
  • How many branches can the organisation handle until it gets confusing?
  • How can I resolve merge conflicts?
  • How do I name branches so that everyone knows what the branch is all about?

Even experienced programmers make mistakes that cause branches to be deleted by accident or that erase changes being made just by using the wrong merge method. We don’t think it is a good idea to confront translators and projects managers with these issues as they often do not have the technical background necessary to handle branching efficiently and safely.

Not offering branching or versioning of translation groups will help to keep our platform easy-to-use and reduce the amount of time required to master it’s features.

It’s all about a lean and easy workflow that every team member understands immediately! Git (or your favourite SCM) already supports branching

When working on a software project you typically use an SCM. It doesn’t matter if it is git, Mercurial, SVN: They all already offer branching and have excellent methods to resolve merge conflicts (well, SVN maybe not so much).

So you already have a powerful branching technology that can handle your branches and their content efficiently.

But I still use branches and want to structure my translations accordingly!

Using branches in your software project is fine. But you don’t need it when working with translation management systems like PhraseApp. Instead we recommend using two simple techniques:


Tag your keys in groups according to features and/or releases/branches. Your keys could be tagged with something like “new-profile-feature” or “payment-functionality-branch”. This lets you get a hold of the translations required to completely translate a given feature and even observe the progress of it’s translation with a few clicks.

Need fast tagging? Your developer could easily upload a locale file containing the source translations for the feature she’s working on and specify a set of tags that get added to the newly imported keys automatically!

Clear Naming

The most important method to keep your keys organised is not tagging or branching - It’s clear naming! We recommend using generic naming for your keys, starting with the name of the area/feature the key is used in:

Bad naming:

  • “Online”
  • “ok-btn”
  • “Welcome to our Website”

Good naming:

  • “”
  • “tasks.form.submit_btn.label”
  • “home.index.headline”

This makes it really easy to identify keys that belong to features that have maybe never been released and could be deleted from your PhraseApp project in order to keep it neat and organised.

We encourage you to continue using branching in your workflow. Just let your developers pull all recent translations from PhraseApp and avoid any merge conflicts in your locale files easily!