Deutsche Anführungszeichen in WordPress

Update 19.08.2015 – Frohe Botschaft: WordPress macht es nun richtig!

So wie es aussieht, besteht das Problem mit den falschen Anführungszeichen in deutschsprachigen WordPress-Installationen seit der Version 4.2.3 nicht mehr. Insofern verliert dieser Beitrag seinen Sinn, was ich aufgrund der Resonanz auf diesen Beitrag etwas schade finden könnte. Aber: Besser ist es natürlich ohne Workaround. Es funktioniert nun einfach so in WordPress – mich freut´s!

Die Datei formatting.php wurde überarbeitet. Man kann sehen, dass mit dieser Überarbeitung die Voraussetzung für die Übersetzung geschaffen wurde*:

Anführungszeichen in WordPress jetzt in der formatting.php gut geregelt.

Unter /wp-content/languages im Sprachfile finden sich nun die Übersetzungen der Anführungszeichen:

Deutsche Anführungszeichen in WordPress wurden übersetzt.

Damit ist dieser Fall sauber gelöst: Die originale Übersetzungsdatei von WordPress liefert mit der deutschen Spracheinstellung die korrekten Zeichen. Z.B. in der WordPress-Version 4.2.1 waren die Zeichen noch nicht übersetzt:

language-file-anfuehrungszeichen-nicht-uebersetzt

* Hinweis: Wenn ich den Code der alten formatting.php anschaue und ihn mit dem der neuen vergleiche: War der einzige Grund für die falschen Anführungszeichen eigentlich immer nur die falsche Übersetzung??
Grundsätzlich war ja die Voraussetzung im Code mit “_x” bereits gegeben … :

/* translators: opening curly double quote */
        $opening_quote = _x( '“', 'opening curly double quote' );

Hier folgt der ursprüngliche Beginn des Artikels –
als er noch eine Existenzberechtigung hatte:

Bei den Grundeinstellungen von WordPress tritt für deutsche Blogger leider das Problem auf, dass die englischen Anführungszeichen statt der deutschen angezeigt werden. Das sieht dann so aus:

”englische Variante“ statt “deutsche Variante” bzw. ‘deutsche Variante’

Um dauerhaft eine deutsche Darstellung zu erhalten brauchen wir die Datei formatting.php aus dem Verzeichnis wp-includes. Man muss im Code unter dem Abschnitt function wptexturize($text) lediglich an ein paar Stellen des Zeichencodes austauschen (siehe Abbildung):

function wptexturize($text) {
    global $wp_cockneyreplace;
    static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
        $default_no_texturize_tags, $default_no_texturize_shortcodes;

    // No need to set up these static variables more than once
    if ( ! isset( $static_characters ) ) {
        /* translators: opening curly double quote */
        $opening_quote = _x( '„', 'opening curly double quote' );
        /* translators: closing curly double quote */
        $closing_quote = _x( '“', 'closing curly double quote' );

        /* translators: apostrophe, for example in 'cause or can't */
        $apos = _x( '’', 'apostrophe' );

        /* translators: prime, for example in 9' (nine feet) */
        $prime = _x( '′', 'prime' );
        /* translators: double prime, for example in 9" (nine inches) */
        $double_prime = _x( '″', 'double prime' );

        /* translators: opening curly single quote */
        $opening_single_quote = _x( '‚', 'opening curly single quote' );
        /* translators: closing curly single quote */
        $closing_single_quote = _x( '‘', 'closing curly single quote' );

        /* translators: en dash */
        $en_dash = _x( '–', 'en dash' );
        /* translators: em dash */
        $em_dash = _x( '—', 'em dash' );

        $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');
        $default_no_texturize_shortcodes = array('code');

Hier wurden die folgenden Zeichencodes ersetzt:

“ ersetzt durch „
” ersetzt durch “
‘ ersetzt durch ‚
’ ersetzt durch ‘

Durch diese Vorgehensweise erhält man eine saubere typographische Darstellung.

Wichtig: unbedingt eine Sicherungskopie der Datei formatting.php vor den Änderungen anfertigen.

Update (29.03.2015) – neue Lösung für dauerhaft geänderte Anführungszeichen:

Wer in seiner WordPress-Installation ein Child-Theme benutzt, kann dort in der functions.php folgenden Code einfügen, um die deutschen Anführungszeichen zu erzeugen:

<?php
add_filter( 'the_content' , 'themename_special_replacements' , 12);
add_filter( 'the_title', 'themename_special_replacements', 12 );
add_filter( 'the_title_rss', 'themename_special_replacements', 12 );
add_filter( 'the_content_feed', 'themename_special_replacements', 12 );
function themename_special_replacements( $text ) {
$text = str_replace( '&#8220;' , '&#8222;' , $text );
$text = str_replace( '&#8221;' , '&#8220;' , $text );
$text = str_replace( '&#8216;' , '&#8218;' , $text );
$text = str_replace( '&#8217;' , '&#8216;' , $text );
return $text;
}
?>

Dadurch wird es bei künftigen WordPress-Updates unnötig, die formatting.php jedes Mal anzupassen bzw. zu überschreiben, um saubere deutsche Anführungszeichen in WordPress zu erhalten. Natürlich kann alles auch in ein Plugin verpackt werden.

8 Gedanken zu „Deutsche Anführungszeichen in WordPress“

  1. Hallo, danke für die Funktion. Sie spart ein Performance-fressendes Plugin. Allerdings macht der Code des Updates seinen Job nur zur Hälfte. Um das schließende doppelte Anführungszeichen zu ersetzen, muss wie oben schon beschrieben &#8221; durch &#8220; ersetzt werden.

    Antworten
    • Stimmt, da war ich etwas zu schludrig. Ich habe den Code oben angepasst und gleich noch die einfachen Anführungszeichen mit berücksichtigt. Vielen Dank für den Hinweis.

      Antworten
  2. add_filter( ‘the_content’ , ‘themename_special_replacements’ , 12);
    add_filter( ‘the_title’, ‘themename_special_replacements’, 12 );·
    add_filter( ‘the_title_rss’, ‘themename_special_replacements’, 12 );·
    add_filter( ‘the_content_feed’, ‘themename_special_replacements’, 12 );·

    Antworten

Schreibe einen Kommentar