46
WordPress und die Sprachen Warum, Wo und Wie. Für Anwender und Theme/Plugin Ersteller. 16.07.2015 Frank Staude <[email protected]>

WordPress und die Sprachen

Embed Size (px)

Citation preview

Page 1: WordPress und die Sprachen

WordPress und die Sprachen

Warum, Wo und Wie. Für Anwender und Theme/Plugin Ersteller.

16.07.2015 Frank Staude <[email protected]>

Page 2: WordPress und die Sprachen

Hallo!Frank Staude

Email: [email protected]: @staudeWebseite: www.staude.netGitHub: staude

AdminPress - WordPress Administration

Moderator im deutschen WordPress.org Supportforum

Validator für die deutsche BuddyPress Übersetzung

de.wordpress.org

WPMeetups

WP Meetup Hannover

WP Meetup Franken (Nürnberg)

Plugins

Page 3: WordPress und die Sprachen

Was Erwartet uns

• Warum überhaupt?

• Grundlagen L10N, I18N

• WordPress (und Plugins/Themes) übersetzten

• Tools zum übersetzen

• Plugins/Themes übersetzbar machen

Page 4: WordPress und die Sprachen

• >= 195 Länder

• 6500 Sprachen, 5600 noch gesprochene Sprachen

• 7,28 Milliarden Menschen (zum Jahreswechsel 2014/2015)

Die Erde

Page 5: WordPress und die Sprachen

• >24 Millionen Downloads von WordPress 4.2

• >60% Marktanteil bei CMS

• >24% alle Webseiten

WordPress

Page 6: WordPress und die Sprachen

WordPress

Page 7: WordPress und die Sprachen

Otto-Normal Anwender

Page 8: WordPress und die Sprachen

Polyglots

L10N? I18N? G11N? A11Y? WTF!

Page 9: WordPress und die Sprachen

LOCALISATION

• L10N - Localisation

• Primär Übersetzung in eine andere Sprache

• Aber auch Anpassung von Datums, Zeit, Währungs, Temperaturangaben

• Ggf. andere Rechtsvorschriften.

• Medien

• Berücksichtigung Kultureller und Geografischer Gegebenheiten.

{

10 Zeichen

Page 10: WordPress und die Sprachen

InternationalisatioN

• I18N - Internationalisation

• Gestalten einer Software, das sie Lokalisierbar ist

• Schreibrichtung LtR, RtL

• Datums, Zeit, Währungs, Temperaturangaben

• Syntaktische Eigenheiten von Sprachen berücksichtigen.

18 Zeichen

{

Page 11: WordPress und die Sprachen

GlobalisatioN

• G11N - Globalisation

• Ist die Kombination aus Internationalisation und Localisation und wird in einigen Firmen als Begriff verwendet.

11 Zeichen

{

Page 12: WordPress und die Sprachen

Accessibility

• A11Y - Accessibility

• Techniken die die Zugänglichkeit zu einer Webseite erleichtern.

• Barrierefrei bzw. Barrierearm

• Screenreader die Texte vorlesen bzw. Braillezeilen ansteuern.

• Leichte Sprache

11 Zeichen

{

Page 13: WordPress und die Sprachen

• speziell geregelte sprachliche Ausdrucksweise des Deutschen, die auf besonders leichte Verständlichkeit abzielt

• umfasst neben Sprachregeln auch Rechtschreibregeln sowie Empfehlungen zu Typografie und Mediengebrauch.

• soll Menschen, die aus unterschiedlichen Gründen über eine geringe Kompetenz in der deutschen Sprache verfügen, das Verstehen von Texten erleichtern.

• https://de.wikipedia.org/wiki/Leichte_Sprache

Leichte Sprache?

Page 14: WordPress und die Sprachen

Leichte Sprache?

Page 15: WordPress und die Sprachen

Leichte Sprache?

Page 16: WordPress und die Sprachen

Dateien

• .pot Portable Object Template - Vorlagedatei für die Übersetzung

• .poPortable Object - für Menschen lesbare Übersetzung

• .moMessage Object - Maschinen lesbare Übersetzungsdatei

Page 17: WordPress und die Sprachen

WordPress übersetzen

• Nur mal einen einzelnen String übersetzen oder die bestehende Übersetzung bearbeiten?

• Öfter Mitarbeiten?

• Handbuch

• Codex

• MakeBlog

• Slack / P2 Blog

• Was habe ich davon?

Page 18: WordPress und die Sprachen

WordPress übersetzenNur mal einen einzelnen String übersetzen oder die bestehende Übersetzung bearbeiten?

translate.wordpress.org

Page 19: WordPress und die Sprachen

WordPress übersetzenDas Handbuch für Übersetzer

https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/

Page 20: WordPress und die Sprachen

WordPress übersetzenGlossar für Begriffe

https://translate.wordpress.org/projects/wp/dev/de/default/glossary

Page 21: WordPress und die Sprachen

WordPress übersetzenMake Blog

https://make.wordpress.org/polyglots/

Page 22: WordPress und die Sprachen

WordPress übersetzenDeutsches P2 Blog

https://teamwpde.wordpress.com

Page 23: WordPress und die Sprachen

WordPress übersetzenPolyglots Slack

https://dewp.slack.com

https://wordpress.slack.com/

Page 24: WordPress und die Sprachen

Was habe ich davon?• Ruhm und Ehre :-)

• Danke der Community

• Zufriedene Kunden

• Ggf. neue Kunden

Page 25: WordPress und die Sprachen

Tools

• PoEdit (Desktop, Linux, Windows, Mac )

• im WordPress selbst (Loco Translate)

• GlotPress

Page 26: WordPress und die Sprachen

• Desktop (Linux, Windows, Mac)

• Kostenlos und Kostenpflichtige Pro Version

• https://poedit.net

PoEdit

Page 27: WordPress und die Sprachen

• WordPress Plugin

Loco Translate

Page 28: WordPress und die Sprachen

• Software wie auf translate.wordpress.org

• selbstgehostet, für eigene Übersetzungen

• https://github.com/GlotPress/GlotPress

GlotPress

Page 29: WordPress und die Sprachen

• Warum sollte es übersetzbar sein?

• Warum sind viele nicht übersetzbar?

• Wie mache ich ein Theme/Plugin übersetzbar?

• Beispiel eines Textes,

Theme/Plugins vorbereiten

Page 30: WordPress und die Sprachen

Warum sollte es übersetzbar sein?

• Kunde braucht es in einer anderen Sprache

• Projext x braucht andere Formulierungen

• Theme/Plugin soll weltweit nutzbar sein

• Übersetzung gefällt einem nicht

• Keinen Anwender ausschliessen nur weil sie kein deutsch/englisch können

Page 31: WordPress und die Sprachen

Warum sind viele nicht übersetzbar?

• Programmierer weiß nicht wie es geht

• Nur für eigenen Bedarf gebaut

• Keine Lust

• Eigene Lösung

• Ignoranz/Arroganz - „Rest der Welt“ ausgeblendet.

Page 32: WordPress und die Sprachen

Wie mach ich mein Plugin übersetzbar?

<?php/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-franken.de Description: Beispiel Plugin für Übersetzung Version: 0.1 Author: Frank Staude Author URI: http://www.staude.net License: GPLv2 or later */

add_filter( 'option_blogdescription', 'headertext');

function headertext( $text ) { return ( 'Hello, World!' );

}

Page 33: WordPress und die Sprachen

<?php/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-franken.de Description: Beispiel Plugin für Übersetzung Version: 0.1 Author: Frank Staude Author URI: http://www.staude.net Text Domain: dummy-pluginDomain Path: /languagesLicense: GPLv2 or later */

add_filter( 'option_blogdescription', 'headertext'); add_action( 'plugins_loaded', 'load_text' );

function load_text() { load_plugin_textdomain( 'dummy-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }

function headertext( $text ) { return ( __( 'Hello, World!', 'dummy-plugin' ) ); }

Wie mach ich mein Plugin übersetzbar?

Page 34: WordPress und die Sprachen

• load_theme_textdomain statt load_plugin_textdomain

• Aufruf via add_action in die functions.php

Wie mach ich mein Theme übersetzbar?

Page 35: WordPress und die Sprachen

Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_author() ?>

<p><?php _e( 'Geschrieben am' );?> <?php the_time( 'j. F Y' ); ?> <?php _e( 'um' );?> <?php the_time() ?><?php _e( ', von' );?> <?php the_author() ?></p>

Wie mach ich mein Theme übersetzbar?

Page 36: WordPress und die Sprachen

Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_author() ?>

<p><?php _e( 'Geschrieben am' );?> <?php the_time( 'j. F Y' ); ?> <?php _e( 'um' );?> <?php the_time() ?><?php _e( ', von' );?> <?php the_author() ?></p> GEHT ÜBERHAUPT NICHT

<p><?php printf( __( 'Geschrieben am %s um %s, von %s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p>

Wie mach ich mein Theme übersetzbar?

Page 37: WordPress und die Sprachen

Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_author() ?>

<p><?php _e( 'Geschrieben am' );?> <?php the_time( 'j. F Y' ); ?> <?php _e( 'um' );?> <?php the_time() ?><?php _e( ', von' );?> <?php the_author() ?></p> GEHT ÜBERHAUPT NICHT

<p><?php printf( __( 'Geschrieben am %s um %s, von %s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p> BESSER, ABER!

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p>

Wie mach ich mein Theme übersetzbar?

Page 38: WordPress und die Sprachen

Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_author() ?>

<p><?php _e( 'Geschrieben am' );?> <?php the_time( 'j. F Y' ); ?> <?php _e( 'um' );?> <?php the_time() ?><?php _e( ', von' );?> <?php the_author() ?></p> GEHT ÜBERHAUPT NICHT

<p><?php printf( __( 'Geschrieben am %s um %s, von %s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p> BESSER, ABER!

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p> GEHT NOCH BESSER

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s' ,'cleanpress'), get_the_time( __('j. F Y', 'cleanpress' ) ), get_the_time(), get_the_author() ); ?></p>

Wie mach ich mein Theme übersetzbar?

Page 39: WordPress und die Sprachen

Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_author() ?>

<p><?php _e( 'Geschrieben am' );?> <?php the_time( 'j. F Y' ); ?> <?php _e( 'um' );?> <?php the_time() ?><?php _e( ', von' );?> <?php the_author() ?></p> GEHT ÜBERHAUPT NICHT

<p><?php printf( __( 'Geschrieben am %s um %s, von %s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p> BESSER, ABER!

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s','cleanpress' ), get_the_time( 'j. F Y'), get_the_time(), get_the_author() ); ?></p> GEHT NOCH BESSER

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s' ,'cleanpress'), get_the_time( __('j. F Y', 'cleanpress' ) ), get_the_time(), get_the_author() ); ?></p> FAST

<p><?php printf( __( 'Geschrieben am %1$s um %2$s, von %3$s' ,'cleanpress'), date_i18n( get_option( ‘date_format‘), get_the_time( 'U')), get_the_time(), get_the_author() ); ?></p>

Wie mach ich mein Theme übersetzbar?

Page 40: WordPress und die Sprachen

Übersetzung laden

• load_textdomain

• load_plugin_textdomain

• load_theme_textdomain

• load_child_theme_textdomain

Page 41: WordPress und die Sprachen

Mit Texten arbeiten

• __() - gibt Text zurück

• _e() - gibt Text aus (e wie echo)

• _x() - gibt Text zurück (Kontext übergabe)

• _ex() - gibt Text aus (Kontext übergabe)

• _n() - gibt Text zurück (Plural)

• _nx() - gibt Text zurück (Plural und Kontext)

Page 42: WordPress und die Sprachen

Mit Texten arbeiten

• esc_html__()

• esc_html_e()

• esc_html_x()

• esc_attr__()

• esc_attr_e()

• esc_attr_x()

Page 43: WordPress und die Sprachen

Tipps

• Datum via date_i18n()

• Zahlen via number_format_i18n()

• Parameter in printf immer nummerieren %1$s damit der Übersetzer die Reihenfolge ändern kann

Page 44: WordPress und die Sprachen

Tipps

• Pfad zu Textdateien via filter änderbar machen.

• Escapen bei Benutzereingaben und Attributausgaben. Sicherheit!

• Testen, Testen, Testen

Page 45: WordPress und die Sprachen

Links

• http://codex.wordpress.org/Translating_WordPress

• http://de.wikipedia.org/wiki/GNU_gettext

• http://www.gnu.org/software/gettext/

• http://wordpress.org/plugins/codestyling-localization/

• http://www.poedit.net/

• https://poeditor.com/

• http://wordpress.org/plugins/wp-native-dashboard/

• http://blog.glotpress.org/

Page 46: WordPress und die Sprachen

Danke! Fragen?