Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/docs/contributing/internationalization.diviner b/src/docs/contributing/internationalization.diviner
new file mode 100644
index 0000000000..793953ef33
--- /dev/null
+++ b/src/docs/contributing/internationalization.diviner
@@ -0,0 +1,61 @@
+@title Internationalization
+@group contrib
+
+What is required from developers to get Phabricator translatable.
+
+= API =
+
+Translator API is provided by libphutil. It gives us `PhutilTranslator` class
+and global `pht()` function built on top of it.
+
+Developers are supposed to call `pht()` on all strings that require translation.
+
+Phabricator provides translations for this translator through
+@{class:PhabricatorTranslation} class.
+
+= Adding a New Translation =
+
+Adding a translation which uses the same language rules as some already existing
+translation is relatively simple: Just extend @{class:PhabricatorTranslation}
+and you will be able to specify this class in the global configuration
+'translation.provider' and users will be able to select it in their preferences.
+
+= Adding a New Language =
+
+Adding a language involves all steps as adding a translation plus specifying the
+language rules in `PhutilTranslator::chooseVariant()`.
+
+= Singular and Plural =
+
+Different languages have various rules for using singular and plural. All you
+need to do is to call `pht()` with a text that is suitable for both forms.
+Example:
+
+ pht('%d beer(s)', $count);
+
+Translators will translate this text for all different forms the language uses:
+
+ // English translation
+ array('%d beer', '%d beers');
+
+ // Czech translation
+ array('%d pivo', '%d piva', '%d piv');
+
+The ugly identifier passed to `pht()` will remain in the text only if the
+translation doesn't exist.
+
+= Male and Female =
+
+Different languages use different words for talking about males, females and
+unknown genders. Callsites have to call `pht()` passing @{class:PhabricatorUser}
+(or other implementation of `PhutilPerson`) if talking about the user. Example:
+
+ pht('%s wrote', $actor);
+
+Translators will create this translations:
+
+ // English translation
+ '%s wrote';
+
+ // Czech translation
+ array('%s napsal', '%s napsala');

File Metadata

Mime Type
text/x-diff
Expires
Mon, Dec 1, 1:07 PM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
430496
Default Alt Text
(2 KB)

Event Timeline