Hello, fellow fedizens! My name is Anna, I proofread Russian Mastodon translations in my free time. I’d like to share some pain points that I as a translator have to face.
- Plural forms are not the same across languages. In English,
{count, plural, one}always means exactly “1”. In Russian, it also means “21”, “31”, “41” and so on (see Unicode CLDR for the full list). Always use{count, plural, =1}when you mean “exactly one” because Crowdin doesn’t allow us to change it ourselves. - Always use plural forms with numbers. In English (as in a typical analytic language), there is no difference between “I’ve got 4 apples” and “I’ve got 5 apples”, so a developer can feel that plural forms are not necessary here:
I've got {count} apples(count != 1). But in synthetic languages it matters what the number is to choose the correct form of the word “apple”.
If the variable is included in the source string, I can add plural forms myself (example), although it’s not obvious and unfortunately not possible with Ruby strings. If the variable isn’t included (like “Followers” or “Active users” followed by a number), a good translation is not possible at all. - There is a huge problem with
{name}placeholders. A user always enters their display name in the nominative case, which is not a problem for English, but for languages with many grammatical cases this is a massive pain. For example, there is a person whose display name is “Саша”:- to form the possessive form, I have to use a clumsy and unnatural sounding construction: “Профиль пользователя Саша” (“Profile of the user named Sasha”);
- same with the genitive case and other oblique cases: “Заблокировать пользователя Саша” ("Block the user named Sasha);
- even when the name is in the nominative case, there is another problem…
- In some languages verbs have a grammatical gender. I try my best to include both forms (e.g. “Саша подписался (-лась) на вас”) but when it’s not possible I often fall back to “This user” because it’s always masculine.
- I have no option but to include the name. If I remove
%{name}from my translation, CI will fail because of mismatched placeholders. It’s a lot easier for me when there are@usernamesinstead of display names because unlike names they are immutable. - Frequent redesigns and renamings drive me nuts! When something is renamed, good translations are often lost and replaced by awful machine translations that drive-by contributors copy verbatim. I have to recover good translations from Translation Memory or even Git history.
- There is not enough screenshots and context. Volunteer translators have to use Git to find the context themselves and post the link to the relevant PR in the comments. Proofreading is severely limited unless you have a staging Mastodon server with the latest (preferably nightly) version as a testing playground.