grigory naumovets.multilingual sites.drupal camp kyiv 2011

48
1 Multilingual sites in Drupal 7: New features, new possibilities Grigory Naumovets Kiev, Ukraine

Upload: campdrupalua

Post on 17-Dec-2014

635 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

1

Multilingual sitesin Drupal 7:

New features, new possibilities

Grigory Naumovets

Kiev, Ukraine

Page 2: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

Gold Sponsor ofDrupalCamp Kyiv 2011

Page 3: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

Silver Sponsors ofDrupalCamp Kyiv 2011

Page 4: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

2

Outline

1. Support of multilingual content in Drupal: an overview

2. New multilingual features in D7 core3. New multilingual features in D7 versions of

contributed modules (i18n etc.)4. Summary of most important improvements in

multilingual functionalityA5.Problems and prospects

Page 5: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

3

It’s a followup presentation to:Multilingual sites in Drupal: Problems, solutions, workarounds, and “goodness on the way”(DrupalCamp Kyiv 2009)www.slideshare.net/Tinnka/multilanguage-drupalgn.org.ua/drupal/presentations/DrupalCamp_2009-2010

2009 ----> 2011:• Has anything essential changed with the release of

Drupal 7?• Is “multilingual goodness” already approaching, or

still on the way?

Page 6: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

4

What is ”i18n” and ”L10n”?

internationalization i18n18 letters omitted10 letters omitted

Localization L10n

These abbreviations are used in the names of Drupal modules, such as “i18n” or “L10n_client”

Page 7: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

5

If Drupal nodes were designed as multilingual from the very beginning…

node/1(multilingual)

Title (lang1) Title (lang2)

Body (lang1) Body (lang2)

Some field (lang1) Some field (lang2)

Another field (language-neutral)

Some file attached (lang1) Some file attached (lang2)

Another file attached (language-neutral)comments

Page 8: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

6

However, Drupal nodes are unilingual. i18n is an external feature.

node/1(unilingual)lang1

Title

Body

Some field

Another field

Some file attached

Another file attached

node/2(unilingual)lang2

Title

Body

Some field

Another field

Some file attached

Another file attached

Drupal i18n system: I hereby declare node/1 and node/2 to be translations of each other

commentscomments

Page 9: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

7

Multilanguage: inside or outside?Two possible approaches to i18n:1. Multilingual features inside an object2. Unilingual object, multilanguage features are

applied from outside as a system of connections to other objects

“Object” can be a node, a block, a taxonomy term, a menu, a menu item, and so on.

Page 10: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

8

Inside vs outside• Drupal uses both approaches (depending on the

object type), so improvements of multilang support proceed in two ways:– Making objects “more multilingual” – Improving the system of i18n-related connections

between unilingual objects• Each approach has its advantages and difficulties• Until recently, approach to nodes was only “from

outside”• Some problems caused by this approach will be

demonstrated below

Page 11: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

9

No field-level language attributes: Why it can be a problem? Example 1

node/1lang1

Title

Body

Image field

node/2lang2

Title

Body

Image field

translation

synchronization

Page 12: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

10

No field-level language attributes: Why it can be a problem? Example 2

You need to synchronize nodereferences(i18nsync)

node/3 (en)event info

node/4 (ru) event info

node/1 (en)location info

node/2 (ru)location info

translation

translation

nodereference nodereference

Page 13: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

11

Problem with multilingual views based on nodereference

ru/events/by-location/Распределение событий по месту проведения:– Киев (6)– Кишинёв (4)

ru/events/by-location/37Список событий в Кишинёве

en/events/by-location/Events grouped by locations:– Kiev (6)– Chişinău (4)

en/events/by-location/36List of events in Chişinău

“Chişinău” (node/36) and “Кишинёв” (node/37) are different nodes, so when you switch language EN -> RU while viewing the “List of events in Chişinău” you will see an empty list instead of “Список событий в Кишинёве”.

en ru

en ru

Page 14: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

12

Inside vs outside

• However, the “outside” approach can have some advantages, too– It can be simpler to do or maintain– It can utilize such node-level things as access

permissions for nodes having certain attributes (e.g. when you have different people working with nodes in different languages), and so on

• It’s highly desirable to have both possibilities, and choose between them depending on the specific situation.

Page 15: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

13

Now, let us look at the D7 core• Modules included in D7 core (same as for D6):– Content Translation– Locale

(disabled by default)

Page 16: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

14

Site configuration settings: “Regional and Language” section

Available after enabling the “Locale” module

Page 17: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

15

Regional settings

New in D7:• Now you can set “Default country”

(to be used by contributed modules)• More intelligent time zone handling

(with PHP 5.2+ DateTime objects)

Page 18: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

16

Date and time settings• More control over date and time format

Page 19: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

17

Configuration of Languages: Detection and selection

New in D7:• Finer control over

language detection and selection• We can set order of

priorities

Page 20: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

18

Interface translation

New in D7:• Improved user

interface• Support for

context

Page 21: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

19

Contexts are intended for per-meaning translatability

Context:“May” as Long month name(not “may be”)

Context is a new feature; guidelines still need to be developed. So far, used inconsistently. Not supported by Javascript menu items and strings.

Page 22: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

20

Localization auto-update• Localization update module by Jose Reyero

(L10n_update)• Works similarly to Drupal core update module• Downloads translation updates from

localize.drupal.org (or from custom depository)• Available both for D7 and D6

(v. 7.x-1.0-beta2 and 6.x-1.0-beta1 of 2011-May-31)

Page 23: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

21

“Cheat sheets” for localizers(“шпаргалки”)

• Drupal 7 localization cheat sheet Drupal 6 localization cheat sheet by Gábor Hojtsy hojtsy.hu/files/Drupal7TranslationCheatSheetv2.pdfhojtsy.hu/files/Drupal6TranslationCheatSheetv2.pdf

Page 24: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

22

Now about content translation

Enable multilingual support in content type properties:Looking for this in “Publishing options” is not really obvious

Page 25: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

23

Now we can control ‘node.language’ attribute for nodes of this content type

• By default, a new node is Language neutral

New in D7:For language-neutral nodes, database fieldnode.language = ‘und’ ‘und’ means ‘undetermined’ in compliance with ISO 639

Page 26: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

24

Node translation (same as in D6)

“Translate” tab is seen when:

1. This content type has multilingual support “Enabled, with translation”

2. This node is NOT language neutral

3. User is permitted to translate content

Page 27: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

25

“Translation set” (same as in D6)node/1

Base node node.nid=1

node.language=‘en’node.tnid=1

node/2Translated node

node.nid=2 node.language=‘uk’

node.tnid=1

node/3Translated node

node.nid=3node.language=‘ru’

node.tnid=1

‘tnid’ – translation set idis shared by all nodes in a translation setis equal to ‘nid’ of the base node

Page 28: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

26

And now something really new…

D7 core has built-in support for field languages!!! (via its new Field API)

However, D7 has NO built-in interface for translatable fields

We need to use some contributed modules

Page 29: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

27

Entity_translation moduleCan be used to translate fields

New item in “Regional and language settings” – “Entity translation”

Page 30: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

28

Entity translation

Field settings: “Users may translate this field”

New option for multilingual support in content type properties

Page 31: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

29

Single node with multilingual body and other fields: wow, it [almost] works!

example.com/node/1 example.com/uk/node/1

Node title is a different kind of field and cannot be translated this way!!!

Page 32: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

30

‘Title’ module: replace node title with a regular field

Page 33: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

31

Single node with multilingual body and other fields: now the title can be translated, too!

example.com/node/1 example.com/uk/node/1

Node title is now replaced with a regular field using ‘Title’ module

Page 34: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

32

Entity_translation + Title:is this already the “multilingual field goodness”?

• These modules are very recent, still at the ‘dev’ stage (v. 7.x-1.x-dev)

• As of June 2, 2011, – 130 sites currently report using ‘Entity_translation’– 59 sites currently report using ‘Title’

• Still quite a lot of todo’s• We need to test its interactions with views.

taxonomy, paths, and so on.

Page 35: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

33

Now about the i18n.module

– Q: Can I build a multilingual site using only the core D7 functionality?

– A: A very simple site – yes, but for more complex things you’ll need the i18n.module.

i18n helps you handle multilingual blocks, menus, views, synchronization of items between nodes, and so on.

Page 36: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

34

Enabling multilingual variables in i18n/D6: add their names (site_name, site_footer,

theme_settings, etc.) to the settings.php file$conf['i18n_variables'] = array( // Site name, slogan, mission, etc.. 'site_name', 'site_slogan', 'site_mission', 'site_footer', 'anonymous', // Different front page for each language 'site_frontpage', // Primary and secondary links 'menu_primary_links_source', 'menu_secondary_links_source', // Contact form information 'contact_form_information', // For theme variables, read more below 'theme_settings', 'theme_garland_settings',);

Page 37: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

35

i18n/D7 does not work this way anymore

Now multilingual variables are controlled via

“Multilingial settings – Variables” menu

(Depends on the new variable.module)

Page 38: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

36

Multilingual variables

A very convenient link to switch languages

(especially if there is no language switcher in the admin theme)

Page 39: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

37

New in D7 and important: Translation set API(i18n_translation.module)

• Now we can create translation sets not only for nodes, but for other things, too:– taxonomy terms– menu items– paths

• Not implemented yet for blocks

Page 40: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

38

Taxonomy terms

Connect different terms as translations of each other:

This option was available in D6, too – but it did not really work.

Now (I hope) it should!

Page 41: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

39

New: Path translation (i18n_path.module)

• Intended for translation of generic paths that don't have other way of being translated.

• From any of these pages, the language switcher will point to the other path for each language.

• Note: path translations must be defined without aliases.

Page 42: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

40

Menu translation

• Thanks to Translation set API, now we can translate menu items pointing to specific nodes, e.g.:(en) -> node/1(uk) -> node/2

Page 43: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

41

Blocks

• Translation sets not working for Blocks yet(?)

• Improved UI and visibility options• Block can be translated via string

translation

Page 44: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

42

Other improvements in i18n• More options and improved UI for content

selection and filtering by language• More items can be synchronized between

translation set nodes (because more items are available as Fields)

• Translation redirect (i18n_redirect.module): redirect to translated path when available (SEO optimization)

• Contact form translation (i18n_contact.module) – recently added

Page 45: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

43

Berlin Internationalization sprint(May 11-15, 2011)

• i18nsprint.drupalevents.de• reyero.net/en/drupal/berlin_internationalization_

sprint: “How i18n got some fresh blood and a sexy facelift”

• i18n 7.x-1.0-beta6 (May 24, 2011)includes improvements from Berlin i18n sprint.New features:– Consistent translation tabs for objects– Contact form translation

Page 46: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

44

Summary of most important changes in D7 and i18n/D7

• D7: – Translation of fields within a node

(no built-in UI yet, available via recently contributed modules)

• i18n/D7: – Translation sets

(connecting taxonomy terms, menu items, paths, etc.)

• Plus lots of less important improvements in UI, content selection and filtering, etc.

Page 47: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

45

References• Drupal 7's new multilingual systems compilation

by Gábor Hojtsy hojtsy.hu/multilingual-drupal7

• Drupal 7 Multilingual: What is new in i18n by Suzanne Kennedyevolvingweb.ca/story/drupal-7-multilingual-whats-new-i18n

• Multilanguage for Drupal 7: Internationalization module (i18n beta1) by Jose Reyeroreyero.net/en/drupal/drupal7_i18n_beta1_overview

• Content Translation (field translation) in Drupal 7: First steps by Randy Fay (read discussions in the comments, too!)randyfay.com/node/88

Page 48: Grigory naumovets.multilingual sites.drupal camp kyiv 2011

46

Questions?

Contacts: http://camp11.drupal.ua/users/GN [email protected] http://gn.org.ua/feedback