Multilingual/Multidomain

Wie kann ich eine mehrsprachige Seite erstellen?

  • Für jede Sprache benötigen wir einen eigenen Kategorienbaum.
  • Jede Sprache bekommt eine eigene Vorlage (Template) mit Links (Schalter) in die anderen Sprachbäume hinein.
  • Die Navigation beginnt einfach mit der ersten (root) ID der jeweiligen Sprachkategorie.

Version: V1.2.7 - 1.x.x

Forum: http://forum.phpwcms.org/viewtopic.php?p=83791#p83791

Grundlagen: Level und IDs für eine mehrsprachige Seite

Ein Beispiel in dem die beiden Sprachen Englisch [en] und Deutsch [de] verwendet werden (IDs sind frei erfunden).

 ------------------------------------
L  E  V  E  L
-:  :  :  :  :
-0  1  2  3  4   <- LEVEL-Nr.)
-:  :  :  :  :
-+ home   :  :                        ID=0
-+--+ en                              ID=01
-+--+--+ en_category_01               ID=02
-+--+--+ en_category_02               ID=03
-+--+--+--+ en_category_02_01         ID=05
-+--+--+--+--+ en_category_02_01_01   ID=07
-+--+--+--+--+ en_category_02_01_02   ID=08
-+--+--+--+ en_category_02_02         ID=06
-+--+--+--+ en_category_02_03         ID=09
-+--+--+ en_category_03               ID=04
-+--+--+ en_category_04               ID=10
-:  :  :  :  :
-+--+ de                              ID=11
-+--+--+ de_Kategorie_01              ID=12
-+--+--+ de_Kategorie_02              ID=13
-+--+--+--+ de_Kategorie_02_01        ID=15
-+--+--+--+--+ de_Kategorie_02_01_01  ID=17
-+--+--+--+--+ de_Kategorie_02_01_02  ID=18
-+--+--+--+ de_Kategorie_02_03        ID=16
-+--+--+--+ de_Kategorie_02_03        ID=19
-+--+--+ de_Kategorie_03              ID=14
-+--+--+ de_Kategorie_04              ID=20

Kategorie
-:  :  :  :  :
-0  1  2  3  4   <- LEVEL Nr.
------------------------------------

Ebenen basiert: Die Ebenen (Level) werden bei Verwendung einer geteilten Navigation (z.B. horizontal und vertikal) relativ adressiert. Siehe “Level-Lift” unten.

Jede Sprache [en] & [de] hat einen eigenen Kategorienbaum (ADMIN → Seitenstruktur).

Und jede Spache [en] & [de] hat ihre eigene Vorlage (Template).

<note important> Bitte erstellen Sie zuerst die Vorlagen für die einzelnen Sprachen :!: Erst danach werden die Sprachbäume angelegt.


Es hat sich als sinnvoll herausgestellt, die Seite in einer Sprache fertigzustellen und dann den kompletten Sprachbaum für die Verwendung anderer Sprachen zu kopieren. Danach werden den kopierten Kategorien die sprachspezifischen Überschriften und Aliasnamen gegeben. </note>

Sprachschalter in der Vorlage

Wir benötigen zwei Links in jeder Vorlage, um auf die jeweils andere Sprache umschalten zu können.

Einfache Version:

<!-- ===== Spach-Schalter [en] //-->
<div id="language_switch">
  <a href="index.php?de" target="_self">Switch to german</a> | english active
</div>
<!-- ===== Ende Sprach-Schalter //-->
<!-- ===== Spach-Schalter [de] //-->
<div id="language_switch">
  Deutsch aktiv | <a href="index.php?en" target="_self">umschalten nach Englisch</a>
</div>
<!-- ===== Ende Sprach-Schalter //-->


In diesem Beispiel wird ein kleines Flaggenbild mit den Abmessungen 23x15px verwendet (CSS eingebunden).

In der Vorlage [en] kann verwendet werden z.B.:

language en

<!-- ===== Spach-Schalter [en] //-->
<div id="language_switch">
  <div id="flag_de">
    <a href="index.php?de" target="_self"><img src="img/leer.gif" border="0" vspace="0" hspace="0" alt="german" width="23" height="15" title="switch to german" /></a>
  </div>
  <div id="flag_en_act">
    <a href="index.php?en" target="_self"><img src="img/leer.gif" border="0" vspace="0" hspace="0" alt="english" width="23" height="15" title="enlish active" /></a>
  </div>
</div>
<!-- ===== Ende Sprach-Schalter //-->

In der Vorlage [de] kann verwendet werden z.B.:

language de

<!-- ===== Spach-Schalter [de] //-->
<div id="language_switch">
  <div id="flag_de_act">
    <a href="index.php?de" target="_self"><img src="img/leer.gif" border="0" vspace="0" hspace="0" alt="deutsch" width="23" height="15" title="Deutsch aktiv" /></a>
  </div>
  <div id="flag_en">
    <a href="index.php?en" target="_self"><img src="img/leer.gif" border="0" vspace="0" hspace="0" alt="englisch" width="23" height="15" title="umschalten nach Englisch" /></a>
  </div>
</div>
<!-- ===== End Language switch [de] //-->

NAVIGATION

Eine einfache vertikale Navigation für die linke oder rechte Seite, die den Tag {NAV_LIST_UL:F …….. verwendet.

  • en: {NAV_LIST_UL:F,01,,act_path,active,,,}
  • de: {NAV_LIST_UL:F,11,,act_path,active,,,}


Kombination aus einer horizontalen & vertikalen Navigation

Z.B. Die horizontale Ausgabe:

+---------------------------------------------------------------------+
| [en_category_01] [en_category_02] [en_category_03] [en_category_04] |
+---------------------------------------------------------------------+
en: <div class="nlu_horiz1">{NAV_LIST_UL:F,01,1,act_path,active}</div>
de: <div class="nlu_horiz1">{NAV_LIST_UL:F,11,1,act_path,active}</div>

(Eine Ebene (Level) tief).

Z.B. Die vertikale Sub-Ausgabe für die aktive Kategorie en_category_02 bei der Verwendung von Level-Lift.

[en_category_01] [en_category_02] [en_category_03] [en_category_04]

+----------------------+
| [en_category_02_01]  |
| [en_category_02_02]  |
| [en_category_02_03]  |
+----------------------+


Bitte kopieren Sie den Programmteil in jede Sprachvorlage. So wird eine ID basierte navigation zu einer Ebenen (Level)-basierten Navigation.
Ich nenne es Level-Lift. (Bitte auch hier schauen - NAV_LIST_UL (CSS) (am Ende).

[PHP]
if(isset($GLOBALS['LEVEL_ID'][1])) {
  $level_id = $GLOBALS['LEVEL_ID'][1];
  echo '<div class="nlu_navi1">'.LF;
  echo '{NAV_LIST_UL:F,'.$level_id.',,act_path,active,,,}';
  echo '</div>';
  }
[/PHP]

Wobei LEVEL_ID'[X] die Ebene (Level) ist.


Schalter für verschiedene Domains

<note important> Diese Schalter wird nur gebraucht, wenn jede Sprache über eine eigene Domain angesteuert wird. :!: </note>

Forum: http://www.phpwcms.de/forum/viewtopic.php?p=73725#73725

Hier ist ein Schalter, der mit zwei Domains mydomain1.com und mydomain2.com arbeit und folgenden HTTP Status Code generiert:
HTTP Status Code: HTTP/1.1 301 Moved Permanently

<note> Bitte verwenden Sie ausschließlich diesen Eintrag in der config:

$phpwcms['site'] = 'http://'.$_SERVER['SERVER_NAME'].'/';


$_SERVER['SERVER_NAME'] should always contain the current called Domain. </note>

Kopieren Sie den Programmteil in das Verzeichnis include/inc_script/frontend_init/

Bedingung:/config/phpwcms/conf.inc.php

  • $phpwcms['allow_ext_init'] = 1;


In das Skript müssen natürlich Ihre Domain- und Start-Aliasnamen eingetragen werden.
(Eine kurze Version diese Skipts finden Sie in: /template/inc_Script/frontend_init/disabled/domaincheck.php).

rt_domainswitch.php

<?php
// compare against current domain and redirect to correct if neccessary
// http://www.phpwcms.de/forum/viewtopic.php?p=73771
// Installation: Put this snippet into the folder /frontend_init/
// and switch at conf.inc.php: $phpwcms['allow_ext_init']    = 1;
// E.g.:
// Startpoint from mydomain1.com is the ID=01 -> $LEVEL_ID[1] = 1
// Startpoint from mydomain2.com is the ID=11 -> $LEVEL_ID[1] = 11
//
// PHPWCMS_URL -> http://mydomainX.com/
// returnGlobalGET_QueryString() -> ?alias
// $aktion[0] == 0 -> pointer at the root level
 
 
if(isset($LEVEL_ID[1])) {
   // Pointer behind the root level ?
   // Yes -> check active Domain behind root level
      if($LEVEL_ID[1] == 1 && strpos(PHPWCMS_URL, 'mydomain1.com') === false) {
      // E.g. Using the ID=1 (for maydomain1.com) but with the domain maydomain2.com, than switch back to .mydomain1.com
      // E.g. http://www.mydomain2.com/index.php?1-contact  switch to http://www..mydomain1.com/index.php?1-contact
         headerRedirect('http://www.mydomain1.com/index.php'.returnGlobalGET_QueryString());
      } else {
       // The same for the domain mydomain2.com
         if($LEVEL_ID[1] == 11 && strpos(PHPWCMS_URL, 'mydomain2.com') === false) {
            headerRedirect('http://www.mydomain2.com/index.php'.returnGlobalGET_QueryString());
            }
         }
} else {
   // check root level for active Domain
   if($aktion[0] == 0) {
   // pointer on the root level e.g. http://mydomain1.com/  ??
      if(strpos(PHPWCMS_URL, 'mydomain1.com')) {
      // Yes, go to my startpage for the domain 1
         header( "HTTP/1.1 301 Moved Permanently" );
         headerRedirect('http:/www.mydomain1.com/index.php?mydomain1_start');
      } elseif(strpos(PHPWCMS_URL, 'mydomain2.com')) {
         // The same for domain 2
         header( "HTTP/1.1 301 Moved Permanently" );
         headerRedirect('http://www.mydomain2.com/index.php?mydomain2_start');
         } else {
         //redirect to "default"  -> Fallback if there is an third domain or what ever
            header( "HTTP/1.1 301 Moved Permanently" );
            headerRedirect('http://www.default.com/index.php?default_start');
            }
      }
}
?>
deutsch/phpwcms-system/admin/seitenstruktur/multilingual.txt · Last modified: 2018/06/03 18:08 (external edit)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0