[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Startsprache (default language) ändern - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

Startsprache (default language) ändern

10. Sep 2008, 17:03

Hallo Gemeinde,

ich habe zur Zeit das Problem, dass ich bei einer mittelgroßen, drei sprachigen Webseite die Standardsprache ändern möchte.

Was ist die einfachste Möglichkeit, ohne irgendwelchen Content herumzukopieren?

Grüße,
Basti

Hirbod
Beiträge: 435
Registriert: 15. Jan 2008, 14:46

12. Sep 2008, 12:58

Einfach im Template die Startsprache setzen.. Das wäre für mich die beste Lösung.

Weg Nummer 1:

Code: Alles auswählen

$article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], 1);
// 1 steht für CLANG 1, kannst 0,1,2,3,4,5.... die entsprechende zahl steht dann für ne sprache
Danach die Ausgabe:

Code: Alles auswählen

echo $article->getArticle(1); // 1 = ctype, der ausgegeben wird

Oder komplett anders:

Code: Alles auswählen

$this->setCLang(1); // das selbe spiel... 0,1,2,3,4,5 
$this->setArticleId(ID oder was auch immer);
echo $this->getArticle(1); // 1 = ctype, der ausgegeben wird

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

18. Sep 2008, 13:06

Vielen Dank für Deine Antwort!

Ich habe noch eine weitere Frage:
Hat jemand eine Idee, wie ich es erreichen kann, dass die Startsprache anhand der Spracheinstellung im Browser gewählt wird.

Grüße,
Basti

Hirbod
Beiträge: 435
Registriert: 15. Jan 2008, 14:46

19. Sep 2008, 16:16

Die Abfrage der vom Browser übermittelten Sprache ist einfach über die PHP Variable $_SERVER['HTTP_ACCEPT_LANGUAGE']

Folgende Ergebnisse kannst du dabei bekommen
  • de
    de_DE
    de,en_US
    de,en-US;q=0.7,en-GB;q=0.3
So, jetzt einfach ne if abfrage

Code: Alles auswählen

if($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "de")
{
$this->setCLang(1);
} else {
$this->setCLang(2); // z.b. für english
}
Spiel einfach mal rum, und schau, welche Ergebnisse du bekommst
Printe vorher einfach mal die gespeicherte variable mit
print oder echo $_SERVER['HTTP_ACCEPT_LANGUAGE']

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

23. Sep 2008, 11:29

Vielen dank für die Antwort!

Ohje, das wird ja komplizierter als ich mir erhofft hatte.

Gibt es PHP-Funktionen die einen beim auswerten dieser typischen Prio-Listen helfen oder sonstigen bewährten code auf dem man zurückgreifen könnte?

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

23. Sep 2008, 11:47

Der Folgende Ansatz war leider nicht von Erfolg gekrönt:

Code: Alles auswählen

echo($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$language = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if ( eregi('de', $language) ) {$start_lang= 0;}
elseif ( eregi('en', $language) ) {$start_lang= 1;}
elseif ( eregi('zh', $language) ) {$start_lang= 2;}
echo('START_LANG='.$start_lang);
$article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $start_lang);
Die Sprache wird soweit richtig erkannt, aber aber es wird immer noch die Defaultsprache 0 (de) angezeigt.

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

23. Sep 2008, 12:53

Nach einigem probieren scheint der folgende Code mein Problem zu lösen. Fehlt nur noch eine bessere abfrage der language codes.

Code: Alles auswählen

$language = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if ( eregi('de', $language) ) {$start_lang= 0;}
elseif ( eregi('en', $language) ) {$start_lang= 1;}
elseif ( eregi('zh', $language) ) {$start_lang= 2;}

if($REX['CUR_CLANG'] == ''){
  //Beide muessen in meinem Fall gesetzt werden:
  $REX['CUR_CLANG'] = $start_lang; 
  $this->setCLang($start_lang);
}

$article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

24. Sep 2008, 04:35

Hallo nochmal, leider musste ich feststellen, dass

Code: Alles auswählen

if($REX['CUR_CLANG'] == ''){ ... }
nur zufällig funktioniert hatte um festzustellen ob eine Sprache schon in der URL angegeben wurde. :( Ich brauche also immer noch eine verlässlichere Methode um festzustellen das ein Nutzer die Startseite (http://domain.cn/) aufgerufen hat und nicht (http://domaim.cn/index.php?article_id=1&clang=0). Bei der zweiten ist die Sprache ja schon explizit mitgegeben und die Browsereinstellung soll ignoriert werden. Hat da noch jemand eine idee. Nötigenfalls auch mich cookies ... aber das wäre für mit eigentlich die schlechtere Wahl.

Das aufdröseln der Prioritäten und Sprachen habe ich mittlerweile gut gelöst bekommen. :)

Hirbod
Beiträge: 435
Registriert: 15. Jan 2008, 14:46

26. Sep 2008, 11:38

$REX['CUR_CLANG'] gibt die Nummer (0,1,2,3) der aktuell gesetzten Sprache aus. Wird nirgends ne Sprache gesetzt, wird default die erste Sprache gewählt..

if($REX['CUR_CLANG'] == ""){

kann nicht funktionieren, da diese Variable nie leer ist.

Basti
Beiträge: 13
Registriert: 14. Jun 2008, 05:52
Wohnort: China

26. Sep 2008, 11:43

Hbod hat geschrieben:$REX['CUR_CLANG'] gibt die Nummer (0,1,2,3) der aktuell gesetzten Sprache aus. Wird nirgends ne Sprache gesetzt, wird default die erste Sprache gewählt..

if($REX['CUR_CLANG'] == ""){

kann nicht funktionieren, da diese Variable nie leer ist.
Ich habe es mittlerweile mittels:

Code: Alles auswählen

if($_GET['clang']=='')
gelöst. Bin nur etwas spät darauf gekommen.

Zurück zu „Allgemeines [R4]“