Sprachdateien - PHP ?

Ich denk du brauchst mind. 2 Tabellen. Eine Tabelle mit den Sprachen und eine mit den Texten.
Wenn du sehr viele Texte hast, lohnt es sich z.B. auch eine dritte Tabelle zu machen, mit der du verschiedene Textarten zusammenfassen kannst.

Also:
Tabelle Translation:
id_translation, id_translationgroup, id_language, text, textDescriptor (unique index)

Tabelle Translationgroup:
id_translationgroup, tg_name

Tabelle Language:
id_language, lg_abriviation, lg_name

Du kannst dann einfach sagen (im Beispiel jetzt ein Konstruktor ohne id_translationgroup):
$trans = new Translation($langID);
$trans->getText($textDescriptor);

Überlege dir gut, was für translationgroups du einrichtest. Denn ist normal, dass du in mehreren Bereichen auf der HP die gleichen Texte brauchst (z.B. Elementbeschriftungen wie z.B. für Buttons).
Oder du lässt die Gruppen einfach weg. $textDescriptor ist einfach eine Kurzbezeichnung... z.B. lblButtonSubmit oder lblTitleSection.

Ich hoffe ich konnte dir bischen weiterhelfen ;)
 
Erst einmal danke für deine umfangreiche Antwort :)

Ich werde einmal Datei / DB-Variante probieren...

Meine letzte Frage zu diesem Thema, wenn ich die php-datei variante wähle.

Gehen wir davon aus, ich habe folgendes Array:

$muh = array(
1=>"hallo",
2=>"welt",
3=>"tschau",
);

"Wie mache ich es, dass ich z.B. nur $muh1 oder $muh_2 angeben muss, und diese dann ausgegeben wird mit z.B. "welt"."

Kann da einer was zu sagen ?
 
Am bestern arbeitest du dort auch wieder mit einem Array, wobei der Schlüssel der ersten Dimension die Sprache bezeichnet.
 
LOL, jo das ist mir schon klar gewesen ^^

Ne es ginr mir darum, wie ich auch $muh[2] -> $muh_2 machen kann.

Das ich global nur $muh_2 eingeben muss und nicht immer $muh[2] :)

Danke
 
Ich hatte mir mal ein kleines Framework gebastelt und unter anderen auch ne Funktionalität für Sprachen eingebaut.
Das ganze war recht simpel gestrickt, da das "Framework" (ich glaub das Wort ist nicht 100% passend) lief und je nach Aktion jeweilige Dateien und Sprachen eingebunden hatte.

Nun wie hab ich es gemacht: Beim Initialisieren der Klasse wurde über die Config die Standardsprache definiert. Sicherlich ist hier auch durch Header des Browsers eine automatische Sprachanpassung möglich.

Diese Defaultsprache stand erstmal fest. Wenn der User (sei es nun besucher oder Member) die Sprache gewechselt hat, wurde in eine Session die "neue" Sprache geschrieben.

Beim Aufruf der jeweiligen Aktion wurde die Session dann ausgelesen und die Sprache in das requiren der vorhandenen PHP-Sprache eingebunden. Sprich
PHP:
require_once($app->PATH_LANG.$app->getSessionLanguage().'lang.register.php';
Also der BasisPfad ($app->PATH_LANG) zu den LanguagePacks war /bla1/bla2/languages über die FUnktion getSessionLanguage() wurde dann die SPrache ausgelesen und (den Ordner muss es natürlich so geben) daraus das Sprachfile genommen.
Sprich er hat dann das Require auf de Datei
/bla1/bla2/languages/de/lang.register.php oder halt auch auf
/bla1/bla2/languages/en/lang.register.php
ausgeführt.
Das LanguageFiles waren dann so aufgebaut, das bei mir "Handlungsbezogen"/"Aktionsbezogene" Inhalte standen. Wie zum Beispiel ein File für "Register", "Login", "Startseite" usw...
Das Framework selber verfügte über eine Templateengine, wodurch ich die Platzhalter nur durch den Namen der Variablen ersetzen musste. Recht Easy, da in jeder Sprache die LanguageFiles den gleichen Namen hatten und auch die Var's der Sprachdateien gleich waren. Unterschiedlich war halt nur der Pfad zu diesen Dateien.

Also eine Sprachdatei für "deutsches" Register:
PHP:
// Langpack for german loginpage
$language['desc.prename'] = 'Vorname';
$language['desc.lastname'] = 'Nachname';
$language[desc.age'] = 'Alter';
//usw
Englische Sprachdatei
PHP:
// Langpack for englishloginpage
$language['desc.prename'] = 'forename';
$language['desc.lastname'] = 'surname';
$language[desc.age'] = 'age';
//usw

Ok, etwas wild durcheinander geschrieben, aber ich bin nicht mehr so fitt. Hoffe es ist dennoch irgendwie verständlich und gibt die neue Ideen.

Gruss

//EDIT
Sehe hier ist noch etwas los in dem Thread, hoffe mein Text passt hier überhaupt noch zum Thema ;) Sorry wenn nicht!
 
Zuletzt bearbeitet:
Folgendes wäre möglich:
PHP:
<?php

	$muh = array(
		'foo' => 'bar'
	);

	foreach( $muh as $key => $value ) {
		eval('${"muh_".'.var_export((string)$key, true).'} = &$muh['.var_export((string)$key, true).'];');
	}

	var_dump( $muh_foo );

?>
 
@ Mairhofer:

Danke für die ausführliche Antwort. :) Ich werde mir dein Beispiel mal angucken.

@ Gumbo:

Auch die danke für den Code. Suche das schon lange :)


Allgemein bin ich gestern Abend noch einmal den Umfang meines Vorhabens durchgegangen. Ich denke ich werde ca. 50 Array-Einheiten (inhalte) haben.

Meint Ihr, dass das mit einer Sprachdatei (php) noch machbar währe? Oder kommt es bei dem ganzen auf die Tatsache an, dass die Datei erst einmal geladen werden muss, und somit so oder so Leistungseinbußen entstehen !?

Ich bin immernoch sehr für die Datei-Variante, weil es am "einfachsten" für Laien ist, meiner Meinung nach...

Danke
 
Wenn jeweils nur die betreffende Sprachdatei geladen wird, sollte das eigentlich kein Problem darstellen. Die Frage ist eben nur, ob die Verwaltung der Übersetzungen deinen Erwartungen entspricht.
 
Zurück