How complete should a translation be before it is included?



We have an amazing amount of translations for F-Droid thanks to the community. Here is a list of over 50 languages we’ve been translated to. Most are almost completely translated, but some are only partially translated.

For those of you who use apps in their native language, how complete would you like to see a translation before it is included in F-Droid client? Is an app that is 25% translated (with the rest falling back to English) better than an app fully in English? Or does it look unprofessional and buggy if only a small amount is translated?

If we introduce a policy saying “Translation must be 75% complete to be included” would that be a good level at which to include translations into the client?


It is worth noting that given the current translations, the following languages would be excluded based on a 75% cuttoff rule:

[Percent translated] [Language code] [Language name]
0.3 ku Kurdish
5.1 mk Macedonian
8.4 ur Urdu
13.0 sl Slovenian
17.5 ug Uighur
17.8 lt Lithuanian
23.6 ta Tamil
28.7 sq Albanian
29.3 lv Latvian
42.1 hi Hindi

While the following would remain (but Burmese would likely get dropped as soon as some new strings are added to the client):

[Percent translated] [Language code] [Language name]
75.1 my Burmese
78.4 gl Galician
85.4 hu Hungarian
86.3 vi Vietnamese
89.3 bg Bulgarian
89.6 ro Romanian
92.4 he Hebrew
94.5 fa Persian
94.8 ko Korean
96.9 th Thai
97.2 et Estonian
98.4 pt_PT Portuguese (Portugal)
98.4 zh_HK Chinese (Hong Kong)
99.0 da Danish
99.0 hr Croatian
99.0 zh_Hans Chinese (Simplified)
99.3 ast Asturian
99.6 sn Shona
100.0 ar Arabic
100.0 ca Catalan
100.0 cs Czech
100.0 de German
100.0 el Greek
100.0 eo Esperanto
100.0 es Spanish
100.0 eu Basque
100.0 fi Finnish
100.0 fr French
100.0 id Indonesian
100.0 is Icelandic
100.0 it Italian
100.0 ja Japanese
100.0 nb Norwegian Bokmål
100.0 nl Dutch
100.0 pl Polish
100.0 pt_BR Portuguese (Brazil)
100.0 ru Russian
100.0 sc Sardinian
100.0 sk Slovak
100.0 sr Serbian
100.0 sv Swedish
100.0 tr Turkish
100.0 uk Ukrainian
100.0 zh_Hant Chinese (Traditional)


I see it from this perspective: translations are most useful for people who don’t speak English. So it’s the best to include every translated piece, independent on how much it’s translated.


For anyone interested in following localization as a development topic, see:


For lots of people, seeing an app that is partially translated will make it look like a bad app, or that the developers don’t care about people who speak that language. For example, there are over a billion people in China who read and write the same written language. For most of those people, every single person they have ever encountered can read and write Chinese. So to see an incomplete Chinese translation looks like someone barely tried.

When I traveled in China, it was normal to them that I didn’t understand them when they spoke. There are many spoken languages in China. They would then switch to writing for me to understand, and were then totally blown away when I could not understand it. They looked at me like “how on earth did you get here if you are a complete idiot”.


“Lots of people” does not conform with “partially translated”.

Multiple variants of Chinese are in fact completed to the tune of 99+%.

You seem to have 99.0 zh_Hans Chinese (Simplified) problems, completeness not being one.

Having been in China to fail noticing for example Uyghurs and Tibetans are not the same, or the difference between the many different written languages they could confuse you in, it is hard to tell where arrogance being blind to the blindness of ignorance start and end.


In my opinion, the quality of F-droid strings, even upstream, isn’t, and hasn’t ever been, good.
There being a will and a way to get away from that, the same rationale is presented there.
Upstream errors and oversights carry into translations, so short of any special (and only local) efforts, it is all bad.

What makes things better is people looking at strings and then changing them.
People > Tools > Changes
I dare say the rigorous adherence to fear and perfect theory is the ultimate barrier in the way of that happening.
If that wasn’t also part of the problem, it could not stagnantly sustain itself.
But the question was asked, and that is good, so here we go changing it.

Ideally everything would be “done”, and peer-reviewed. Yes, but how would it get there?

For a variation over the theme “done”, it could be a percentage. Sure.
In this case, largely an unchecked one, and one that sounds high.

It could for the case of argument be all erroneous, potentially malicious, and when not wrong, doing nothing in plain view.
Or even a inconsistent mix thereof. Like the argument of “policy” is in this case.

Translations with more translators, (assuming a fixed quota of attracted translators, each assumed to finish an equal amount) have their work included, whereas those for smaller ones, at a certain cut-off, depending on percentage, do not. That in effect means treating a language of few extra speakers, vastly different.

It makes any n%-1 translation effort, for reasons why it is made, worthless.
And in doing so, I think to the inherent effect of taking it to n+1%, longer.
To get to the magic number, you start out short and having to learn what it is.
Short of a feedback-loop, working in the dark on strings without context, nor explanation, relegated to a long tunnel of the same darkness.

100% is not a more magical number.
100% sounds a lot less good signifying potential chaos.
Not making the distinction means pulling it out of a bag. A bag that may have a sweepingly good idea of how to generalize, but a bag nonetheless.
Were you to pull it off your head, you would notice it having been a box all along.

So I care, true, I care a lot.

Even so, what is the issue with going the opposite way?

Acknowledge some languages are 1. Smaller 2. Don’t have people that care.
And ask for help to fix it. How?

Meritocracy in effect. If at present you can make your written English complaint heard, you can help by doing. Your problem, your solution.

Engaging with translators is most easily done through what-you-do-is-what-you-see.
Any translated string is for the better. The more immediate the better.

If it proves a problem, and it very seldom is, and at that, easily corrected,
or, if for some reason proving to be a problem, thwarted by imposing two rules:

  1. New accounts can only suggest.
  2. To edit you need to be verified by a manager. Same place of trust where it resides now, making a chain of it. Not perfect, but certainly better than faith in high numbers.

Noticed now, a point still amiss.

To the premise of it being noticeably halfway done, well.
That would be the impression you get from any translation, by looking at the project listings, which are all in English.

We imply here the user is already in f-droid, without having seen the untranslated website, and it does not go without notice, even for the bigger languages, the language used to introduce other programs in one which purpose is to acquire them, and we worry about consistency, for a smaller group of people, most of whom would be delighted to see something in their language, the system-language they picked.

Let me ask why the user wouldn’t feel "what am i doing here - if the program thinks my language isn’t important at all, or in part. It spells danger, all the same, now. It is a call to action for others. Going with status-quo does not get the ball rolling.

The winning move is to fix or not to play. I would make a theatrical play on the play store, but it had no plays in store for me.
The more people seeing errors, the embiggened the chances of someone fixing them. Good.
Imposing a fixed level of translated strings, is no way to get away from it. What could have larger impact than pushing more strings into upstream, only to remove a language entirely from one version to another, for languages that don’t meet it? What kind of signal does that send out?

While the level at which language is commanded and language by, is not exclusive to F-droid, expectations overall are no worse than similar. Language in comparable programs, will stand out once people stop noticing the language used in F-droid. Bonus.

Problems play out one of two ways, and not without issue either way. But it pans out much better when size works in your favour, rather than to discourage even small efforts:
A small problem will be better off getting some traction, rather than slipping away at nothing.

Faced with only the extreme of those options, over learning an entirely new (included, likely to be bigger,) language, it is more important to get basic usability, rather than for others to have a better native experience, or much less inconvenient option, of merely changing the language.

So lets deal with what we have, and get professional down the line. A self-enhancing prophecy.

Work towards fixing inconsistencies, by working, rather than avoiding them, by avoiding work.
Take the meta of work to working levels.

Point all people to translation, from everywhere. The website, F-droid, blog, IRC etc.
Starting with knowing when strings go live. For all.
“You have * days until string-freeze.” being the crucial bit, with room for improvement to be had.
A guide on how to download alphas to see live work before anyone else does. That empowers people without asking of them to build F-droid, to solve their issue without putting it on others.

Language is another way in which F-droid can be, and arguably is, superior.
It is not as if there are languages too small not to increase the user-base and the effort overall in a meaningful way.

Translations hinge on the premise of; more people doing light work of things lighten the load.


Distinguishing the requirements and prioritizing will probably provide motivation to translators to at least reach that level and get those done.

Alternatively, maybe instead of just going with an overall percentage, some key elements could be identified and if those are translated then the language can be included.

For example, a translation for a language could only be 40% complete, but if 100% of the core parts are done, then it can be shipped.


That is a good idea so that you have a tool to prevent something in plain sight from ruining your 80%+ effort. The same goes for putting those first in the resource to be translated.

However, doing all plain sight things, and not the harder, menu stuff, is an arbitration as arbitrary as any.
It isn’t that someone tried to help you to ability. Quotas are the distinct feeling that someone tried to trick you, because their idea of order is more important than you understanding the program.
Possibly by auto-translating a lot of the easy stuff.

Why are you then not encouraging putting in lower quality stuff, only to meet a quota?

To make the argument of why smaller languages have smaller expectations, for someone who speaks none.

You would not accept broken English from an English source, like a poem.
Whereas the menu of a restaurant in the decidedly non-English part of the world, will get the point across no questions asked, regardless of correctness.

It is desirable to be the best for all people, but sometimes you are the restaurant menu. Whether F-droid is the restaurant menu, I’d only partly agree. If so, and to the extent that it is, certainly no better than that.

So by acknowledging this, we are serving more people with something comprehensible, so that they can order not food, but software, without, or with the least use of a dictionary or trial and error.

The rougher it gets, the more chance of someone helping out to fix it.

The network effect of which is, bugs have nowhere to hide, and annoy the least.

Lets say day 1, F-droid wasn’t available in German. Bad, but OK since it is new.
Then 0.1 comes out. Is it now checking the box? Perhaps.

We are still in this slump for many languages. And the policy of doing something about it, would be new.

Bringing in more people, however possible, is the policy. The problem is fixed before one would otherwise be done arguing about how to solve it.

Lets call it a restaurant. Would be nice if everyone had cutlery and a plate, maybe even a glass.
Some get theirs sooner, and figure out how everyone gets a matching set.

The smaller tables would benefit from knowing everything they have figured out.

You have to go to the English table, get supplies, flip everything over, then put it down on yours.
Some things are arranged in non-logical and inconsistent ways, that is all on the clientèle to figure out.

Now the English table tells every other table they can’t start drinking, nor eating, until they have 3 out of 4 items.
People that were only drinking, have their glasses confiscated. They are told to go to the English table.

Some people haven’t eaten in a long time, they are told it is OK since their table is smaller, and that bigger tables are available.

At the English table you can’t do anything without saying “Please”, they have many such conventions.
The menu is still in English, but knowing the names of some things, they can still be found.
Just “search” or point to the page-names, only those are now incomprehensible.

This wasn’t the “upgrade” they had hoped for. Some figure out the old small table is still there. It has known bugs on it, but some of them don’t know. They are either people that don’t know what “upgrade” is, or people that have come to know it as bad.

Some people at the English table are talking about what a great time the people that are struggling and having left for other restaurants or turning away at the door are having.

-Now they understand nothing, consistent that.
-Yes! Pass the finest wines known to humanity.


I’m confident one of the main reasons for quotas is because a more qualitative approach is difficult in a project where we have such an extremly small team. Despite this, we have an awesome set of translators who have translated into so many languages. However, given the size of the development team (e.g. no more than two or three people at any one time) we are unable to verify the integrity of translations, because the two or three of us don’t speak the >40 languages of our translators.

Having said that, I think this discussion is heading in the right direction, trying to find a good solution to the goal of high quality translations.

The tool we use (Weblate) has three features which can help here:

  • Minimum number of votes before accepting a translation.
  • Assigning priorities to translations
  • Showing sceenshots next to each translation

The first one could be implemented for languages where we think there are many translators who contribute. The second could be done too, but would require some consideration for how to do it in a maintainable way. The third is difficult, but in the past I’ve had a thought of how to solve this.

For the last one, a side project of mine is to build a tool which:

  • Takes an XML dump of the current screen on an Android device.
  • Finds any English language strings.
  • Takes a corresponding screenshot image.
  • For each piece of text it found, draws a border around that text, annotates it with the key of the string, and uploads it to Weblate.

I didn’t get very far, but once I’ve finished some other projects I’m working on in my spare time, I would like to revisit this.


@tetris4 I like that idea, seems like we should require the main navigation elements be translated for it to be included, in combination with some minimum percentage. 70% seems like a good minimum. As long as we make the rules clear and apparent to the translators, that gives them the control of when the translation should be included. For example, a translator could deliberately not translate the main elements until the translation was 100% complete and reviewed to prevent an incomplete translation from being included. Or vice versa, they could immediately translate the required elements and the easiest strings just to get something included.

@pserwylo For that, you should check out fastlane, it has automated screenshoting for every supported locale. Basically, you write something like emulator tests, and fastlane runs the tests in the emulator and screenshots them all.

@kingu We need to recognize that how people perceive incomplete translations is very different depending on culture. In many cultures, incomplete is better than nothing. In many other cultures, incomplete means its bad software that they shouldn’t use. And please stay civil here, calling people ignorant is not helpful. Regarding Tibetans, yes, Tibetan is written in its own alphabet, but most Tibetans are literate in Chinese also. I don’t know about Uighers, but they are less than 1% of China’s population. Yes, there are twice as many Uighers as Norwegians but China is huge.


I think this is a case of not being able to do it right, and then doing “something”, rather than nothing.
What I tried to do is only challenge some preconceived notions, and procedural fallacies.

My over-explained point being: Some cultures are like that, to the detriment of others within those realms.

It isn’t the numerous/large languages/locales/dialects/variants that are the problem, those are covered.
To the opposite effect, small/unpopulous/rural areas are not, and their efforts should count for more as a result.

To the effect of a flat cut-off rate, they are left out, when they would feel most included with even some local content. Any examples appreciated documenting the contrary.

It is in this assumed consensus i argue the limit to make overall sense at 0%+

The ability to use a program should count for more than just about anything else.
And to that effect, every little bit helps. Even if it just shows some modicum of effort, to give the user a something alluding to a native experience.

I can attest to how us flurgs, feel most overjoyed by any international mention, correct or not. It isn’t that special to an American or German seeing one of their cars abroad, and it is self-evident that either have some history founded in those. If i can get the acknowledgement of referencing a swedish-chef, as a norseman, so that people know what page we are on, that is good enough. Step one is getting somewhere.

I think people who don’t expect highly of someone else, when it is their own translators, and more importantly their own effort that can amend things, should not be catered to over those who rely on what little common ground there is, perhaps to the ignorance of the governing party, and try to build on that.

Only languages with an abundance of translators impose checks on themselves, and in due course, smaller languages get there as-well.

Post-1500 Occitan is a language I translated quite often. It doesn’t have a lot of speakers, but I assume they, or that person, is trying to keep the language alive, in the transistor-age.

Without fail, projects with many translators, without any internal quality checks, exhibit far worse quality and consistency than those that are the work of few. As such, it is a problem that engulfs far more people, since it gravitates towards bigger languages, with more coverage. 100% as it were, where they will most often sit till someone comes along to change things, or steps in to manage things. A job that can easily be more arduous than starting afresh.

So quality measured in % is either swing or miss with few translators, finds a base level and a trend towards “completion” as more come in, and only approaches any finality when individuals help out, or there is already an inter-lingual team in place.

Mandated percentages, have to my knowledge never done anything. Harmful tampering is extremely rare, and not prevented by it.

What I think, is if you see regional content, you will be more happy than aggravated at its shortcomings, and in the case of the latter, will feel inclined and empowered to help.

So asking nicely and pointing that out, rather than imposing barriers, is a nice way to help the situation.
Whether or not barriers are imposed isn’t the crux here, it is largely irrelevant. The project is small enough for one person to finish in a few hours anyway. The point is engaging with the audience, by any means possible.


Allow me to also infer the nature of those for whom British English is the native tongue. Not English enough?

However minute the differences may be, they are important enough.
Enough so that every other English-speaking region has their own locale.

So even for speakers of the Queens English, having those few differences present, makes for a wholesome experience. Having to copy other strings verbatim, or even look through the rest, to meet a quota, is a point not worth making over just wanting to correct just the one string. A point worth making indeed.

If you just drop the whole file in, then where are other translators meant to look for other inconsistencies, or even know which ones made sense to change?