Friendica Communications Platform (please note that this is a clone of the repository at github, issues are handled there)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
4.0 KiB

  1. Friendica translations
  2. ======================
  3. * [Home](help)
  4. ## Overview
  5. The Friendica translation process is based on `gettext` PO files.
  6. Basic worflow:
  7. 1. `xgettext` is used to collect translation strings across the project in the master PO file located in `view/lang/C/messages.po`.
  8. 2. This file makes translations strings available at [the Transifex Friendica page](
  9. 3. The translation itself is done at Transifex by volunteers.
  10. 4. The resulting PO files by languages are manually updated in `view/lang/<language>/messages.po`.
  11. 5. PO files are converted to PHP arrays in `view/lang/<language>/strings.php` that are ultimately used by Friendica to display the translations.
  12. ## Translate Friendica in your favorite language
  13. Thank you for your interest in improving Friendica's translation!
  14. Please register a free Transifex account and ask over at [the Transifex Friendica page]( to join the translation team for your favorite language.
  15. As a rule of thumb, we add support for a language in Friendica when at least 50% of the strings have been translated to avoid a scattered experience.
  16. For addons, we add support for a language when if we already support the language in Friendica.
  17. ## Add new translation strings
  18. ### Core
  19. Once you have added new translation strings in your code changes, please run `bin/` from the base Friendica directory and commit the updated `view/lang/C/messages.po` to your branch.
  20. ### Addon
  21. If you have the `friendica-addons` repository in the `addon` directory of your Friendica cloned repository, just run `bin/ -a <addon_name>` from the base Friendica directory.
  22. Otherwise:
  23. cd /path/to/friendica-addons/<addon_name>
  24. /path/to/friendica/bin/ -s
  25. In either case, you need to commit the updated `<addon_name>/lang/C/messages.po` to your working branch.
  26. ## Update translations from Transifex
  27. Please download the Transifex file "for use" in `view/lang/<language>/messages.po`.
  28. Then run `bin/console po2php view/lang/<language>/messages.po` to update the related `strings.php` file and commit both files to your working branch.
  29. ### Using the Transifex client
  30. Transifex has a client program which allows you to sync files between your cloned Friendica repository and Transifex.
  31. Help for the client can be found at the [Transifex Help Center](
  32. Here we will only cover basic usage.
  33. After installation of the client, you should have a `tx` command available on your system.
  34. To use it, first create a configuration file with your credentials.
  35. On Linux this file should be placed into your home directory `~/.transifexrc`.
  36. The content of the file should be something like the following:
  37. []
  38. username = user
  39. token =
  40. password = p@ssw0rd
  41. hostname =
  42. Since Friendica version 3.5.1 we ship configuration files for the Transifex client in the core repository and the addon repository in `.tx/config`.
  43. To update the PO files after you have translated strings of e.g. Esperanto on the Transifex website you can use `tx` to download the updated PO file in the right location.
  44. $> tx pull -l eo
  45. Then run `bin/console po2php view/lang/<language>/messages.po` to update the related `strings.php` file and commit both files to your working branch.
  46. ## Translation functions usage
  47. ### Basic usage
  48. - `Friendica\Core\L10n::t('Label')` => `Label`
  49. - `Friendica\Core\L10n::t('Label %s', 'test')` => `Label test`
  50. ### Plural
  51. - `Friendica\Core\L10n::tt('Label', 'Labels', 1)` => `Label`
  52. - `Friendica\Core\L10n::tt('Label', 'Labels', 3)` => `Labels`
  53. - `Friendica\Core\L10n::tt('%d Label', '%d Labels', 1)` => `1 Label`
  54. - `Friendica\Core\L10n::tt('%d Label', '%d Labels', 3)` => `3 Labels`
  55. - `Friendica\Core\L10n::tt('%d Label', 'Labels %2%s %3%s', 1, 'test', 'test2')` => `Label test test2`
  56. - `Friendica\Core\L10n::tt('%d Label', 'Labels %2%s %3%s', 3, 'test', 'test2')` => `Labels test test2`