Translation.io Goes Public Beta at ArrrrCamp

Since August 12th, the service has been in private beta with the people who had signed up and the collaborators they invited.

It has been two very constructive months! We got a lot of great and valuable feedback from 50+ new users around the world, who created 30+ projects.

Your Feedback

The overall feedback is very positive: people love the interface and how easy it is to integrate the gem in an existing app.

Some of them were already using a GetText-based workflow, while others just discovered it. Most projects still use YAML files, but we are happy to see there is a real interest in an easy GetText solution for Rails.

It was interesting to see that many projects use HAML or SLIM. Thanks to our beta-testers, we significantly improved the support of these two markup languages.

Production Use

Some projects have successfuly switched to our solution already, and we are very happy about it!

We would also be glad to help you with the setup of the translation process in your existing app.

What's Next ?

Every user on the private beta will get free access until July 2015 (6 months free).

Today marks the start of the public beta! And every user on the public beta will get free access until April 2015 (3 months free).

The Live Release is scheduled for January 1st.

Using HTTPS by Default

During the private beta, we asked our users to give us feedback about our application. And one of the feedback was something like :

Your application sounds great, but there’s no chance I’m going to sign up over an unencrypted connection.

And this user was absolutely right. We had planned to configure HTTPS... someday. But your security is important right now!

So, the right thing has been done, and now Translation.io uses HTTPS by default.

Landing page

This applies to both web pages and API calls. Don't forget to bundle update translation to take advantage of this.

The good news, for us, is that Google uses HTTPS as a ranking signal with a small indexation boost. So it's a typical win-win situation!

Translation.io Goes Private Beta

After several months of development, we are proud to announce that Translation.io is now ready to be beta-tested. Starting today, developers can translate Rails applications using either GetText or I18n YAML and our powerful translation interface.

Thanks to our landing page, Beta List, StartupLi.st and a couple of Facebook groups (1, 2), over 100 Ruby on Rails developers interested in better translation tools have already subscribed to our mailing list.

Landing page

All of these developers won the right to access our private beta + 6 months free when we launch (see planning below).

How to Test?

It's really simple: start by adding gem 'translation' to your Gemfile. See usage for more details.

Do you already have a multilingual Ruby on Rails application or website? Please try to add our gem, configure a project, and synchronize your app. It will only take 5 minutes.

If you add collaborators (developers or translators) to your projects, these users will also get access to the private beta. So make your friends happy by giving them 6 months free.

Planning

Our planning is the following:

  • Private beta: 12th August to 30th September 2014.
  • Public beta: 1st October to 31st December 2014.
  • Live Release: 1st January 2015.

Every user on the private beta will get free access until July 2015 (6 months free), and every user on the public beta will get free access until April 2015 (3 months free).

Featured Members

Do you own an amazing Rails application and are interested in using Translation.io? You are the perfect candidate to be featured on our home page. It would be free advertisement for you and a nice testimonial for us.

Interested? Please contact us.

What Now?

Enjoy free translation management and synchronization until July 2015. After that, we'll try, at any point, to be way cheaper than our serious competitors.

Please contact us on contact@translation.io or @translation_io if you need any help or any advice on how to make things better or easier for you!

Feedbacks would be greatly appreciated :-)

Working with Git Branches

Translating software with branches often leads to nightmares: conflicts on translation files, lost translations, double translations, etc.

Let's say your production branch is master and you are working in a-feature-branch.

With most existing translation syncing tools, if a translation string/key is removed from master, it will also be removed from the translation server. If a-feature-branch still needs it, it would be lost. And so you will have to re-add it, and re-translate it.

Our Solution

With Translation.io, it is a little bit different : translation strings/keys of all branches are kept on the translation server. Some of them are shared because needed by all branches, some others are specific to a given branch.

What About Really Unused keys?

When at some point, you know all features have been merged into the current branch, and you want to remove all keys that are not used in the current branch. Then use the purge operation that will do exactly that.

To purge your project's translations :

rake translation:sync_and_purge

The former operation will do a regular sync plus a removal on the server of all keys that are not present anymore in the branch from where you are running the rake task.

Temporarily Change Locale

Sometimes it can be very useful to temporarily change the current locale to perform an action and then directly switch back to the original locale. For example you need to deliver an email to a user in its own preferred locale.

Rails I18n ships with the I18n.with_locale method and Translation.io is of course fully compatible with it.

Here is a basic example of usage :

I18n.locale #=> :en

I18n.with_locale(:fr) do
  I18n.locale #=> :fr
end

I18n.locale #=> :en

And a real world example in a mailer :

class UserMailer < ActionMailer::Base
  default from: 'noreply@translation.io'

  def invitation(user)
    I18n.with_locale(user.locale) do
      mail({
        :subject => _("You have been invited"),
        :to      => user.email
      })
    end
  end
end