
Probably every product, the interface of which has more than one language, faced the problem of organizing the localization process.
In fact, this question concerns not only multilingual applications. When designing a feature, it is far from always that all the texts that are needed for it are worked out in advance; therefore, very often, developers use “draft” texts, which then need to be verified and, if necessary, translated into another language. Usually it looks like this: “well, you write something there for now, then we will correct it”.
In this review, I will describe my impressions of testing 7 online services for software localization and compare them by main indicators (see the table at the end of the article).
Disclaimer : this review does not pretend to be complete and objective. I decided to share my impressions of working with several services that I tested in the process of solving the problem of organizing the translation process in a particular Ruby on Rails project. Perhaps, for some, the minuses will seem positive and vice versa, it all depends on the process and personal impressions. Besides, I myself am not a translator and can miss some important points for them.')
For each service I will describe its key features in a free form, and at the end of the article I will make a small comparative table. All screenshots are clickable. Let's go!
Since
our application is written in Ruby on Rails, naturally, first of all, I drew attention to this service with the attractive slogan “Easy localization for Rails apps”. In general, this service already has a brief overview in the article
Ruby on Rails I18n: developer - develops, client - fills. The rest will be taken care of by the service , but I will still write my impression in order to make the review more holistic.
Looking ahead, I will immediately say that localeapp has one drawback (not the only one, however), because of which we refused to use it. The fact is that we needed not only to translate, but also to review our default locale. And localeapp marks all keys in any imported file as “Complete”. That is, after loading our default locale there, I saw that it was all “Complete”, and in order to mark it for review, I need to do it manually for each key! I even wrote to the developers about this, and they replied that they did: "... there is no way to complete the batch-mark complete locales as incomplete." For us, this means that we would have to set up a fictitious locale in the application, add unapproved translations to it, and transfer them to the normal locale as the review proceeds. Well, what can I say ... it's a shame that due to the lack of possibility of such a simple batch operation, the service may lose customers. And everything started so well, I liked this service.Translator Interface:
Key Features:- The service is focused primarily on rails-applications (but this does not mean that you can only translate them).
- There is a gem of the same name , which can be connected to the application and import / export locales with one command. Also this gem can push all missing translations automatically in the localeapp when the page is updated (by default only in development, but can be configured). Well, the most delicious: hemes can be run as a daemon on a staging server and it will automatically delay updates from localeapp at a given interval and apply them on the server, so that translators can immediately see the result of their work.
- Able to tighten and include in the list of translations language resources from popular libraries and all connected gems. The keys from the libraries are not charged, but their set is limited: devise / kaminari / rails v2.3 / rails v3 + a couple more.
- There are different key statuses, but there are only two: Complete and Incomplete. Also in the context menu there is a function “Mark for review”, but I did not understand what exactly it does. No visible changes occurred.
- Keys are kept in the history of key changes (without versioning texts, only the fact of the change itself).
- Has the ability to add to the project users with roles:
- Developer (access to all functions and locales);
- Translator (access only to translations and cannot create or delete keys). - Nice, pretty usable interface.
- The interface allows you to create new and delete keys (except for the Translator role).
- The search searches for the entry of the search string immediately everywhere: in the keys and in the translation texts themselves.
- It is possible to order a paid professional translation.
- There is free support for open source projects.
- There is a free tariff for small closed projects (up to 500 keys and up to 2 locales).
Weak sides:- There is no opportunity to leave a comment or a screenshot for the translation.
- You can not massively mark transfers as not approved. This means that the review of the default locale can be made only through the above-described life hack with a dummy locale.
- The scarce possibilities of the translation interface as compared to other services (although for some people a minimalistic interface will be more likely a plus).
- The main disadvantage for us: the official gem is very strange merjit transfers during the reverse import. At us he constantly rearranged lines (even if there were no changes in them), and also (what a disgrace in general!) Shoved pieces from one yml-files into others, so it was impossible to understand the changes after such an import. I do not exclude that this problem could be solved, but I didn’t begin to write to the caliper and to understand, because decided not to use this service for a combination of reasons. So just keep in mind.
Functionally very rich service, which is suitable for most projects. However, it may even seem to someone too overloaded with possibilities.
Translator Interface:
Key Features:- Quite a rich opportunity to work in the interface: convenient filters, group operations, etc.
- No coercion with default locale, unlike localeapp.com. All new imported keys have the “Unproofread” status by default, i.e. You can easily revise existing translations or mark them all as “Completed” through group operations.
- Many different key statuses: Completed, Unproofread, Untranslated, To verify, Hidden, Obsolete. You can also add tags to the keys. Perhaps enough for the implementation of any business process.
- The search is as convenient as on the Localeapp: it searches immediately and everywhere (entries in the keys and contents). It is possible to search by regular expression.
- A short accompanying text from the developer as well as a discussion can be attached to each key. A developer's comment is very useful when you need to give the translator a link to a page where you can see the context.
- Allows you to create your own glossary for the project (or copy it from another project). If the translated text contains a word from the glossary, the service will show its meaning and the proposed translation.
- Automatically offers word translation options from its Global Translation Memory. True, it makes it somehow strange: if the phrase is translated, then the translation option is offered only for the first word.
- Support of change history for each key (including translation text versioning).
- Has the ability to add to the project users with roles:
- Manager (access to all functions and translations);
- Translator (access only to transfers to specified locales and, optionally, the ability to approve transfers);
- Client (can only view translations and read / write). - Can import files from computer, by URL or via direct paste from clipboard.
- There is support for the emergence of new keys are not translated. You can configure the check period for the presence of new keys (daily / hourly) and indicate that you need to notify the translation team. Very convenient, in my opinion.
- There is also support for web hooks. After each transfer, the service will send to the specified URL a POST request with information about the transfer and its status.
- There is a cross-platform utility WebTranslateIt Command Line Interface , which allows you to perform basic operations (pull / push, etc.) from the command line.
- In their article Workflow Automation, they provide scenarios for the implementation of automated translation updates on a staging server. Unlike Localeapp, there is no ready-made solution here, but they offer to take as a basis their utility web_translate_it, written in ruby, and file the update as you need (examples are attached).
- In the presence of a full REST API .
- It is possible to connect Google Translate and Bing Translator for automatic translations.
- There is a free tariff for small closed projects (up to 500 keys).
Weak sides:- Download files only manually, there is no automatic synchronization with anything. Knows how to understand Github web hooks and tighten translations updates, but this is only suitable for public repositories and requires some specific settings .
- Slightly clumsy interface, makes some impression of negligence. But in general, everything is intuitive.
- No free support for open source projects.
- There is no possibility to order a paid translation through the service interface.
This service is not so rich in terms of translation as webtranslateit, but it seemed to me very worthy of attention. In addition, he, in my opinion, has the most convenient and flexible implementation of synchronization of language resources with the project (in particular through Github).
Translator Interface:
Key Features:- Allows you to integrate with the githaba and import all yml-files from there (both manually and automatically tighten updates from the repository when commits to the specified branch). Supports various import strategies .
- Allows you to push changes back to the github in the selected branch (this is done only manually, by pressing a button).
- When integrating with Github, it has a set of the most common watch patterns - masks for which you need to track changes in language files for projects on RoR, yii, CakePHP, Androis and iOS applications, etc.
- There is a heme for the purpose of updating translations in the application.
- You can add a comment and upload screenshots to the translation.
- There are two types of translation editor interface (classic and updated). I liked the updated one more (in the screenshot it was him). In the classical form, the keys themselves are not visible, but for some reason this makes me nervous. In the updated form it is convenient to use hot keys on the keyboard (only they need to be learned, it is difficult without them).
- There are various key statuses: Draft, Not translated, Translated, Reviewed.
- There are automatic LingoChecks , which help to find errors in translations. In the project settings, you can set the following inspection policies: a) check that all placeholders from the source text are used in the translation; b) checking that the number of line breaks in the source text is the same as the number in the translation; c) checking that the number of characters in the translation does not differ from the source text by more than n%, or that it is not more than n characters from the source text (very useful when there is a limit on the number of characters on the buttons); d) checking that certain terms from the source text are found in translation (for example, non-translatable names) - this is customizable. When exporting back, you can immediately see the status of LingoChecks and ask the translators to correct all the errors. It seemed to me a rather interesting feature.
- There is the possibility of group status changes in the keys.
- Support of change history for each key (including translation text versioning).
- Allows you to add users to a project by specifying their roles: Project Administrator, Developer, or Translator. For the latter, you can specify which locales it will have access to (optionally, you can also give the right to review / approve translations in this locale).
- There is a public API .
- Free for open source projects.
Weak sides:- Automatic push on githab implemented extremely vaguely! While I was trying to figure out the settings in the interface, I poured a bunch of commits into the repository, without knowing it, because nowhere is there any confirmation or indication that the process has begun, nothing. I only saw the result on the githaba.
- Overlooked with the search. Apparently they wanted to make it powerful and flexible , but it is not always convenient to use. For example, the text “site CMS” is searched for “site cms” and “site cm *”, but not for “site cm”. Not everyone will come up with stars.
- There is no free fare even for small commercial projects. But the minimum plan of $ 4.99 per month.
- There is no possibility to order a paid translation through the service interface.
A fairly well-known service for localizing applications, but, oddly enough, its capabilities are inferior to counterparts. Often it is used to translate Open Source projects.
Translator Interface:
Key Features:- Comments and instructions can be added to translations (by "instructions" apparently means context description).
- You can add proposed translations (suggestions).
- The change history of the keys is, but it is kind of strange. No matter how much I changed the translation, only one record remained in the history.
- You can create your own glossary and the system will recognize the terms from it in the translated text and offer a ready-made translation.
- The following translation statuses are available: Untranslated, Unreviewed, Reviewed.
- There is support for tags in keys, incl. a pair of reserved tags "notranslate" and "locked", which respectively do not allow the translator to translate (only copy the original) and generally do something with the key.
- Possible group processing of keys. With batch processing, there is a “Find and Replace” function, which can be useful.
- Notifications of users about any events are supported (but it seems that there are no notifications about new, not translated, notification keys).
- There is a Translation Memory mechanism that remembers previously translated words and may offer their translation in the future. Translation Memory can be shared between multiple projects.
- It is possible to add users with different roles to the project and combine them into teams:
- Organization Administrator
- Project Maintainer
- Team Manager
- Language Team Coordinator
- Reviewer
- Translator
More information about the role assignment can be found in the documentation . - You can order a professional translation from one of the two available vendors by selecting the project and the target language.
- There is a console utility that allows you to perform basic functions (pull / push / set / delete etc.).
- Support for external machine translation services: Microsoft Translator and Google Translate.
- API is also present .
- Free for open source projects.
Weaknesses :
- Only manual download of files one by one, auto-update is possible only through a public URL.
- You cannot edit the primary source language online. Directly and it is written: "Unfortunately, you can't edit the source strings online ...".
- I could not add any languages ​​other than English, French, German, Portuguese and Spanish in the interface. How to add Russian, for example, I did not understand. UPD: NightOrion in the comments showed me where this function hid: http://habrahabr.ru/post/229031/#comment_7761613
- The inconvenient translation editor is the main workplace. It is rather on the level of personal feelings than something objective. It seems to be all there, but uncomfortable. I'm closer to the tabular view “a la Excel”, but here you need to select a phrase in the list on the left, and on the right a translation window with additional functions appears. To see the key that corresponds to the current text, you need to go somewhere.
- In the search you need to specify what I want to search: text, key or something else. By default, the search phrase is searched only by the translation texts. This is not convenient, it is more usual to just type in a phrase and see all the results.
- There is no free fare even for small commercial projects.
Translator Interface:
Key Features:- You can specify the “translation style” for the project: formal / informal or not explicitly. You can write comments on the style for translators. I found this feature interesting, because to translate the same words into many languages, different words and turnovers can be used, depending on the accepted style of presenting information. In addition, it probably helps to better coordinate different translators.
- You can specify how many times the translated phrase can exceed the length of the original, and whether the translator can slightly exceed this value.
- Optionally, you can activate a vote for transfers and set the number of votes that the transfer must receive in order to automatically establish itself. This is usually practiced for open source projects.
- It is possible to add users with different roles to the project:
- Translator (can translate and vote for translation)
- Reviewer (same as Translator, but may still approve the translation)
- Moderator (the same as Reviewer, but can still modify and delete translations). - The following pairs of translation statuses are available: Unfinalized / Finalized and Unapproved / Approved. When exporting ready-made translations, only keys with the “Approved” and “Finalized” statuses will be included in the file. Translators can still edit translations in the “Approved” status, but can no longer edit anything if the key has moved to the “Finalized” status. More information about statuses and their meaning can be found in the help .
- You can leave comments to the keys.
- Search normally looks for both keys and texts.
- You can order prof. translation with the following options:
- Only not translated phrases.
- Only not approved phrases.
- Phrases updated since the last order.
Machine translation is also available (Google Translate and Bing), which, of course, is much cheaper (but still paid!). You can also optionally order another reviewer for completed translations (+ $ 0.05 per word). You can accompany the order with your comments for translators. - You can create your own glossary, but you cannot add translations directly in it. But the words from the glossary will be highlighted in the text during translation, and if you click on them, you will be asked to add a translation of this word.
- Ability to add users to the project with roles:
- Moderator (can translate, vote, approve or modify translations)
- Reviewer (same as Moderator, except for changing translations)
- Translator (only translate and vote).
For each user, you can specify which languages ​​he should have access to. - Projects are grouped together (Project Group). A group of projects may include projects for the translation of various entities: App Store Description, Mobile App, Website / Web App, Game, Help Desk (Freshdesk), Document. After selecting an entity, you need to specify its type. For example, for the “Website / Web App” they will ask you to choose: Regular Website, Regular Web App, Facebook App, Others.
- Automatically warns if there are no placeholders from the original in the translated text. To make it easier for translators to understand what this placeholder means, you can add a description to it, which will pop up when you hover over the placeholder text in translation mode.
- Competitive moment: all achievements of translators are recorded. You can get one of the following achievements in four categories: Newbie, Apprentice, Expert, Master, or Guru.
- API is traditionally present . There are ready-made wrappers for PHP, Python and Ruby.
- Free for open source projects.
- Free for private commercial projects with up to 5 collaborators (seats). On the pricing page it says that it used to cost $ 69 a month, and now it's “Free.” As you want, and understand.
Weak sides:- Only manual file upload. No integration and automatic updates.
- Sometimes strange work with combinations of pairs of statuses. You can make a translation such as "Unapproved", but at the same time "Finalized". In this case, it will not be possible to edit it.
- Unusually for me, the ability to add screenshots to keys is implemented: if everywhere you can do it right away when translating a phrase (on the same screen), then you need to go to a separate section where you can download screenshots. After downloading a screenshot on it, you can mark areas and indicate which key corresponds to the marked area. The original idea, but it seemed to me inconvenient, so I took it to the minuses. This service, by the way, is not the only one where this approach is practiced.
- Endless confirmation of even reversible actions (pop-ups like “Are you sure ...?”) Is terribly annoying. In general, the interface does not hesitate to show at every opportunity loaders, faders, and other indicators of hard work that exist there, which creates the impression of some kind of service deceleration. In addition, the interface is often podglyuchival.
Translator Interface:
Key Features:- It is possible to organize inline editing of translations of web applications directly in their interface. To do this, you need to create a dummy locale and insert a small JS code on the site. Then, when you switch the application to this locale and login to CrowdIn, the user will be able to click on any line on the site and enter its translation.
- Pseudolocalization feature. It lies in the fact that the service generates "translations" that should help identify how ready your application is for localization. New lines are generated randomly by one of the available presets (the essence of the presets in emulating the use of the French, Cyrillic, Chinese, or Arabic alphabet). You can specify by how many percent new lines will be longer or shorter than the existing one (to understand, for example, whether there is a margin for the length of a line in problem areas, such as buttons and table cells), and also use special symbols to replace existing translations (to check how correctly your application will display, for example, Chinese or Arabic texts). In general, a cool thing for those who have the time and desire to do it.
- The ability to use global translation memory in their projects. The Translation Memory mechanism is trivial for this kind of services: it works either cross-project or within one specific project. Memory can be filled as automatically as it is being translated, or by importing pre-prepared translations.
- Able to show suggestions from automatic translators (Microsoft Translator and MyMemory) in the translator interface.
- You can create your own glossary for the project. Optionally, you can give translators the opportunity to replenish it (by default, the project owner, manager and proofreader can do this).
- Basic export settings: skip not translated lines; export only approved translations; automatically fill in non-translated regional dialects from the source language.
- There is a history of revisions of the base files with the ability to roll back to one of the revisions.
- You can add users to the project with the roles Translator and Proofreader, or invite professional translators. Each translator has a summary of his performance and activity in the project.
- You can remove from the project all the actions of one specific translator: translations, validations or voices - I have never seen anything like this anywhere else!
- There is a system of internal communications between the project participants and the ability to create general discussions for the project.
- It is possible to find and replace the word in the current file or the entire project.
- You can hide some of the keys to translators.
- There is its own commandin-cli utility.
- Web hook support for notifying external services about changes in translations.
- There is a public API .
- Possibility to order prof. translations directly in the interface (5 sources available).
- Free for open source projects.
Weak sides:- Search searches only for text and translation, but not for keys. , , .
- - , . Those. en.yml, , , , «en.yml». , .
- .
- ( , ) , oneskyapp.com. , .
:
:- , - -. , , , «Edit» . - .
- phrase .
- ( , , ..).
- . / . , «activemodel.errors.*», «number.format*», «number.currency*» .. , «Ruby on Rails» .
- , .. .
- .
- , .
- .
- Translation Memory, .
- : Untranslated, Unverified, Verified.
- (Google Translate).
- , . , , .. «User is a manager», .
- .
- . , :
— .
— «» («voice of your brand» — , ).
— (, , ).
— .
— -.
, , . - Possibility to order prof. translations directly in the interface (via gengo), selecting the quality of the translation (Professional / Standard), as well as specifying its desired style (one of the previously created manuals). There is also an option that allows you to mark a paid translation as not approved by default.
- There is an API .
- There is a free tariff for very small commercial projects (up to 150 keys).
- Free for open source projects and educational institutions.
Weaknesses:Oddly enough, but this is probably the only service that I will not write anything in this section. Yes, some features are simply not there, but everything vital is available and is quite conveniently implemented.Comparison table of services by main indicators
* - of course, the source codes of the localeapp gem are open, and you can see everything there, but at least I haven’t found any public API documentation.** - something similar can be implemented in your Ruby-on-Rails application, for example, through the i18n_viz gem . He knows how to display keys in the front instead of translations, and also immediately show a direct link to edit this key in the translation service (see the description of the heme).A full description of the capabilities of the services would take a lot of time, so I stopped only on the main points. My small review does not pretend to objectivity, since we chose the service for a specific project and workflow, but I hope it will save someone time when solving a similar task.I considered services more from tz. programmer and ease of integration with them. I would like to receive comments from translators on these or similar services in the comments, so that, so to speak, look at the question through their eyes.PS And yes, I am aware that there are actually much more services to limit online translations, but I did not want to overload the article. Services such as, for example, ackuna.com and www.ibabbleon.com, I did not include in the review, since they are not intended for self-localization of software. In the comments are categorically welcome links to interesting services, which I have bypassed my attention. If there are enough of them, I will sip the second part of the review.