Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update...

73

Transcript of Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update...

Page 1: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 2: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal 8’s multilingual APIsGábor Hojtsy

Page 3: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 4: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 5: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 6: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 7: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 8: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 9: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 10: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DRUPAL 7 MULTILINGUAL

Page 11: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

DRUPAL 7 MULTILINGUAL

Page 12: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

LOCALE

!

DRUPAL 7 MULTILINGUAL

Page 13: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

L10n UP

LOCALE

!

m

DRUPAL 7 MULTILINGUAL

Page 14: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

L10n UP

CONTENT TRANSLATION

LOCALE

!

Ü

m

DRUPAL 7 MULTILINGUAL

Page 15: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

L10n UP

CONTENT TRANSLATION

LOCALE

I18N !

!

Ü

m

DRUPAL 7 MULTILINGUAL

Page 16: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

L10n UP

CONTENT TRANSLATION

LOCALE

I18N

VARIABLE

"

!

!

Ü

m

DRUPAL 7 MULTILINGUAL

Page 17: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

Drupal CORE

L10n UP

CONTENT TRANSLATION

LOCALE

I18N

VARIABLE

Entity translation

#

"

!

!

Ü

m

DRUPAL 7 MULTILINGUAL

Page 18: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

FOUR PILLARS IN DRUPAL 8

Page 19: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE

Base services for all modules dealing

with data. Not just multilingual.

!

FOUR PILLARS IN DRUPAL 8

Page 20: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE

Base services for all modules dealing

with data. Not just multilingual.

INTERFACE

Interface translation has built-in update

feature, improved usability.

! 8

FOUR PILLARS IN DRUPAL 8

Page 21: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE

Base services for all modules dealing

with data. Not just multilingual.

INTERFACE

Interface translation has built-in update

feature, improved usability.

CONTENT

Field translation in built-in API for all entities. Content

translation module provides user

interface.

! 8 é

FOUR PILLARS IN DRUPAL 8

Page 22: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE

Base services for all modules dealing

with data. Not just multilingual.

INTERFACE

Interface translation has built-in update

feature, improved usability.

CONTENT

Field translation in built-in API for all entities. Content

translation module provides user

interface.

CONFIG

Common configuration

system handles blocks, views, field settings. Unified

translation.

(! 8 é

FOUR PILLARS IN DRUPAL 8

Page 23: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE INTERFACE CONTENT CONFIG

(! 8 é

FOUR PILLARS IN DRUPAL 8

Page 24: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

\Drupal:languageManager()

LanguageManager

ConfigurableLanguageManager

Page 25: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

->getLanguages()

UND: NOT SPECIFIED

ZXX: NOT APPLICABLE

EN: ENGLISH (DEFAULT)

Page 26: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

->getLanguages()

UND: NOT SPECIFIED

ZXX: NOT APPLICABLE

HU: HUNGARIAN

IT: ITALIAN

Page 27: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

->getLanguages()

UND: NOT SPECIFIED

ZXX: NOT APPLICABLE

HU: HUNGARIAN

IT: ITALIAN

language.entity.$langcode.yml

Page 28: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

->getLanguages()

UND: NOT SPECIFIED

ZXX: NOT APPLICABLE

HU: HUNGARIAN

IT: ITALIAN

language.entity.$langcode.yml

Locked

Page 29: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

->getLanguages()

UND: NOT SPECIFIED

ZXX: NOT APPLICABLE

HU: HUNGARIAN

IT: ITALIAN

language.entity.$langcode.yml

Locked Not locked

Page 30: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

ConfigurableLanguage::createFromLangcode(‘fr’)->save()

Page 31: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

ConfigurableLanguage::load(‘fr’)->delete()

Page 32: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEALING WITH LANGUAGE

$languageManager->getCurrentLanguage()

Page 33: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE INTERFACE CONTENT CONFIG

(! 8 é

FOUR PILLARS IN DRUPAL 8

Page 34: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

Page 35: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

t(‘English text’)

Page 36: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

Page 37: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEPENDENCY INJECTION

LOGIC

TRANSLATION

CONFIGURATIONUSER

Page 38: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

DEPENDENCY INJECTION

LOGIC

TRANSLATION

CONFIGURATIONUSER

Page 39: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

t(‘English text’)

Page 40: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

t(‘English text’)

$this->t(‘English text’)

Page 41: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

class Foo {

use StringTranslationTrait;

}

Page 42: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

Page 43: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

$this->t(‘English text’)->getOption(‘langcode’);

Page 44: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

INTERFACE LANGUAGE

format_plural(…)

$this->formatPlural(…)

Page 45: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

JAVASCRIPT API

Drupal.t(…)

Drupal.formatPlural()

Page 46: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LOCALE.LINKS.MENU.YML

locale.translate_page: title: 'User interface translation' description: 'Configure the import …’ route_name: locale.translate_page parent: system.admin_config_regional weight: 15 locale.translate_status: title: 'Available translation updates' route_name: locale.translate_status description: 'Get a status report …’ parent: system.admin_reports

Page 47: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LOCALE.LINKS.MENU.YML

locale.translate_page: title: 'User interface translation' description: 'Configure the import …’ route_name: locale.translate_page parent: system.admin_config_regional weight: 15 locale.translate_status: title: 'Available translation updates' route_name: locale.translate_status description: 'Get a status report …’ parent: system.admin_reports

Page 48: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE INTERFACE CONTENT CONFIG

(! 8 é

FOUR PILLARS IN DRUPAL 8

English to X

Page 49: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

NODE.PHP (SNIPPET)

/** * Defines the node entity class. * * @ContentEntityType( * id = "node", * label = @Translation(“Content"), * translatable = TRUE, * entity_keys = { * "id" = "nid", * "label" = "title", * "langcode" = "langcode", * } * )

Page 50: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

NODE.PHP (SNIPPET)

function baseFieldDefinitions($entity_type) { // … $fields['title'] = BaseFieldDefinition::create('string') ->setLabel(t('Title')) ->setRequired(TRUE) ->setTranslatable(TRUE);

}

Page 51: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

FIELDS THEMSELVES

Page 52: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

FIELDS THEMSELVES

AUTOMATED!

Page 53: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

MULTICOLUMN FIELD SNIPPET

* @FieldType( * id = "image", * column_groups = { * "file" = { * "label" = @Translation("File"), * "columns" = { * "target_id", "width", "height" * }, * }, * "alt" = { * "label" = @Translation("Alt"), * "translatable" = TRUE * }, * }

Page 54: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

ENTITY LANGUAGE API

$node = Node::load(42);

$node = $node ->getTranslation(‘hu’);

$node = $entityRepository ->getTranslationFromContext($node);

Page 55: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

ENTITY LANGUAGE API

$node->getUntranslated()

$node->language()

$node->getTranslationLanguages()

$node->hasTranslation(‘hu’)

$node->addTranslation(‘hu’)

$node->removeTranslation(‘hu’)

Page 56: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

VIEWS ALL THE THINGS

Page 57: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE INTERFACE CONTENT CONFIG

(! 8 é

FOUR PILLARS IN DRUPAL 8

English to X X to Y

Intelligent objects

Page 58: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIG/INSTALL/SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

Page 59: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CORE.DATA_TYPES.SCHEMA.YML

config_object: type: mapping mapping: langcode: type: string label: 'Language code' …

text: type: string label: 'Text' translatable: true

Page 60: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIG/SCHEMA/SYSTEM.SCHEMA.YML

system.maintenance: type: config_object label: 'Maintenance mode' mapping: message: type: text label: 'Message to display…’

LANGCODE

TRANSLATABLE STRING

Page 61: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

Page 62: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

LANGUAGES/HU/SYSTEM.…YML

Page 63: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

LANGUAGES/HU/SYSTEM.…YMLmessage: '@site karbantartás alatt áll…’

Page 64: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

LANGUAGES/HU/SYSTEM.…YMLmessage: '@site karbantartás alatt áll…’

LANGUAGES/IT/SYSTEM.…YML

Page 65: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

SYSTEM.MAINTENANCE.YML

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en

LANGUAGES/HU/SYSTEM.…YMLmessage: '@site karbantartás alatt áll…’

LANGUAGES/IT/SYSTEM.…YMLmessage: '@site …’

Page 66: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIGURATION API

$config = \Drupal::config(‘system.maintenance’);

$config->get(‘message’);

Page 67: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIGURATION API

$config = \Drupal::config(‘system.maintenance’);

$config->get(‘message’);

OVERRIDES APPLY AS

APPROPRIATE

Page 68: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIGURATION API

$manager = \Drupal::languageManager(); $hu = $manager->getLanguage('hu');

$original = $manager->getConfigOverrideLanguage(); $manager->setConfigOverrideLanguage($hu);

$config = \Drupal::config(‘system.maintenance'); // …

$manager->setConfigOverrideLanguage($original);

Page 69: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

CONFIGURATION API

\Drupal::config(‘system.maintenance’);

\Drupal::configFactory()->getEditable(‘system.maintenance’);

\Drupal::languageManager() ->getLanguageConfigOverride ('hu', 'system.maintenance') ->set('message', 'Karbantartás...') ->save();

OVERRIDES APPLY AS

APPROPRIATE

NO OVERRIDES APPLY

THE OVERRIDE ITSELF

Page 70: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

LANGUAGE INTERFACE CONTENT CONFIG

(! 8 é

FOUR PILLARS IN DRUPAL 8

English to X X to Y

Intelligent objects

X to Y

Dumb arrays

Page 71: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 72: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all
Page 73: Drupal 8’s multilingual APIs · multilingual. INTERFACE Interface translation has built-in update feature, improved usability. CONTENT Field translation in built-in API for all

How was it?Evaluate th is session - ht tps: / /events.drupal .org/node/9814

@gaborhojtsy