History of your Translation Projects

We've added a feature that we find very useful: you can now view and access the history of all your translation projects.

The history is displayed as an activity feed; it shows which changes have been made by which collaborator and, of course, when they were made. Any comments on segments and any source editions are also included in the feed.

For each change made to the translation, you get a colored diff to easily compare the segments "before" and "after" the change.

Translation history of direct-invoice

You can now access the history in two ways:

  • In the list of projects, via the dropdown link named "History".
  • At the top of the translation page (next to the list of collaborators).

We will improve this history in the future, for instance with a notification zone where you will be able to see the work of your team in real-time.

Fine-Grained Authorization and Role Management

At Translation.io, we believe that simplicity and user-friendliness are essential criteria when designing interfaces and we always make a point of keeping the amount of information and features on screen as low as possible.

Along these lines, we had initially opted to give all collaborators on a project the same role and accesses (except for the owner, of course): any collaborator had access to any language and was allowed to edit anything, including the source YAML segments.

This strategy works well for small teams but quickly becomes problematic for larger teams dealing with over 20 languages and subcontracting translations to "strangers", as is often the case in practice.

That's why we have now decided to define specific roles for each task. By default, the roles and accesses will remain the same as before, but you will now be able to easily change the role of any collaborator in just a few clicks.

Collaborators Management

The specific roles are the following:

  • Manager:
    • Access to team management.
    • Access to all languages.
    • Access to copywriting.
  • Translator:
    • Access to all languages.
  • Translator for 1 language:
    • Access to a given language.

We have adapted the interface so that you can now change the different roles without making it more complex for those who don't need to change anything.

Set Current Locale in your Rails App

You are probably used to having a before_action somewhere in your controller hierarchy to set the current locale (I18n.locale) based on a value from the URL, the session, a cookie, etc.

The translation gem ships with a generic implementation that can be called directly in your ApplicationController:

before_action :set_locale

But, if you need a custom behaviour, you can of course continue to use your own method by redefining it. For instance:

before_action :set_locale

def set_locale
  I18n.locale = # custom logic to get the locale code

Another common use case is to let registered users set their preferred locale in their profile (saved in the database).

Here is what it might look like in such a case:

before_action :set_locale

def set_locale
  if current_user
    I18n.locale = current_user.locale || I18n.default_locale

Better Google Translate Suggestions

Some of you may have noticed that Google Translate suggestions of interpolated strings were not very good. Some additional spaces were sometimes inserted.

A sentence like Hello %{user} was translated as Bonjour% {user} by Google.

And sometimes it can get even worse :

Google Translate is just wrong with interpolated variables

We improved that mechanism to help Google Translate to deal with interpolated variables. And we're happy with the results :

Hello %{user} Bonjour %{user}

Hello %{world} Bonjour %{world}

It should prevent your translators from making unfortunate mistakes.

Adding and Removing Target Languages

Here's a question we frequently receive from new users: “How do I add a new target language to my project?

The quick answer is trivial: update the config.target_locales parameter in your project's translation.rb file and perform a sync with rake translation:sync.

TranslationIO.configure do |config|
  config.target_locales = ['nl', 'fr']
  # e.g., change to ['nl', 'fr', 'de']

It's easy if you already know the language codes you need. But if you don't know what codes to use, don't worry: we added a language picker to the Manage languages page of each project.

Change translation language

Pick your target languages

Just pick all the target languages you wish to have in your project, and we'll generate the line of code for you to copy/paste in the initializer.

Copy. Paste. Sync