Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Mehrsprachigkeit Front + Backend

  1. #1
    Interessierte/r
    Registriert seit
    24.06.2010
    Beiträge
    129
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Mehrsprachigkeit Front + Backend

    Hiho liebe Community,

    ich hab' mal wieder 'ne Frage.
    Ich hab' 'n kleines CMS, indem man Seiten & news verfassen kann. Diese werden dann, welch' ein Wunder xD, im Frontend angezeigt.

    Nun meine kurz Frage.
    Ich würde gerne mhersprachigkeit in's CMS "bauen"...nur weiß ich noch nicht so Recht, wie ich das anstellen soll.
    Reicht's denn, zwei Button zu machen ( z.B. deutsche & englische Flagge) und wenn man auf den Deutschen Button klickt, laden Sich die deutschen Inhalte & auf den Englischen, den Englischen Button?

    Ich bräuchte ja, theoretisch, nur eine "Sprache" Tabelle in der DB in der, bsp, SpracheID 1 gleich Deutsch und SpracheID 2 gliech Englisch ist?!

    Im Frontend könnte man das ja dann so ähnlich lösen, oder?
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Wenn du im Recht bist, kannst du dir leisten, die Ruhe zu bewahren; und wenn du im Unrecht bist, kannst du dir nicht leisten, sie zu verlieren.
    __________________________________________
    Software design is hard, and we need all the help we can get.
    – Bjarne Stroustrup

  2. #2
    Unregistriert
    Gast

    Standard AW: Mehrsprachigkeit Front + Backend

    Probieren geht ueber studieren
    Aber vom prinzip her muesste das so funktionieren

  3. #3
    Interessierte/r
    Themenstarter

    Registriert seit
    24.06.2010
    Beiträge
    129
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Zitat Zitat von Unregistriert Beitrag anzeigen
    Probieren geht ueber studieren
    Aber vom prinzip her muesste das so funktionieren
    Hätte ja sein können, dass jemand 'ne "elegantere Lösung" hat bzw. 'nen anderen Vorschlag...bei google findet man zwar auch ein bisschen...das meiste is' aber schon 2 Jahre oder länger alt.
    Wenn du im Recht bist, kannst du dir leisten, die Ruhe zu bewahren; und wenn du im Unrecht bist, kannst du dir nicht leisten, sie zu verlieren.
    __________________________________________
    Software design is hard, and we need all the help we can get.
    – Bjarne Stroustrup

  4. #4
    Jedi Ritter Avatar von Dodo
    Registriert seit
    26.04.2008
    Ort
    Wien
    Alter
    27
    Beiträge
    3.774
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Mehrsprachigkeit Front + Backend

    Ich hab das ganze so geregelt:

    Ich habe mir vor langer Zeit mal ein Template-System programmiert, das seitdem beständig wächst.
    Im Verzeichnis "templates" sind jeher meine HTML-Quellcodes mit Platzhaltern drin.

    Jetzt habe ich den Inhalt dieses Verzeichnisses in ein Verzeichnis "templates/de" verschoben, kopiert und zu "templates/en" umbenannt,

    Bei einem Seitenaufruf prüfe ich, ob der Cookie "language" gesetzt ist und welchen Wert er enthält.
    Existiert er nicht, frage ich die Browsersprache ab und entscheide, ob DE oder EN verwendet wird.
    Danach kann ich die richtigen HTML-Codes laden und verarbeiten.

    Der Nachteil an meinem System: Unnötige Redundanz - Ich muss bei Änderungen oft zwei Dateien umstellen.
    Die Vorteile an meinem System: Ich kann die deutsche Version unabhängig von der englischen Version bearbeiten. Und was für mich viel wichtiger ist: Ich kann meinen Content weiterhin erstellen, wie vorher. Ich muss nicht ständig in die Datenbank eintragen und dann die Platzhalter richtig setzen, sodass die richtigen Werte ausgelesen werden, sondern kann meinen Text direkt in den HTML-Code schreiben.
    Something big is coming. And there will be pirates and ninjas and unicorns...

  5. #5
    Interessierte/r
    Themenstarter

    Registriert seit
    24.06.2010
    Beiträge
    129
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Ich dachte mir das so, dass ich erstmal im Backend abfrage, welche Sprache, bzw. welche Flagge aktiv ist.
    Wenn Flagge "DE" Aktiv is', sollen alle Inhalte, die die SprachID 1, für "DE", haben, ausgelesen werden & wenn die Flagge "EN" Aktiv ist, sollen einfach alle Inhalte, die die SprachID 2, für "EN",ausgelesen werden.

    Im Frontend, so denke ich jedenfalls, reicht es ja, wenn man z.B. Deutsch auf Standard setzt..wenn man dann auf die Englische Flagge klickst sollen sich einfach die Englischen Inhalte laden.
    ...da ich ja die Inhalte, aus dem Backend, auch durch Platzhalter in's Frontend bringe, reicht's ja eigentl. wenn ich die Platzhalten dann wechseln lasse oder?!
    Wenn du im Recht bist, kannst du dir leisten, die Ruhe zu bewahren; und wenn du im Unrecht bist, kannst du dir nicht leisten, sie zu verlieren.
    __________________________________________
    Software design is hard, and we need all the help we can get.
    – Bjarne Stroustrup

  6. #6
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Ich habe mir fuer diesen zweck eine Klasse geschrieben - jedoch basiert die uf datein und nich auf einer Datenbank aus den folgenden gruenden:
    - Ueber die datenbank braucht as vieel laenger, da viele elemente pro seitenaufruf geladen werden muessen
    - unnoetger stress fuer die datenbank.

    Ich bin mom. nicht daheim, mal sehen ob ich an den Quellcode rankomme

    PHP-Code:
    <?php
    class language {
    private 
    $lang=array();
    private 
    $langDef=array("en"=>1"de"=>2"fr"=>3);
    private 
    $lng="";
    private 
    $SES_enable=true;
    private 
    $GET_enable=true;
    private 
    $sesKey="lang";
    private 
    $getKey="lang";
    function 
    __construct(Array $lngs=null$lang="") {
    if (!empty(
    $lang)) $this->lng=$lang;
    if (!empty(
    $lngs)) $this->langDef=$lngs;
    }
    private function 
    getLng() {
    if (!empty(
    $this->lng)) return $this->lng;
    if (
    $this->GET_enable) {
    if (isset(
    $_GET[$this->getKey])) {
    return 
    $_GET[$this->getKey];
    }
    }
    if (isset(
    $_SESSION[$this->sesKey]) && $this->SES_enable==true) return $_SESSION[$this->sesKey];
    $l=explode(","$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    if (empty(
    $l)) return "de";
    return 
    $l[0][0].$l[0][1];
    }
    public function 
    load($file) {
    $lang=$this->getLng();
    if (!
    in_array($langarray_flip($this->langDef))) $lang="en";
    $this->lng=$lang;
    if (
    $this->SES_enable$_SESSION[$this->sesKey]=$lang;    
    $csv=file($file);
    foreach (
    $csv as $line) {
    $line=explode("|"trim($line));
    $key=$line[0];
    $cur=$line[$this->langDef[$lang]];
    $this->lang[$key]=str_replace("&hl;""|"$cur);
    }
    }
    public function 
    disableGET() {
    $this->GET_enable=false;
    }
    public function 
    disableSES() {
    $this->SES_enable=false;
    }
    public function 
    setSESkey($key) {
    $this->sesKey=$key;
    }
    public function 
    setGETkey($key) {
    $this->getKey=$key;
    }
    public function 
    get() {
    $vars=func_get_args();
    $key=$this->lang[$vars[0]];
    $vars=array_slice($vars1);
    if (
    gettype(@$vars[0])=="array") {
    $vars=$vars[0];
    }
    $i=1;
    while (
    $i<=count($vars)) {
    $key=str_replace("\$".$i$vars[($i-1)], $key);
    $i++;
    }
    return 
    str_replace("%NL%""\n"$key);
    }
    public function 
    getLanguage() {
    return 
    $this->lng;
    }
    }
    Sry, dass der jetzt ein wenig unformatiert ist, bin anders nicht drangekommen...
    Die Dateien, aus denen diese Klasse liest sind wie folgt aufgebaut:
    Code:
    schluessel|beschriftung|beschriftung
    schluessel2|beschr|foobar
    blabla|blub|--blub--
    Der "schluessel' ist die Zeichenkette, ueber die du den entsprechenden text in der entsprechenden sprache abfraegst. Die beschriftungen sind die tete in verschiedenen sprachen. z.B.
    wellcome_text|Willkommen|Wellcome

    Der Konstruktor kann ohne argumente aufgerufen werden, dann sollten die dateien wie folgt aufgebaut sein:
    Code:
    schluessel|englisch|deutsch|franzoesisch
    Oder mit einem Argument, ein Array, dass die Reihenfolde der "Sprachen" in den Dateien beschreibt, also z.B.
    PHP-Code:
    $l=new language(array("de""en""es"));
    // Deutsch|Englisch|Spanisch 
    Oder mit 2 Argumenten, das erste wieder das Array, das zweite ein String (sollte im Array sein), dass den Standard darstellt.

    Nach dem Konstruktor kannst du noch
    PHP-Code:
    $l->enableGET();
    // und
    $l->enableSES();
    // aufrufen, um die Sprache nicht aus dem $_SERVER["HTTP_ACCEPT_LANGUAGE"] sondern
    // aus $_GET bzw $_SESSION auszulesen. Dazu benutzt die klasse standardmaesig den key
    // "lang", also $_GET["lang"] / $_SESSION["lang"], das laesst sich aber durch
    $l->setSESkey{"foobar");
    // und
    $l->setGETkey("foobar");
    // aendern 
    Um nun eine Datei zu laden benutzt du $l->load("pfad/zur/datei.txt");
    Wenn die fehler hat, wird die entsprechende zeile einfach ignoriert.
    Im PHP-Code benutzt du dann
    $l->get("wellcome_text");
    Und entsprechend gibt die Funktion "Willkommen" oder "Wellcome" zurueck.

    Ich hoffe das hilft dir

    EDIT:
    Ich hab den quelltext jetzt mit leerzeilen und im anhang ist noch eine java-anwendung, mit der du die dateien bequemer editieren kannst als mit nem normalen notepad.LanguageFileEditor.jar.zip
    Geändert von Tobse (24.12.2010 um 08:09 Uhr)
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  7. #7
    König(in) Avatar von Grevas
    Registriert seit
    20.04.2009
    Ort
    In meiner Wohnung.
    Alter
    30
    Beiträge
    1.039
    Danke
    0
    Bekam 5 mal "Danke" in 5 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Ich habe mir fuer diesen zweck eine Klasse geschrieben - jedoch basiert die uf datein und nich auf einer Datenbank aus den folgenden gruenden:
    - Ueber die datenbank braucht as vieel laenger, da viele elemente pro seitenaufruf geladen werden muessen
    - unnoetger stress fuer die datenbank.
    - Was du mit Dateien erledigen kannst, kannst du auch mit einer DB machen. Ansonsten ist es nicht wirklich langsamer, wenn du in der DB die selbse Struktur wie im File-Sys verwendest.
    - Man stresst die DB überhaupt nicht, wenn man ein vernünftiges caching hat. Zugegeben, ist ein extra Aufwand (bringt imo aber genug Vorteile - oder man benutzt gleich ein Framework bei dem das intergriert ist ).

  8. #8
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Angenommen, die methode get(String key) saehe so aus:
    PHP-Code:
    public function get($key) {
        
    $sql="SELECT text_".$this->lang." FROM language_items WHERE key='".$key."' LIMIT 1":
        if (
    $res=mysql_query($sql)) {
            if (
    $res=mysql_fetch_array($res)) {
                return 
    $res[0];
            } else {
                return 
    null;
            }
        } else {
            echo 
    "MySQL-Error: ".mysql_error();
            return 
    "";
        }

    Dann glaub ich nicht, dass das kuerzer ist, als es aus einem array rauszuhohlen, dass aus einer datei entstanden ist. Zumal, soweit ich weis, php dateien auch cached.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  9. #9
    Pion
    Gast

    Standard AW: Mehrsprachigkeit Front + Backend

    Natürlich wird da nur ein Query abgesetzt und nicht pro Key einer

    Schau dir mal von Frameworks Mehrsprachigkeitssysteme an

    Ich verwende auch Mehrsprachigkeit auf Fileebene, aber nicht so wie du

  10. #10
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: Mehrsprachigkeit Front + Backend

    Und wie machst du das auf fileebene? Wuerde man eine Tabelle fuer alle Texte anlegen, dann braeuchte man noch zusaetslich eine spalte, um zu speichern, auf welcher seite die angezeigt werden, also
    Code:
    schluessel|page (primary)|englisch|deutsch
    und dann im konstruktor das dann damit abfragen:
    PHP-Code:
    "SELECT schluessel, english FROM language_items WHERE page='CURRENT_PAGE'" 
    Was aber, wenn ein text fuer mehrere bereiche verfuegbar sein soll? Doppelt eintragen ist da wohl ein no-go. Im Dateisystem kann man einfach alle dateien laden, die man braucht und spart sich die page-spalte.

    P.S.: Ich habe das nur so ausgefuehrt, um dem TS die Moeglichkeit aufzuzeigen.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

Ähnliche Themen

  1. Optimalste Weg zur Mehrsprachigkeit...
    Von driver im Forum HTML & CSS Forum
    Antworten: 4
    Letzter Beitrag: 02.06.2010, 18:59
  2. Front-End Administration
    Von Seawolf-371 im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 1
    Letzter Beitrag: 02.11.2007, 12:32
  3. 2 Probleme mit Mehrsprachigkeit
    Von marX im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 4
    Letzter Beitrag: 19.09.2007, 14:59
  4. front page
    Von :) im Forum Computer - Internet Forum
    Antworten: 17
    Letzter Beitrag: 27.02.2006, 00:49
  5. mehrsprachigkeit/sprachauswahl script
    Von ini im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 5
    Letzter Beitrag: 15.12.2004, 11:38

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •