Welcome, Guest. Please login or register.
Did you miss your activation email?
May 24, 2012, 08:36:04 PM

Login with username, password and session length
Search:     Advanced search
Interested in joining the WebsiteBaker team?
For more Information read here or on our new website.
155469 Posts in 21707 Topics by 7732 Members
Latest Member: DarrellDD
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: Mehrere Sprachen: Zusatz ?lang=DE (FR/ EN/ ES/ etc.) geht verloren.  (Read 1180 times)
CyberDyne

Offline Offline

Posts: 158


« on: November 30, 2008, 12:47:23 PM »

Hallo,
ich habe mal wieder ein Problem mit der Mehrsprachigkeit meiner WB-Präsentation. Seltsamerweise geht die Zuweisung der jeweiligen Sprache (gesetzt im Backend bei den Eigenschaften der Seite), beim Navigieren in der Seite über das Menü verloren. Dies geschieht ebenso, wenn ich mir die Seite aus dem Backend heraus anzeigen lasse. Der Hinweis ?lang=DE ist nicht mehr vorhanden, was nun tragisch ist, da ich News über die jeweilige Landessprache separieren lasse und diese Info dann auch nicht mehr erscheint.

Rufe ich die Seite über den der Templateindex eingefügten Code auf, so wird das Kürzel am Ende der Adresszeile brauv ausgewiesen. Navigiere ich denn weiter über das Menü, verschwindet es wieder.

Bevor ich nun lange Codes und Erklärungen poste, erst mal so eine ungute Ahnung, ob es ev. sein kann, dass WB 2.7 "nachlässig" wird je umfangreicher die Seite ist (6 Sprachen in der geforderten Hirarchie laut Hilfe, sowie mit weiteren Verzweigungen bis in die 4 Unterebene)?

Gruß in den Sonntag,
Klaus
Logged
thorn

Offline Offline

Posts: 980


WWW
« Reply #1 on: November 30, 2008, 05:47:22 PM »

Hallo,

soweit ich weiß, wird das ?lang=XX nur angehängt, wenn sich die Sprache der Zielseite von der der verlinkenden Seite unterscheidet. Könnte dass das Problem sein?

thorn.
Logged

surf-andrea

Offline Offline

Posts: 126


« Reply #2 on: November 30, 2008, 06:29:22 PM »

kannst du mir da kurz eine Erklärung geben?

Danke.
Andi.
Logged
thorn

Offline Offline

Posts: 980


WWW
« Reply #3 on: November 30, 2008, 06:35:39 PM »

Hallo,

Das hier ist was passiert
Code: (/framework/class.frontend.php)
<?php
  
// Fetch page details
  
$this->page $get_page->fetchRow();
  
// Check if the page language is also the selected language. If not, send headers again.
  
if ($this->page['language']!=LANGUAGE) {
    if(isset(
$_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { // check if there is an query-string
      
header('Location: '.$this->page_link($this->page['link']).'?lang='.$this->page['language'].'&'.$_SERVER['QUERY_STRING']);
    } else {
      
header('Location: '.$this->page_link($this->page['link']).'?lang='.$this->page['language']);
    }
    exit();
  }
?>

Nur wenn die Sprache der aufgerufenen Seite von der bisher benutzen Sprache abweicht wird ?LANG=XX gesetzt.

EDIT: Um das wahrscheinlich von dir gewünschte Ergebnis zu erreichen müsstest du die äussere if-Abfrage entfernen.


thorn.
« Last Edit: November 30, 2008, 06:39:23 PM by thorn » Logged

CyberDyne

Offline Offline

Posts: 158


« Reply #4 on: December 01, 2008, 09:02:22 AM »

Hallo,
Nur wenn die Sprache der aufgerufenen Seite von der bisher benutzen Sprache abweicht wird ?LANG=XX gesetzt.
EDIT: Um das wahrscheinlich von dir gewünschte Ergebnis zu erreichen müsstest du die äussere if-Abfrage entfernen.
thorn.

Hallo,
ja das könnte due Ursache sein, denn ich bewege mich ja innerhalb der selben Sprache. Sobald ich diese wechsel, taucht auch der Anhang ?lang=XX wieder auf.

Ich habe Deinen Hinweis gleich mal umgesetzt und betreffende if Abfrage aus der class.frontend.php entfernt doch der Zusatz ?lang=XX wird trotzdem beim navigieren abgeschnitten. Dein Ansatz ist ein toller Tipp, wird diese Abfrage nach der verwendeten Sprache ev. noch woanders getätigt?

Wünsche allseits guten Start in die Adventszeit,
Klaus
« Last Edit: December 01, 2008, 09:17:45 AM by CyberDyne » Logged
CyberDyne

Offline Offline

Posts: 158


« Reply #5 on: December 01, 2008, 09:47:24 AM »

kannst du mir da kurz eine Erklärung geben?

Danke.
Andi.

Hallo,
eine Erklärung kann ich Dir gerne geben, allerdings sind die sprachenabhängige News noch nicht fertig, bislang kann ich nur zwischen zwei versch. Sprachen unterscheiden, ein Problem, um das ich mich dann nach der ?lang=XX Geschichte kümmern möchte.

Basis ist der Aufruf des Newsblocks wie ihn Ruud hier beschrieben hat.
Code:
<?php
$url 
$_SERVER['REQUEST_URI'];
if (
function_exists('display_news_items'))  {
  if (strrpos($url,"/en/"))  {
    display_news_items(1,3,-1,1,"Latest news","read more","No news available",false); 
  } else {
    display_news_items(2,3,-1,1,"Laatste nieuws","verder lezen","geen nieuws beschikbaar",false); 
  }

?>
Die else-Abfrage habe ich dann um das auch dort beschriebene else if erweitert, um weitere Sprachen anführen zu können.
Code:
<?php 
$url 
$_SERVER['REQUEST_URI'];
if(
function_exists('display_news_items')) {
if (
strrpos($url,"deutsch"))  {
display_news_items(55501"""weiter lesen ...""no news avaialbe yet..."false);
  } else if (strrpos($url,"english")) {
display_news_items(6,5501"""read more ...""no news avaialbe yet..."false);
  } else if (strrpos($url,"french")) {
display_news_items(7,5501"""en plus ...""rien ne va plus!"false);
  }

?>
Damit wird wie gesagt auch bereits unterschieden, allerdings nur zwischen deutscher und englischer Sprache. Danach dann will es nicht mehr das else if abarbeiten. Vermutlich muß dies anderes programmiert werden, bin aber leider kein PHP-Profi.

Die mehrsprachige Seite wurde nach den Vorgaben aus der betreffenden Hilfe unterteilt und jeweils auch die zutreffende Sprach in den Seiteneigenschaften gesetzt.

Gruß,
Klaus
« Last Edit: December 01, 2008, 09:49:05 AM by CyberDyne » Logged
surf-andrea

Offline Offline

Posts: 126


« Reply #6 on: December 01, 2008, 10:20:46 PM »

Alternativvorschlag:
Select Case, da kenne ich aber nicht genau den Aufbau.
Logged
CyberDyne

Offline Offline

Posts: 158


« Reply #7 on: December 02, 2008, 11:54:21 AM »

Alternativvorschlag:
Select Case, da kenne ich aber nicht genau den Aufbau.

Hallo,
habe versucht anhand dieses Beispiels das else if zu ersetzen, kriegs aber nich hin:
Code:
<?php 
if(function_exists('display_news_items')) {
    switch (
$_SERVER['REQUEST_URI']) {
    case 
"de":
    
display_news_items(55501"""weiter lesen ...""keine aktuellen Nachrichten..."false);
    break;
    case 
"en":
    
display_news_items(55501"""read more ...""no news avaialbe yet..."false);
    break;
    case 
"fr":
    
display_news_items(75501"""en plus ...""rien ne va plus!"false);
    break;
    } 

?>

Könnte sich bitte ein PHP-Profi der Sache annehmen? Das wäre super!!

Gruß,
Klaus
« Last Edit: December 02, 2008, 11:58:42 AM by CyberDyne » Logged
BerndJM

Offline Offline

Posts: 1764



« Reply #8 on: December 02, 2008, 12:33:47 PM »

Hi Klaus,

das kann so nicht funktionieren, da REQUEST_URI was ganz anderes (z.B.: /home/wb/de/kontakt.php) zurückgibt, als du abprüfst (de - en - fr).

Warum die elseif Geschichte aus dem Posting davor nicht funktioniert ist mir allerdings schleierhaft, sieht von der Syntax eigentlich o.k. aus, evtl. ein Tipfehler bei "french"? Ich verwende hier im Prinzip die gleiche Syntax, vielleicht mal vergleichen ...

Grüßle Bernd
« Last Edit: December 02, 2008, 12:37:31 PM by BerndJM » Logged

In theory, there is no difference between theory and practice. But, in practice, there is.
aldus

Offline Offline

Posts: 1238


« Reply #9 on: December 02, 2008, 01:16:45 PM »

Hallo Klaus

Alternativ könntest Du es auch so lösen, um das nicht gerade konfortable "if-elseif-elseif-endif"
los zu werden ...

Code:
<?php

/**
 *    @version    0.1.0
 *    @date        2008-12-02
 *    @author        aldus
 *    @plattform    WB 2.7
 *    @package    WebsiteBaker - Code examples
 *
 */

if ( function_exists('display_news_items') ) {

    
$lang = array (
        
'deutsch'    => array ( "weiter lesen ...""keine aktuellen Nachrichten ..." ),
        
'english'    => array ( "read more ...""no news avaialbe yet..." ),
        
'france'    => array ( "en plus ...""rien ne va plus!" ),
        
'plattduesk' => array ( "mok meer ...""nix inne tuete - nix los hier!" ),
        
'austria'    => array ( "viny fragen""viny weiss das ..." )
    );
        
    foreach(
$lang as $lookup => $value) {
        if ( 
strrpos($_SERVER['REQUEST_URI'], $lookup) != ) {
            
display_news_items(55501""$value[0], $value[1], false);
        }
    }
}
    
?>


Untested!

Jetzt brauchst Du nur noch das "$lang"-Array anpassen, erweitern, bzw. wenn sich die
Pfade zu den Sprachen ändern nur noch die //Schlüssel// (rechts) ....
Ebenso brauchst Du nur noch einen Aufruf von "display_news_items" bei Änderungen anzupassen und
nicht 4-6+x Zeilen ...

Gruß
Aldus

Edit: sorry ... war doch noch ein Bug drin ... sollte so nun aber funktionieren ...
« Last Edit: December 02, 2008, 01:24:21 PM by aldus » Logged
aldus

Offline Offline

Posts: 1238


« Reply #10 on: December 02, 2008, 01:41:39 PM »

Hallo Klaus

nachschlag ... jetzt klappt's auch mit den Pfaden ...

Code:
<?php

/**
 *    @version    0.1.2
 *    @date        2008-12-02
 *    @author        aldus
 *    @plattform    WB 2.7
 *    @package    WebsiteBaker - Code examples
 *
 */

if ( function_exists('display_news_items') ) {

    
$lang = array (
        
'deutsch'    => array ( "weiter lesen ...""keine aktuellen Nachrichten ..." ),
        
'english'    => array ( "read more ...""no news avaialbe yet..." ),
        
'france'    => array ( "en plus ...""rien ne va plus!" ),
        
'plattduesk' => array ( "mok meer ...""nix inne tuete - nix los hier!" ),
        
'austria'    => array ( "viny fragen""viny weiss das ..." )
    );
        
    foreach(
$lang as $lookup => $value) {
        if ( 
strrpos($_SERVER['REQUEST_URI'], "/".$lookup."/") != ) {
            
display_news_items(55501""$value[0], $value[1], false);
        }
    }
}
    
?>



Gruß
Aldus
Logged
CyberDyne

Offline Offline

Posts: 158


« Reply #11 on: December 02, 2008, 02:09:20 PM »

Hi Klaus,

das kann so nicht funktionieren, da REQUEST_URI was ganz anderes (z.B.: /home/wb/de/kontakt.php) zurückgibt, als du abprüfst (de - en - fr).

Warum die elseif Geschichte aus dem Posting davor nicht funktioniert ist mir allerdings schleierhaft, sieht von der Syntax eigentlich o.k. aus, evtl. ein Tipfehler bei "french"? Ich verwende hier im Prinzip die gleiche Syntax, vielleicht mal vergleichen ...

Grüßle Bernd

Hallo Bernd,
ich habe nun alles noch mal mit der if Abfrage ins Template eingetragen und diese funktioniert, gibt allerdings nicht das gewünschte Ergebnis aus.
Um die Fehlersuche etwas leichter zu gestalten habe ich die Ausgabe der News durch ein einfaches echo ersetzt, funktioniert auch, d.h. der String in der Adresszeile wird korrekt geprüft und schließlich die Meldung "Dies ist XXX" ausgegeben.
Ab der zweiten Sprache wird's aber merkwürdig, denn dann scheint das Ergebnis für den String nur noch Englisch zu sein, mit Ausnahme von Polnisch, da wird dann Deutsch als Ergebnis ausgespuckt.

Hier mal der verwendete Code
Code:
       <?php 
        $url 
$_SERVER['REQUEST_URI'];
        if(
function_exists('display_news_items')) {
          if (
strrpos($url,"deutsch"))  {
            echo 
"Dies ist Deutsch";
              } else if (
strrpos($url,"english")) {
            echo 
"Dies ist Englisch";
              } else if (
strrpos($url,"french")) {
            echo 
"Dies ist Französisch";
              } else if (
strrpos($url,"italy")) {
            echo 
"Dies ist Italienisch";
              } else if (
strrpos($url,"poland")) {
            echo 
"Dies ist Polnisch";
              } else if (
strrpos($url,"russia")) {
            echo 
"Dies ist Russisch";
              } else if (
strrpos($url,"spain")) {
            echo 
"Dies ist Spanisch";
          }
        } 
    
?>

Ich geh mal davon aus, dass wenn die Abfrage für Deutsch und Englisch korrekt erfolgt, die folgenden Sprachen ebenso richtig ausgeführt werden sollten.

Eine seltsame Geschichte, kannst Du Dir da einen Reim drauf machen?

Gruß,
Klaus
Logged
BerndJM

Offline Offline

Posts: 1764



« Reply #12 on: December 02, 2008, 04:26:54 PM »

Probier's mal mit strpos statt strrpos ob's da genau so (falsch) reagiert.
Btw: welche PHP-Version hast du am Start?

Grüßle Bernd
Logged

In theory, there is no difference between theory and practice. But, in practice, there is.
thorn

Offline Offline

Posts: 980


WWW
« Reply #13 on: December 02, 2008, 11:26:50 PM »

Hallo,

Btw: welche PHP-Version hast du am Start?

höchstwahrscheinlich php4.
Bitte http://de.php.net/strrpos aufmerksam lesen.
-> Findet das letzte Vorkommen eines Zeichens innerhalb einer Zeichenkette
(erst ab php5 kann die Funktion auch mit einem String umgehen).
Das erklärt dann auch das Verhalten: Die Routine sucht nicht nach "deutsch", "englisch", "france"...
sondern (mit PHP4) nur nach "d", "e", "f"...

thorn.
Logged

BerndJM

Offline Offline

Posts: 1764



« Reply #14 on: December 03, 2008, 12:02:30 AM »

Danke thorn,
ich hatte da sowas im Hinterkopf, aber vorhin nicht die Zeit es nochmal genau nachzulesen. Liege ich also richtig, daß seine Mimik mit strpos (1r) funktionieren müßte, oder?

Grüßle Bernd
Logged

In theory, there is no difference between theory and practice. But, in practice, there is.
thorn

Offline Offline

Posts: 980


WWW
« Reply #15 on: December 03, 2008, 12:41:02 AM »

ja.
Keine Ahnung warum da diese Inkonsistenz zwischen strpos() und strrpos() ist.  huh

thorn.
Logged

CyberDyne

Offline Offline

Posts: 158


« Reply #16 on: December 03, 2008, 10:07:20 AM »

Probier's mal mit strpos statt strrpos ob's da genau so (falsch) reagiert.
Btw: welche PHP-Version hast du am Start?

Grüßle Bernd

Hallo,
hatte tatsächlich PHP 4 laufen, war mir gar nicht bewußt! Konnte mit ner .htaccess auf PHP 5 umstellen.

Sodele, nach zwei Tagen Pause fiel mir der Balken im Auge sofort auf, Groß/Kleinschreibung hat die Ausgabe der Gruppen 10 und 11 verhindert. Nun funzt es in allen 6 Sprachen!

Vielen Dank schon für Eure Hilfe!!

Gruß,
Klaus
« Last Edit: December 06, 2008, 12:05:55 PM by CyberDyne » Logged
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!