SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
WordPress und die Sprachen


Warum,Wo und Wie. Für Anwender und Theme/Plugin Ersteller.
16.07.2015 Frank Staude <frank@staude.net>
Hallo!
Frank Staude

Email: frank@staude.net

Twitter: @staude

Webseite: www.staude.net

GitHub: 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 leichteVerstä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, dasVerstehen 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
• .po

Portable Object - für Menschen lesbare Übersetzung
• .mo

Message 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 übersetzen
Nur mal einen einzelnen
String übersetzen oder die
bestehende Übersetzung
bearbeiten?
translate.wordpress.org
WordPress übersetzen
Das Handbuch für
Übersetzer
https://make.wordpress.org/
polyglots/handbook/tools/
glotpress-translate-
wordpress-org/
WordPress übersetzen
Glossar für Begriffe
https://
translate.wordpress.org/
projects/wp/dev/de/default/
glossary
WordPress übersetzen
Make Blog
https://make.wordpress.org/
polyglots/
WordPress übersetzen
Deutsches P2 Blog
https://
teamwpde.wordpress.com
WordPress übersetzen
Polyglots 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-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' ) );
}
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?

Mais conteúdo relacionado

Destaque

jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPagesjQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
Mark Roden
 
The Skeleton And Joints Wk3
The Skeleton And Joints Wk3The Skeleton And Joints Wk3
The Skeleton And Joints Wk3
MrHall
 
Presentación1 edna nicole
Presentación1 edna nicolePresentación1 edna nicole
Presentación1 edna nicole
ednabaquero
 

Destaque (20)

jQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPagesjQuery - the world's most popular java script library comes to XPages
jQuery - the world's most popular java script library comes to XPages
 
Webentwicklung mit PHP und MySQL
Webentwicklung mit PHP und MySQLWebentwicklung mit PHP und MySQL
Webentwicklung mit PHP und MySQL
 
Cronobiología y obesidad
Cronobiología y obesidadCronobiología y obesidad
Cronobiología y obesidad
 
The Skeleton And Joints Wk3
The Skeleton And Joints Wk3The Skeleton And Joints Wk3
The Skeleton And Joints Wk3
 
PHP Optimization
PHP OptimizationPHP Optimization
PHP Optimization
 
Css Frameworks - Ein Überblick (04/2008)
Css Frameworks - Ein Überblick (04/2008)Css Frameworks - Ein Überblick (04/2008)
Css Frameworks - Ein Überblick (04/2008)
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHP
 
AJAX
AJAXAJAX
AJAX
 
PHP mit Paul Bocuse
PHP mit Paul BocusePHP mit Paul Bocuse
PHP mit Paul Bocuse
 
Web Entwicklung mit PHP - Teil 2
Web Entwicklung mit PHP - Teil 2Web Entwicklung mit PHP - Teil 2
Web Entwicklung mit PHP - Teil 2
 
Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)
 
Estrategias de la comunicacion
Estrategias de la comunicacionEstrategias de la comunicacion
Estrategias de la comunicacion
 
Deber informática
Deber informáticaDeber informática
Deber informática
 
QUE ES INTERNET
QUE ES INTERNETQUE ES INTERNET
QUE ES INTERNET
 
Presentación1 edna nicole
Presentación1 edna nicolePresentación1 edna nicole
Presentación1 edna nicole
 
Actividad de aprendizaje 2
Actividad de aprendizaje 2Actividad de aprendizaje 2
Actividad de aprendizaje 2
 
Ing y soci
Ing y sociIng y soci
Ing y soci
 
Silabo Ciencia de Estado
Silabo Ciencia de EstadoSilabo Ciencia de Estado
Silabo Ciencia de Estado
 
Fabricacion del queso
Fabricacion del quesoFabricacion del queso
Fabricacion del queso
 

Semelhante a WordPress und die Sprachen

Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrieren
Walter Ebert
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 

Semelhante a WordPress und die Sprachen (20)

Werde Übersetzer! Werde Translation Editor!
Werde Übersetzer!  Werde Translation Editor!Werde Übersetzer!  Werde Translation Editor!
Werde Übersetzer! Werde Translation Editor!
 
Eigene Themes from Scratch
Eigene Themes from ScratchEigene Themes from Scratch
Eigene Themes from Scratch
 
WordPress auf Deutsch
WordPress auf DeutschWordPress auf Deutsch
WordPress auf Deutsch
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpress
 
WordCamp Köln - WordPress – das sind wir alle!
WordCamp Köln - WordPress – das sind wir alle! WordCamp Köln - WordPress – das sind wir alle!
WordCamp Köln - WordPress – das sind wir alle!
 
Test
TestTest
Test
 
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
 
WordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisierenWordPress.com-Blogs individualisieren
WordPress.com-Blogs individualisieren
 
Wp meetup franken-buddy-press-einführung
Wp meetup franken-buddy-press-einführungWp meetup franken-buddy-press-einführung
Wp meetup franken-buddy-press-einführung
 
WordPress – das sind wir alle! (BarCamp Nürnberg)
WordPress – das sind wir alle! (BarCamp Nürnberg)WordPress – das sind wir alle! (BarCamp Nürnberg)
WordPress – das sind wir alle! (BarCamp Nürnberg)
 
Pressmatic
PressmaticPressmatic
Pressmatic
 
Neu in WordPress – Wo finde ich Hilfe und Informationen. BarCamp Braunschweig...
Neu in WordPress – Wo finde ich Hilfe und Informationen. BarCamp Braunschweig...Neu in WordPress – Wo finde ich Hilfe und Informationen. BarCamp Braunschweig...
Neu in WordPress – Wo finde ich Hilfe und Informationen. BarCamp Braunschweig...
 
PHP Sucks?!
PHP Sucks?!PHP Sucks?!
PHP Sucks?!
 
Custom Post Types mit PODS.io
Custom Post Types mit PODS.ioCustom Post Types mit PODS.io
Custom Post Types mit PODS.io
 
Drupal 8: TWIG Template Engine
Drupal 8:  TWIG Template EngineDrupal 8:  TWIG Template Engine
Drupal 8: TWIG Template Engine
 
PHAR better Tools
PHAR better ToolsPHAR better Tools
PHAR better Tools
 
Bestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrierenBestehende WordPress-Seiten auf Multisite migrieren
Bestehende WordPress-Seiten auf Multisite migrieren
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 Reloaded
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 

Mais de frankstaude

Mais de frankstaude (20)

State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und AusblickState of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
 
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und BotsAutomatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
 
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
 
TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?
 
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der SchuleGamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
 
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
 
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?
 
WordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzenWordPress auf Deutsch übersetzen
WordPress auf Deutsch übersetzen
 
Sessions aufzeichnen mit möglichst wenig Aufwand - Stand Oktober 2016
Sessions aufzeichnen mit möglichst wenig Aufwand - Stand Oktober 2016Sessions aufzeichnen mit möglichst wenig Aufwand - Stand Oktober 2016
Sessions aufzeichnen mit möglichst wenig Aufwand - Stand Oktober 2016
 

WordPress und die Sprachen

  • 1. WordPress und die Sprachen 
 Warum,Wo und Wie. Für Anwender und Theme/Plugin Ersteller. 16.07.2015 Frank Staude <frank@staude.net>
  • 2. Hallo! Frank Staude Email: frank@staude.net Twitter: @staude Webseite: www.staude.net GitHub: 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
  • 3. Was Erwartet uns • Warum überhaupt? • Grundlagen L10N, I18N • WordPress (und Plugins/Themes) übersetzten • Tools zum übersetzen • Plugins/Themes übersetzbar machen
  • 4. • >= 195 Länder • 6500 Sprachen, 5600 noch gesprochene Sprachen • 7,28 Milliarden Menschen (zum Jahreswechsel 2014/2015) Die Erde
  • 5. • >24 Millionen Downloads von WordPress 4.2 • >60% Marktanteil bei CMS • >24% alle Webseiten WordPress
  • 9. 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
  • 10. 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 {
  • 11. GlobalisatioN • G11N - Globalisation • Ist die Kombination aus Internationalisation und Localisation und wird in einigen Firmen als Begriff verwendet. 11 Zeichen {
  • 12. 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 {
  • 13. • speziell geregelte sprachliche Ausdrucksweise des Deutschen, die auf besonders leichteVerstä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, dasVerstehen von Texten erleichtern. • https://de.wikipedia.org/wiki/Leichte_Sprache Leichte Sprache?
  • 16. Dateien • .pot
 Portable Object Template -Vorlagedatei für die Übersetzung • .po
 Portable Object - für Menschen lesbare Übersetzung • .mo
 Message Object - Maschinen lesbare Übersetzungsdatei
  • 17. 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?
  • 18. WordPress übersetzen Nur mal einen einzelnen String übersetzen oder die bestehende Übersetzung bearbeiten? translate.wordpress.org
  • 19. WordPress übersetzen Das Handbuch für Übersetzer https://make.wordpress.org/ polyglots/handbook/tools/ glotpress-translate- wordpress-org/
  • 20. WordPress übersetzen Glossar für Begriffe https:// translate.wordpress.org/ projects/wp/dev/de/default/ glossary
  • 22. WordPress übersetzen Deutsches P2 Blog https:// teamwpde.wordpress.com
  • 24. Was habe ich davon? • Ruhm und Ehre :-) • Danke der Community • Zufriedene Kunden • Ggf. neue Kunden

  • 25. Tools • PoEdit (Desktop, Linux,Windows, Mac ) • im WordPress selbst (Loco Translate) • GlotPress
  • 26. • Desktop (Linux,Windows, Mac) • Kostenlos und Kostenpflichtige Pro Version • https://poedit.net PoEdit
  • 28. • Software wie auf 
 translate.wordpress.org • selbstgehostet, für eigene 
 Übersetzungen • https://github.com/GlotPress/ GlotPress GlotPress
  • 29. • Warum sollte es übersetzbar sein? • Warum sind viele nicht übersetzbar? • Wie mache ich ein Theme/Plugin übersetzbar? • Beispiel eines Textes, Theme/Plugins vorbereiten
  • 30. 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
  • 31. 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.
  • 32. 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!' ); }
  • 33. <?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-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' ) ); } Wie mach ich mein Plugin übersetzbar?
  • 34. • load_theme_textdomain statt load_plugin_textdomain • Aufruf via add_action in die functions.php Wie mach ich mein Theme übersetzbar?
  • 35. 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?
  • 36. 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?
  • 37. 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?
  • 38. 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?
  • 39. 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?
  • 40. Übersetzung laden • load_textdomain • load_plugin_textdomain • load_theme_textdomain • load_child_theme_textdomain
  • 41. 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)
  • 42. Mit Texten arbeiten • esc_html__() • esc_html_e() • esc_html_x() • esc_attr__() • esc_attr_e() • esc_attr_x()
  • 43. Tipps • Datum via date_i18n() • Zahlen via number_format_i18n() • Parameter in printf immer nummerieren %1$s damit der Übersetzer die Reihenfolge ändern kann
  • 44. Tipps • Pfad zu Textdateien via filter änderbar machen. • Escapen bei Benutzereingaben und Attributausgaben. Sicherheit! • Testen,Testen,Testen
  • 45. 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/