SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Wordpress Themes und
Plugins übersetzbar
machen
WPMeetup Hannover, 24.07.2013
Frank 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-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
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

Contenu connexe

Plus de frankstaude

Erneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerceErneute Bestellung in WooCommerce
Erneute Bestellung in WooCommercefrankstaude
 
Gamification mit WordPress
Gamification mit WordPressGamification mit WordPress
Gamification mit WordPressfrankstaude
 
Mobile Apps mit WordPress
Mobile Apps mit WordPressMobile Apps mit WordPress
Mobile Apps mit WordPressfrankstaude
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?frankstaude
 
State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017frankstaude
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?frankstaude
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?frankstaude
 
Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?frankstaude
 
Eine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf AutopilotEine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf Autopilotfrankstaude
 
Vorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne NachbearbeitungVorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne Nachbearbeitungfrankstaude
 
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.ioNürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.iofrankstaude
 
WordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenWordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenfrankstaude
 
Custom Post Types mit PODS.io
Custom Post Types mit PODS.ioCustom Post Types mit PODS.io
Custom Post Types mit PODS.iofrankstaude
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?frankstaude
 
WordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzenWordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzenfrankstaude
 
VersionPress - WordPress + Git
VersionPress - WordPress + GitVersionPress - WordPress + Git
VersionPress - WordPress + Gitfrankstaude
 
Sessions aufzeichnen mit möglichst wenig Aufwand
Sessions aufzeichnen mit möglichst wenig AufwandSessions aufzeichnen mit möglichst wenig Aufwand
Sessions aufzeichnen mit möglichst wenig Aufwandfrankstaude
 
Session Video (möglichst) ohne Nachbearbeitung
Session Video (möglichst) ohne NachbearbeitungSession Video (möglichst) ohne Nachbearbeitung
Session Video (möglichst) ohne Nachbearbeitungfrankstaude
 
Vom Nehmen und Geben
Vom Nehmen und GebenVom Nehmen und Geben
Vom Nehmen und Gebenfrankstaude
 

Plus de frankstaude (20)

Erneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerceErneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerce
 
Gamification mit WordPress
Gamification mit WordPressGamification mit WordPress
Gamification mit WordPress
 
Mobile Apps mit WordPress
Mobile Apps mit WordPressMobile Apps mit WordPress
Mobile Apps mit WordPress
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?
 
State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?
 
Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?
 
Eine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf AutopilotEine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf Autopilot
 
Vorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne NachbearbeitungVorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne Nachbearbeitung
 
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.ioNürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
 
WordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenWordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellen
 
Custom Post Types mit PODS.io
Custom Post Types mit PODS.ioCustom Post Types mit PODS.io
Custom Post Types mit PODS.io
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?
 
Pressmatic
PressmaticPressmatic
Pressmatic
 
WordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzenWordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzen
 
VersionPress - WordPress + Git
VersionPress - WordPress + GitVersionPress - WordPress + Git
VersionPress - WordPress + Git
 
Sessions aufzeichnen mit möglichst wenig Aufwand
Sessions aufzeichnen mit möglichst wenig AufwandSessions aufzeichnen mit möglichst wenig Aufwand
Sessions aufzeichnen mit möglichst wenig Aufwand
 
Session Video (möglichst) ohne Nachbearbeitung
Session Video (möglichst) ohne NachbearbeitungSession Video (möglichst) ohne Nachbearbeitung
Session Video (möglichst) ohne Nachbearbeitung
 
Vom Nehmen und Geben
Vom Nehmen und GebenVom Nehmen und Geben
Vom Nehmen und Geben
 

Wordpress Themes / Plugins übersetzbar machen

  • 1. Wordpress Themes und Plugins übersetzbar machen WPMeetup Hannover, 24.07.2013 Frank Staude <frank@staude.net> Donnerstag, 25. Juli 13
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Übersetzung laden • load_textdomain • load_plugin_textdomain • load_theme_textdomain • load_child_theme_textdomain Donnerstag, 25. Juli 13
  • 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. Mit Texten arbeiten • esc_html__() • esc_html_e() • esc_html_x() • esc_attr__() • esc_attr_e() • esc_attr_x() Donnerstag, 25. Juli 13
  • 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. Tipps • Pfad zu Textdateien via filter änderbar machen. • Escapen bei Benutzereingaben und Attributausgaben. Sicherheit! • Testen,Testen,Testen Donnerstag, 25. Juli 13
  • 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