Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Wordpress Themes und
Plugins übersetzbar
machen
WPMeetup Hannover, 24.07.2013
Frank Staude <frank@staude.net>
Donnerstag, ...
Warum sollte es
übersetzbar sein?
• Kunde braucht es in einer anderen Sprache
• Projext x braucht andere Formulierungen
• ...
Warum sind viele nicht
übersetzbar?
• Programmierer weiß nicht wie es geht
• Nur für eigenen Bedarf gebaut
• Keine Lust
• ...
Wie ist das in
Wordpress realisiert?
• Setzt auf PHP Gettext auf
• Wordpress Core verwendet gleiche Technik
wie sie Theme/...
Wie erstelle/bearbeite
ich eine Übersetzung?
• WP Plugin: codestyling-localisation
• Desktop: POedit
• Web: PO Editor
• di...
Wie mach ich mein
Plugin übersetzbar?
<?php
/*
Plugin Name: Beispiel-Dummy
Plugin URI: http://wpmeetup-hannover.de
Descrip...
Wie mach ich mein
Plugin übersetzbar?<?php
/*
Plugin Name: Beispiel-Dummy
Plugin URI: http://wpmeetup-hannover.de
Descript...
Wie mach ich mein
Theme übersetzbar?
• load_theme_textdomain statt
load_plugin_textdomain
• Aufruf via add_action in die f...
Wie mach ich mein
Theme übersetzbar?
Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_aut...
Wie mach ich mein
Theme übersetzbar?
Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_aut...
Wie mach ich mein
Theme übersetzbar?
Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_aut...
Wie mach ich mein
Theme übersetzbar?
Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_aut...
Wie mach ich mein
Theme übersetzbar?Geschrieben am <?php the_time('j. F Y'); ?> um <?php the_time() ?>, von <?php the_auth...
Übersetzung laden
• load_textdomain
• load_plugin_textdomain
• load_theme_textdomain
• load_child_theme_textdomain
Donners...
Mit Texten arbeiten
• __() - gibt Text zurück
• _e() - gibt Text aus (e wie echo)
• _x() - gibt Text zurück (Kontext überg...
Mit Texten arbeiten
• esc_html__()
• esc_html_e()
• esc_html_x()
• esc_attr__()
• esc_attr_e()
• esc_attr_x()
Donnerstag, ...
Tipps
• Datum via date_i18n()
• Zahlen via number_format_i18n()
• Parameter in printf immer nummerieren
%1$s damit der Übe...
Tipps
• Pfad zu Textdateien via filter änderbar
machen.
• Escapen bei Benutzereingaben und
Attributausgaben. Sicherheit!
• ...
Links
• http://codex.wordpress.org/Translating_WordPress
• http://de.wikipedia.org/wiki/GNU_gettext
• http://www.gnu.org/s...
Upcoming SlideShare
Loading in …5
×

Wordpress Themes / Plugins übersetzbar machen

1,537 views

Published on

Vortrag vom Wordpress Meetup Hannover, vom 24.07.2013.

  • Be the first to comment

Wordpress Themes / Plugins übersetzbar machen

  1. 1. Wordpress Themes und Plugins übersetzbar machen WPMeetup Hannover, 24.07.2013 Frank Staude <frank@staude.net> Donnerstag, 25. Juli 13
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. 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-plugin Domain Path: /languages License: 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
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. Übersetzung laden • load_textdomain • load_plugin_textdomain • load_theme_textdomain • load_child_theme_textdomain Donnerstag, 25. Juli 13
  15. 15. 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
  16. 16. Mit Texten arbeiten • esc_html__() • esc_html_e() • esc_html_x() • esc_attr__() • esc_attr_e() • esc_attr_x() Donnerstag, 25. Juli 13
  17. 17. 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
  18. 18. Tipps • Pfad zu Textdateien via filter änderbar machen. • Escapen bei Benutzereingaben und Attributausgaben. Sicherheit! • Testen,Testen,Testen Donnerstag, 25. Juli 13
  19. 19. 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/ Donnerstag, 25. Juli 13

×