wordpress themes / plugins übersetzbar machen
Post on 18-Dec-2014
664 Views
Preview:
DESCRIPTION
TRANSCRIPT
Wordpress Themes und Plugins übersetzbar
machen
WPMeetup Hannover, 24.07.2013Frank Staude <frank@staude.net>
Donnerstag, 25. Juli 13
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
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
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
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
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
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
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
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
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
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
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
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
Übersetzung laden
• load_textdomain
• load_plugin_textdomain
• load_theme_textdomain
• load_child_theme_textdomain
Donnerstag, 25. Juli 13
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
Mit Texten arbeiten
• esc_html__()
• esc_html_e()
• esc_html_x()
• esc_attr__()
• esc_attr_e()
• esc_attr_x()
Donnerstag, 25. Juli 13
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
Tipps
• Pfad zu Textdateien via filter änderbar machen.
• Escapen bei Benutzereingaben und Attributausgaben. Sicherheit!
• Testen, Testen, Testen
Donnerstag, 25. Juli 13
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
top related