Upload
frankstaude
View
181
Download
3
Embed Size (px)
Citation preview
WordPress und die Sprachen
Warum, Wo und Wie. Für Anwender und Theme/Plugin Ersteller.
16.07.2015 Frank Staude <[email protected]>
Hallo!Frank Staude
Email: [email protected]: @staudeWebseite: www.staude.netGitHub: staude
AdminPress - WordPress Administration
Moderator im deutschen WordPress.org Supportforum
Validator für die deutsche BuddyPress Übersetzung
de.wordpress.org
WPMeetups
WP Meetup Hannover
WP Meetup Franken (Nürnberg)
Plugins
Was Erwartet uns
• Warum überhaupt?
• Grundlagen L10N, I18N
• WordPress (und Plugins/Themes) übersetzten
• Tools zum übersetzen
• Plugins/Themes übersetzbar machen
• >= 195 Länder
• 6500 Sprachen, 5600 noch gesprochene Sprachen
• 7,28 Milliarden Menschen (zum Jahreswechsel 2014/2015)
Die Erde
• >24 Millionen Downloads von WordPress 4.2
• >60% Marktanteil bei CMS
• >24% alle Webseiten
WordPress
WordPress
Otto-Normal Anwender
Polyglots
L10N? I18N? G11N? A11Y? WTF!
LOCALISATION
• L10N - Localisation
• Primär Übersetzung in eine andere Sprache
• Aber auch Anpassung von Datums, Zeit, Währungs, Temperaturangaben
• Ggf. andere Rechtsvorschriften.
• Medien
• Berücksichtigung Kultureller und Geografischer Gegebenheiten.
{
10 Zeichen
InternationalisatioN
• I18N - Internationalisation
• Gestalten einer Software, das sie Lokalisierbar ist
• Schreibrichtung LtR, RtL
• Datums, Zeit, Währungs, Temperaturangaben
• Syntaktische Eigenheiten von Sprachen berücksichtigen.
18 Zeichen
{
GlobalisatioN
• G11N - Globalisation
• Ist die Kombination aus Internationalisation und Localisation und wird in einigen Firmen als Begriff verwendet.
11 Zeichen
{
Accessibility
• A11Y - Accessibility
• Techniken die die Zugänglichkeit zu einer Webseite erleichtern.
• Barrierefrei bzw. Barrierearm
• Screenreader die Texte vorlesen bzw. Braillezeilen ansteuern.
• Leichte Sprache
11 Zeichen
{
• speziell geregelte sprachliche Ausdrucksweise des Deutschen, die auf besonders leichte Verständlichkeit abzielt
• umfasst neben Sprachregeln auch Rechtschreibregeln sowie Empfehlungen zu Typografie und Mediengebrauch.
• soll Menschen, die aus unterschiedlichen Gründen über eine geringe Kompetenz in der deutschen Sprache verfügen, das Verstehen von Texten erleichtern.
• https://de.wikipedia.org/wiki/Leichte_Sprache
Leichte Sprache?
Leichte Sprache?
Leichte Sprache?
Dateien
• .pot Portable Object Template - Vorlagedatei für die Übersetzung
• .poPortable Object - für Menschen lesbare Übersetzung
• .moMessage Object - Maschinen lesbare Übersetzungsdatei
WordPress übersetzen
• Nur mal einen einzelnen String übersetzen oder die bestehende Übersetzung bearbeiten?
• Öfter Mitarbeiten?
• Handbuch
• Codex
• MakeBlog
• Slack / P2 Blog
• Was habe ich davon?
WordPress übersetzenNur mal einen einzelnen String übersetzen oder die bestehende Übersetzung bearbeiten?
translate.wordpress.org
WordPress übersetzenDas Handbuch für Übersetzer
https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/
WordPress übersetzenGlossar für Begriffe
https://translate.wordpress.org/projects/wp/dev/de/default/glossary
WordPress übersetzenMake Blog
https://make.wordpress.org/polyglots/
WordPress übersetzenPolyglots Slack
https://dewp.slack.com
https://wordpress.slack.com/
Was habe ich davon?• Ruhm und Ehre :-)
• Danke der Community
• Zufriedene Kunden
• Ggf. neue Kunden
Tools
• PoEdit (Desktop, Linux, Windows, Mac )
• im WordPress selbst (Loco Translate)
• GlotPress
• Desktop (Linux, Windows, Mac)
• Kostenlos und Kostenpflichtige Pro Version
• https://poedit.net
PoEdit
• WordPress Plugin
Loco Translate
• Software wie auf translate.wordpress.org
• selbstgehostet, für eigene Übersetzungen
• https://github.com/GlotPress/GlotPress
GlotPress
• Warum sollte es übersetzbar sein?
• Warum sind viele nicht übersetzbar?
• Wie mache ich ein Theme/Plugin übersetzbar?
• Beispiel eines Textes,
Theme/Plugins vorbereiten
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
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.
Wie mach ich mein Plugin übersetzbar?
<?php/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-franken.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!' );
}
<?php/* Plugin Name: Beispiel-Dummy Plugin URI: http://wpmeetup-franken.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' ) ); }
Wie mach ich mein Plugin übersetzbar?
• load_theme_textdomain statt load_plugin_textdomain
• Aufruf via add_action in die functions.php
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>
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>
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>
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>
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>
Wie mach ich mein Theme übersetzbar?
Übersetzung laden
• load_textdomain
• load_plugin_textdomain
• load_theme_textdomain
• load_child_theme_textdomain
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)
Mit Texten arbeiten
• esc_html__()
• esc_html_e()
• esc_html_x()
• esc_attr__()
• esc_attr_e()
• esc_attr_x()
Tipps
• Datum via date_i18n()
• Zahlen via number_format_i18n()
• Parameter in printf immer nummerieren %1$s damit der Übersetzer die Reihenfolge ändern kann
Tipps
• Pfad zu Textdateien via filter änderbar machen.
• Escapen bei Benutzereingaben und Attributausgaben. Sicherheit!
• Testen, Testen, Testen
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/
Danke! Fragen?