Translate Drupal!
Gábor Hojtsy, Acquia, DrupalCamp Vienna 2009
TRANSLATING
THE BUILT-IN
 INTERFACE
TEXT COMES
    FROM
SOURCE CODE
t(‘Go to %page’,
array(‘%page’ => $p));


Drupal.t(‘Go to %page’,
       {‘%page’: num});
D!"#$% 6 Ch!$for new versions at hojtsy.hu – Freely redistri
                                                             ...
TEXT IS FOUND
 AND REPLACED
RUNTIME, WHEN
     USED
TRANSLATIONS
   ARE STORED
IN THE DATABASE
DRUPAL PROCESS
  Running
source code
DRUPAL PROCESS
  Running
source code
                   Found text
                  stored in DB
DRUPAL PROCESS
  Running
source code
                   Found text
                  stored in DB


                 User ...
DRUPAL PROCESS
   Running
 source code
                      Found text
                     stored in DB


Text replaced ...
Where’s the happy family?
TRANSLATIONS
  ARE SHARED
IN GETTEXT .PO
SHARING PROCESS
SHARING PROCESS
SHARING PROCESS
                     Static
                  source code
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
•Translation template            Static
 extractor                    source code
•http://drupal.org/
 project/potx
•Web i...
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
Desktop tools like
PoEdit or just Notepad



                          Gettext
                         .pot (CVS)


     ...
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
•Translation teams commit .po files to CVS
•http://drupal.org/project/Translations
 and under contributed projects
•Release...
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
•Built-in translation interface
•http://drupal.org/project/l10n_client
•Import and export .po(t) files manually
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
SHARING PROCESS
                     Static
                  source code


                   Gettext
                  ....
All come together
GIVING AWAY
 (THIS WAY)
   IS HARD
POTX
.PO

POTX
.PO
CVS
 POTX
.PO
CVS
  POTX


RELEASES
.PO
CVS
  POTX


RELEASES
           BRANCHES
.PO
CVS        PLURAL FORMS
  POTX


RELEASES
           BRANCHES
.PO
CVS        PLURAL FORMS
  POTX

           SCHEDULING
RELEASES
           BRANCHES
.PO
CVS        PLURAL FORMS
    POTX

               SCHEDULING
RELEASES
               BRANCHES
ISSUE QUEUES
ENOUGH!
LOCALIZE.DRUPAL.ORG
                    Static
                 source code


                  Gettext
                 ....
LOCALIZE.DRUPAL.ORG
                    Static
                 source code


                  Gettext
                  ...
LOCALIZE.DRUPAL.ORG
                    Static
                 source code
                   Automation



             ...
LOCALIZE.DRUPAL.ORG
                    Static
                 source code
                   Automation



             ...
LOCALIZE.DRUPAL.ORG
                    Static
                 source code
                   Automation



             ...
LOCALIZE.DRUPAL.ORG
                    Static
                 source code
                   Automation



             ...
LOCALIZE.DRUPAL.ORG
                         Static
                      source code
                        Automation

...
LOCALIZE.DRUPAL.ORG
                         Static
                      source code
                        Automation

...
LOCALIZE.DRUPAL.ORG
                          Static
                       source code
                           Automat...
LOCALIZE.DRUPAL.ORG
                          Static
                       source code
                           Automat...
Oh, those stats!
over                                almost


5410                               7700
projects known                      r...
165000
  IT IS LIKE
TRANSLATING
   DRUPAL
  45 TIMES
44
  TRANSLATION
TEAMS LAUNCHED
ALREADY IN BETA
(MORE IN QUEUE)
ALMOST

  600
CONTRIBUTORS
  SUBMITTED
TRANSLATIONS
Take a ride!
CONTRIBUTE!

• LocalizedDrupal install profile (dev!)
 http://drupal.org/project/l10n_install

• Localization
             ...
Envious?
SOFTWARE ON L.D.O

• Translation
            template extractor
 http://drupal.org/project/potx

• Localization
          ...
TRANSLATE YOUR CODE

• Open Atrium and Gallery 2 uses
 Localization server to translate their
 code

• Youcan set up l10n_...
Long way to go
THESE SLIDES ARE (CC)
                                          Photo credits:
                                 http://www...
THANK YOU!
 Gábor Hojtsy, Acquia
  gabor@hojtsy.hu
   http://hojtsy.hu/
Translate Drupal from Drupalcamp Vienna
Upcoming SlideShare
Loading in...5
×

Translate Drupal from Drupalcamp Vienna

1,331

Published on

Translate Drupal! session slides from Drupalcamp Vienna, 28th November, 2009.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,331
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Translate Drupal from Drupalcamp Vienna

  1. 1. Translate Drupal! Gábor Hojtsy, Acquia, DrupalCamp Vienna 2009
  2. 2. TRANSLATING THE BUILT-IN INTERFACE
  3. 3. TEXT COMES FROM SOURCE CODE
  4. 4. t(‘Go to %page’, array(‘%page’ => $p)); Drupal.t(‘Go to %page’, {‘%page’: num});
  5. 5. D!"#$% 6 Ch!$for new versions at hojtsy.hu – Freely redistri By Gábor Hojtsy – ion API JavaScript translat to the Translates ‘Home’ play. ion API e’) language used for page dis Core PHP translat to the Drupal.t(‘Hom Translates ‘Home’ t(‘H ome’) requested language. Plural Returns the prop er translation for Drupal.format l rules in Returns the proper (count, the text based on plura format_plural & '(%$&)*' sed e. lation for the text ba ‘1 comment’, the page’s langu ag eck ($count, trans GET THE on plural rules in the ‘@coun t comments’) ‘1 comment’, guage. ’) requested lan can be provided, ‘@count comm ents placements array Optional variable realways the page language! placements array and language is Optional variable re provided in this order. n be ix characters) language code ca ats (based on pref Replacement form value escaped with features Replaced with the ut. ns using translation Other PHP functio @count check_plain() for outp format_date Translates parts of the CHEAT SHEET +,-$& (,--&bu. ble as long as credit is kept. d value escaped an ($timesta mp, date/time formatting. Replaced with the r (theme 'medium', ...) ted as a placeholde %size format interval in (‘placeh older’)). Displays the time t l Translates value as is, withou format_interva human terms. Replaced with the ting. Insecure! Only ... ) names of the segments. ($timestamp, ional format !html any addit eady sanitized your text. provided use if you alr Formats a file size e MB, y( FROM tes. Translate s th irectory’, arra ize, ...) in by me moved to @d format_size($s Example: t(‘%na => $dirname); ta . KB and byte labels lename, ‘@dire ctory’ 1.1 - '*.-/0 ‘%name’ => $fi e code at the end. an optional languag All functions accept th e installer Translating text in ed later y as t(), but translation and us Works the same wa ckend. Use Text extracted for y ba Module/theme nam e; uses a file+memor fo files description; package na me. st(‘Home’ ) only in the installer and in install HOJTSY.HU .in support. profiles. No plural names, Literal permission d hook_per m() when provided with standar ll files and any -! 15. 2007. ns array syntax. Use get_t() in .insta implementatio could run in the other code which s ‘t’ or ‘st’ $t = get_t(); installer too. It retu nction to be d rn Menu item ‘title’ an hook_menu() ‘description’ keys , when $t(‘H ome’); depending on the fu ings. t. implem entations provided as literal str used at the momen sage, Log type and mes ral nslation, your and need to use traif your module when pr ovided as lite have an .install file ler Remember: if you easily end up running in the instal e get_t()! u’, strings. Third parameter watchdog(‘men function calls could core module in an install profile. Us calls specifies the replacements becomes a ‘Items saved’) pport. array. No plural su bal context, Usage of t() in a glo ST’, t(‘...’)). The ALSO SEE mistakes e message eg. for The most common Reuse of the sam such as define(‘CON t initialized at lues, such as t($type). d drupal_set_mes sage() t ye locale system is no e is incorrect Using dynamic va s to call watchdog() an dynamic string allows t(), the later e, so this usag Whenever you use make sure that all calls. The former dis t possible. that tim nasty performance , the above functions eady in the code is no requires t(), so this e API functions and also leads to it. possibl e values are alr I. Always ca ll the abov problems. Never do l form using the AP indirection. elsewhere in litera er provided content. directly, without us Do not translate D.O/NODE/322729 so e using the API pr operly ule plugin support, rt a ar s have coder mod po Tools to verify you Drupal 6. x-2 or later version rted in reviews. Also feel free to ex . e API is repo ings appear improper use of th ule/theme and check whether all str /project/potx od http://drupal.org template for your m e t() or some en you forgot to us nn ot find mistakes wh localization client has a The potx module ca late your output. The . If certain ot her function to trans translate text displayed on the page e API. _clie nt convenient interface to , you forg ot to use th rg/project/l10n ing up for translation http://drupal.o strings are not show
  6. 6. TEXT IS FOUND AND REPLACED RUNTIME, WHEN USED
  7. 7. TRANSLATIONS ARE STORED IN THE DATABASE
  8. 8. DRUPAL PROCESS Running source code
  9. 9. DRUPAL PROCESS Running source code Found text stored in DB
  10. 10. DRUPAL PROCESS Running source code Found text stored in DB User interface to translate text, stored in DB
  11. 11. DRUPAL PROCESS Running source code Found text stored in DB Text replaced on User interface output to translate text, stored in DB
  12. 12. Where’s the happy family?
  13. 13. TRANSLATIONS ARE SHARED IN GETTEXT .PO
  14. 14. SHARING PROCESS
  15. 15. SHARING PROCESS
  16. 16. SHARING PROCESS Static source code
  17. 17. SHARING PROCESS Static source code Gettext .pot (CVS)
  18. 18. SHARING PROCESS Static source code Gettext .pot (CVS)
  19. 19. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  20. 20. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  21. 21. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  22. 22. •Translation template Static extractor source code •http://drupal.org/ project/potx •Web interface in your Gettext Drupal install .pot (CVS) •Coder review (incl. drush) support for module syntax checking
  23. 23. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  24. 24. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  25. 25. Desktop tools like PoEdit or just Notepad Gettext .pot (CVS) Translated .po (CVS)
  26. 26. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  27. 27. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  28. 28. •Translation teams commit .po files to CVS •http://drupal.org/project/Translations and under contributed projects •Released on the parent project’s timeframe •Drupal imports automatically Translated .po (CVS)
  29. 29. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  30. 30. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  31. 31. •Built-in translation interface •http://drupal.org/project/l10n_client •Import and export .po(t) files manually
  32. 32. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  33. 33. SHARING PROCESS Static source code Gettext .pot (CVS) Translated .po (CVS)
  34. 34. All come together
  35. 35. GIVING AWAY (THIS WAY) IS HARD
  36. 36. POTX
  37. 37. .PO POTX
  38. 38. .PO CVS POTX
  39. 39. .PO CVS POTX RELEASES
  40. 40. .PO CVS POTX RELEASES BRANCHES
  41. 41. .PO CVS PLURAL FORMS POTX RELEASES BRANCHES
  42. 42. .PO CVS PLURAL FORMS POTX SCHEDULING RELEASES BRANCHES
  43. 43. .PO CVS PLURAL FORMS POTX SCHEDULING RELEASES BRANCHES ISSUE QUEUES
  44. 44. ENOUGH!
  45. 45. LOCALIZE.DRUPAL.ORG Static source code Gettext .pot (CVS) Translated .po (CVS)
  46. 46. LOCALIZE.DRUPAL.ORG Static source code Gettext Database .pot (CVS) Translated .po (CVS)
  47. 47. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Translated .po (CVS)
  48. 48. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Translated .po (CVS)
  49. 49. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Translated .po (CVS) (FTP)
  50. 50. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Automation Translated .po (CVS) (FTP)
  51. 51. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Automation Translated Pull .po (CVS) (FTP)
  52. 52. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Automation Translated Pull .po (CVS) (FTP)
  53. 53. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Contribute Automation Translated Pull .po (CVS) (FTP)
  54. 54. LOCALIZE.DRUPAL.ORG Static source code Automation Gettext Database .pot (CVS) Web UI Contribute Automation Translated Pull .po (CVS) (FTP)
  55. 55. Oh, those stats!
  56. 56. over almost 5410 7700 projects known releases parsed over 165000 strings to translate
  57. 57. 165000 IT IS LIKE TRANSLATING DRUPAL 45 TIMES
  58. 58. 44 TRANSLATION TEAMS LAUNCHED ALREADY IN BETA (MORE IN QUEUE)
  59. 59. ALMOST 600 CONTRIBUTORS SUBMITTED TRANSLATIONS
  60. 60. Take a ride!
  61. 61. CONTRIBUTE! • LocalizedDrupal install profile (dev!) http://drupal.org/project/l10n_install • Localization client: http://drupal.org/project/l10n_client • Developer help needed: http://drupal.org/projects/issues/ search?issue_tags=ldodomination
  62. 62. Envious?
  63. 63. SOFTWARE ON L.D.O • Translation template extractor http://drupal.org/project/potx • Localization server: http://drupal.org/project/l10n_server • Organicgroups http://drupal.org/project/og
  64. 64. TRANSLATE YOUR CODE • Open Atrium and Gallery 2 uses Localization server to translate their code • Youcan set up l10n_server to parse your own code and translate in-house • Eg. https://translate.openatrium.com/
  65. 65. Long way to go
  66. 66. THESE SLIDES ARE (CC) Photo credits: http://www.flickr.com/photos/sinkdd/2853334715/ http://www.flickr.com/photos/chavals/2978360981/ http://www.flickr.com/photos/koesbong/125933266/ http://www.flickr.com/photos/cheishichiyo/3637712921/ http://www.flickr.com/photos/paky/52194393/ http://www.flickr.com/photos/patrickgage/3738107746/ http://www.flickr.com/photos/zhzheka/1240470939/ http://www.flickr.com/photos/fchouse/3270958643/ http://www.flickr.com/photos/colinj/490622069/ http://www.flickr.com/photos/brartist/313272029/ This presentation is © Gábor Hojtsy Licensed: http://creativecommons.org/licenses/by-nc-sa/2.0/
  67. 67. THANK YOU! Gábor Hojtsy, Acquia gabor@hojtsy.hu http://hojtsy.hu/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×