Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
Diskussion

Sprachdateien

Sancheck
Geschrieben am: Mo 28.07.2008, 10:29
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 747
Mitglied seit: 29.03.2008


Wie realisiert ihr diese in php?
mittels require einbinden?

Und schreibt ihr die eintraege dann in eine Datenbank oder Wie macht ihr das?

Ich plane ein Skript zu schreiben, das ich konzeptioniert habe und will mir die Multilingualisierung ermoeglichen.


--------------------
Top
PMEmail Poster
Top
 
 

#2 Geschrieben am: Mo 28.07.2008, 11:48 (+01:19)
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 0
Mitglied seit: --


Statische Vokalbeln bind ich als Array mit allen Vokabeln in einer php-Datei per include ein.

Bei Neueinträgen durch Mitglieder, die mehrsprachig sein können, wird der 1. Eintrag in allen Sprachen gespeichert.
Dann steht der Eintrag wenigstens problemlos in der Orginalsprache zur Verfügung auch wenn dieser nicht übersetzt wurde.
Bei weiteren Übersetzungen wird dann die spezielle Sprachdatei, bzw. der mysql-Eintrag aktualisiert.

Grüsse

Tümmel
Top
PMEmail Poster
Top
 
Sancheck
#3 Geschrieben am: Mo 28.07.2008, 11:50 (+00:01)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 747
Mitglied seit: 29.03.2008


Danke fuer deine Idee!
Gibts ne fertige funktion.....


--------------------
Top
PMEmail Poster
Top
 
stalkerX
#4 Geschrieben am: Mo 28.07.2008, 11:50 (+00:00)
Report PostQuote Post

AyomRank 3
******

Gruppe: Member (aktiv)
Beiträge: 43
Mitglied seit: 15.10.2007


In den meisten Projekten mache ich eine String-Datei zurecht, die nichts anderes ist als eine PHP-Datei mit einem Array an Strings. Diese wird dann einfach je nach Sprache inkludiert.


--------------------
Top
PMEmail PosterUsers Website
Top
 

#5 Geschrieben am: Mo 28.07.2008, 11:54 (+00:04)
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 0
Mitglied seit: --


QUOTE
Danke fuer deine Idee!
Gibts ne fertige funktion.....


laugh.gif
fopen($file,"w");fputs($text);fclose($file);

Schau mal beiphp.net unter fopen.
Da gibt's ne ganze Reihe fertiger Funtkionen.
Top
PMEmail Poster
Top
 
Sancheck
#6 Geschrieben am: Mo 28.07.2008, 13:34 (+01:40)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 747
Mitglied seit: 29.03.2008


Danke fuer die aeusserst hilfreiche antwort *sarkasmus*

ich dachte an ne languagelib etc.


--------------------
Top
PMEmail Poster
Top
 
Yosh
#7 Geschrieben am: Mo 28.07.2008, 14:03 (+00:28)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 173
Mitglied seit: 6.11.2006


Ich weiß ich bin mal wieder umständlich, aber ich mache das so:

(die fehlenden Properties und Funktionen einfach dazudenken, wollte jetzt nicht alles hier rein kopieren. Der Sinn sollte klar sein)

CODE

class PXConfig
{
private function initLanguage() {
   $allowedLanguages = array(
    "de-DE" => "Language_deDE",
    "en-US" => "Language_enUS");

   if(!array_key_exists($this->_DefaultLanguage, $allowedLanguages)) {
     $this->_DefaultLanguage = "de-DE";
   }
   $languageClass = $allowedLanguages[$this->_DefaultLanguage];
   $languageFile = sprintf("%slang/%s.inc", FORUM_PATH, $languageClass);
   if(!file_exists($languageFile)) {
     throw(new Exception("Language file not found", -1));
   }

   require_once($languageFile);
   $refClass = new ReflectionClass($languageClass);
   $this->_PXLanguage = $refClass->newInstance();
 }
}

class PXLanguage
{
 /** Exceptions **/
 const EXCEPTION_DBHOST = 1000;
 const EXCEPTION_DBDATABASE = 1001;
 const EXCEPTION_DBUSERNAME = 1002;
 const EXCEPTION_DBPASSWORD = 1003;
 const EXCEPTION_DBTYPE = 1004;
 const EXCEPTION_DBTYPEFILE = 1005;
 
 protected /* array */ $_Texts = array();
 protected /* array */ $_Exceptions = array();

 public function getText($Code) {
   if(array_key_exists($Code, $this->_Texts)) {
     return $this->_Texts[$Code];
   }
   if(array_key_exists($Code, $this->_Exceptions)) {
     return $this->_Exceptions[$Code];
   }  
   return "<!-- PXL: $Code not found-->";
 }
}

Sprachdatei:
class Language_deDE extends PXLanguage
{
 public function __construct() {
   parent::__construct();
   $this->_Exceptions = array(
    1000 => 'DB Host nicht gesetzt',
    1001 => 'DB Datenbank nicht gesetzt',
    1002 => 'DB Benutzername nicht gesetzt',
    1003 => 'DB Passwort nicht gesetzt',
    1004 => 'DB Type nicht gesetzt',
    1005 => 'DB Type Klasse wurde nicht gefunden'
   );
 }
}


Vorteil: Ich bin objektorientiert, Ich kann im Quelltext per Konstanten auf die Texte zugreifen
Nachteile: PHP5 + OOP = angeblich (nicht selbst getestet) nicht so perfomant, keine Datenbankverwaltung dahinter, daher viel Pflegearbeit. Einfacher wäre eine Datenbank und das automatische Erstellen der Sprachdateien.

Die Konstanten und mehreren Arrays in PXLanguage könnte man sich sparen, aber ich fand sie praktischer.

BTW, der Quellcode ist noch nicht getestet *hust*

Ansonsten gibt es noch http://de.php.net/gettext , was ganz gut sein soll... aber habe ich noch nicht selber ausprobieren können.


--------------------
Top
PMEmail Poster
Top
 
Sancheck
#8 Geschrieben am: Mo 28.07.2008, 14:05 (+00:02)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 747
Mitglied seit: 29.03.2008


Ich danke dir !


--------------------
Top
PMEmail Poster
Top
 
Yosh
#9 Geschrieben am: Mo 28.07.2008, 14:15 (+00:09)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 173
Mitglied seit: 6.11.2006


Ein Problem (was ich aber irgendwie immer habe) sind Texte in denen sich der Satzbau in den verschiedenen Sprachen gravierend unterscheidet und benutzerdefinierte Variablen eingebaut werden sollen.

Hallo yosh, wie geht's?
Hello yosh, how are you?

Kein Problem, ein Textteil "Hallo" und einer "wie geht's", dazwischen den Namen.

Sinnvoller wäre es "Hallo $NAME, wie geht's" und "Hello $NAME, how are you" einzutragen und der getText-Funktion noch ein Array mit Parametern zu übergeben. Mach ich mal falls ich wieder an den Code muss *g*


--------------------
Top
PMEmail Poster
Top
 
David T.
#10 Geschrieben am: Mo 28.07.2008, 14:29 (+00:13)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 113
Mitglied seit: 30.07.2006


QUOTE (Yosh @ Mo 28.07.2008, 15:15)
Ein Problem (was ich aber irgendwie immer habe) sind Texte in denen sich der Satzbau in den verschiedenen Sprachen gravierend unterscheidet und benutzerdefinierte Variablen eingebaut werden sollen.

Hallo yosh, wie geht's?
Hello yosh, how are you?

Kein Problem, ein Textteil "Hallo" und einer "wie geht's", dazwischen den Namen.

Sinnvoller wäre es "Hallo $NAME, wie geht's" und "Hello $NAME, how are you" einzutragen und der getText-Funktion noch ein Array mit Parametern zu übergeben. Mach ich mal falls ich wieder an den Code muss *g*

Warum erfinden wir das Rad nicht gleich nochmal neu?
PHP bietet gettext-Unterstützung, des weiteren lässt sich ja einfach printf verwenden.

Zum Thema Arrays: Wenn man alle übersetzten Strings für ne größere Seite in einem Array speichert, das jedes mal geladen wird, viel Spaß. PHP saugt massig Speicher für Arrays.
Top
PMEmail PosterUsers Website
Top
 
Yosh
#11 Geschrieben am: Mo 28.07.2008, 14:36 (+00:07)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 173
Mitglied seit: 6.11.2006


QUOTE (Yosh @ Mo 28.07.2008, 15:03)
Ansonsten gibt es noch http://de.php.net/gettext , was ganz gut sein soll... aber habe ich noch nicht selber ausprobieren können.

Wie gesagt, noch nicht probiert, aber rein aus Interesse, ist Dir bekannt ob gettext auch mit IIS vereinbar ist oder nicht?

[edit]
Hat sich erledigt, habe einen Hoster gesehen der es anbietet, also wirds wohl ohne weiteres möglich sein ohmy.gif


--------------------
Top
PMEmail Poster
Top
 
Sancheck
#12 Geschrieben am: Mo 28.07.2008, 14:40 (+00:04)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 747
Mitglied seit: 29.03.2008


ist aber anscheinend nicht ueberall installiert


--------------------
Top
PMEmail Poster
Top
 

#13 Geschrieben am: Mo 28.07.2008, 15:30 (+00:49)
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 0
Mitglied seit: --


Hi Sancheck,

Wenn du zu faul zum Lesen bist:

Ne Programmierer kostet 100 Euro/ Stunde. Du hast keine 100 Euro?
Es gibt in Deutschland Sozialhilfe. Oder geh betteln,...2 Tage betteln und du bekommst die 100 Euro die du brauchsd....


QUOTE
Ich weiß ich bin mal wieder umständlich


Kannst du mir mal erklären wozu du das array allowed_languages definierst?
Die erlaubten Werte sind in den Schlüsseln gespeichert und die Werte sind eine andere Schreibweise der Schlüssel.

Wo ist die Mehrwert in der zusätzlichen Arbeit?

Top
PMEmail Poster
Top
 
Yosh
#14 Geschrieben am: Mo 28.07.2008, 22:41 (+07:10)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 173
Mitglied seit: 6.11.2006


Das hat nur den Sinn dass ich den Klassen andere Namen geben kann als de_DE usw.
Außerdem ist so abgesichert, dass nur Klassen initialisiert werden die ich intialisieren will.

Die Klasse PXconfig wird bei mir noch abgeleitet und da kann ein Benutzer der das installiert sonstwas angeben... aber wie gesagt, das Script ist nie zum Einsatz gekommen


--------------------
Top
PMEmail Poster
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/25528

Topic Options Reply to this topicStart new topicStart Poll

 





Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]