Language Files und define

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

  • Language Files und define

    Hallo zusammen,

    ich include in diversen Dateien Language Files, in denen ich diverse Übersetzungen ablege.

    Hierzu verwende ich:

    PHP-Code:
    define ("MORNING","Guten Morgen"); 
    a.) Ist dieses Vorgehen noch Stand der Dinge?
    b.) Angenommen, die Language File ist groß (> 100 kB), hat dies Auswirkungen auf die Performance beim Parsen? Die Scripte, die die Language File includet werden einige Tausend mal in der Stunde aufgerufen.

    Macht es Sinn, diese nach PHP Script zu trennen?

    z.B. Script 1 includet nur das Language File, welches die relevanten Übersetzungen beinhaltet? Derzeit include ich nämlich überall die "große".

    Danke und Gruß
    Boris

  • #2
    1. solltest du imho keine Konstanten sondern Arrays dafür nehmen
    2. wie wäre es mit gettext und po-Dateien?

    Gruß
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Danke für deine Rückmeldung.
      Wenn ich es richtig sehe, müsste ich mich hier zwischen 1 und 2 entscheiden.


      Allerdings würde ich gerne den Weg des geringsten Widerstandes und der einfachen Verwaltung gehen. Nachdem, was ich über gettext gelesen habe, wäre der Weg des Array anstelle gettext deutlich einfacher umzusetzen.

      Gibt es da (signifikante) Unterschiede in Sachen Performance?

      Kommentar


      • #4
        Zitat von Ghostrider28 Beitrag anzeigen
        Gibt es da (signifikante) Unterschiede in Sachen Performance?
        Ich habe mit beiden Varianten gearbeitet und konnte keinen signifikaten Unterschied feststellen.

        Gruß
        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Zitat von Kropff Beitrag anzeigen
          1. solltest du imho keine Konstanten sondern Arrays dafür nehmen
          Weil du explizit "imho" geschrieben hast: Was ist an Konstanten schlimm? Die haben gegenüber normalen Arrays den Vorteil, dass man ihre Einträge nicht (aus Versehen) überschreiben kann. Außerdem signalisiert man so dem Leser des Quellcodes, dass sich die Werte während des Programmablaufs nicht ändern.

          Haben Arrays in dieser Verwendung irgendwelche Vorteile?

          Wären als Kompromiss Klassen-Konstanten denkbar? Im Gegensatz zu defines müllen die wenigstens nicht den globalen Namensraum voll.

          In etwa so:
          PHP-Code:
          // fallback
          abstract class LocaleTextsEn implements LocaleTexts {
              const 
          hallo 'Hallo!';
              const 
          goodbye 'Good Bye!';
              const 
          today_is 'Today is %s.';
          }

          abstract class 
          LocaleTextsDeLowerBavarian extends LocaleTextsEn {
              const 
          hallo 'G\'führ Di Goatt!';
              const 
          goodbye 'Schleich Di!';
              const 
          today_is 'Miar hamm %s.';

          Zitat von Ghostrider28 Beitrag anzeigen
          ... Array anstelle gettext ...

          Gibt es da (signifikante) Unterschiede in Sachen Performance?
          Außer einem zusätzlichen Funktionsaufruf macht gettext nicht viel mehr als deine "superglobale define-Hash-Tabelle".

          Wie kommst du in dem Zusammenhang auf "Performance"? Solcherart Texte werden im Verhältnis zum restlichen Programmablauf doch eher selten ausgegeben. Damit entfällt schon mal der Performance-Teilbereich Geschwindigkeit. Speicher-Effizienz dürfte auch kein Problem darstellen.

          Falls deine Lokalisierung über das simple Ersetzen von Text-Literalen hinausgeht, wirst du irgendwann vermutlich sowieso auf die entsprechenden ICU-Klassen stoßen, wie bspw.:

          PHP: Locale - Manual
          PHP: MessageFormatter - Manual

          Da steht dann "Performance" eh hintenan.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            Zitat von fireweasel Beitrag anzeigen
            Weil du explizit "imho" geschrieben hast: Was ist an Konstanten schlimm? Die haben gegenüber normalen Arrays den Vorteil, dass man ihre Einträge nicht (aus Versehen) überschreiben kann.
            Und genau das ist das Problem. Du hast eine Anwendung für zwei Kunden. Glaubst du denn im Ernst, die würden alle Übersetzungen klaglos hinnehmen? Nö, irgendwer hat immer Sonderwünsche und da muss man flexibel sein. Was mit Konstanten nicht geht.
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Was ist an Konstanten schlimm?
              Konstanten donnern den globalen Namensraum gnadenlos zu.


              Ich tendiere auch zu gettext(), wenn das (evt.) benutzte Framework nix eigenes mitbringt.

              Einfacher Grund:
              Das erstellen und bearbeiten wird von po Dateien kann weltweit von allen (technischen) Übersetzungsbüros geleistet werden. Diese haben sowohl das kowhow, als auch die nötige Software dazu.
              Es ist Standard in der Programmiererwelt.
              Und das nicht nur in PHP, C, C++ usw.
              Wir werden alle sterben

              Kommentar


              • #8
                Zitat von fireweasel Beitrag anzeigen
                Weil du explizit "imho" geschrieben hast: Was ist an Konstanten schlimm? Die haben gegenüber normalen Arrays den Vorteil, dass man ihre Einträge nicht (aus Versehen) überschreiben kann. Außerdem signalisiert man so dem Leser des Quellcodes, dass sich die Werte während des Programmablaufs nicht ändern.
                1. Konstanten sind global, und global ist böse.

                2. Konstanten sind konstant, das heißt du kannst zu Programmlaufzeit nie mehr als eine Sprache ausgeben. Es gibt Fälle, wo das aber erforderlich ist.

                3. Konstanten sind praktisch nur vom Programmierer wartbar. Es gibt zwar Wege PHP-Dateien mit Konstanten dynamisch zu erzeugen, aber wenn es schon eine andere Datenquelle gibt, von der man Konstanten erzeugen kann, warum nicht gleich diese verwenden? Mal davon abgesehen sind variable Variablen böse und das selbe gilt auch für "variable Konstanten".

                Zitat von fireweasel Beitrag anzeigen
                Wären als Kompromiss Klassen-Konstanten denkbar? Im Gegensatz zu defines müllen die wenigstens nicht den globalen Namensraum voll.

                In etwa so:
                PHP-Code:
                // fallback
                abstract class LocaleTextsEn implements LocaleTexts {
                    const 
                hallo 'Hallo!';
                    const 
                goodbye 'Good Bye!';
                    const 
                today_is 'Today is %s.';
                }

                abstract class 
                LocaleTextsDeLowerBavarian extends LocaleTextsEn {
                    const 
                hallo 'G\'führ Di Goatt!';
                    const 
                goodbye 'Schleich Di!';
                    const 
                today_is 'Miar hamm %s.';

                Besser, aber auch das kann nur der Programmierer warten.

                Kommentar

                Lädt...
                X