multilinguale Seite a la XAMPP

Alles, was PHP betrifft, kann hier besprochen werden.

multilinguale Seite a la XAMPP

Postby wernerfan » 05. October 2005 00:51

Hallo.

Ich habe da mal eine bescheidene Frage.
Ihr kennt ja wahrscheinlich die XAMPP Seite die in dem Paket dabei ist und bei dem Aufruf 127.0.0.1 erscheint wo man sich seine Sprache aussuchen kann.

Ich habe mir das ganze mal angeschaut und bin von der Art der Programmierung der Seiten begeistert und will selber eine Seite in PHP schreiben die auch mehrere Sprachen umfassen soll.

Allerdings wird ja in der XAMPP Seite alles in einer temporären Datei gespreichert was natürlich für den öffentlichen Zugang schlecht ist wenn mehrere User auf die Seite mit Unterschiedliechen Sprachen drauf zugreifen.

Wie kann ich das also anders realisieren?
Hoffe ihr könnt mir helfen.

LG
wernerfan
 
Posts: 4
Joined: 05. October 2005 00:37

Postby Reyx » 05. October 2005 11:45

Erstell dir einfach 'ne Sprachdatei für die verschiedenen Sprachen und lass die dann dynamisch auslesen.

Oder, wenn dir das zu viel Arbeit ist, mach's mit 'nem Array:
Code: Select all
$LangGerman = array('Welcome' => 'Herzlich Wilkommen!', 'ToNews' => 'Zu den Neuigkeiten', 'ToBoard' => 'Zum Forum'); // usw.
$LangEnglish = array('Welcome' => 'Welcome!', 'ToNews' => 'To the NewsBlog', 'ToBoard' => 'Visit our Bulletin Board!'); // usw.

if(empty(trim($_GET['language'])))
     $_GET['language'] = 'en';

if($_GET['language'] === 'de')   {
    print($LangGerman['Welcome']);
}   else if($_GET['language'] === 'en')   {
    print($LangEnglish['Welcome']);
}


Wobei ich da doch die Sprachdateien bevorzugen würde ...
Reyx
 
Posts: 9
Joined: 07. June 2005 19:45

Postby wernerfan » 05. October 2005 12:05

Also ich würde es auch lieber mit Sprachdateien machen, aber ich weiß nicht was ich schrieben muss damit er dann die Sprachdatei lädt.

Wie gesagt bei den XAMPP Seiten wird das ganze über eine temporäre Datei in der die Abkürzung für die Sprache gespeichert wird. Ich dachte dann es mit einem Cookie machen zu wollen, was für mich als noch ziemlicher Anfänger was PHP anbelangt zu schwer ist einzubinden ist.
wernerfan
 
Posts: 4
Joined: 05. October 2005 00:37

Postby jakimo72 » 05. October 2005 14:57

Wenn es Dateien mit Sprachversionen sein sollen, so
gibt es den Quasi-Standard Gnu-gettext. Und auch für
gettext gibt es eine PHP erweiterung.

Ich persönlich bin aber kein großer Freund von gettext,
ich arbeite lieber mit Datenbanken der Art
create table("key" varchar(50) primary key,
"lang" varchar(5),
"text" varchar(255));
Selber Dateien zu erstellen und zu parsen, kann man vergessen,
das macht eine Datenbank allemal besser und schneller.
(kleine niedliche Datenbanken sehe SQLite)
Man kann im text auch $var usw. benutzen, wenn man
es dann durch ein
eval('return "'.$text.'";');
verarbeitet.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby wernerfan » 05. October 2005 15:07

Von gettext habe ich gestern schon gelesen finde ich aber auch nicht so praktisch und es ist auch nicht gerade groß erklärt.

Datenbank wollte ich eigentlich nicht benutzen, daher wollte ich die alternative mit den Dateien benutzen.
wernerfan
 
Posts: 4
Joined: 05. October 2005 00:37

Postby Reyx » 05. October 2005 17:02

Dann schreib dir einen eigenen Parser:

Sprachdatei (als Beispiel):
Code: Select all
Index      Index
Board         Forum
Guestbook      Gästebuch

Beachte, dass das Trennzeichen eine beliebige Anzahl an Whitespaces/Tabulatoren ist, solche musst du also in deiner Übersetzung maskieren!

Code: Select all
$LanguageData = array();
$FileHandle = fopen('deutsch.txt', 'r');
flock($FileHandle, LOCK_SH);

while($ParsedText = fscanf($FileHandle, "%s\t%s\n"))   {
   $LanguageData[$ParsedText[0]] = $ParsedText[1];
}
         
flock($FileHandle, LOCK_UN);
fclose($FileHandle);


Danach stehen dann die Sprachinfos in $LanguageData['Index'], $LanguageData['Board'] usw. zur Verfügung.

---
Ist natürlich nur ein Ansatz!!!
Reyx
 
Posts: 9
Joined: 07. June 2005 19:45

Postby jakimo72 » 05. October 2005 20:22

Sequentieller Zugriff auf eine Datei, mir graust es...
Ok, für 10 oder weniger Daten, aber schon bei 20 Einträgen
möchte ich nicht der Webserver sein...

Ich will ja niemanden zu seinem Glück zwingen, aber
z.B. eine SQLite-Datenbank ist einfacher und schneller
zu bedienen, und besteht ja auch nur aus einer Datei.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Wiedmann » 05. October 2005 20:41

z.B. eine SQLite-Datenbank ist einfacher und schneller

Ich wenn ich dir grundsätzlich zustimme...

Auch obwohl es mittlerweile "Cool" ist einen Root-/V-Server zu haben, wieviel Webhoster kennst du wo die SQLite zur Verfügung steht?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby wernerfan » 07. October 2005 15:58

Ich kenne mich nicht so mit SQL aus und daher würde ich vorläufig auch nur mit den Übersetzungsdateien arbeiten wollen.
Wieviel schneller oder besser wäre es denn über SQL?
wernerfan
 
Posts: 4
Joined: 05. October 2005 00:37

Postby Brutos » 07. October 2005 16:54

Wiedmann wrote:
z.B. eine SQLite-Datenbank ist einfacher und schneller

Ich wenn ich dir grundsätzlich zustimme...

Auch obwohl es mittlerweile "Cool" ist einen Root-/V-Server zu haben, wieviel Webhoster kennst du wo die SQLite zur Verfügung steht?

SQlite ist doch für gewöhnlich in PHP schon integriert, und nur wenige schalten das ab...
Brutos
 
Posts: 22
Joined: 26. March 2005 13:33

Postby jakimo72 » 07. October 2005 17:09

Wenn es nur darum geht mal eben ein oder zwei Webseiten
multilingual zu machen, so sind sequentuelle Dateien, die man einmal
einliest, und dann im Hauptspeicher behält, nicht zu langsam.

Aber bei größeren Datenmengen kann es sinnvoll sein, nur Teile der
Übersetzungsdatei einzulesen, und schon hat man keinen reinen sequetiellen Zugriff mehr. Oder man muss mehrere kleine Dateien erzeugen, und spätenstens dann wird es mit einer SQL-Tabelle einfacher.
Insbesondere muss man sich über geeignete Trennzeichen in der Textdatei Gedanken machen. Leerzeichen als Trenner sind nicht übermäßig sinnvoll, denn dann dürfen die Schlüssel keine Leerzeichen enthalten. Tabulatoren sind auch nicht gut, denn einige Textprogramme übersetzen Tabulatoren in Leerzeichen...
In einer Datenbanktabelle must Du Dich um Trennzeichen, oder doppelte Schlüsseleinträge keine Gedanken machnen, das erledigt das DBMS für Dich.

Ein Vorteil haben natürlich Textdateien, Sie sind so schön einfach zu editieren. Aber dafür kann man eine SQL-Datenbank z.B. mit Hilfe von Openoffice-Base recht komfortabel editieren, ohne ein Extra Programm schreiben zu müssen.

Und da man ab einer gewissen Projektgröße sowieso nicht um SQL herumkommt, wäre es schoneinmal eine gute Übung. Ich kann auch helfen, wenn Du nicht zurechtkommst.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Wiedmann » 07. October 2005 18:11

SQlite ist doch für gewöhnlich in PHP schon integriert, und nur wenige schalten das ab...

Um mal 3 bekannte zu nehmen:
Bei 1&1, Schlund & Partner oder Strato nicht.

(OK, bei Starto z.B. würdest du es bei den Premium Paketen haben).

Allgemein macht dieses Vorgehen ja auch Sinn. Diese Provider haben für ihre Kunden ja extra MySQL-Server die für diese Aufgabe gedrillt sind. Würden jezt die Kunden auch noch grosse DB's über SQLite machen, hätte der Webserver ja noch mehr auf der PLatte zu schrubben (auch wenn das natürlich nicht unbedingt die Andeung von SQLite ist).

Oder anders: Wenn sich einer einen schmalbrüstigen Vserver mietet, kann er es sich überlegen ob der da auch noch Ressourcen für einen MySQLd verbrauchen will. Aber wenn es diese Server eh schon extra für den Kinden gibt...?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests