Drupal 8s multilingual APIs Gbor Hojtsy DRUPAL 7 MULTILINGUAL - - PowerPoint PPT Presentation

drupal 8 s multilingual apis
SMART_READER_LITE
LIVE PREVIEW

Drupal 8s multilingual APIs Gbor Hojtsy DRUPAL 7 MULTILINGUAL - - PowerPoint PPT Presentation

Drupal 8s multilingual APIs Gbor Hojtsy DRUPAL 7 MULTILINGUAL DRUPAL 7 MULTILINGUAL Drupal CORE DRUPAL 7 MULTILINGUAL LOCALE Drupal CORE DRUPAL 7 MULTILINGUAL LOCALE L10n UP m Drupal CORE DRUPAL 7 MULTILINGUAL LOCALE


slide-1
SLIDE 1
slide-2
SLIDE 2

Drupal 8’s multilingual APIs

Gábor Hojtsy

slide-3
SLIDE 3
slide-4
SLIDE 4
slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8
slide-9
SLIDE 9
slide-10
SLIDE 10

DRUPAL 7 MULTILINGUAL

slide-11
SLIDE 11

Drupal CORE

DRUPAL 7 MULTILINGUAL

slide-12
SLIDE 12

Drupal CORE

LOCALE

  • DRUPAL 7 MULTILINGUAL
slide-13
SLIDE 13

Drupal CORE

L10n UP LOCALE

  • m

DRUPAL 7 MULTILINGUAL

slide-14
SLIDE 14

Drupal CORE

L10n UP CONTENT TRANSLATION LOCALE

  • Ü

m

DRUPAL 7 MULTILINGUAL

slide-15
SLIDE 15

Drupal CORE

L10n UP CONTENT TRANSLATION LOCALE

I18N

  • Ü

m

DRUPAL 7 MULTILINGUAL

slide-16
SLIDE 16

Drupal CORE

L10n UP CONTENT TRANSLATION LOCALE

I18N

VARIABLE

  • Ü

m

DRUPAL 7 MULTILINGUAL

slide-17
SLIDE 17

Drupal CORE

L10n UP CONTENT TRANSLATION LOCALE

I18N

VARIABLE

Entity translation

  • Ü

m

DRUPAL 7 MULTILINGUAL

slide-18
SLIDE 18

FOUR PILLARS IN DRUPAL 8

slide-19
SLIDE 19

LANGUAGE

Base services for all modules dealing with data. Not just multilingual.

  • FOUR PILLARS IN DRUPAL 8
slide-20
SLIDE 20

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

slide-21
SLIDE 21

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

slide-22
SLIDE 22

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

slide-23
SLIDE 23

LANGUAGE INTERFACE CONTENT CONFIG

(

  • 8

é

FOUR PILLARS IN DRUPAL 8

slide-24
SLIDE 24

DEALING WITH LANGUAGE

\Drupal:languageManager() LanguageManager ConfigurableLanguageManager

slide-25
SLIDE 25

DEALING WITH LANGUAGE

  • >getLanguages()

UND: NOT SPECIFIED ZXX: NOT APPLICABLE EN: ENGLISH (DEFAULT)

slide-26
SLIDE 26

DEALING WITH LANGUAGE

  • >getLanguages()

UND: NOT SPECIFIED ZXX: NOT APPLICABLE HU: HUNGARIAN IT: ITALIAN

slide-27
SLIDE 27

DEALING WITH LANGUAGE

  • >getLanguages()

UND: NOT SPECIFIED ZXX: NOT APPLICABLE HU: HUNGARIAN IT: ITALIAN

language.entity.$langcode.yml

slide-28
SLIDE 28

DEALING WITH LANGUAGE

  • >getLanguages()

UND: NOT SPECIFIED ZXX: NOT APPLICABLE HU: HUNGARIAN IT: ITALIAN

language.entity.$langcode.yml

Locked

slide-29
SLIDE 29

DEALING WITH LANGUAGE

  • >getLanguages()

UND: NOT SPECIFIED ZXX: NOT APPLICABLE HU: HUNGARIAN IT: ITALIAN

language.entity.$langcode.yml

Locked Not locked

slide-30
SLIDE 30

DEALING WITH LANGUAGE

ConfigurableLanguage::
 createFromLangcode(‘fr’)


  • >save()
slide-31
SLIDE 31

DEALING WITH LANGUAGE

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

slide-32
SLIDE 32

DEALING WITH LANGUAGE

$languageManager


  • >getCurrentLanguage()
slide-33
SLIDE 33

LANGUAGE INTERFACE CONTENT CONFIG

(

  • 8

é

FOUR PILLARS IN DRUPAL 8

slide-34
SLIDE 34

INTERFACE LANGUAGE

slide-35
SLIDE 35

INTERFACE LANGUAGE

t(‘English text’)

slide-36
SLIDE 36

INTERFACE LANGUAGE

slide-37
SLIDE 37

DEPENDENCY INJECTION

LOGIC

TRANSLATION CONFIGURATION USER

slide-38
SLIDE 38

DEPENDENCY INJECTION

LOGIC

TRANSLATION CONFIGURATION USER

slide-39
SLIDE 39

INTERFACE LANGUAGE

t(‘English text’)

slide-40
SLIDE 40

INTERFACE LANGUAGE

t(‘English text’) $this->t(‘English text’)

slide-41
SLIDE 41

INTERFACE LANGUAGE

class Foo { use StringTranslationTrait; … }

slide-42
SLIDE 42

INTERFACE LANGUAGE

slide-43
SLIDE 43

INTERFACE LANGUAGE

$this->t(‘English text’)


  • >getOption(‘langcode’);
slide-44
SLIDE 44

INTERFACE LANGUAGE

format_plural(…) $this->formatPlural(…)

slide-45
SLIDE 45

JAVASCRIPT API

Drupal.t(…) Drupal.formatPlural()

slide-46
SLIDE 46

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

slide-47
SLIDE 47

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

slide-48
SLIDE 48

LANGUAGE INTERFACE CONTENT CONFIG

(

  • 8

é

FOUR PILLARS IN DRUPAL 8

English to X

slide-49
SLIDE 49

NODE.PHP (SNIPPET)

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

slide-50
SLIDE 50

NODE.PHP (SNIPPET)

function baseFieldDefinitions($entity_type) { // … $fields['title'] = BaseFieldDefinition::create('string')

  • >setLabel(t('Title'))
  • >setRequired(TRUE)
  • >setTranslatable(TRUE);

}

slide-51
SLIDE 51

FIELDS THEMSELVES

slide-52
SLIDE 52

FIELDS THEMSELVES

AUTOMATED!

slide-53
SLIDE 53

MULTICOLUMN FIELD SNIPPET

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

slide-54
SLIDE 54

ENTITY LANGUAGE API

$node = Node::load(42); $node = $node

  • >getTranslation(‘hu’);

$node = $entityRepository

  • >getTranslationFromContext($node);
slide-55
SLIDE 55

ENTITY LANGUAGE API

$node->getUntranslated() $node->language() $node->getTranslationLanguages() $node->hasTranslation(‘hu’) $node->addTranslation(‘hu’) $node->removeTranslation(‘hu’)

slide-56
SLIDE 56

VIEWS ALL THE THINGS

slide-57
SLIDE 57

LANGUAGE INTERFACE CONTENT CONFIG

(

  • 8

é

FOUR PILLARS IN DRUPAL 8

English to X X to Y Intelligent

  • bjects
slide-58
SLIDE 58

CONFIG/INSTALL/SYSTEM.MAINTENANCE.YML

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

slide-59
SLIDE 59

CORE.DATA_TYPES.SCHEMA.YML

config_object: type: mapping mapping: langcode: type: string label: 'Language code' … text: type: string label: 'Text' translatable: true

slide-60
SLIDE 60

CONFIG/SCHEMA/SYSTEM.SCHEMA.YML

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

LANGCODE TRANSLATABLE STRING

slide-61
SLIDE 61

SYSTEM.MAINTENANCE.YML

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

slide-62
SLIDE 62

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

slide-63
SLIDE 63

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

message: '@site karbantartás alatt áll…’

slide-64
SLIDE 64

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

message: '@site karbantartás alatt áll…’

LANGUAGES/IT/SYSTEM.…YML

slide-65
SLIDE 65

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

message: '@site karbantartás alatt áll…’

LANGUAGES/IT/SYSTEM.…YML

message: '@site …’

slide-66
SLIDE 66

CONFIGURATION API

$config = \Drupal::config(‘system.maintenance’); $config->get(‘message’);

slide-67
SLIDE 67

CONFIGURATION API

$config = \Drupal::config(‘system.maintenance’); $config->get(‘message’);

OVERRIDES APPLY AS APPROPRIATE

slide-68
SLIDE 68

CONFIGURATION API

$manager = \Drupal::languageManager(); $hu = $manager->getLanguage('hu'); $original = $manager->getConfigOverrideLanguage(); $manager->setConfigOverrideLanguage($hu); $config = \Drupal::config(‘system.maintenance'); // … $manager->setConfigOverrideLanguage($original);

slide-69
SLIDE 69

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

slide-70
SLIDE 70

LANGUAGE INTERFACE CONTENT CONFIG

(

  • 8

é

FOUR PILLARS IN DRUPAL 8

English to X X to Y Intelligent

  • bjects

X to Y Dumb arrays

slide-71
SLIDE 71
slide-72
SLIDE 72
slide-73
SLIDE 73

How was it?

Evaluate this session - https://events.drupal.org/node/9814

@gaborhojtsy