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.

126 lines
4.7 KiB

11 years ago
11 years ago
11 years ago
  1. Utilities
  2. typo.php - is a crude syntax checker to avoid checking in files with simple
  3. typos. It basically just loads each of our project files at once. Run from
  4. cmdline and see if any parsing errors are reported.
  5. Internationalisation
  6. extract.php - extracts translatable strings from our project files. It
  7. currently doesn't pick up strings in other libraries we might be using such as
  8. tinymce and the HTML parsers.
  9. In order for extract to do its job, every use of the t() translation function
  10. must be preceded by one space. The string also can not contain parentheses. If
  11. parens are required in a string which requires translation, please use hex escapes.
  12. \x28 = (
  13. \x29 = )
  14. This only applies to English. Other languages may use parens in strings
  15. because they don't require extraction.
  16. strings.php - a recent run of the strings program. This provides output that
  17. is suitable for direct inclusion in the program.
  18. There are also translatable strings in the various files in the view/lang/en
  19. directory. By setting $lang = 'something' in .htconfig.php, the application
  20. will search for view/lang/something/filename prior to the English version in
  21. view/lang/en/filename when loading templates and view files.
  22. The translated string table should be placed in view/lang/$lang/strings.php for
  23. automatic inclusion.
  24. You are not restricted to using known languages. You may also use this to
  25. translate the software into "pirate", "surfer" or merely to replace certain
  26. text which you don't care for.
  27. Note: The view/lang/en directory contains many HTML template files, some of which
  28. only have a few words of English text amongst the HTML. Over time we will move
  29. the translation to the replace_macros() function which calls these files and
  30. then relocate the files to the view directory. The files in the top-level view
  31. directory are template files which do not require translation.
  32. Placeholders
  33. Do not translate placeholders in strings! Things like %s, %d, %1$s and $somename
  34. are used to add dynamic content to the string.
  35. %s represents a dynamic string, like in "Welcome to %s"
  36. %d represents a dynamic number, like in "%d new messages"
  37. $somename is a variable like in php
  38. In %1$s %2$s, the numbers are the position index of multiple dynamic content.
  39. You could swap position in string of indexed placeholders.
  40. e.g.
  41. "%1$s's %2$s" => "John's photo", "John's item"
  42. "%2$s di %1$s" => "foto di John", "elemento di John"
  43. Plural
  44. The tt() function supports plural form. Script extract.php write this in
  45. strings.php as an array, one string for every plural form language supports:
  46. $a->string["%d message sent"] = Array(
  47. 0 => "%d message sent",
  48. 1 => "%d messages sent",
  49. );
  50. The function string_plural_select($n) defined in strings.php, return the string
  51. index to use, related to the numbers of item (value of $n).
  52. This is modelled after ngettext function of GNU gettext.
  53. More info at
  54. Xgettext and .po workflow
  55. 1. Run util/ script (on *unix sistems, with GNU xgettext installed)
  56. This script runs xgettext on source tree, extracting strings from t() and tt()
  57. functions, and creates a util/messages.po file.
  58. $ cd util; ./
  59. 2. copy util/messages.po to view/lang/<language>/messages.po
  60. Replace <language> with the language you are working on - e.g. 'es', 'fr', 'de', etc.
  61. 3. open view/lang/<language>/messages.po with a text editor and fill in infos in
  62. "Last-Translator: FULL NAME <EMAIL@ADDRESS>"
  63. "Language-Team: LANGUAGE <>\n"
  64. "Language: \n"
  65. (eg:
  66. "Last-Translator: Guybrush Threepwood <>"
  67. "Language-Team: Pirate Friendika <>\n"
  68. "Language: pi\n"
  69. )
  70. For the line
  71. "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
  72. read GNU gettext manual at
  74. 4. You could then translate the strings in text editor, but I suggest to use one
  75. of the many .po editors out there, like QtLinguist
  76. 5. run
  77. $ php util/po2php.php view/lang/<language>/messages.po
  78. to create the strings.php file
  79. When strings are added or modified in source, you could run
  80. $ cd util; ./ ../view/lang/<language>/messages.po
  81. to extract strings from source files and join them with the existing .po file:
  82. new strings are added, the existing are not overwritten.
  83. If you already translated Friendica using strings.php, you could import your old
  84. translation to messages.po. Run:
  85. $ php util/php2po.php view/lang/<language>/strings.php
  86. You may also use the util/string_translator.php web interface to translate the string file, but it is disabled for website security reasons. The web server will need write permission to your language directories and the "Deny ..." line in util/.htaccess will need to be modified or commented to use the utility.