Multilingual Drupal 7

    Drupal Camp ZP
About Me
Pavel Makhrinsky
Drupal Developer in Berlingske Media
http://drupal.org/user/773216

•
Multilingual types
• Localized
Single language site
• Multilingual site
Site with different content for different languages
• Multilingual site with translation
Site with translated content
•
Translatable items
                                 Strings
                                 Menus
                                 Content


Variables

                                 Entities
Configuration
• Core modules
    – Locale
    – Content translate
• Custom modules
    – i18n (Internalization)
    – l10n (Localization helper modules)
    – Entity translation
•
•
Language handling
Language detection
User interface translation



Locale
Locale: languages
  admin/config/regional/language
Locale: language detection
   admin/config/regional/language/configure
Locale: string translation
localize.drupal.org
Localization client
Localization server
Localization update

Community translations
localize.drupal.org
Translation update workflow
Language types
• Interface language
          – t()
          – format_plural()
• Content language *
          – Used for Field API
          – Used for content translation
• URL language *
          – l()
•
Not configurable by core
t(), format_plural()
Context



Translating strings
t(): variations
• t()
if your code will never run during the Drupal installation phase
• st()
if your code will only run during installation and never any other
time
• get_t()
if your code could run in either circumstance
t(): calling
Parameters
• $string
• $args
     – @argument – processed via check_plain()
     – %argument – processed via drupal_placeholder()
     – !argument – inserted as is.
• $options
     – context – context for string
     – langcode – language code, default current
         language
t(): examples
format_plural(): parameters
Parameters
• $count
• $singular
• $plural
• $args
      – @argument – processed via check_plain()
      – %argument – processed via drupal_placeholder()
      – !argument – inserted as is.
• $options
      – context – context for string
      – langcode – language code, default current language
format_plural(): russian
• Add configuration to .po file
"Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?" "(0):(((((n
%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));"

• Add translation
msgid "1 comment"
msgid_plural "@count comments"
msgstr[0] "@count комментарий"
msgstr[1] "@count комментария"
msgstr[2] "@count[2] комментариев"
format_plural(): examples
Context
• The way to describe string
• Works for
      –    t()
      –    format_plural()
      –    Drupal.t()
      –    Drupal.formatPlural()


             Drupal 6                      Drupal 7
                                               Представления
                  Представления    Views
   Views     ?                                 Просмотры
                  Просмотры
JavaScript
• Drupal.t()
1 // Drupal 7.10+
2 shortMay = Drupal.t('May');
3 longMay = Drupal.t('May', {}, {context: "Long month name"});
4
5 // Drupal 7.9-
6 shortMay = Drupal.t('May');
7 longMay = '.... not possible in JS ....';



• Drupal.formatPlural()
1 var n = 3
2 Drupal.formatPlural(n, '1 comment', '[@count] comments', {},
{context: "Tricky comments"});
Context: examples
Translating nodes
Translating fields

Translating content
Translation types
    Node translation            Field translation


Base                                                       ru
node                                               Title    en
 (ru)
                            Entity                         uk
               Node       (default language)

                (en)                                       ru

                                                   Body     en

Node                    Price              Photo
                                                           uk

 (uk)                   (und)              (und)
Node translation: configuration
                     Modules
• Modules:
     – Locale
     – Content translation
• Additional modules:
     – Internalization
     – Multilingual content
     – Multilingual select
     – Synchronize translations
     – Translation redirect
Node translation: configuration
           Content type
Node translation: configuration
      i18n: Multilingual content
Node translation: translation
Node translation: configuration
       i18n: Multilingual select
Node translation: configuration
       i18n: Multilingual select
Entity translation: configuration
                      Modules
• Modules:
     – Locale
     – Entity translation
• Additional modules:
     – Title
•
Entity translation: configuration
             Settings
Entity translation: configuration
           Node creation
The ways
i18n
Usage of context

Menu
Internalization: Menu translation
Separate menus

  English                                         Russian

                Node                    Node
Node item       (en)                     (ru)    Node item




                            Link
Menu router               (home,                Menu router
   item                default pages)              item
One menu, content translation

Node item    Node item    Menu router
In English   In Russian      item




  Node         Node            Link
  (en)          (ru)         (home,
                          default pages)
One menu, entity translation
       Node item
                       Menu router
        Localized
                          item
    Language neutral



         Node               Link
         (en)             (home,
                       default pages)
Menu: adding context
 1 function multilingual_menu() {
 2   $items = array();
 3
 4   $items['yabadabadu'] = array(
 5      'page callback' => 'multilingual_yabadabadu_page',
 6      'access callback' => TRUE,
 7      'type' => MENU_NORMAL_ITEM,
 8      'menu_name' => 'main-menu',
 9
10      'title' => 'Ya-ba-da-ba-du !test',
11      'title callback' => 'multilingual_title_callback',
12      'title arguments' => array(),
13   );
14
15   return $items;
16 }

1 function multilingual_title_callback() {
2   return t('Overwritten !test',
3            array('!test' => 'ya-ba-da-ba-du'),
4            array('context' => 'Multilingual')
5   );
6 }
Menu: adding context
Blocks
Variables
Field properties

Miscellanious items
Block: Block languages
Variables: Variable translation
Field settings: Field translation
Localization update
Localization client
Translation overview

Useful Modules
Localization update
Localization client
Translation overview
Links
•   http://hojtsy.hu/files/Drupal7TranslationCheatSheetv2.pdf
•   http://hojtsy.hu/multilingual-drupal7
•   http://api.drupal.org/api/drupal/includes!common.inc/group/sanit
•   http://api.drupal.org/api/drupal/modules!field!field.multilingual.in
•
Questions?


  Pavel Makhrinsky
  Skype: gumanista

Multilingual drupal 7