Weltkarte - php-schulung.de · Timon Schroeter 5 Definitionen i18n, L10n i18n ==...

72
i18n

Transcript of Weltkarte - php-schulung.de · Timon Schroeter 5 Definitionen i18n, L10n i18n ==...

Page 1: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

i18n

Page 2: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

L10n

Page 3: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 3 www.php-schulung.de

Bedeutung voni18n, L10n

● i18n == Internationalization

● L10n == Localization

Page 4: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 4 www.php-schulung.de

Definitioneni18n, L10n

● i18n == Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes.

● L10n == Localization

Page 5: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 5 www.php-schulung.de

Definitioneni18n, L10n

● i18n == Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes.

● L10n == Localization is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text.

http://en.wikipedia.org/wiki/Internationalization_and_localization

Page 6: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 6 www.php-schulung.de

Ablauf der Übersetzung

1)

2)

3)

4)

Request trifft bei unsererApplikation ein,

keine Response im Cache Stell' Dir vor unser System wäre bereits

vollständig internationalisiert

und lokalisiert.

Page 7: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 7 www.php-schulung.de

Ablauf der Übersetzung

1) Frage an Dich: Wie könnte der Ablauf aussehen?

2)

3)

4)

Page 8: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 8 www.php-schulung.de

Ablauf der Übersetzung

1) Locale des aktuellen Request wird ermittelt

2)

3)

4)

Page 9: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 9 www.php-schulung.de

Ablauf der Übersetzung

1) Locale des aktuellen Request wird ermittelt

2) MessageCatalogue für (1) wird geladen

3)

4)

Page 10: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 10 www.php-schulung.de

Ablauf der Übersetzung

1) Locale des aktuellen Request wird ermittelt

2) MessageCatalogue für (1) wird geladen

3) MessageCatalogue für fallback Locale wird geladen und verwendet um alle Nachrichten zu ergänzen die in 2 nicht vorhanden sind, so entsteht im RAM ein „Dictionary“

4)

Page 11: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 11 www.php-schulung.de

Ablauf der Übersetzung

1) Locale des aktuellen Request wird ermittelt

2) MessageCatalogue für (1) wird geladen

3) MessageCatalogue für fallback Locale wird geladen und verwendet um alle Nachrichten zu ergänzen die in 2 nicht vorhanden sind, so entsteht im RAM ein „Dictionary“

4) Jede zu übersetzende Nachricht wird im Dictionary gesucht. Falls nicht vorhanden, wird die Nachricht unverändert zurück gegeben.

Page 12: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 12 www.php-schulung.de

Erforderliche Vorbereitung

● Frage an Dich: Was ist alles zu tun für i18n + L10n ● ● ●

Page 13: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 13 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● „Translation resource“ (z.B. Datei) für jede

unterstützte Locale bereit stellen

Page 14: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 14 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen

Page 15: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 15 www.php-schulung.de

Ausgabe Strings abstrahieren

$message = 'Hello World';

echo $message;

echo $translator->trans($message);

{{ message }}

{{ message|trans }}

{% trans %} Hello World {% endtrans %}

Page 16: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 16 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen

Page 17: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 17 www.php-schulung.de

Translator konfigurieren

# app/config/config.yml

framework:

translator:

enabled: true

Page 18: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 18 www.php-schulung.de

Translator konfigurieren

# app/config/config.yml

framework:

translator:

fallback: en

Page 19: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 19 www.php-schulung.de

Translator konfigurieren

# app/config/config.yml

framework:

default_locale: en

translator:

fallback: en

Page 20: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 20 www.php-schulung.de

Translator konfigurieren

# app/config/config.yml

framework:

default_locale: en

translator:

fallback: en

?

Page 21: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 21 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen

Page 22: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 22 www.php-schulung.de

Locale des aktuellen Request

/**

* @Route("/{_locale}/contact/{id}")

*/

public function showAction($id)

{

// ...

}

Page 23: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 23 www.php-schulung.de

Locale des aktuellen Request

/**

* @Route("/{_locale}/contact/{id}",

requirements={“_locale” = "en|fr|de"},

defaults={“_locale”: “en”})

*/

public function showAction($id)

{

// ...

Page 24: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 24 www.php-schulung.de

Locale des aktuellen Request

/**

* @Route("/{_locale}/contact/{id}")

*/

public function showAction($id)

{

// ...

}

Page 25: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 25 www.php-schulung.de

Locale des aktuellen Request

/**

* @Route("/{_locale}/contact/{id}")

*/

public function showAction($id, Request $request)

{

$locale = $request->getLocale();

// ...

$request->setLocale('en_US');

Page 26: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 26 www.php-schulung.de

Sticky Locale mittels Session

● Technisch möglich, aber schlechte Idee, warum?● Bessere Idee: Redirect auf z.B. /de/...

Page 27: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 27 www.php-schulung.de

Sticky Locale mittels Session

● Technisch möglich, aber schlechte Idee, denn:

Ein Uniform Resource Locator identifiziert und lokalisiert eine Ressource

● Bessere Idee: Redirect auf z.B. /de/...

Page 28: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 28 www.php-schulung.de

Sticky Locale mittels Session

● Technisch möglich, aber schlechte Idee, denn:

Ein Uniform Resource Locator identifiziert und lokalisiert eine Ressource

● Bessere Idee: Redirect auf z.B. /de/...● Wenn Sticky Locale dennoch gewünscht:

– Setzen● $this->get('session')->set('_locale', 'en_US');

– Auswerten http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html

Page 29: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 29 www.php-schulung.de

LuneticsLocaleBundle● Erlaubt Locale Ermittlung basierend auf

– Query parameter

– Route parameters

– Browser preferences

– Cookie or the Session

– Subdomain hostname

– Custom guesser● https://packagist.org/packages/lunetics/locale-bundle

● https://github.com/lunetics/LocaleBundle/blob/master/Resources/doc/index.markdown

● https://github.com/lunetics/LocaleBundle/blob/master/Resources/doc/guesser.md

Page 30: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 30 www.php-schulung.de

JMSI18nRoutingBundle

● Sehr nützlich um bestehende Apps nachträglich zu internationalisieren

● Unterstützt z.B. das Schema– / (read Accept-Language Header)

– /de/ (de_DE)

– /en/ (en_US)

● http://jmsyst.com/bundles/JMSI18nRoutingBundle ● https://packagist.org/packages/jms/i18n-routing-bundle

Page 31: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 31 www.php-schulung.de

JMSI18nRoutingBundle

● Sehr nützlich um bestehende Apps nachträglich zu internationalisieren

● Unterstützt z.B. das Schema– / (read Accept-Language Header)

– /de/ (de_DE)

– /en/ (en_US)

● http://jmsyst.com/bundles/JMSI18nRoutingBundle ● https://packagist.org/packages/jms/i18n-routing-bundle

JMS == Johannes Schmitt,Symfony Core Contributor

=> Gute Qualität

Page 32: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 32 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen

Page 33: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 33 www.php-schulung.de

Translation resources für alle Locales bereit stellen

● Datei● dynamische Quelle (DB, API etc.)

– Für gute Performance● Alle Übersetzungen auf einmal laden● Caching als Datei oder Blob in KeyValue Store

Page 34: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 34 www.php-schulung.de

Translation resources für alle Locales bereit stellen

● Datei● dynamische Quelle (DB, API etc.)

– Für gute Performance● Alle Übersetzungen auf einmal laden● Caching als Datei oder Blob in KeyValue Store

Page 35: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 35 www.php-schulung.de

Übersetzungsdateien:Ordner Rangfolge

● <bunde directory>/Resources/translations/● app/Resources/<bundle name>/translations● app/Resources/translations● Frage an Dich: Warum drei mögliche Locations!?

Page 36: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 36 www.php-schulung.de

Übersetzungsdateien:Ordner Rangfolge

● <bunde directory>/Resources/translations/● app/Resources/<bundle name>/translations● app/Resources/translations● Messages aus (3rd Party) Bundles können auf

Ebende der App-Config überschrieben werden

Page 37: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 37 www.php-schulung.de

Übersetzungsdateien:Ordner Rangfolge

● <bunde directory>/Resources/translations/● app/Resources/<bundle name>/translations● app/Resources/translations● Messages aus (3rd Party) Bundles können auf

Ebende der App-Config überschrieben werden● Einzelne Messages werden sukzessive ersetzt,

d.h. nur veränderte erforderlich in app/...

Page 38: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 38 www.php-schulung.de

Übersetzungsdateien:Ordner Rangfolge

● <bunde directory>/Resources/translations/● app/Resources/<bundle name>/translations● app/Resources/translations● Messages aus (3rd Party) Bundles können auf

Ebende der App-Config überschrieben werden● Einzelne Messages werden sukzessive ersetzt,

d.h. nur veränderte erforderlich in app/...● Fallback vom Locale (de_AT) zur Sprache (de)

und erst dann zum Fallback Locale (en_US)

Page 39: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 39 www.php-schulung.de

Übersetzungsdateien: Namen

● domain.locale.loader– Domain: Optional, z.B. admin, navigation

● Die Default Domain ist „messages“

– Locale: z.B. en_GB, en_US, en, de_AT

– Loader: xliff, php or yml

Page 40: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 40 www.php-schulung.de

Übersetzungsdateien: Namen

● domain.locale.loader– Domain: Optional, z.B. admin, navigation

● Die Default Domain ist „messages“

– Locale: z.B. en_GB, en_US, en, de_AT

– Loader: xliff, php or yml

● Messages aus nicht default Domain verwenden:$translator->trans('Hallo Foo', [], 'admin');

Page 41: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 41 www.php-schulung.de

Übersetzungsdateien: Formate

● yml● php● xliff● beliebige weitere (eigenen Loader schreiben)

Page 42: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 42 www.php-schulung.de

Übersetzungsdateien: Formate

● ymlSymfony2 is great: J'aime Symfony2

● php● xliff● beliebige weitere (eigenen Loader schreiben)

Page 43: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 43 www.php-schulung.de

Übersetzungsdateien: Formate

● ymlSymfony2 is great: J'aime Symfony2

● phpreturn array(

'Symfony2 is great' => 'J\'aime Symfony2',

);

● xliff● beliebige weitere (eigenen Loader schreiben)

Page 44: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 44 www.php-schulung.de

Übersetzungsdateien: Formate

● ymlSymfony2 is great: J'aime Symfony2

● phpreturn array(

'Symfony2 is great' => 'J\'aime Symfony2',

);

● xliff<?xml version="1.0"?> ...

Page 45: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 45 www.php-schulung.de

<!-- messages.fr.xliff -->

<?xml version="1.0"?>

<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">

<file source-language="en" datatype="plaintext" original="file.ext">

<body>

<trans-unit id="1">

<source>Symfony2 is great</source>

<target>J'aime Symfony2</target>

</trans-unit>

</body>

</file>

</xliff>

Page 46: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 46 www.php-schulung.de

Übersetzungsdateien: Formate

● ymlSymfony2 is great: J'aime Symfony2

● phpreturn array(

'Symfony2 is great' => 'J\'aime Symfony2',

);

● xliff<?xml version="1.0"?> ...

Page 47: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 47 www.php-schulung.de

Messages: Real or Keyword

$translator->trans('Symfony is great');

$translator->trans('symfony.great');

$translator->trans('Administration Area');

$translator->trans('admin.title');

Page 48: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 48 www.php-schulung.de

Keyword Messages Kurzform in yml und php, nicht xml Dateien

symfony2:

is:

great: Symfony2 is great

amazing: Symfony2 is amazing

has:

bundles: Symfony2 has bundles

konvertiert intern zu:

symfony2.is.great: Symfony2 is great

symfony2.is.amazing: Symfony2 is amazing

symfony2.has.bundles: Symfony2 has bundles

Page 49: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 49 www.php-schulung.de

Keyword Messages Kurzform in yml und php, nicht xml Dateien

symfony2:

is:

great: Symfony2 is great

amazing: Symfony2 is amazing

has:

bundles: Symfony2 has bundles

konvertiert intern zu:

symfony2.is.great: Symfony2 is great

symfony2.is.amazing: Symfony2 is amazing

symfony2.has.bundles: Symfony2 has bundles

Vorteil: LeichtesSuchen mit Editor

Page 50: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 50 www.php-schulung.de

Platzhalter in Messages

$translated = $translator->trans(

'Hallo %name%, wie geht\'s Dir heute?',

array('%name%' => $name)

);

Page 51: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 51 www.php-schulung.de

Pluralisierung in Messages

$numberOfApples = 10;

$translated = $translator->transChoice(

'There is one apple|There are %count% apples',

$numberOfApples,

array('%count%' => $numberOfApples)

);

Page 52: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 52 www.php-schulung.de

Pluralisierung in Messages

$numberOfApples = 10;

$translated = $translator->transChoice(

'There is one apple|There are %count% apples',

$numberOfApples,

array('%count%' => $numberOfApples)

);

Erste Variante: 1 ObjektZweite Variante: Mehrere Objekte

Page 53: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 53 www.php-schulung.de

Pluralisierung in Messages

{% transchoice count %}

{0} There are no apples|

{1} There is one apple|

]1,Inf] There are %count% apples

{% endtranschoice %}

Page 54: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 54 www.php-schulung.de

Erforderliche Vorbereitung

● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen

Page 55: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 55 www.php-schulung.de

Weitere Möglichkeiten

● Custom Loader zum Laden aus DB, API etc.● Datenbank Inhalte übersetzten● Constraint Messages Übersetzten● Locale manuell festlegen

Page 56: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 56 www.php-schulung.de

interface LoaderInterface

{

/**

* @param mixed $resource A resource

* @param string $locale A locale

* @param string $domain The domain

*

* @return MessageCatalogue

* @throws NotFoundResourceException

* @throws InvalidResourceException

*/

public function load($resource, $locale, $domain = 'messages');

}

Custom Loader zum Laden aus DB, API etc.

Page 57: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 57 www.php-schulung.de

class MyCustomLoader implements LoaderInterface

{

public function load($resource, $locale, $domain = 'messages')

{

// Übersetzungen Laden aus DB, API etc.

$catalogue = new MessageCatalogue($locale);

$catalogue->set('hello.world', 'Hello World!', $domain);

return $catalogue;

}

}

Custom Loader zum Laden aus DB, API etc.

Page 58: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 58 www.php-schulung.de

services:

main.translation.my_custom_loader:

class: Acme\MainBundle\Translation\MyCustomLoader

tags:

- { name: translation.loader, alias: db }

Custom Loader zum Laden aus DB, API etc.

Page 59: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 59 www.php-schulung.de

services:

main.translation.my_custom_loader:

class: Acme\MainBundle\Translation\MyCustomLoader

tags:

- { name: translation.loader, alias: db }

Custom Loader zum Laden aus DB, API etc.

● app/Resources/translations/messages.de.db (etc.) activiert den Custom Loader.

Page 60: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 60 www.php-schulung.de

services:

main.translation.my_custom_loader:

class: Acme\MainBundle\Translation\MyCustomLoader

tags:

- { name: translation.loader, alias: db }

Custom Loader zum Laden aus DB, API etc.

● app/Resources/translations/messages.de.db (etc.) activiert den Custom Loader.

● Die Datei selbst wird als Resource übergeben und kann wahlweise z.B. Parameter für einen API Aufruf o.ä. enthalten

Page 61: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 61 www.php-schulung.de

services:

main.translation.my_custom_loader:

class: Acme\MainBundle\Translation\MyCustomLoader

tags:

- { name: translation.loader, alias: db }

Custom Loader zum Laden aus DB, API etc.

● app/Resources/translations/messages.de.db (etc.) activiert den Custom Loader.

● Die Datei selbst wird als Resource übergeben und kann wahlweise z.B. Parameter für einen API Aufruf o.ä. enthalten

http://symfony.com/doc/current/reference/dic_tags.html#dic-tags-translation-loader

Page 62: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 62 www.php-schulung.de

Weitere Möglichkeiten

● Custom Loader zum Laden aus DB, API etc.● Datenbank Inhalte übersetzten● Constraint Messages Übersetzten● Locale manuell festlegen

Page 63: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 63 www.php-schulung.de

Datenbank Inhalte übersetzten

class Category

{

/**

* @Gedmo\Translatable

* @ORM\Column(length=64)

*/

private $title;

Page 64: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 64 www.php-schulung.de

Datenbank Inhalte übersetzten/**

* @Gedmo\TranslationEntity(class="Entity\CategoryTranslation")

*/

class Category

{

/**

* @Gedmo\Translatable

* @ORM\Column(length=64)

*/

private $title;

https://github.com/l3pp4rd/DoctrineExtensions/blob/master/example/app/Entity/CategoryTranslation.php

Page 65: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 65 www.php-schulung.de

Weitere Möglichkeiten

● Custom Loader zum Laden aus DB, API etc.● Datenbank Inhalte übersetzten● Constraint Messages Übersetzten● Locale manuell festlegen

Page 66: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 66 www.php-schulung.de

Constraint Messages Übersetzten

// src/Acme/BlogBundle/Entity/Author.php

class Author

{

/**

* @Assert\NotBlank(message = "author.name.not_blank")

*/

public $name;

...

}

# validators.en.yml

author.name.not_blank: Please enter an author name.

Page 67: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 67 www.php-schulung.de

Weitere Möglichkeiten

● Custom Loader zum Laden aus DB, API etc.● Datenbank Inhalte übersetzten● Constraint Messages Übersetzten● Locale manuell festlegen

Page 68: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 68 www.php-schulung.de

$this->get('translator')->trans(

'Symfony2 is great',

array(),

'messages',

'fr_FR'

);

$this->get('translator')->transChoice(

'{0} There are no apples|{1} There is one apple|]1,Inf[ There are %count% apples',

10,

array('%count%' => 10),

'messages',

'fr_FR'

);

Page 69: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 69 www.php-schulung.de

Zusammenfassung● Ausgabe Strings ("messages") abstrahieren● Translator Komponente konfigurieren● Locale des aktuellen Request ermitteln● Translation resources für alle Locales bereit stellen● Custom Loader zum Laden aus DB, API etc.● Datenbank Inhalte übersetzten● Constraint Messages Übersetzten● Locale manuell festlegen

Page 70: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 70 www.php-schulung.de

Weiterführende Information

● http://symfony.com/doc/current/book/translation.html

● http://symfony.com/doc/current/components/translation/

● More loaders: Click here for list of 13 built in translation loaders

● Bundle for editing translations (excellent featureset, active project)

– https://github.com/Kunstmaan/KunstmaanTranslatorBundle

Page 71: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 71 www.php-schulung.de

Vielen Dank für Eure Aufmerksamkeit!

Page 72: Weltkarte - php-schulung.de · Timon Schroeter 5  Definitionen i18n, L10n i18n == Internationalization is the process of designing a software application so that it can …

Timon Schroeter 72 www.php-schulung.de

Fragen? Ideen, Wünsche, Anmerkungen?