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.06.2010, 10:32  
Neuer Benutzer
 
Registriert seit: 10.06.2010
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
niemayd befindet sich auf einem aufstrebenden Ast
Standard Mehrsprachigkeit mit PHP

Hallo zusammen,

ich bin momentan beim redesign eines größeren PHP Projekts und in diesem Sinne wird viel Code überarbeitet und ersetzt. Unser Projekt hat bisher die Mehrsprachigkeit folgendermasen gelöst:

Jede Sprache hat eine eigene Datei in der ein Array der Art
PHP-Code:
$lang = array(
    
welcome => 'Willkommen im Projekt'
); 
steht. Die Verwaltung der Einträge wurde über eine Datenbank geregelt, die dann autoamtisch die Textdateien mit dem Array erzeugt hat.Über einen Parameter wurde dann die entsprechende Datei eingebunden und die Werte mit einer globalen Funktion zurückgegeben:
PHP-Code:
__W('welcome'); 
Meine Frage ist jetzt, was für Erfahrungen ihr mit anderen Methoden für die Mehrsprachigkeit von PHP Projekten habt. Ich habe schon ein Pear Modul (Translation2) gefunden. Das ist aber schon seit 2 Jahren nicht mehr aktualisiert worden. Habt ihr die Sprachdateien an sich direkt in einer Datenbank?

Vielen Dank für eure Vorschläge!
niemayd ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.06.2010, 10:48  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Hi.

Für mein Projekt habe ich sämtliche Texte in den unterschiedlichen Sprachen in der Datenbank hinterlegt. Anhand der IP setze ich eine Standartsprache, die der User nach dem Login selbst festlegen kann. Dieses wird in einer Session gespeichert und über ein include auf der jeweiligen Seite, werden einfach die gewünschten Texte eingefügt.

Keine Ahnung, ob es der beste Weg ist, aber es funktioniert bei mir zumindestens gut!

Grüsse,

wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 10.06.2010, 10:50  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

Bei kleineren Projekten kannst du das sicher das aus der DB ziehen, da auf diesen wenig Traffic ist kann man die Translations direkt aus der DB holen. Habe ich auch schon bei kleineren Seiten so gemacht.
Bei großen Projekten ist es sicher besser, die Translations entweder so wie ihr es gemacht hab in ein Array zu speichern und dann diese Dateinen ein zu binden.
Was auch noch ne Möglichkeit ist, Ist direkt die übersetzten Templates zu erzeugen und dann hoch zu laden, so dass du dann für jedes Land ein eigenes Template hast.

OT:
Das ist keine FG-Frage!
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline   Mit Zitat antworten
Alt 10.06.2010, 10:53  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

mehrsprachigkeit mit php sitehp.de - Google-Suche
Asipak ist offline   Mit Zitat antworten
Alt 10.06.2010, 11:30  
Neuer Benutzer
 
Registriert seit: 10.06.2010
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
niemayd befindet sich auf einem aufstrebenden Ast
Standard

@Asipak: Es ging mir in der Frage nicht darum, wie man das Problem lösen kann. Ich kann google schon verwenden... Ich wollte Meinungen und Erfahrungsberichte von fähigen Entwicklern haben, die eventuell die anderen Methoden probiert haben. Die Sprachdatei hat ca 2000 Einträge, deswegen die Überlegung ob ein anderes System hierfür besser geeignet wäre.

Das mit dem Template ist keine schlechte Idee. Mal überlegen wie sich das am besten einbauen läst.

Danke für den Vorschlag!
niemayd ist offline   Mit Zitat antworten
Alt 10.06.2010, 12:49  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich benutze zur Zeit Datenbankeinträge. Ganze Texte sind natürlich als Inhaltsseiten gespeichert, Worte oder Fragemente (auch Fehlermeldungen u.ä.) habe ich in einet extra I18n Tabelle, die etwa so aufgebaut ist:

Code:
pattern | translation | lang | context
pattern ist hier ein Schlüssel. Entweder das Wort selbst oder ein ein Bezeichner (siehe Beispiel)
translation ist der übersetzte Inhalt
lang ist ein zweistelliger Sprachcode oder eine Sprachgruppe. Sprachgruppen löse ich über eine weitere Tabelle auf.
context gruppiert die Einträge nach Seiten o.ä. Wenn ich bspw. zwei Formulare habe, die gleiche Labelangaben verwenden, gebe ich "forms" als Kontext an.

Als PK benutze ich (pattern, lang, context)
context kann auch * sein, das sind Angaben, die applikationsweit ausgelesen werden
lang kann * enthalten, was immer die Standardsprache ist, wenn das Pattern für keine andere Sprache definiert ist.

Das Ganze lese ich in einen I18n Container (Objekt) aus, das ich für Sprach/Context auch im Cache ablege.

Beispiel:
Code:
pattern     | translation | lang | context

back          back          *      *
back          zurück        de     *
label_Subject Subject       *      forms
label_Subject Betreff       de     forms
label_Submit  Done          *      forms
label_Submit  Fertig        de     forms
label_Submit  Weiter        de     forms.multipart
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.06.2010, 23:00  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
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

Wir benutzen Sprachen (Deutsch, Französisch, ..) und Lokalisierungen (Deutschland/Deutsch, Schweiz/Deutsch, ..), an letztere sind die Übersetzungen gekoppelt.

Folgende Tabellen:
LANG
id | code | name
1 | de | Deutsch
..

LOC
id | fk_lang | code | name | decimal_delim | thousand_delim | date_format | time_format
2| 1 | de | Deutschland | , | . | d.m.Y | H:i
..

CAT
id | name
3 | NEWS
..

LABEL
id | fk_cat | name
4 | 3 | TITLE
..

TEXT
id | fk_label | fk_loc | text
5 | 4 | 2 | Newsübersicht
..

Übersetzungen werden dann z.B. so abgefragt: translate("NEWS_TITLE")
Anhand des Kategorienamens (Label-Präfix, hier NEWS) wird die gesamte Kategorie in der eingestellten Sprache aus der DB bezogen und in die Session geschrieben. So halten sich die Datenbankabfragen in Grenzen.

translate() ist bei uns ein ViewHelper
kannst auch
translate()->toDate(time()) oder // Mapping auf date(LOC.date_format, time())
translate()->multi("NEWS_DELETE", array("item" => "Köhler dankt ab")) // "Wollen Sie die News #item# wirklich löschen?"
translate()->toNumber(123456789.01); // 123.456.789,01
translate("<script>alert('1')</script>")->toHtml(); // htmlspecialchars("<script>alert('1')</script>")
translate("<script>alert('1')</script>")->toJs(); // <?php return "decodeURIComponent('" . rawurlencode("<script>alert('1')</script>") . "')" ?>
usw.

etc. benutzen, ist dann relativ billige Logik die das übernimmt.
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online   Mit Zitat antworten
Alt 11.06.2010, 18:55  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Ich mache das auch dateibasiert mit einem Array wie Du. Einziger Unterschied, ich halte die Daten in MS Excel. Spalte A => Array-Keys, B => Deutsch, C => Englisch usw.
Ein Makro produziert dann mehrere fertige PHP-Files, die der Usersprache entsprechend inkludiert werden. Der Vorteil dieser Methode ist, dass Du ohne großes Hick-Hack die Exceldatei an einen Übersetzer schicken kannst, der dann noch Spalte D => Polnisch einfügt.
drsoong ist offline   Mit Zitat antworten
Alt 11.06.2010, 19:14  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Mit einer Datenbank und einer kleinen Importroutine für Excel/Csv geht das genauso gut
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 11.06.2010, 19:24  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Mit einer Datenbank und einer kleinen Importroutine für Excel/Csv geht das genauso gut
Klar, weiß ich doch. Ist aber etwas aufwendiger. So exportier und importier ...
drsoong 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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mehrsprachigkeit, mehrsprachigkeit asipak, php mehrsprachig array, mehrsprachigkeit php methoden, php decodeuricomponent, array php für mehrsprachigkeit, php i18n:translate, mehrsprachigkeit mit php, methode für die mehrsprachigkeit, php ===

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:28 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