120 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
Utilities
 | 
						|
 | 
						|
typo.php  - is a crude syntax checker to avoid checking in files with simple 
 | 
						|
typos. It basically just loads each of our project files at once. Run from 
 | 
						|
cmdline and see if any parsing errors are reported.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Internationalisation
 | 
						|
 | 
						|
extract.php - extracts translatable strings from our project files. It 
 | 
						|
currently doesn't pick up strings in other libraries we might be using such as 
 | 
						|
tinymce, simplepie, and the HTML parsers.
 | 
						|
 | 
						|
In order for extract to do its job, every use of the t() translation function 
 | 
						|
must be preceded by one space. The string also can not contain parentheses. If
 | 
						|
parens are required in a string which requires translation, please use hex escapes.
 | 
						|
 | 
						|
\x28 = (
 | 
						|
\x29 = )
 | 
						|
 | 
						|
This only applies to English. Other languages may use parens in strings 
 | 
						|
because they don't require extraction.
 | 
						|
 
 | 
						|
strings.php - a recent run of the strings program. This provides output that
 | 
						|
is suitable for direct inclusion in the program. 
 | 
						|
 | 
						|
There are also translatable strings in the various files in the view/en
 | 
						|
directory. By setting $lang = 'something' in .htconfig.php, the application 
 | 
						|
will search for view/something/filename prior to the English version in 
 | 
						|
view/en/filename when loading templates and view files. 
 | 
						|
 | 
						|
The translated string table should be placed in view/$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/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 rappresent a dynamic string, like in "Welcome to %s"
 | 
						|
%d rappresent 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 tt() function supports plural form. Script extract.php write 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 modelled 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 utils/run_xgettext.sh script (on *unix sistems, with GNU xgettext installed)
 | 
						|
	This script runs xgettext on source tree, extracting strings from t() and tt()
 | 
						|
	functions, and creates a utils/messages.po file.
 | 
						|
2. copy utils/messages.po to views/<langauage>/messages.po
 | 
						|
3. open views/<langauage>/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
 | 
						|
	
 | 
						|
4. You could then translate the strings in text editor, but I suggest to use one
 | 
						|
	of the many .po editors out there, like QtLinguist
 | 
						|
	
 | 
						|
5. run 
 | 
						|
	$ php utils/po2php.php views/<language>/messages.po
 | 
						|
 	to create the strings.php file
 | 
						|
 	
 | 
						|
When strings are added or modified in source, you could run
 | 
						|
	$ utils/run_xgettext.sh views/<language>/messages.po
 | 
						|
	to extraxt strings from source files and join them with the existing .po file:
 | 
						|
	new strings are added, the existing are not overwritten.
 | 
						|
	
 | 
						|
If you already translated Friendika using strings.php, you could import your old
 | 
						|
translation to messages.po. Run:
 | 
						|
$ php utils/php2po.php views/<language>/strings.php
 | 
						|
 | 
						|
 | 
						|
 
 | 
						|
 | 
						|
      
 |