]> git.mxchange.org Git - friendica.git/blob - doc/translations.md
Merge remote-tracking branch 'upstream/develop' into user-defined-channels
[friendica.git] / doc / translations.md
1 Friendica translations
2 ======================
3
4 * [Home](help)
5
6 ## Overview
7
8 The Friendica translation process is based on `gettext` PO files.
9
10 Basic workflow:
11 1. `xgettext` is used to collect translation strings across the project in the authoritative PO file located in `view/lang/C/messages.po`.
12 2. This file makes translations strings available at [the Transifex Friendica page](https://app.transifex.com/Friendica/friendica/dashboard/).
13 3. The translation itself is done at Transifex by volunteers.
14 4. The resulting PO files by languages are manually updated in `view/lang/<language>/messages.po`.
15 5. PO files are converted to PHP arrays in `view/lang/<language>/strings.php` that are ultimately used by Friendica to display the translations.
16
17 ## Translate Friendica in your favorite language
18
19 Thank you for your interest in improving Friendica's translation!
20 Please register a free Transifex account and ask over at [the Transifex Friendica page](https://app.transifex.com/Friendica/friendica/dashboard/) to join the translation team for your favorite language.
21
22 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.
23 For addons, we add support for a language when if we already support the language in Friendica.
24
25 ## Add new translation strings
26
27 ### Supported gettext version
28
29 We currently support the gettext version 0.19.8.1 and actively check new translation strings with this version.
30
31 If you don't use this version, it's possible that our checks fail (f.e. because of tiny differences at linebreaks).
32 In case you do have a Docker environment, you can easily update the translations with the following command:
33 ```shell
34 docker run --rm -v $PWD:/data -w /data friendicaci/transifex bin/run_xgettext.sh
35 ```
36
37 ### Core
38
39 Once you have added new translation strings in your code changes, please run `bin/run_xgettext.sh` from the base Friendica directory and commit the updated `view/lang/C/messages.po` to your branch.
40
41 ### Addon
42
43 If you have the `friendica-addons` repository in the `addon` directory of your Friendica cloned repository, just run `bin/run_xgettext.sh -a <addon_name>` from the base Friendica directory.
44
45 Otherwise:
46
47         cd /path/to/friendica-addons/<addon_name>
48         /path/to/friendica/bin/run_xgettext.sh -s
49
50 In either case, you need to commit the updated `<addon_name>/lang/C/messages.po` to your working branch.
51
52 ## Update translations from Transifex
53
54 Please download the Transifex file "for use" in `view/lang/<language>/messages.po`.
55
56 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.
57
58 ### Using the Transifex client
59
60 Transifex has a client program which allows you to sync files between your cloned Friendica repository and Transifex.
61 Help for the client can be found at the [Transifex Help Center](https://docs.transifex.com/client/introduction).
62 Here we will only cover basic usage.
63
64 After installation of the client, you should have a `tx` command available on your system.
65 To use it, first create a configuration file with your credentials.
66 On Linux this file should be placed into your home directory `~/.transifexrc`.
67 The content of the file should be something like the following:
68
69     [https://app.transifex.com]
70     username = user
71     token =
72     password = p@ssw0rd
73     hostname = https://app.transifex.com
74
75 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`.
76 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.
77
78     $> tx pull -l eo
79
80 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.
81
82 ## Translation functions usage
83
84 ### Basic usage
85
86 - `Friendica\DI::l10n()->t('Label')` => `Label`
87 - `Friendica\DI::l10n()->t('Label %s', 'test')` => `Label test`
88
89 ### Plural
90
91 - `Friendica\DI::l10n()->tt('Label', 'Labels', 1)` => `Label`
92 - `Friendica\DI::l10n()->tt('Label', 'Labels', 3)` => `Labels`
93 - `Friendica\DI::l10n()->tt('%d Label', '%d Labels', 1)` => `1 Label`
94 - `Friendica\DI::l10n()->tt('%d Label', '%d Labels', 3)` => `3 Labels`
95 - `Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 1, 'test', 'test2')` => `Label test test2`
96 - `Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 3, 'test', 'test2')` => `Labels test test2`