Wordpress Themes / Plugins übersetzbar machen

1,174 views
1,102 views

Published on

Vortrag vom Wordpress Meetup Hannover, vom 24.07.2013.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,174
On SlideShare
0
From Embeds
0
Number of Embeds
501
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×