Internationalization-Modul (intl) nachinstallieren

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 8 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet ...

Wer häufig am Mac deutsche Text aus einer PDF in eine WordPress-Website kopieren muss, der kennt das Problem: Kaputte Umlaute, nicht funktionierende Rechtschreibprüfung und Suche und noch viele weitere Probleme.

Im letztem Beitrag habe ich das Problem näher beschrieben. In diesem Artikel erkläre ich wie das benötigte Modul nachinstalliert werden kann.

Vorher nochmal eine kurze Erklärung des Problem:
Die Ursache des Problems ist das Dateisystem HFS+ am Mac. Da HFS+ nicht mit prä-kombinierten Zeichen (pre-combined characters) arbeitet, wird auch bei der Zwischenablage am Mac mit nicht-kombinierten Zeichen (decomposed characters) gearbeitet. Ein „ä“ besteht dann aus zwei Zeichen: einem „a“ und den Umlautpunkten, auch Diaresis genannt.

Leider arbeitet so ziemlich der Rest der Welt mit prä-kombinierten Zeichen. Auch Normalization Form C (NFC) genannt. Insbesondere das Web tut dies.

Wird also am Mac aus einer PDF-Datei ein Umlaut (mit-)kopiert, dann findet von Seiten des Betriebssystem keine Normalisierung auf NFC statt. Im Browser, zum Beispiel bei einem WordPress-Titel oder Inhalt, werden nun also diese nicht-kombinierten Zeichen eingefügt. Das sorgt für diverse Probleme: Wörterbücher erkennen das Wort nicht mehr, ggf. werden die Zeichen auch hintereinander und nicht übereinander angezeigt, die Suche nach dem Wort funktioniert nicht, die Transliteration (ü->ue, ä->ae, ö->oe) funktioniert nicht, etc.

Praktischerweise gibt es in WordPress einen Filter mit dem wir vor dem Speichern der Daten Veränderungen vornehmen können. Hier können wir diese Normalisierung ergänzen. PHP stellt dazu ab 5.3.0 eine eigene Funktion bereit, aber nur, wenn Internationalisierungsmodul (intl) installiert ist: Normalizer.

Ich habe daraus ein Plugin gebaut, welches diese Funktion vor das Speichern von Titel, Inhalt, Auszug und Kommentar einbaut. Tadaa! Das Normalizer-Plugin!

Nun wäre es ja zu schön, um wahr zu sein, wenn das auch überall klappen würde. Ausgerechnet auf meinem eigenen Hoster domainfactory ist das erforderliche Modul nicht installiert. Aber domainfactory wäre nicht mein Hoster, wenn es da nicht eine Lösung gäbe:

Das Modul kann nachgeladen werden, über eine PHP.ini. Dazu melde ich mich im Kundenmenü an, gehe auf „PHP-Einstellungen“ …

Bildschirmfoto 2016-01-15 um 23.11.03

… und wähle den PHP.ini-Editor an.

Bildschirmfoto 2016-01-15 um 23.11.27

Je nach eingestellter PHP-Version muss oben bei „Häufig genutzte Optionen“ ein anderes Extension-Verzeichnis angegeben werden. Bei PHP 5.6-latest, wie in meinem Fall, ist dies:

extension_dir = "/usr/local/lib/php_modules/5-56LATEST"

Um das Internationalisierungsmodul intl zu laden fügen wir direkt darunter noch folgende Zeile ein:

extension="intl.so"

Jetzt sollte das Plugin auch aktivierbar sein. Aber nur wenn die PHP.ini für die gesamte Domain oder den gesamten Vertrag so konfiguriert wurde. Einzelne PHP.ini-Dateien gelten nämlich nur in dem jeweiligen Ordner, müssten also für Plugins in den /wp-admin-Ordner gelegt werden und das wäre nicht ganz so elegant.

In den PHP-Extended-Versionen der größeren Tarife ist das Modul übrigens standardmäßig installiert.

Ob das Modul bei deinem Hoster vorhanden ist und auch wirklich geladen wird, kannst Du per phpinfo() herausfinden oder du fragst am besten den Support deines Hosters.

Wer als lokale Entwicklungsumgebung Varying Vagrant Vagrants nutzt, muss ggf. das Modul nachinstallieren:

sudo apt-get install php5-intl

Bei MAMP (PRO) ist das Modul standardmäßig vorhanden.

Update: Bei der Version 7.2 LATEST in der Standardvariante (nicht in der Light-Variante) ist das intl-Modul inzwischen standardmäßig geladen.

3 Antworten auf Internationalization-Modul (intl) nachinstallieren

  1. Pingback: PDF-Vorschaubilder in WordPress 4.7 bei domainfactory › Torsten Landsiedel

  2. Vielen Dank für diesen Artikel. Du hast mir damit viel Zeit und Nerven gespart. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert