Speakap Support

Translation guide for Mobile

This guide can be used by translators who localize strings for the Speakap mobile apps.

We're listing a few tips that help avoid common mistakes, and describe how we work with strings at Speakap for mobile.

Common mistakes

  1. The original strings are in English and Dutch. If you are translating from another language, please also check the original string. (otherwise you might make the same mistakes, as in the translation you're using)
  2. Placeholders should use the format of iOS: %@, %i, %1$@, %2$@, %1$i, %2$i etc
  3. The number of placeholders should not change (in all translations of a particular string). You should not add or remove placeholders when translating.
  4. The type of the placeholders should not change (for instance %1$@ vs %1$i)
  5. No extra new lines. Don't place a new line at the end of the translation. New lines will be displayed in the apps. (in some very rare cases it's acceptable to add a new line, but only if you also see it in the English translation)
  6. If there are more than one placeholder in a string, use indexed placeholders (for instance, "%1$@ ... %2$@" instead of "%@ ... %@"). Please don't mix non-indexed and indexed placeholders in the same string.
  7. The order of placeholders is important. You can change their order in your translation, but please don't forget to use the right indexing (for instance, after swapping it could look like "%2$@ abcd %1$@")
  8. You are allowed to use special punctuation, if necessary. For instance, in Chinese you can use " 。" instead of the western period "."
  9. In some strings, the position of a placeholder should not be changed (usually at the end). For instance: "%1$s has mentioned you in an update: \"%2$s\"" - In this case you should keep %2$s at the end, because we will insert a long text there (citation).
  10. Don't insert unnecessary whitespaces. There is no need to add a space between a placeholder and a comma, for instance ("%@," is ok)
  11. Plurals - the different plural forms (cases) should be all filled with appropriate translations. Duplicates should be avoided when possible. Plural forms should not be left empty.

Additional notes

  • When you are not sure what the original string means (or what it's used for), please contact us by writing a comment
  • If you see that a placeholder is colored in red, most probably it contains an error, so please check it.
  • If a translation is marked "Fuzzy", it probably need attention (maybe we updated the original string in English/Dutch) https://poeditor.com/kb/fuzzy-translations
  • If you would like to verify your translations in the actual app, let us know!


First steps


We use them to insert various text or numbers (names, whole messages, dates, counts... etc). Normally you should not change the placeholders from the original ones in English/Dutch. However, it's still a good idea to be aware of the rules. You are probably already familiar with these rules, as they are standard:

  • Indexing - In case there is only one placeholder in a string, a non-indexed placeholder can be used (%@, %i). In case there are multiple placeholders, you must index them (%1$@, %2$@ or %1$i, %2$i etc). When using indexed placeholders, all placeholders must be indexed in a string.
  • String vs number - we use different placeholders for inserting strings (%@, %1$@, %2$@ ...) and numbers (%i, %1$i, %2$i ...).


Plurals should be used according to the language. Most languages have only two cases: "one/other", but many languages have additional ones: "one/few/many/other". You should avoid duplicating strings for these. It's best to provide specific strings for each case, and this way satisfy the rules of the language best. However, if the translation of a certain string is the same for two cases, you can should enter them both (creating a duplicate).

For instance, in English the word "person" has only one case in multiple - "people", which should be placed in the "other" tab. Still, if you see the tabs "few/many" - they should NOT be left empty. (normally they should be hidden for some languages) If anything is empty, the whole string will be treated as "untranslated" by POEditor. In such situations, enter the most appropriate translation. In this example: one=person, few/many/other=people.