Frage

Ich möchte mit gettext starten, um meine Übersetzungen auf Webprojekte (PHP 5) zu behandeln. Da es ein weit verbreiteter Standard mit einem guten Ruf ist, scheint es die beste Wahl zu sein.

Allerdings bin ich auch Dinge über Server hören inkompatibel und es ist nicht Thread-sicher. Was bedeutet das für meine Projekte, die sie dann verwenden? Da ich die Dinge zu bauen, dass viele Menschen nutzen, ist es sehr wichtig, dass mein Code funktioniert.

Sprechen wir über kleinere Probleme (wie die Menschen immer noch mit PHP 4) oder großen Problemen wie Verteilung und Installation von gettext auf websevers niedrig ist?

War es hilfreich?

Lösung

Themen Problem gilt nur, wenn ein eingebettetes verwendet PHP (Apache mod-php zum Beispiel) und läuft Server, den Threads verwendet (wie Apache-Server mit Arbeiter-mpm).

So - Thread-Sicherheit Problem gilt nicht für Sie, wenn:

  1. verwenden Sie NGINX Server (es keine Threads nicht verwendet.)
  2. Sie verwenden Apache (entweder mit Gewinde MPM oder nicht) und PHP in FastCGI-Modus
  3. Sie verwenden Apache mit non-threaded MPM (als prefork-MPM) und PHP in mod-php-Modus.

So - die meisten Menschen mit Standard-Apache installieren sollte nicht über gettext Sorge Thread-sicher zu sein, als Standard-Apache in den meisten Distributionen installieren verwendet gewindelosen prefork-MPM

P. S. auch -. Bedenken Sie, dass Apache auf Windows Gewinde versehen ist,

Andere Tipps

Ich denke, einige mehr mit dem PHP-Handbuch Kommentare Teil spielen sollte mehr Informationen .... einer der Kommentare aus dem Handbuch auf gettext Abschnitt schmähen

  

Die GNU gettext Bibliothek arbeitet auf   per-Prozess, nicht Basis pro Thread.   Dies bedeutet, dass in einer Mehrbenutzer   Einstellung wie die Apache-Webserver   es wird nur mit einem prefork MPM arbeiten   (Das heißt ein Prozess pro Benutzer). Arbeiter   und andere Gewinde MPM wird nicht funktionieren.

     

Darüber hinaus sind viele Benutzer GNU steuern   gettext von System-Umgebung   Variablen wie LANG. Das ist kein   gute Lösung für einen Webserver   Umwelt aufgrund einer offensichtlichen Rennen   Zustand.

http://www.php.net/manual/en/gettext .setup.php

Ich hatte dasselbe Problem mit PHP 5.6.30 VC11 Theard sicher auf Windows 10. Abhilfe gefunden und beheben dieses Problem hier von sirio3mil.

Offenbar mit TS PHP kann nur Locale Sprachordner zugreifen. Also, wenn setlocaleQ und putenv Funktion Anruf mit einer anderen Sprache als System ein, einen Ordner mit .mo und .po kann nicht gelesen werden.

Abhilfe ist nur ein Sprachordner mit Systemsprache und mehr Paaren von .mo / .po-Dateien für jeden übersetzten Sprache haben. Domain wird mit gewünschter Sprache eingestellt werden.

Beispiel mit Schweizer Französisch, Deutsch und Italienisch:

Ordnerstruktur

  

\ Locale \ fr_CH \ LC_MESSAGES

     
      
  • fr_CH.mo + fr_CH.po // Systemsprache
  •   
  • de_CH.mo + de_CH.po
  •   
  • it_CH.mo + it_CH.po
  •   

Code

$lang = 'fr_CH' or 'de_CH' or 'it_CH'

bindtextdomain($lang, '.\Locale');
textdomain($lang);
bind_textdomain_codeset($lang, 'UTF-8');
setlocale (LC_ALL, $lang);
putenv('LC_ALL=' . $lang);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top