+is suitable for direct inclusion in the program.
+
+There are also translatable strings in the various files in the view/lang/en
+directory. By setting $lang = 'something' in .htconfig.php, the application
+will search for view/lang/something/filename prior to the English version in
+view/lang/en/filename when loading templates and view files.
+
+The translated string table should be placed in view/lang/$lang/strings.php for
+automatic inclusion.
+
+You are not restricted to using known languages. You may also use this to
+translate the software into "pirate", "surfer" or merely to replace certain
+text which you don't care for.
+
+Note: The view/lang/en directory contains many HTML template files, some of which
+only have a few words of English text amongst the HTML. Over time we will move
+the translation to the replace_macros() function which calls these files and
+then relocate the files to the view directory. The files in the top-level view
+directory are template files which do not require translation.
+
+
+Placeholders
+
+Do not translate placeholders in strings! Things like %s, %d, %1$s and $somename
+are used to add dynamic content to the string.
+
+%s represents a dynamic string, like in "Welcome to %s"
+%d represents a dynamic number, like in "%d new messages"
+$somename is a variable like in php
+In %1$s %2$s, the numbers are the position index of multiple dynamic content.
+You could swap position in string of indexed placeholders.
+e.g.
+"%1$s's %2$s" => "John's photo", "John's item"
+"%2$s di %1$s" => "foto di John", "elemento di John"
+
+
+Plural
+
+The L10n::tt() function supports plural form. The extract command writes this in
+strings.php as an array, one string for every plural form language supports:
+
+$a->string["%d message sent"] = Array(
+ 0 => "%d message sent",
+ 1 => "%d messages sent",
+);
+
+The function string_plural_select($n) defined in strings.php, return the string
+index to use, related to the numbers of item (value of $n).
+
+This is modeled after ngettext function of GNU gettext.
+More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
+
+
+Xgettext and .po workflow
+
+1. Run bin/run_xgettext.sh script (on *unix sistems, with GNU xgettext installed)
+ This script runs xgettext on source tree, extracting strings from L10n::t() and L10n::tt()
+ functions, and creates a util/messages.po file.
+
+ $ cd bin; ./run_xgettext.sh
+
+2. copy util/messages.po to view/lang/<language>/messages.po
+ Replace <language> with the language you are working on - e.g. 'es', 'fr', 'de', etc.
+
+3. open view/lang/<language>/messages.po with a text editor and fill in infos in
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>"
+ "Language-Team: LANGUAGE <LL@li.org>\n"
+ "Language: \n"
+
+ (eg:
+ "Last-Translator: Guybrush Threepwood <gb@host.com>"
+ "Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
+ "Language: pi\n"
+ )
+
+ For the line
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+ read GNU gettext manual at
+ http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html