Introduction to the Drupal 6 multilanguage features starting off from core features to contributed modules.
Presented at Do It With Drupal http://doitwithdrupal.com/
Multilingual Drupal presentation from "Do it With Drupal"
1. Drupal world domination
Translating interface and content in Drupal
Gábor Hojtsy, Acquia Inc.
December 12 2008, Do It With Drupal, New Orleans
http://acquia.com/ • http://doitwithdrupal.com/
2. About the presenter
Web developer since 1999,
building open communities and
contributing to open source
projects ever since
Works with and contributes to
Drupal since 2003
Drupal 6 branch maintainer
Code gardener at Acquia
http://acquia.com/
3. Will demo with Acquia Drupal
Curated distribution of Drupal 6
Connects to the Acquia Network
Not a fork in any way of the
included software, all GPL
You can do everything shown
with Drupal 6 and the modules
mentioned in the session
4. About you
Built non-Drupal
multilanguage site?
Built Drupal based site?
Built Drupal based
multilanguage site?
“Decision makers”?
“Users”?
“Developers”?
6. Two worlds, one family
Text from inside module and theme code is
translated for you
–These can be pre-translated by international teams
–Distributed and shared freely on drupal.org
All custom content you generate is your job to
translate
–Content on the website, taxonomy, menus
–Text in views, content type elds, and so on...
Generally different ways to approach the two
7. And there is a lot more to do
Relating translations (complete copies, subsites)
Different permissions, lifecycles
Setting up work ows
Integrating with external tools
Just selecting the language to use is complex
10. Install in your language
After pro le is selected, Drupal
looks for available translations
Offers translations to use
Language packages can be
downloaded and extracted into
Drupal root for use
Files in /pro les/pro lename/
translations/ are considered
Files are imported in a batch
(progress bar)
20. Properties of languages known
The default language for the website
English and native language names
Writing direction support (LTR or RTL)
De ned ordering (weights)
Path pre x or (sub)domain associated
Administer » Site con guration » Languages
21. Adding new languages
Extract interface translations to Drupal root
Add language from prede ned list if possible
22. Automated translation import
Modules and themes also have ./translations
subdirectories
When you add a language, all enabled modules and
themes get translations imported
When you enable a module or theme, translations
imported in all languages
Administer »
Site building »
Translate interface
23. The language to use to display the page
Can be set to be always the site default
Or pick the rst identi ed from this list:
–IRI (domain name, path pre x)
–User preferences
–Browser language preference settings
–Fallback on site default
Which of these is used exactly is con gurable at
Administer » Site con guration » Languages »
Con gure
24. Example language setups
Using path pre xes
–German language set up with /deutsch path pre x
–Hungarian language set up with /magyar path pre x
Using subdomains
–German language on de.example.com
–Hungarian on hu.example.com
Or even use high level domains
–German on beispiel.de
–Hungarian on példa.hu
25. Server setup for multiple domains
Make sure that all domains point to the same
virtual host in your webserver con guration
Drupal should automatically pick up the domain
from the request
If using subdomains, make sure that cookies are set
on *.example.com, not per subdomain
If using standalone domains, you will not be signed
on on multiple domains at once just by logging in
at one of them
26. Language is known, now what?
Drupal selects the language, but it is up to the rest
of the modules used to act accordingly
The interface is displayed in that language
Website settings, views, etc. might need more
tweaking to behave as you wish
Getting “custom content” such as custom menu
items, taxonomy terms and site settings to translate
requires contributed modules
28. Right-to-left (sub)theme support
Drupal itself includes RTL support for all its
functionality
All CSS le additions are intercepted and RTL
cascade les are searched for (eg. style-rtl.css for
style.css les)
All core themes have RTL support
Easy to write RTL supporting themes, even with
color module
30. Language dependent e-mails
Users have their preferred language set up
Those registering on a translated page get that as
preferred language by default
This language is used to send e-mails, such as
welcome or new password request e-mail
Drupal 6 can send e-mails in multiple languages in
one request
32. Associate language to content
As soon as locale module is enabled, content types
can be language enabled
Shows a language selection dropdown for posts
when editing
Allows for Language neutral posts. Applicable when
content is not attached to any language
Does not mean content translation in itself
Use case: blogs, where author posts in different
languages, but these are distinct posts on one site
33. Associate language to content
Setting up the
Page content type
Creating new
Page content
34. Consequences
Post will have URL with language speci c part
included (domain, path pre x), if set up
The associated language can be used to create
views, export in feeds, etc.
Even if you only have a single language site, if
translation ever becomes a requirement, better to
have posts in the system already marked
38. Title and body pre lled for translation
Add Hungarian
translation for
Hebrew post.
Translation links
on each post.
39. Each translation is a different node
Great, so that you can have different work ows for
these nodes (eg. publish only if all translations are
done)
These can have different authors, updated times,
permissions, comments in the given language, can
show up in different feeds, and so on
Sets of nodes belonging to the same set are called a
translation set
Voting, agging, etc. is supported on the set level as
well in contributed modules
40. Basic work ow support in core
The source node of the translation set can be set to
be changed signi cantly, marking translations
outdated
The translations can then be updated to re ect the
change
On the source post:
41. Basic work ow support in core
On a translation. Uncheck if not true anymore.
44. Drupal 6 cannot translate
Site settings
Taxonomy (vocabularies, terms)
User de ned menus (menus, items)
Aggregator categories
Pro le eld titles and categories
Content type properties
Blocks
Node lists!
47. String overrides
http://drupal.org/project/stringoverrides
Replace text available for interface translation
Less resource intensive then locale module
Override in any language on Drupal 6
Will only override the concrete strings speci ed
49. Localization client
http://drupal.org/project/l10n_client
Drupal 6 allows collecting strings used on the page
Tool built on top of that to translate strings while
you walk around pages
Can share translations to a central Localization
server while you submit them
Works on non-English pages, if people have
permission to do it
51. Localization server
http://drupal.org/project/l10n_server
Making interface translation for language groups a
lot easier
The intent is to move from CVS and drupal.org
project management to a web application
Translation sharing, support for packaging
Can receive translations from Localization client
Uses http://drupal.org/project/potx (Translation
template extractor)
53. Google translate
http://drupal.org/project/gtrans
Google operates an online translation service
This module just passes text through that service
via their normal web interface
The output is wrapped, so users don’t see it going
through Google
Some caveats
–Not legal, mentioned to highlight the concept
–Does not work for logged-in users
–Not well supported, no Drupal 6 version
58. Support computer aided humans
Computer Aided Translation (CAT) tools take HTML,
Word, etc. documents and allow translation of
those
They work with a translation memory which pre-
translates the text
Humans x the translations, and feed back the new
knowledge to the memory (automatically)
The translation gets to the originator in HTML, Word
document, etc. format
59. XLIFF Tools module example
http://drupal.org/project/xliff
XML Localisation Interchange File Format is a
format maintained by OASIS
Separates content and formatting in a standard way
60. AWTW module
http://drupal.org/project/awtw
AWTW is Automated Web Translation Work ow
Works very similar to XLIFF Tools, but easier to use
Exports to a custom XML format, which includes
source node identi er
Allows you to import translations easily, since it can
nd the original node based on the identi er
Not yet ported to Drupal 6
63. Team work ow with permissions
http://drupal.org/project/work ow
Actions and work ow modules allow you to set up
work ows for translation with states and transitions
Work ow access supports node level access control
For example:
–Only allow editing of a post until it is “sent for translation”
–Send out email to translators then
–Only allow translators to edit until set “for review”
–Automatically publish when “reviewed”
65. Views
http://drupal.org/project/views
Views supports languages, translation sets and
translation status values
Easily lter on language or translation set for nodes
Sort views by language
Set up relations based on translation sets
Language is only available if translation module
enabled - see #343178 for more information
73. i18nstrings module
Base (API) module for most custom translation tools
Implements strings translation API via the Drupal 6
core provided textgroups system
Object based translation system which almost
made it to Drupal 6
Other modules like i18nblocks, i18nmenu and
i18ntaxonomy use it
77. i18nsync, i18npoll modules
Helps you sync values between content translations
Taxonomy terms, CCK elds are not shared among
nodes in the same translation set
i18nsync can sync taxonomy terms and CCK eld
values between set members
i18npoll module will help you aggregate poll
results for translations
78. Other contributed modules
The direction is to be able to attach behaviors to
both individual nodes and translation sets
Flag module for example supports agging by
translation set or by individual node
Coordinated work going on at the i18n group
http://groups.drupal.org/node/15064
80. Look at your own requirements
People meet lots of different requirements
You need to build your own solution according to
that and adapt what is there to evolving needs
There are a lot more multilingual options beyond
what I could cover in this session, so keep exploring
http://drupal.org/project/Modules/category/97