Discuss Home · Bootstrapped Podcast · Scribbleton Personal Wiki · HelpSpot Customer Service Software

LocaleData: My first SaaS, built for myself


I’ve deployed my first beta version of LocaleData.com - a simple translation management platform for Ruby on Rails apps. It allows developers to import their existing project translations in YAML file format, invite teammates and translators and work collaboratively on project translations.

I’m a full-time software engineer. In our company, we are developing another SaaS app and we are deploying an isolated instance for every customer. We have two pain points: (1) Default YAML files with translations are best for computers, good-enough for programmers, but terrible for translators. And (2) we need a centralized solution for multiple deployments (not a per-deployment-in-database-thing). Yes, there are some other solutions, but they have more features (which we don’t need) and they are too pricey to store and edit just a couple of kilobytes, in my opinion. So, I built LocaleData :slight_smile:.

Why donations instead of subscriptions: To make it legal in my country I would need (A) something like a trade licence (easier to setup, but the liability is not limited, I had to put up all my possessions as a guarantee - and I am afraid to do so) or (B) to create a company (this is a lot of bureaucracy and unnecessary expenses just to try it). So I decided to make the beta version free and… We will see.

I’ts my first public SaaS. I’m building it mainly for my own needs, but it would be awesome if it helped other developers, too. It has only the basic functionality, but I’m constantly developing new features.


I’ve worked with 2 companies previously where this would have been very helpful!

The biggest issue we always faced was the translators were not technical, so could too easily mess up the formatting or variables if given direct access to the yaml files. Looks like your app fixes that - good luck with it.


Thanks. Yes, exactly! In LocaleData, you can give project members different access rights. One of the available roles is a translator, who can only edit the content - not the translation keys.


Nice work. Good idea to concentrate on one specific programming language/file format. It makes marketing easier, because you’ve chosen a specific niche.


This definitely looks interesting. Based on past experience with Sifter, I definitely think that localization is a great potential channel for expanding markets. I don’t have anything to try it on at the moment, but the concept seems attractive.

The only potential challenge that jumped to my mind is version control integration. Uploading/downloading feels problematic. (If I’m understanding correctly how it works.) But if this could tie into source control with versioning and update through Git, that would make the workflow less error-prone. Maybe if it used a “translation” branch that could be reviewed and merged, that would be pretty powerful.

Another random thought/fear I’ve always had with translations is accuracy. I’m not sure if it’s possible, but it would be great to be able to review translations with Google Translate. That is, someone does the manual translation, and then Google Translate takes a stab at it for reviewing before committing it and making it live.

These are both probably pretty significant changes, but they’re the type of thing that would really grab my attention for using this in a production workflow.


Thanks! I would like to create a ruby gem to pull/push the translations from a command line. Personally, I don’t like the git-idea. As a developer, I want to add a translation key, test it locally, edit it, etc. and then tell a translator to fill in other lagnuage versions. I don’t want to run “git pull” to download it each time and I don’t want it to mess with my git repo.

I have a “translate using Google” button on my todo list :slight_smile:, but the opposite direction (review using Google) is a nice idea. Maybe in the future…


You are responsible for all damages your product causes nevertheless, even if you don’t charge for it.


Software EULA usually (always?) contains clause that author is not responsible for damage. However, authors are responsible if the damage is intentional e.g. software contains malicious code.


At least it doesn’t seem to be so trustworthy if it’s donation based :smiley:


And if we get enough donations, it can stay free forever.

You’re almost asking people not to pay you.

Donations are a sign of desperation to ever make it a product worth paying for. I always hesitate to use donationware because if the author doesn’t believe in themselves, why should I believe in them?

Fine, you do not want to add payments at this point - then just call it “beta”. Remove that begging for money, it won’t make you any noticeable profits.

Besides, the service is EFFING useful, and not only for that kids toy RoR - even in large boring corps they have to maintain the translation files for more respectable platforms such as .NET and Java and how do they do that? Why, in Excel files, of course! (Please detect some sarcasm about toy and respectable here). So your service has a potential to expand to other platforms too - you will have to add import/export formats, of course. What I am saying is: get real - this can become big, get rid of that donation stuff, and make a long-term plan to get to more users and profitability.

Good luck!


Microsoft has the Multilingual App Toolkit which does this kind of work already. It can perform machine translations but also makes it quite easy for developers to work with external human translators as well. The definition files are XML. It does make use of the Azure translation services for machine translation, although a free account gets you about 2 million translations per month.

Apart from alerting you to an existing solution, you might also be able to automate the machine translations and offer that as an extra feature. I’ve already automated a lot of the work for machine translations in my own products to suit my custom needs - it’s fairly easy as it’s just XML at the end of the day.

See: https://www.microsoft.com/en-us/translator/mat.aspx