Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie das Projekt mehrsprachig gestalten?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie das Projekt mehrsprachig gestalten?

    Falls das Thema hier nicht reinpasst, bitte verschieben. Danke.

    Hallo,
    ich entwickel ein Projekt, was von Grund auf selbst von mir geschrieben wurde. Nun will ich das System aber international verfügbar machen. Da stellt sich bei mir nun die Frage, die Sprachen via Datenbanken auszugeben (in Kombination mit den richtigen SQL Befehl) oder halt als einzelne Dateien. Wenn es nach Perfomance geht, wäre das 2. besser oder? Wer hat selbst erfahrung und hat eventuell noch Tipps und Tricks für mich?

    Ich würde auch gerne auf externe Frameworks verzichten.

    Gruß Condor

  • #2
    Das gibt so viele Möglichkeiten. Du könntest z.B. die sprachabhängigen Phrasen in einer Konfiguration ablegen und in Deinen Seiten bspw. per $language['phrase'] ausgeben.
    Je nach Sprache wird dann die entsprechende Sprachkonfiguration geladen.

    Ein anderer Ansatz wäre, wenn Du mit Templating arbeitest, Schlüssel in den Templates zu hinterlegen, z.B. {#phrase#}, was Du dann über einen Controller sprachabhängig ersetzen kannst.
    Hier finde ich persönlich die Datenbank sinnvoller, weil Du dann bequem über eine Administrationsoberfläche die Übersetzungen hinterlegen/pflegen kannst.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      ... oder gettext http://php.net/manual/de/book.gettext.php

      Such mal hier im Forum etwas herum, das kommt immer wieder mal... war erst vor kurzem hier auch Thema.

      http://www.php.de/forum/webentwicklu...webanwendungen

      http://www.php.de/forum/webentwicklu...erte-aus-mysql

      etc..
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Hallo,
        mach es doch flexibel und erlaube mehrere Translate-Adapter. Schreib dir ein TranslatorInterface das als einzige Methode translate($id) erzwingt. Dann kannst du dir einen PhpArrayTranslator schreiben, dessen Übersetzungen eben aus einem Array stammen, dann einen DatabaseTranslator, der die Übersetzungen aus der Datenbank holt und von mir aus noch einen GettextTranslator. So kann jeder Anwender deiner Entwicklung sich selbst aussuchen, wie er die Übersetzungen gemanaget haben will.

        PHP-Code:
        <?php
        interface TranslatorInterface { public function translate($id); }
        class 
        PhpArrayTranslator implements TranslatorInterface {
          private 
        $translations;
          public function 
        __construct(array $translations) {
            
        $this->translations $translations;
          }
          public function 
        translate($id) {
            if (!
        array_key_exists($id$this->translations)) { return $id; }
            return 
        $this->translations[$id];
          }
        }

        $translator = new PhpArrayTranslator(require 'de_DE.php');
        // ..
        $translator = new DatabaseTranslator($pdo'translation_table');
        // ..
        echo $translator->translate("home.welcome_text");
        Wenn du Lust hast schau dir mal die Translator aus dem Zend Framework 2 an: http://framework.zend.com/manual/1.1...ate.using.html

        Kommentar


        • #5
          Mein Lieblings-Framework in PHP ist CakePHP. Da gibt es ähnlich wie beim Zend Framework eine integrierte i18n Funktionalität: http://book.cakephp.org/2.0/en/core-...alization.html

          Andernfalls kann ich dir Projekt von Phillip Schröer empfehlen: https://github.com/Philipp15b/php-i18n

          Kommentar


          • #6
            Ich hab mir das jetzt so gedacht. Im Adminbereich schreibe ich ein Modul, wo ich alle Sprachen bequem bearbeiten kann, die dann Datenbankbasiert gespeichert werden. Nach dem eine Sprache bearbeitet wurde, würde ich die Sprachen, die bearbeitet wurden, in Dateien Cachen und per gettext oder sonstige Ausgabefunktionen dann ausgeben. Wäre doch ein ziemlich effektiver Weg oder nicht? So könnte ich sogar eine Versionierung verwalten, in dem ich die veraltete Dateien Archiviere und geändertes in der Datenbank aufliste, falls mit dem aktuellen Datein etwas nicht stimmt.

            Wie oben schon erwähnt würde ich auf Frameworks gerne verzichten, da es dort zuvieles geben würde, was ich überhaupt nicht gebrauchen kann oder erst anpassen müsste.

            Kommentar


            • #7
              Zitat von Condor93 Beitrag anzeigen
              Ich hab mir das jetzt so gedacht. Im Adminbereich schreibe ich ein Modul, wo ich alle Sprachen bequem bearbeiten kann, die dann Datenbankbasiert gespeichert werden. Nach dem eine Sprache bearbeitet wurde, würde ich die Sprachen, die bearbeitet wurden, in Dateien Cachen und per gettext oder sonstige Ausgabefunktionen dann ausgeben. Wäre doch ein ziemlich effektiver Weg oder nicht? So könnte ich sogar eine Versionierung verwalten, in dem ich die veraltete Dateien Archiviere und geändertes in der Datenbank aufliste, falls mit dem aktuellen Datein etwas nicht stimmt.
              Das liest sich für mich so, als ob Du die Sprachvariablen nur in der Datenbank speichern möchtest damit Du sie im nachhinein über ne GUI bearbeiten kannst. Wozu diesen Umweg? Kannst doch direkt die Sprachvariablen in einer Konfigurationsdatei (ini, yaml, ....) ablegen und dann in Input-Feldern editierbar machen.


              Wie oben schon erwähnt würde ich auf Frameworks gerne verzichten, da es dort zuvieles geben würde, was ich überhaupt nicht gebrauchen kann oder erst anpassen müsste.
              Die 2. Library die von Kratersk erwähnt wurde besteht gerade mal aus einer einzelnen Datei (bzw. 2 wenn du auf Yaml-Sprachdateien setzt).

              Kommentar


              • #8
                Zitat von Okinez Beitrag anzeigen
                Das liest sich für mich so, als ob Du die Sprachvariablen nur in der Datenbank speichern möchtest damit Du sie im nachhinein über ne GUI bearbeiten kannst. Wozu diesen Umweg? Kannst doch direkt die Sprachvariablen in einer Konfigurationsdatei (ini, yaml, ....) ablegen und dann in Input-Feldern editierbar machen.
                Könnte ich so machen, wenn das Projekt klein wäre. Bei einen Projekt, das aber ziemlich groß ist, bringt mir das herzlich wenig und dann noch via FTP dauerhaft? Programmierer sind "faul", sie bauen dazu also ein Werkzeug, um es gleich bequemer zu machen.
                Die Datenbank hat außerdem den Vorteil, das ich im Backend, wenn in der Hauptsprache (en) ein Text sich ändert, gleich bei den ganzen Sprachen diese Änderungen mit anpassen kann, ohne dabei jede Datei zu öffnen und dann diese noch erst zu suchen (bei knapp 1000 Texten keine schöne Aufgabe). Auch der Support kann so Änderungen vornehmen.

                Hätte wohl noch erwähnen müssen, dass dieses Projekt groß wird und in über 50 Sprachen später verfügbar sein soll.


                Die 2. Library die von Kratersk erwähnt wurde besteht gerade mal aus einer einzelnen Datei (bzw. 2 wenn du auf Yaml-Sprachdateien setzt).
                Ändert trotzdem nichts daran, das ich auf Framework verzichten möchte.

                PS: eine kleine Klasse dazu schreiben, um die richtige Datei auszuwählen, ist kein problem wirkliches Problem.

                Nachtrag:
                Ich war mir zum Anfang etwas unsicher und habe nur an einzelne Methoden (Datenbank oder Datei) gedacht, jetzt aber habe ich beides einfach mal zusammen kombiniert und dieser weg sollte funktionieren.

                Kommentar


                • #9
                  Wieso genau willst du auf Libraries verzichten?

                  Btw, es gibt einen (gigantischen) Unterschied zwischen Library und Framework. Das verlinkte Ding ist kein Framework, sondern eine Library.

                  Ich persönlich wäre auch für die DB. Obwohl ich vermute, dass die Festplattenoption schneller wäre. Du kannst ja auch beides einsetzen und noch memcached.
                  [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                  Kommentar


                  • #10
                    Zitat von Condor93 Beitrag anzeigen
                    Ändert trotzdem nichts daran, das ich auf Framework verzichten möchte.
                    Dann müsstest du auf PHP auch verzichten, denn PHP ist an sich auch so etwas wie ein Framework.

                    Kommentar


                    • #11
                      Zitat von hellbringer Beitrag anzeigen

                      Dann müsstest du auf PHP auch verzichten, denn PHP ist an sich auch so etwas wie ein Framework.
                      "externe Frameworks" steht oben schon. Außerdem geht das vom eigentlichen Thema ab.

                      Warum ich keine fertige Frameworks oder Libraris verwenden möchte im Backend? Es ist zwar schön und gut, ein funktionieredes Framework oder Libraries zu nutzen, aber es gibt zuviele die einfach nicht das machen, was ich nur brauche. Deshalb schreibe ich mir lieber kleine dinge selber zusammen, die ich später beliebig erweitern bzw. anpassen kann

                      Kommentar


                      • #12
                        Zitat von Condor93 Beitrag anzeigen
                        "externe Frameworks" steht oben schon. Außerdem geht das vom eigentlichen Thema ab.
                        PHP ist von Zend.

                        Das Zend Framework ist von Zend.

                        Wenn das Zend Framework "extern" ist, ist PHP auch "extern".

                        Zitat von Condor93 Beitrag anzeigen
                        Warum ich keine fertige Frameworks oder Libraris verwenden möchte im Backend? Es ist zwar schön und gut, ein funktionieredes Framework oder Libraries zu nutzen, aber es gibt zuviele die einfach nicht das machen, was ich nur brauche. Deshalb schreibe ich mir lieber kleine dinge selber zusammen, die ich später beliebig erweitern bzw. anpassen kann
                        Also das was du beschreibst, liest sich für mich nach Standardfall. Was ist so speziell an deinem Vorhaben, dass du es von Grund auf selber programmieren musst?

                        Kommentar


                        • #13
                          Zitat von Condor93 Beitrag anzeigen
                          Warum ich keine fertige Frameworks oder Libraris verwenden möchte im Backend? Es ist zwar schön und gut, ein funktionieredes Framework oder Libraries zu nutzen, aber es gibt zuviele die einfach nicht das machen, was ich nur brauche. Deshalb schreibe ich mir lieber kleine dinge selber zusammen, die ich später beliebig erweitern bzw. anpassen kann
                          Da schliesse ich mich Condor93 an.

                          Kommentar


                          • #14
                            Für etwas kleines wie eine Translations-Lib mag das ja gehen. Aber Doctrine oder Twig verhalten sich teilweise auch nicht so perfekt wie ich das gerne hätte. Von Symfony ganz zu schweigen. Doch deswegen habe ich noch keines der 3 Libs neu programmiert.

                            Ich kann mir kaum vorstellen, dass du damit eine gleich hohe Qualität erreichst.
                            [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                            Kommentar


                            • #15
                              Zitat von hellbringer Beitrag anzeigen

                              PHP ist von Zend.

                              Das Zend Framework ist von Zend.

                              Wenn das Zend Framework "extern" ist, ist PHP auch "extern".



                              Also das was du beschreibst, liest sich für mich nach Standardfall. Was ist so speziell an deinem Vorhaben, dass du es von Grund auf selber programmieren musst?
                              mit extern meinte ich alle Frameworks, die nicht von PHP bereitgestellt werden, also diese, die ich erst mit einbinden muss. Bei sehr großen Projekten (über 1000 Stunden) verzichte ich auf Libs/Frameworks, weil 80% der Funktionen eh wegfallen und große Frameworks zu längeren Request führen. Ich will aber ein schlichtes, einfaches, sicheres aber auch perfomantes System haben, wo ich dann auch genau weiß, was der Code macht und den ich später beliebig anpassen kann.

                              Ich hab nichts gegen Frameworks, für kleinere Projekt sehr sinnvoll und nutze es da selbst, aber bei den hier lohnt sich das nicht.


                              Zitat von ChristianK Beitrag anzeigen
                              Ich kann mir kaum vorstellen, dass du damit eine gleich hohe Qualität erreichst.
                              Die "Prototypen" sind immer so eine sache, stimmt. Man kann es aber immer nach und nach verbessern wenn man sich damit auch beschäftigt und im Internet schaut, wie ähnliche Libs vorgehen.

                              Kommentar

                              Lädt...
                              X