PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Webseite 2-Sprachig (https://www.php-resource.de/forum/php-developer-forum/83652-webseite-2-sprachig.html)

noob_in_php 04-05-2007 01:20

Webseite 2-Sprachig
 
Hallo liebe PHP Profis!

Bitte verweis mich nicht auf die Suchfunktion dieses Forum, dessen bin ich mir bewusst. Ich habe ca 3 std nach meinem Problem gesucht aber nichts gefunden und da ich noch ein Anfänger in PHP bin, ist es für mich ziehmlich schwer eure Sprache zu verstehen.


Folgendes Problem:
- Ich habe ein javascript programmiert, indem ich gerne 2 Grafikbuttone einbinden würde. Diese sollen einmal eine DE Flagge und eine EN Flagge sein. Über diese beiden Flaggen sollen die beiden Sprachen geschaltet werden.

- Fernerhin möchte ich keine DB mehr benutzen, da mir keine mehr zur Verfügung steht. Die Texte sollen in Dateien stehen.

Ich würde folgenden Quellcode verwenden:

In allen Index.php dateien:

Im Header Bereich:
switch ($lang) {
default: include("lang_de.php");
break;
case "de": include("lang_de.php");
break;
case "en": include("lang_en.php");
break;
}


An den Positionen, wo die Texte aufgerufen werden sollen:
<H3><?php echo $info[5]; ?></H3>
<P>
<?php echo $info[0]; ?><BR>
<?php echo $info[1]; ?><br>
<?php echo $info[2]; ?><br>
<?php echo $info[3]; ?><br>
<?php echo $info[4]; ?></P>

<H3><?php echo $allgemeininfo[0]; ?></H3>
<LI><A href="link.de"><?php echo $allgemeininfo[1]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[2]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[3]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[4]; ?></A>




In den Dateien, wo die Texte stehen (index_de.php):
<?php

global $info;
global $allgemeininfo;



$info=array(
//0
//0
"Text1",
//1
"Text2",
//2
"Text3",
//3
"Text4",
//4
"Text5",
//5
"Text6",
);

$allgemeininfo=array(
//0
//0
"Text1",
//1
"Text2",
//2
"Text3",
//3
"Text4",
//4
"Text5",
//5
"Text6",
);
?>


In den Dateien, wo die Texte stehen (index_en.php):
<?php

global $info;
global $allgemeininfo;



$info=array(
//0
//0
"Text1 (en)",
//1
"Text2 (en)",
//2
"Text3 (en)",
//3
"Text4 (en)",
//4
"Text5 (en)",
//5
"Text6 (en)",
);

$allgemeininfo=array(
//0
//0
"Text1 (en)",
//1
"Text2 (en)",
//2
"Text3 (en)",
//3
"Text4 (en)",
//4
"Text5 (en)",
//5
"Text6 (en)",
);
?>



Links für die Flaggen
ich hätte auf jeder Flagge den Link mit dem Parameter domäne/inde.php?$lang=en bzw de gesetzt. Zudem gibts noch ein weiteres Problem. Ich möchte wenn der User sich auf einer Unterseite befindet und er die Sprache umstellt nicht immer wieder auf die Startseite geleitet wird sondern er dort bleibt wo er gerade ist.
Das geht nicht mit einem absoluten Link oder so, da ich immer wieder die gleiche java navi einbinde! Also ich habe eine java navi für alle templates die ich von root einbinde. Gibt es da noch ein Weg, die aktuelle URL zwischen zu speicher, um immer wieder dort zu bleiben? Ich weiß schon das das geht nur wie?

Eins weiß ich noch (hoffe es ist richtig) man muss damit die Sprache auch auf den weiteren Subseiten so bleibt, wie man sie eingestellt hat, den Link parameter ?$lang hinter der url mit angeben.


Jetzt bekomme ich bei verschiedenen Varianten Fehlermeldungen bzw der Text wird gar nicht angezeigt. Ich vermute das liegt daran, dass die Varaiblen nicht als Global definiert wurden.?

Kann es auch vielleicht sein, dass es mit dem javascript Probleme gibt? Ich weiß ja das java clientseitig ausgeführt wird und php Serverseitig. Es ist doch aber eigentlich nur eine Übergabe.?

Hat jemand einen Lösungsvorschlag, ich wäre euch echt sehr dankbar.

Und bitte nich sauer sein, da schon wieder so ein Beitrag geöffnet wurde. Ich habe wirklich lange gesucht und viel probiert.
Viele Grüße

goth 04-05-2007 02:07

Zum einen "register_globals" ... also lieber $_GET["lang"] verwenden.

Zum anderen:
PHP-Code:

switch ($lang) {
    default:
        include(
"lang_de.php");
        break;
    case 
"de":
        include(
"lang_de.php");
        break;
    case 
"en":
        include(
"lang_en.php");
        break;


da gehört "default:" als letztes !
PHP-Code:

switch ($_GET["lang"]) {
    case 
"de":
        include(
"lang_de.php");
        break;
    case 
"en":
        include(
"lang_en.php");
        break;
    default:
        include(
"lang_de.php");
        break;



Ricola 04-05-2007 02:33

hey =)
dein default sollte als letztes stehen
PHP-Code:

switch ($_GET["lang"]) {
    case 
"de":
        include(
"lang_de.php");
        break;
    case 
"en":
        include(
"lang_en.php");
        break;
    default: 
// hier her ;P
        
include("lang_de.php");
        break;



tipp: kannst mal $_SESSION['lang'] eventuell einbinden,
so wird die sprache die gewählt wurde als session gespeichert bis der user seinen
browser schliesst bzw die seite verlässt.
ein vorschlag wäre von mir zB

index.php
PHP-Code:

<?php
if ( !isset($_SESSION['lang']) )
{
include(
"lang_en.php");
$_SESSION['lang'] = "en";
}
else
{
include(
"lang_".$_SESSION['lang'].".php");
}
?>

<a href="/action.php?lang=de">Deutsch</a> - <a href="/action.php?lang=en">English</a>


action.php
PHP-Code:

<?php
session_start
();

if ( isset(
$_REQUEST['lang']) )
{
$_SESSION['lang'] = $_REQUEST['lang'];
header("Location: " .$_SERVER['HTTP_REFERER']);
}
else
{
header("Location: " .$_SERVER['HTTP_REFERER']);
}
?>

der user klickt auf den link, und wird nach action.php gebracht,
dort wird geprüft was der user als request gewählt hat,
dann wird das in eine session gespeichert udn der user wird
zurück transportiert zur index.php die in der gewählten sprache dargestellt wird.

wenn es weiterhilft =)

EDIT:
hmm ok goth war schneller mit dem default =o)

goth 04-05-2007 03:39

Mach Dir nichts draus ... waren ja nur 26 Minuten ... :D

DivDax 04-05-2007 03:47

Ich verwende aktuell folgendes snippet in einem Projekt:

PHP-Code:

    $default_lang 'de';
    
$default_time time()+3600*24*365;
    
    
$lang $_GET["lang"];
    if(
$lang) {
        if(
file_exists("language/".$lang.".php")) { 
            
setcookie("lang"$lang$default_time);
            include 
'language/'.$lang.".php"
        } else {
            
setcookie("lang"$default_lang$default_time);
            include 
'language/'.$default_lang.".php";
        }
    } else {
        if(
file_exists("language/".$_COOKIE["lang"].".php")) {
            include 
'language/'.$_COOKIE["lang"].".php";
        } else {
            
setcookie("lang"$default_lang$default_time);
            include 
'language/'.$default_lang.".php";
        }
    } 

Man könnte das ganze auch noch so erweitern, dass das Script die Herkunft des Users ermittelt und dementsprechend die Standardsprache setzt.


Gruß,
Div

Ricola 04-05-2007 03:47

Zitat:

Original geschrieben von goth
Mach Dir nichts draus ... waren ja nur 26 Minuten ... :D
=P aber du hast nicht mittendrin hunger bekommen und
hast dir denn was zue ssen gemacht oder ? ^^ xD

noob_in_php 04-05-2007 03:50

Vielen Dank erstmal für eure Hilfe! Ich versuche es sofort einzubauen und werde euch berichten was bei rausgekommen ist.

Gibt es vielleicht Probleme mit den Sessions? Denn es wird schon eine Session für das Login erstellt. Ich bin benutze für meine Seite auch ein Forum und dessen Login script benutze ich auch für die Startseite. Dort lese ich gewisse Userdaten aus um sie in der Startseite anzeigen.

Ich werds trotzdem mal so probieren. Was ist mit der action.php? die lege ich einfach auf root und gebe im Link: http://www.domäne.de/action.php an?

Und noch was: sind die sachen in den text dateien so richtig gewesen?


viele grüße

DivDax 04-05-2007 03:52

@Ricola:
Hast du Kapazitäten frei, bzgl. eines Designs? Wie sieht's mit Referenzen aus?
Habe ein gut besuchtes Portal, das noch etwas verschöndert werden sollte, falls Interesse besteht.

OT:
Meine Pizza ist gleich fertig...hamham.. :D

EDIT:
In der Sprachfile sollte sowas in der Art stehen:

PHP-Code:

$lang["welcome"] = "Willkommen";
$lang["username"] = "Benutzername";
usw


Ricola 04-05-2007 03:59

Zitat:

Original geschrieben von noob_in_php
Gibt es vielleicht Probleme mit den Sessions?
Denn es wird schon eine Session für das Login erstellt.
Ich bin benutze für meine Seite auch ein Forum und dessen
Login script benutze ich auch für die Startseite.
Dort lese ich gewisse Userdaten aus um sie in der Startseite anzeigen.

wenn du keine namens-konflikte haben solltest dann nicht.

Zitat:

Original geschrieben von noob_in_php
Was ist mit der action.php? die lege ich einfach auf root und
gebe im Link: http://www.domäne.de/action.php

ja root =)

Ricola 04-05-2007 04:03

Zitat:

Original geschrieben von DivDax
@Ricola:
Hast du Kapazitäten frei, bzgl. eines Designs?
Wie sieht's mit Referenzen aus?
Habe ein gut besuchtes Portal, das noch etwas verschöndert
werden sollte, falls Interesse besteht.

also wenn ich die zeit wieder aufbringe, kann ich mal reinschauen und
sehen was sich machen lässt ;)

Zitat:

Original geschrieben von DivDax


EDIT:
In der Sprachfile sollte sowas in der Art stehen:

PHP-Code:

$lang["welcome"] = "Willkommen";
$lang["username"] = "Benutzername";
usw


das hab ich leider vergessen zu schreiben >.<

ps: guten hunger ^^ =P

DivDax 04-05-2007 04:05

@Ricola
Adde mich doch mal eben per ICQ/Skype, damit wir nicht den ganzen Thread zuspammen müssen. ;)
icq: 81825580
skype: divmedia

Gute Arbeit wird auch dementsprechend entlohnt. ;)

noob_in_php 04-05-2007 04:11

Also habe folgendes probiert:

in index.php

<?php


switch ($_GET["lang"]) {
case "de":
include("http://www.meinedomäne.de/lang_de.php");
break;
case "en":
include("http://www.meinedomäne.de/lang_en.php");
break;
default:
include("http://www.meinedomäne.de/lang_de.php");
break;
}

?>

das steht dort wo ich die texte auslesen möchte
<H3><?php echo $info[5]; ?></H3>
<P>
<?php echo $info[0]; ?><BR>
<?php echo $info[1]; ?><br>
<?php echo $info[2]; ?><br>
<?php echo $info[3]; ?><br>
<?php echo $info[4]; ?></P>

<H3><?php echo $allgemeininfo[0]; ?></H3>
<LI><A href="link.de"><?php echo $allgemeininfo[1]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[2]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[3]; ?></A>
<LI><A href="link.de"><?php echo $allgemeininfo[4]; ?></A>
</LI></UL>


und die lang_de.php und lang_de.php:
<?php

register_globals $firmeninfo;
register_globals $algemeininfo;



$info=array(
//0
//0
"Text",
//1
"Text",
//2
"Text",
//3
"Text",
//4
"Text",
//5
"Text",
);

$allgemeininfo=array(
//0
//0
"Text",
//1
"Text",
//2
"Text",
//3
"Text",
//4
"Text",
);
?>

So bekomme ich eine Fehlermeldung wegen unzulässiger T_Variable oder so. Wenn ich das register_global rausnehme dann wird kein Text angezeigt.

Ich versuchs gerad nochmal mit der 2. Lösung.

goth 04-05-2007 04:21

Zitat:

Original geschrieben von Ricola
=P aber du hast nicht mittendrin hunger bekommen und
hast dir denn was zue ssen gemacht oder ? ^^ xD

Nein ... bin auf Diät ... da gibt's um diese Zeit nix mehr ... ;)

noob_in_php 04-05-2007 04:28

2. Versuch ist mir auch misglückt.

folgendes hab ich erstellt:
in index

<?php
if ( !isset($_SESSION['lang']) )
{
include("http://www.meinedomäne.de/lang_en.php");
$_SESSION['lang'] = "en";
}
else
{
include("lang_".$_SESSION['lang'].".php");
}

?>

<a href="/action.php?lang=de">Deutsch</a> - <a href="/action.php?lang=en">English</a>

die action.php hab ich erstellt und in den gleichen ordner gelegt.

default wird kein text angezeigt! wenn ich jetzt auf ein link klicke dann steht die angeforderte seite kann nicht angezeigt werden.

?? Entweder bin ich nicht auf trapp oder oder ich bin da nicht auf trapp!?

Was ist falsch beide vorschläge funktionieren nicht. ich denke weil ICH da irgendwas noch vergesse oder nicht verstehe!!

Wäre schön wenn mir jemand das nochmal schildert wie der syntax in den dateien aussehen soll. wie gesagt habe die:
- index dateien wo der text eingelesen wird
- die text dateien selber
- die links für den sprachwechsel
- der syntax für die daten auslesen (<? php echo $info[1]; ?>

Ich hoffe ich bekomms noch hin! wird das auch gern können..

DivDax 04-05-2007 04:39

Sorry, aber ich sags zum letzen mal:
Bitte setze deinen PHP-Code in einen PHP-Tag -> Forenregeln.


Warum verlinkst du auf action.php wenn die auswahl der Sprache in der index.php steht?

Wenn die Datei lang_en.php im selben Ordner liegt, warum nicht eine relative Pfadangabe?
PHP-Code:

include("http://www.meinedomäne.de/lang_en.php"); 



Alle Zeitangaben in WEZ +2. Es ist jetzt 00:10 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG