Wordpress Themes / Plugins übersetzbar machen

19
Wordpress Themes und Plugins übersetzbar machen WPMeetup Hannover, 24.07.2013 Frank Staude <[email protected] > Donnerstag, 25. Juli 13

description

Vortrag vom Wordpress Meetup Hannover, vom 24.07.2013.

Transcript of Wordpress Themes / Plugins übersetzbar machen

Page 1: Wordpress Themes / Plugins übersetzbar machen

Wordpress Themes und Plugins übersetzbar

machen

WPMeetup Hannover, 24.07.2013Frank Staude <[email protected]>

Donnerstag, 25. Juli 13

Page 2: Wordpress Themes / Plugins übersetzbar machen

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

Donnerstag, 25. Juli 13

Page 3: Wordpress Themes / Plugins übersetzbar machen

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.

Donnerstag, 25. Juli 13

Page 4: Wordpress Themes / Plugins übersetzbar machen

Wie ist das in Wordpress realisiert?

• Setzt auf PHP Gettext auf

• Wordpress Core verwendet gleiche Technik wie sie Theme/Pluginentwicklern zur Verfügung steht

• Eine „Handvoll“ PHP Funktionen die man nutzen muss.

Donnerstag, 25. Juli 13

Page 5: Wordpress Themes / Plugins übersetzbar machen

Wie erstelle/bearbeite ich eine Übersetzung?

• WP Plugin: codestyling-localisation

• Desktop: POedit

• Web: PO Editor

• diverse andere Tools für GetText

Donnerstag, 25. Juli 13

Page 6: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Plugin übersetzbar?

<?php/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-hannover.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!' );

}

Donnerstag, 25. Juli 13

Page 7: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Plugin übersetzbar?<?php

/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-hannover.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' ) ); }

Donnerstag, 25. Juli 13

Page 8: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

• load_theme_textdomain statt load_plugin_textdomain

• Aufruf via add_action in die functions.php

Donnerstag, 25. Juli 13

Page 9: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

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>

Donnerstag, 25. Juli 13

Page 10: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

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>

Donnerstag, 25. Juli 13

Page 11: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

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>

Donnerstag, 25. Juli 13

Page 12: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

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>

Donnerstag, 25. Juli 13

Page 13: Wordpress Themes / Plugins übersetzbar machen

Wie mach ich mein Theme übersetzbar?

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>

Donnerstag, 25. Juli 13

Page 14: Wordpress Themes / Plugins übersetzbar machen

Übersetzung laden

• load_textdomain

• load_plugin_textdomain

• load_theme_textdomain

• load_child_theme_textdomain

Donnerstag, 25. Juli 13

Page 15: Wordpress Themes / Plugins übersetzbar machen

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)

Donnerstag, 25. Juli 13

Page 16: Wordpress Themes / Plugins übersetzbar machen

Mit Texten arbeiten

• esc_html__()

• esc_html_e()

• esc_html_x()

• esc_attr__()

• esc_attr_e()

• esc_attr_x()

Donnerstag, 25. Juli 13

Page 17: Wordpress Themes / Plugins übersetzbar machen

Tipps

• Datum via date_i18n()

• Zahlen via number_format_i18n()

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

• HTML Formatierung nicht in Übersetzungsstrings.

Donnerstag, 25. Juli 13

Page 18: Wordpress Themes / Plugins übersetzbar machen

Tipps

• Pfad zu Textdateien via filter änderbar machen.

• Escapen bei Benutzereingaben und Attributausgaben. Sicherheit!

• Testen, Testen, Testen

Donnerstag, 25. Juli 13