php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.03.2010, 14:39  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
equinox befindet sich auf einem aufstrebenden Ast
Standard gettext Problem

Hallo Zusammen,

ich versuche gerade mich in gettext einzuarbeiten, da es sich eigentlich hervorragend für meine Anforderungen eignet. Ich stecke allerdings fest und würde mich freuen wenn ihr Euch das mal anschauen mögt. Es kann sein, dass auf meinem Mac sich das anders verhält... Ich benutze die XAMPP Version für Mac, gettextsupport ist dort enabled..

Ich bin so ähnlich wie hier Localizing PHP web sites using gettext � Pablo’s Development Blog beschrieben steht vorgegangen, doch alle meine Texte werden nicht übersetzt. Ich habe zuvor folgende Struktur angelegt und das mo File mittels PoEdit Poedit kompiliert.

+test
index.php
/locale
/de_DE
/LC_MESSAGES
messages.po
messages.mo

hier die index.php


PHP-Code:
<?php

$locale 
'de_DE'// setzt die Sprache auf Deutsch
$domain 'message'// setzt die Domäne
$encoding 'UTF-8'// setzt die Zeichenkodierung

if (isSet($_GET["locale"])) $locale $_GET["locale"];

// teilt gettext die Sprache mit
setlocale(LC_MESSAGES$locale);
setlocale(LC_ALL$locale);
setlocaleLC_MESSAGES'');
putenv("LC_ALL=$locale");
putenv("LANGUAGE=$locale");
// teilt gettext mit, wo es die Übersetzungen suchen soll
//bindtextdomain($domain, './locale');
bindtextdomain($domain'/Applications/XAMPP/xamppfiles/htdocs/getexttest/locale');
//bindtextdomain('mydomain', dirname(__FILE__).'/locale');
// teilt gettext die zu verwendene Zeichenkodierung mit
bind_textdomain_codeset($domain$encoding);

// weist gettext an, die definierte Domäne zu verwenden
textdomain($domain);

// gettext erwartet die Übersetzung nun in
// ./locale/de_DE/LC_MESSAGES/message.mo
// die Übersetzung ausgeben
echo gettext('Welcome to my homepage!');
echo 
gettext('Hello World!');
echo 
gettext('Hello everybody!');
echo 
'<br />';

// die Übersetzung ausgeben; Kurzform
echo _('Hier you can find stuff about me.');

?>
Allerdings erhalte ich nicht die übersetzten Strings sondern die englischen Originale. Ich verzweifel langsam, weil ich fast alles ausprobiert habe...

Über Hilfe wäre ich Euch sehr sehr dankbar...
equinox ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.03.2010, 23:38  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.000
drsoong befindet sich auf einem aufstrebenden Ast
Standard

Hi, sieht ja mächtig kompliziert aus, was Du da machst. Willst Du unbedingt verstehen, wie gettext richtig funktioniert, oder willst Du vielleicht einfach nur eine mehrsprachige Site machen? Falls zweiteres der Fall ist, kannst Du ja mal über die Möglichkeit nachdenken, Deine Übersetzungen einfach in ein Array zu schreiben der Gestalt
PHP-Code:
$dict['welcome']['de'] = 'Willkommen zu meiner Homepage.';
$dict['hello']['de'] = 'Hallo Welt.' 
usw.

Ich selber habe es noch ein wenig anders gemacht. Mit Excel eine Tabelle anlegen, die die Spalten Schlüssel, de, fr, en usw. hat. Eine Zeile enthält dann z. B. welcome (als Schlüssel) Willkommen bienvenu welcome. Ein Makro fertigt daraus separate Übersetzungsfiles, die ich mit include je nach Sprache einbinde. Ja und dann kann es schon losgehen. In meinen Anwendungen habe ich meist um die 300 Begriffe. Performanceprobleme gibt es da nicht.
drsoong ist offline   Mit Zitat antworten
Alt 11.03.2010, 00:03  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 993
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

drsoong, dein Ansatz in allen Ehren, doch es hat einen Grund warum gettext ein Standard geworden ist, und nicht die Excel Tabellen xD.

Ich habe damals nach gleichem Tutorial versucht, das System aufzubauen und bin daran gescheitert. Mittlerweile habe ich das ganze etwas umgabaut, so dass es jetzt bei mir funktioniert.

Frag mich nicht, wo der große Unterschied liegt, aber vlt hilft es dir weiter.
PHP-Code:
<?php
define
("LANG_NAME""Deutsch");
define("LANG_LOCALE""de_DE");
define("LANG""de");
define("LANGCODE""de");

$codeset "UTF8";
putenv('LANG='.LANG_LOCALE.'.'.$codeset);
putenv('LANGUAGE='.LANG_LOCALE.'.'.$codeset);
bind_textdomain_codeset('messages'$codeset);
bindtextdomain('messages'dirname(__FILE__).'/locale/');
setlocale(LC_ALLLANG_LOCALE.'.'.$codeset);
textdomain('messages');
?>
Natürlich muss dein Übersetzungskatalog entsprechend eingestellt sein. Wenn es dann noch scheitert noch ein kleiner Tipp:

Das ganze funktioniert nur, wenn entsprechende Locale mit entsprechendem Codeset auf dem System installiert ist.

In linux z.B. zu prüfen mit
Code:
locale -a
. Wie du das auf Windows herausfindest, weiß ich nicht.

//EDIT:

Was mir gerade noch einfällt:
* Bei manchen Systemen ist es notwendig den Webserver neu zu starten, damit die Änderungen von gettext übernommen werden.
* Online benötigst du nur die *.po Datei. Die *.mo wird lediglich vom Po-Edit verwendet.
__________________

Geändert von Frank (13.03.2010 um 01:12 Uhr).
Frank ist offline   Mit Zitat antworten
Alt 11.03.2010, 00:35  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.000
drsoong befindet sich auf einem aufstrebenden Ast
Standard

An Frank: War ja nur ein Vorschlag. Ich gehe so seit einigen Jahren vor und fahre sehr gut damit. Ein Vorteil ist zudem, dass man ein Excelsheet auch leicht an einen Übersetzer schicken kann und aus dem Ergebnis auf Knopfdruck meine Übersetzungsdateien erstellen kann. Für mich ist es jedenfalls ein Leichtes wartungsfreundliche Mehrsprachigkeit zu realisieren.
drsoong ist offline   Mit Zitat antworten
Alt 11.03.2010, 10:01  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
equinox befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Frank Beitrag anzeigen
drsoong, dein Ansatz in allen Ehren, doch es hat einen Grund warum gettext ein Standard geworden ist, und nicht die Excel Tabellen xD.

Ich habe damals nach gleichem Tutorial versucht, das System aufzubauen und bin daran gescheitert. Mittlerweile habe ich das ganze etwas umgabaut, so dass es jetzt bei mir funktioniert.

Frag mich nicht, wo der große Unterschied liegt, aber vlt hilft es dir weiter.
PHP-Code:
<?php
define
("LANG_NAME""Deutsch");
define("LANG_LOCALE""de_DE");
define("LANG""de");
define("LANGCODE""de");

$codeset "UTF8";
putenv('LANG='.LANG_LOCALE.'.'.$codeset);
putenv('LANGUAGE='.LANG_LOCALE.'.'.$codeset);
bind_textdomain_codeset('messages'$codeset);
bindtextdomain('messages'dirname(__FILE__).'/locale/');
setlocale(LC_ALLLANG_LOCALE.'.'.$codeset);
textdomain('messages');
?>
Natürlich muss dein Übersetzungskatalog entsprechend eingestellt sein. Wenn es dann noch scheitert noch ein kleiner Tipp:

Das ganze funktioniert nur, wenn entsprechende Locale mit entsprechendem Codeset auf dem System installiert ist.

In linux z.B. zu prüfen mit
Code:
locale -a
. Wie du das auf Windows herausfindest, weiß ich nicht.

//EDIT:

Was mir gerade noch einfällt:
* Bei manchen Systemen ist es notwendig den Webserver neu zu starten, damit die Änderungen von gettext übernommen werden.
* Online benötigst du nur die *.po Datei. Die *.mo wird lediglich vom Po-Edit verwendet.
Vielen Dank für die Hilfe aber leider hat das alles nichts gebracht...

locale -a liefert sehr viele Sprachen, unter anderem aber auch

de_AT
de_AT.ISO8859-1
de_AT.ISO8859-15
de_AT.UTF-8
de_CH
de_CH.ISO8859-1
de_CH.ISO8859-15
de_CH.UTF-8
de_DE
de_DE.ISO8859-1
de_DE.ISO8859-15
de_DE.UTF-8

Habe den Katalog neu gebaut und den Webserver neu gestartet..
Er will aber partout nicht übersetzen. So schön gettext auch ist, aber es will einfach nicht klappen. Ich will das aber nicht akzeptieren.

Das muss doch klappen...
equinox ist offline   Mit Zitat antworten
Alt 11.03.2010, 10:42  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Ich weiß nicht wie pingelig die Extension ist, aber bei dir heißt $codeset "UTF8", in deiner Auflistung steht aber UTF-8. Hast du schon die Usernotes im Handbuch durchgeackert?

Ich persönlich halte von gettext() übrigens nicht viel.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 11.03.2010, 10:51  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
equinox befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Ich weiß nicht wie pingelig die Extension ist, aber bei dir heißt $codeset "UTF8", in deiner Auflistung steht aber UTF-8. Hast du schon die Usernotes im Handbuch durchgeackert?

Ich persönlich halte von gettext() übrigens nicht viel.
Oh,warum? Bei meiner Recherche las ich immer "Standard" und einfaches Handling, etc... Finde das Prinzip eigentlich toll und sehr praktikabel... Nunja, von den jetzigen Problemen mal abgesehen...
Auch UTF-8 hat nicht den erhofften Durchbruch gebracht...
equinox ist offline   Mit Zitat antworten
Alt 11.03.2010, 12:46  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Weil eine Übersetzung eigentlich recht dankbar für eine eigene Implementierung ist. Ist ja nur PATTERN -> Ersetzen. Sehe da in gettext() keinen Vorteil, nichtmal gegenüber Exceltabellen. Gibts denn da auch Fallbacks bei Sprachen? Sprich wenn kein Schweizer-Französisch da, dann Französisch, sonst Deutsch? Außerdem zickt das Locale-Zeug immer bei mir rum, scheint extrem Serverabhängig zu sein.

Übrigens kannst du bei einer eigenen Implementierung auch mal die Oberfläche auf Entities testen, einfach einen Filter zwischenschalten, HTML-Validator-Addon aktivieren und schon siehst du, wo überall du htmlspecialchars() für die Ausgabe vergessen hast. Sind so Kleinigkeiten.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 11.03.2010, 16:38  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 993
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Ja, serverabhängig ist es in der tat. Und ja, man braucht eine Weile, bis es funktioniert.

UTF8 ist schon richtig. UTF-8 gibt es in diesem Zusammenhang nicht (wer auch immer sich ausgedacht hat bei gettext den "-" wegzulassen).

Wenn von der Serverkonfiguration und vom PHP Script alles stimmt, wie sieht dein *mo aus?

//Edit:
Als einen Vorteil von gettext empfinde ich die Pluralformen der Wörter
__________________
Frank ist offline   Mit Zitat antworten
Alt 12.03.2010, 09:58  
Neuer Benutzer
 
Registriert seit: 10.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
equinox befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Frank Beitrag anzeigen
Ja, serverabhängig ist es in der tat. Und ja, man braucht eine Weile, bis es funktioniert.

UTF8 ist schon richtig. UTF-8 gibt es in diesem Zusammenhang nicht (wer auch immer sich ausgedacht hat bei gettext den "-" wegzulassen).

Wenn von der Serverkonfiguration und vom PHP Script alles stimmt, wie sieht dein *mo aus?

//Edit:
Als einen Vorteil von gettext empfinde ich die Pluralformen der Wörter
Es geht immer noch nicht... Ich habe mal die .mo angehängt.

Vielen Dank für die Hilfe!
Angehängte Dateien
Dateityp: zip message.mo.zip (515 Bytes, 19x aufgerufen)
equinox ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Ajax - Session Problem halskrause PHP Tipps 2009 10 12.01.2010 02:27
[Erledigt] Problem mit Mehrsprachigkeit Sniper_Kotaro PHP Tipps 2009 2 16.12.2009 11:47
Problem beim Download Management mistermint PHP Tipps 2009 8 24.10.2009 11:34
Umlaut Problem nokieone PHP Tipps 2009 7 16.10.2009 19:30
Problem mit Basedir in PhP cmuch05 Datenbanken 9 08.01.2009 14:17
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Probleme mit GetText() und Umlaute! eighteen PHP-Fortgeschrittene 1 27.04.2006 21:03
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
gettext funktioniert nicht, php gettext tutorial, gettext php tutorial, gettext bindtextdomain, php gettext not working, php gettext example, gettext tutorial, xampp gettext, gettext problem, gettext smarty, gettext mac, setlocale gettext problem php 5, smarty gettext, php gettext problem, php gettext funktioniert nicht, smarty gettext example, gettext greift nicht, gettext tutorial deutsch, php eigene gettext, gettext geht nicht

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum