WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
WordPress Plugins und Themes übersetzbar machen - die Grundprinzipien, Grundfunktionen, hilfreiche Tipps, Tricks, Erfahrungen, häufige Fehler und Best Practices
Plugins nicht übersetzbar... nur halbgar übersetzbar... Ursachen: Fehlendes Wissen Keine Lust, beratungsresistent... Nur Fokus auf USA... Keine Tests durchgeführt Eigene Implementationen jenseits der Standards
Themes: Dateinamen der Sprachdateien Themes: de_DE.mo /.po nl_NL.mo /.po fi.mo /.po Plugins: deine-textdomain-de_DE.mo /.po deine-textdomain-nl_NL.mo /.po deine-textdomain-fi.mo /.po Lokale ermitteln: schau bei WPLANG in der wp-config.php! Oder hier recherchieren: http://codex.wordpress.org/WordPress_in_Your_Language
Child Themes get_template_directory() vs. get_stylesheet_directory() load_textdomain() vs. load_child_theme_textdomain() (Child) Themes funktionieren aber auch mit load_textdomain() Streitfrage: Eigene Textdomains für Child Themes JA oder NEIN? DECKERWEB: JA, bitte eigene Domain für Child Themes! = klare Trennung = klarere Organisation = einfachere Pflege (Kundenprojekte...!) plus bessere Performance
Kontext: $string = _x( 'Frankfurt', 'German city at the river Main', 'textdomain' ); $string = _x( 'Frankfurt', 'German city at the river Oder', 'textdomain' ); $string = _x( 'Frankfurt', 'an asteroid', 'textdomain' );
Gar keine Übersetzbarkeit Übersetzbarkeit JA, aber kein „load_textdomain“ Mischen von Single & Double Quotes HTML in den Übersetzungs-Strings Falscher Einsatz von Platzhaltern/ Variablen Zu spätes Laden/ Einhängen der Sprachdatei, bzw. vergessen bei Fehlermeldungen/ Aktivierungs-Hooks etc. Eigene „Erfindungen“ fürs Laden der Sprachdateien Keine Verwendung von Kontext, Datum, Plural etc.
I ALLES Übersetzbar machen! Laden der Sprachdateien via Hook! Textdomain als String in Single Quotes setzen Generell nur Single Quotes HTML-Formatierungen raus aus den Strings!!! Beliebige Anordnung der Platzhalter ermöglichen via %1$d, %2$d etc. Sicherheit: ESCAPEN bei Benutzereingaben und bei Ausgaben in Attributen!
II Pfadangaben checken! load_textdomain() fordert absoluten Pfad load_plugin/theme/child_theme_textdomain() fordern relativen Pfad BONUS 1: Sprachdatei-Ordner filterbar machen bzw. Zusätzlichen Ort für Update-sichere Sprachdateien bereitstellen BONUS 2: Ein GlotPress aufsetzen, um der Community das Übersetzen zu erleichtern... ;-)