Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [php]: Sprachpakete sinnvoll organisieren (https://www.delphipraxis.net/63334-%5Bphp%5D-sprachpakete-sinnvoll-organisieren.html)

yankee 17. Feb 2006 04:17


[php]: Sprachpakete sinnvoll organisieren
 
Hi @ll,

ich arbeite gerade an einem fuer meine Verhaeltnisse grossem php-Projekt. D.h. ca. 180KB php-Dateien (klingt wenig, aber tippt mal 180KB ;-)).
Ich habe mir jetzt ueberlegt das Projekt sprachunabhaengig zu machen. Erstmal habe ich mir also angeguckt wie andere es machen. D.h. ich habe mir eigentlich viel mehr angeguck, wie das bei phpbb laeft. Einfach eine grosse Datei mit einem assoziativen Array und alle an Text drin. Das ist recht praktisch, weil bestimmte arrayitems auch wieder arrays sein koennen, ueber die ich drueber iterieren kann. Oder an stellen, wo ich bei mysql einen enum als Typ hatte, habe ich jetzt eben einen int und ein unterarray in meinem spracharray sind dann die Optionen und so komme ich sehr einfach an die zugehoerige Sprachausgabe.
Mittlerweile ist die Sprachdatei jedopch schon recht gross geworden. Also bis jetzt sind es zwar nur 14KB, aber ich bin mit der Umstellung noch nicht fertig. Viele Texte sind immernoch "hardgecodet".
Jetzt bekomme ich Strukturierungsprobleme. Ich weiss nichtmehr genau was wo ist, ob ich gewisse allgemeine ausdruecke wie "Ja" und "Nein" schon habe, welche items in dem array ich eigentlich garnichtmehr verwende, weil ich es mir anders ueberlegt habe, wo ich zuletzt was dran geaendert habe usw.
Weiteres Problem ist, dass mein Projekt immernoch waechst. Ich mache das deutsche und das englische Sprachpaket, ein Freund von mir macht ein franzoesisches und ein anderer Freund macht ein italienisches. Da muss zwischen uns die Kommunikation natuerlich auch noch klappen. Ich aendere etwas an den scripten und alle sprachpakete muessen angepasst werden. Dafuer ist es aber eben sehr wichtig dass ich den Ueberblick ueber meine Sprachdateien halte.

Alles in eine Datei erscheint mir ploetzlich nichtmehr so gut. Vielleicht doch besser jedes php-Script eine eigene includedatei?
Also eine include fuer so Sachen wie die "enums", ja und nein (aslo was man staendig braucht) und ein include fuer jedes einzelne script nochmal? Das waere doch bestimmt auch performancemaessig beser, oder? Was sagt ihr dazu?

sh17 17. Feb 2006 07:49

Re: [php]: Sprachpakete sinnvoll organisieren
 
schau mal bei google nach, für PHP gibts es auch gnugettext

sh17 17. Feb 2006 07:51

Re: [php]: Sprachpakete sinnvoll organisieren
 
http://www.php.net/gettext

mh166 17. Feb 2006 10:05

Re: [php]: Sprachpakete sinnvoll organisieren
 
http://www.phpbar.de/w/Gettext

mfg, mh166

yankee 17. Feb 2006 10:11

Re: [php]: Sprachpakete sinnvoll organisieren
 
mhh... ich habe gerade mal ein bisschen in der gettext-manual rumgelesen. Eigentlich eine gute Idee, aber andererseits sieht es auch nicht viel anders als ein stark angepasster assoziativer php-Array. Trotzdem haette ich den Nachteil, dass ich keine Unterarrays haben kann, ueber die ich so schoen mit foreach iterieren kann...
Ist das also sinnvoll?
Einfach zu erstellen sind die Dateien ja... Einmal die php-datei erstellen und dann eine Vorlage generieren lassen ist natuerlich praktisch...
*voellig hin und hergerissen*

sh17 17. Feb 2006 10:20

Re: [php]: Sprachpakete sinnvoll organisieren
 
Zitat:

Trotzdem haette ich den Nachteil, dass ich keine Unterarrays haben kann, ueber die ich so schoen mit foreach iterieren kann...
Wobei nutzt Du die? um eine Combobox zu füllen?

mh166 17. Feb 2006 11:15

Re: [php]: Sprachpakete sinnvoll organisieren
 
Naja, ich hab mich jetzt nich soo damit befasst, aber was hälst du von ner Wrapper-Unit? Also praktisch eine Datei, in der aus den einzelnen Dateien die jeweilige Sprache eingelesen und in ein Array geschrieben wird, dass du dann verwendest. Also praktisch so:
Code:
<?php
// Ort der Überetzungstabellen angeben
bindtextdomain("allgemein", "./locale");
bindtextdomain("umfrage", "./locale");
bindtextdomain("admin", "./locale");
textdomain("test");

$sprachen["allgemein"]["ja"]  = gettext("ja");
$sprachen["allgemein"]["nein"] = gettext("nein");
$sprachen["allgemein"]["form"]["senden"]  = gettext("senden");
$sprachen["allgemein"]["form"]["vorschau"] = gettext("vorschau");
// ...
textdomain("umfragen");
$sprachen["umfragen"]["abstimmen"] = gettext("abstimmen");
$sprachen["umfragen"]["ergzeig"]  = gettext("ergzeig");
?>
Ich hoffe du verstehst, was ich meine. Das du also schon gettext verwendest. Dann lagerst du jede "Gruppe" in ne Datei aus (oder auch nich, aber is sicher übersichtlicher) und am Ende kannste dir das Array selber zusammenfriemeln. So ergibt sich zwar ein etwas erhöhter Aufwand (weil ja jeweils noch die Wrapper-Unit angepasst werden muss) aber das wird dann ja durch eine wesentlich bessere Übersicht wieder wett gemacht.

Ansonsten wäre ne andere Möglichkeit auch das Ganze in ne XML-Datei zu hauen. Brauchst dann nur noch ein Parser, der da durch rennt und mitdessenhilfe du dann das Ganze in ein Array schmeist. Dann haste auch deine Subarrays gleich so drin und das Ganze komplett ohne weiteren Wartungsaufwand für die Wrapperklasse.
Wobei man hier dann auch einfach nur ne Funktion schreiben könnte, die dann einen XPath übergeben bekommt. Das wäre sicherlich weniger schreibaufwand, als das mit Arrays der Fall wäre. Wobei dann hier jedesmal bei nem String die komplette Datei geparst werden würde, was zu Performanceverlusten führen kann.

Hat halt alles Vor- und Nachteile. Suchs dir raus, was du machst. :)

mfg, mh166

yankee 17. Feb 2006 13:50

Re: [php]: Sprachpakete sinnvoll organisieren
 
Zitat:

Zitat von sh17
Wobei nutzt Du die? um eine Combobox zu füllen?

Das waere ein gutes Beispiel...

Zitat:

Zitat von mh166
Naja, ich hab mich jetzt nich soo damit befasst, aber was hälst du von ner Wrapper-Unit? Also praktisch eine Datei, in der aus den einzelnen Dateien die jeweilige Sprache eingelesen und in ein Array geschrieben wird, dass du dann verwendest.:
Code:
<?php
[..]
$sprachen["allgemein"]["ja"]  = gettext("ja");
[..]

aehm... naja, das koennte ich dann wirklich gleich
Code:
<?php
[..]
$sprachen["allgemein"]["ja"]  = "ja";
[..]
schreiben und eien Datei fuer jede Sprach erstellen. Wenn ich schon gettext nehme, dass natuerlich um den assoziativen Array dabei los zu werden. Und dann kann ich gettext("ja") auch direkt im qt aufrufen und muss nicht ueber den Array gehen.

Aber so naeher ich mir das ansehe, je mehr sieht gettext fuer mich nach nichts anderem aus, als ein normaler assoziativer array. Ich habe zwar in der Manual irgendwas davon gelesen, dass man mit gettext auch ein Datum oder Zahlen gleich entsprechend formatieren kann, aber ich finde nicht heraus wie...

Also WO waere der Vorteil von gttext vs. php-associativer array???

sh17 17. Feb 2006 14:13

Re: [php]: Sprachpakete sinnvoll organisieren
 
Zitat:

Also WO waere der Vorteil von gttext vs. php-associativer array???
- Du musst Dich nicht um die Verwaltung kümmern.

Sprache aktivieren, fertig.

Du schreibst in Deiner PHP-Datei immer nur deutsch, entweder eine Übersetzung ist da, oder der deutsche Wert kommt zurück.

- Du hast nur die Werte in der po-Datei, die übersetzt werden müssen. Textleichen gibts es nicht.

- Du kannst weltweit übersetzte po-Dateien einsammeln und als Quell-Basis für neue Übersetzungen nutzen


zurück zum Beispiel Combobox ()

<select name="bal">
<option>gettext("Du")
<option>gettext("Ich")
<option>gettext("Er")
<option>gettext("Sie")
</select>

einfacher gehts nicht, oder?

mh166 17. Feb 2006 14:48

Re: [php]: Sprachpakete sinnvoll organisieren
 
Zitat:

Zitat von yankee
aehm... naja, das koennte ich dann wirklich gleich

Nunja... Jetzt wo dus sagst... http://klassenfeind.org/board/images.../whistling.png Tja, im Eifer des Gefechts... http://klassenfeind.org/board/images/smiles/blush.png

mfg, mh166


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz