Gast: Multilingual

Hallo,

in diesem Faden lese ich zum Stichwort multilingual diese Schreibweise:
echo $multilanguage["en"][123]

Bei 123 Einträgen pro Sprache muss doch die Übersicht verloren gehen, zumal das scheinbar eine chronologische und keine alphabetische Reihenfolge ist.

Welche Möglichkeiten gäbe es noch, so 5 - 15 Sprachen zu verwalten?

LG Gast

  1. Moin,

    Welche Möglichkeiten gäbe es noch, so 5 - 15 Sprachen zu verwalten?

    Wie wärs denn mit Zeichenketten als keys, so ala $multilang['de']['button_abort'] = 'Abbrechen';? Aber ganz abgesehen von der Übersichtlichkeit wird die Array-Methode mit zunehmenden Einträgen und Sprachen natürlich immer unperformanter.

    Gruß,
    Take

    1. Ich mache das so:

      Ich binde php-Skripte ein, die eine Liste von php-Konstanten definieren.

      Bsp für dt:

      <?php  
        
        // website navigation  
        
      language_device('welcomepage',         'Startseite');  
      language_device('towelcomepage',       'Zur Startseite');  
      language_device('administration',      'Administration');  
      language_device('user',                'Mitglieder');  
      language_device('youarehere',          'Sie sind hier');  
      language_device('recentlyvisited',     'Kürzlich besuchte Seiten');  
      language_device('backto',              'Zurück zu');  
      language_device('usethisrefresh',      'Bitte benutzen Sie nur diesen Refresh-Button und nicht den Ihres Browsers.');  
      ?>
      

      Beispiel für eng:

        
      <?php  
        
        // website navigation  
        
      language_device('welcomepage',         'Homepage');  
      language_device('towelcomepage',       'To the homepage');  
      language_device('administration',      'Administration');  
      language_device('user',                'Members');  
      language_device('youarehere',          'You are here');  
      language_device('recentlyvisited',     'Recently visited pages');  
      language_device('backto',              'Back to');  
      language_device('usethisrefresh',      'Please use this refresh button instead of browser refresh.');  
      language_device('jumpnotpossible',     'We can&apos;t offer the link to that page here for security reasons. Please reach this page via the website navigation.');  
      language_device('loginbutton',         'Log in');  
      ?>
      

      (Nur Ausschnitte)

      Wie man sieht, geschieht das aber nicht mit define() sondern language_device().

      Hier diese Funktion:

        
      function language_device($con, $val){  
        if(!defined("LANG_".$con)) define("LANG_".$con, $val);  
      }
      

      Der Witz ist, dass ich so "Deutsch" laden kann und zur Sicherheit noch "Englisch". Sozusagen als Fallback, falls ich vergessen habe in deutsch entsprechende Bausteine zu definieren.

      Im aufrufenden Skript steht dann sowas:

        
        
        // set language //e.g: $LANG == $_SESSION["language"];  
        $LANG = "ger";  
        
        if($LANG == "eng"){  
          include(dirSYS."/_ini/_language/eng.php");  
          include(dirSYS."/_ini/_language/ger.php");  
        }  
        
        if($LANG == "ger"){  
          include(dirSYS."/_ini/_language/ger.php");  
          include(dirSYS."/_ini/_language/eng.php");  
        }
      

      Verwenden kann ich dann evtl. Bausteine in jeder Funktion und Klasse / Methode mit

      echo LANG_youarehere." <a href='index.php'>".LANG_welcomepage."</a>"; etc.

      Gefällts?

      Liebe Grüße,
      LSpreee

      1. Moin!

        Wie man sieht, geschieht das aber nicht mit define() sondern language_device().

        Hier diese Funktion:

        function language_device($con, $val){
          if(!defined("LANG_".$con)) define("LANG_".$con, $val);
        }

          
        Das ist schlecht. Du definierst Konstanten. Konstanten in PHP sind relativ langsam. Definierst du viele Konstanten, wirkt sich das u.U. aus.  
          
        Abgesehen davon hast du keine Möglichkeit, alle benutzten Textstrings zu sammeln, sondern du musst immer eine Konstante definieren, bevor du sie am Ziel auch verwenden kannst.  
          
        
        > Der Witz ist, dass ich so "Deutsch" laden kann und zur Sicherheit noch "Englisch". Sozusagen als Fallback, falls ich vergessen habe in deutsch entsprechende Bausteine zu definieren.  
          
        Die Vorgehensweise beispielsweise beim Multi-Language-Plugin von Wordpress ist sowas:  
          
        echo \_t("This is the english output string!);  
          
        \_t() ist die Translate-Funktion, die in ihrem Speicher nachsieht, welcher Übersetzungstext der aktuellen Sprache für diesen String hinterlegt ist.  
          
        Daraus entstehen mehrere Vorteile:  
          
        1\. Die Funktion kann alle Strings im laufenden Betrieb einsammeln und bislang unbekannte Strings auf die Liste zu übersetzender Ausgaben setzen.  
        2\. Weiterhin steht im Quellcode der tatsächlich auszugebende Text in einer menschenlesbaren Sprache. Man sieht also, was an dieser Stelle ausgegeben werden soll - und nicht nur ungefähr.  
        3\. Außerdem ist als Fallback der englische Text vollständig bekannt und kann als Ersatz ausgegeben werden, wenn keine Übersetzung gefunden wurde.  
        4\. Als Deluxe-Variante kann man natürlich auch den gesamten Quelltext parsen, alle Aufrufe der Übersetzungsfunktion finden, die darin übergebenen Texte herausnehmen und in die Liste zu übersetzender Texte tun.  
          
        
        > `echo LANG_youarehere." <a href='index.php'>".LANG_welcomepage."</a>";`{:.language-php} etc.  
        >   
        > Gefällts?  
          
        Nö.  
          
         - Sven Rautenberg
        
        1. Daraus entstehen mehrere Vorteile:

          1. Die Funktion kann alle Strings im laufenden Betrieb einsammeln und bislang unbekannte Strings auf die Liste zu übersetzender Ausgaben setzen.
          2. Weiterhin steht im Quellcode der tatsächlich auszugebende Text in einer menschenlesbaren Sprache. Man sieht also, was an dieser Stelle ausgegeben werden soll - und nicht nur ungefähr.
          3. Außerdem ist als Fallback der englische Text vollständig bekannt und kann als Ersatz ausgegeben werden, wenn keine Übersetzung gefunden wurde.
          4. Als Deluxe-Variante kann man natürlich auch den gesamten Quelltext parsen, alle Aufrufe der Übersetzungsfunktion finden, die darin übergebenen Texte herausnehmen und in die Liste zu übersetzender Texte tun.

          Aber ein Nachteil: ist eine Textänderung im englischsprachigen Original zu erwarten (und sei es nur eine Korrektur eines Tippfehlers) muss man alles durchwerkeln.

          Aber dasselbe System funktioniert auch, wenn man kurze Bezeichner für die zu übersetzenden Zeichenketten verwendet.

          1. Moin

            ich musste mich auch bereits mit diesem Thema auseinandersetzen. Und ganz ehrlich, nicht eine Eurer Lösungen war für mich zielführend genug. Meine Lösung sieht keine einzelnen Teilstrings vor, sondern verschiedene komplette Textsprachversionen. Das heißt zum Beispiel:

            Ich habe ein Modul zum Suchen von freien Hotelzimmern. So habe ich ein Template für jede Sprache für dieses Modul aufgebaut, das auch einzeln pflegbar ist. Somit verliert man NIE den Zusammenhang zum Context.

            Oder anderes beispiel: Startseite zusammengebaut aus Starttext, Newspreview, Downloadpreview. Da dies modular aufgebaut ist, gibt es zu jedme Modul ein Template. Der Starttext liegt ebenso komplett in verschiedenen Sprachversionen vor.

            Diese Lösung ist die zielführende, und auch die, nach Meinung von Kunden, komfortabelste.

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            ### Henry L. Mencken ###
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
            ## Viktor Frankl ###
            ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
            1. Ich habe ein Modul zum Suchen von freien Hotelzimmern. So habe ich ein Template für jede Sprache für dieses Modul aufgebaut, das auch einzeln pflegbar ist. Somit verliert man NIE den Zusammenhang zum Context.

              Und muss alle Templates Synchron halten - ich betreue eine ganze Latte an Hotels - viele davon haben mehrere Sprachen (meistens deutsch, englisch, italienisch und französisch - es sind aber auch welche mit weit über 10 Sprachmutationen dabei).

              Nicht auszudenken, wenn da zwei Templates auseinanderlaufen.

              Oder anderes beispiel: Startseite zusammengebaut aus Starttext, Newspreview, Downloadpreview. Da dies modular aufgebaut ist, gibt es zu jedme Modul ein Template. Der Starttext liegt ebenso komplett in verschiedenen Sprachversionen vor.

              Der Text liegt in einem CMS welches die jeweilige Lokalisierung oder Internationalisierung kennt.

              Diese Lösung ist die zielführende, und auch die, nach Meinung von Kunden, komfortabelste.

              Die komfortabelste Lösung ist ein Lokalisierungsformat welches auch von diversen Übersetzern gelesen und geliefert werden kann - XLIFF z.B.

              Wenn du eine Website mit mehreren hundert Seiten an einen übersetzer schickst, will der nicht in deinen Templates herumackern - der will eine Vorlage.

              Ein ordentliches Format, welches seine Simultanübersetzungs-Software lesen kann oder zur not ein Spreadsheet wo in der linken Spalte das Original steht und in die rechte Spalte die Übersetzung kommt.

              Das CMS braucht dann eine Import- und Exportroutine für Inhalte oder Zeichenketten - oder meinst du im ernst, irgendwer pflegt das manuell dann ein - womöglich in einer Sprache, die er nichtmal selbst spricht?

              1. Moin

                Ich habe ein Modul zum Suchen von freien Hotelzimmern. So habe ich ein Template für jede Sprache für dieses Modul aufgebaut, das auch einzeln pflegbar ist. Somit verliert man NIE den Zusammenhang zum Context.

                DAs hört sich ähnlich meinem System an. Jedes Modul hat sein Template (inneres Template, MAske, die einzeln übersetzt werden kann)

                Und muss alle Templates Synchron halten - ich betreue eine ganze Latte an Hotels - viele davon haben mehrere Sprachen (meistens deutsch, englisch, italienisch und französisch - es sind aber auch welche mit weit über 10 Sprachmutationen dabei).

                Nicht auszudenken, wenn da zwei Templates auseinanderlaufen.

                Laufen nicht auseinander. Es wird nur der Text geändert. Alles andere darf vom Übersetzer nicht geändert werden.

                Oder anderes beispiel: Startseite zusammengebaut aus Starttext, Newspreview, Downloadpreview. Da dies modular aufgebaut ist, gibt es zu jedme Modul ein Template. Der Starttext liegt ebenso komplett in verschiedenen Sprachversionen vor.

                Der Text liegt in einem CMS welches die jeweilige Lokalisierung oder Internationalisierung kennt.

                Diese Lösung ist die zielführende, und auch die, nach Meinung von Kunden, komfortabelste.

                Die komfortabelste Lösung ist ein Lokalisierungsformat welches auch von diversen Übersetzern gelesen und geliefert werden kann - XLIFF z.B.

                Wenn du eine Website mit mehreren hundert Seiten an einen übersetzer schickst, will der nicht in deinen Templates herumackern - der will eine Vorlage.

                Ein ordentliches Format, welches seine Simultanübersetzungs-Software lesen kann oder zur not ein Spreadsheet wo in der linken Spalte das Original steht und in die rechte Spalte die Übersetzung kommt.

                genau so, aber eben auf Templatebasis. Ich habe Kunden die Keine Lust haben 10.000 Phrasen zu übersetzen, da in einigen Sprachen z.B. ungarisch der Einsatz einer festen Phrase in verschiedenen Kontexten so gut wie unmöglich ist.

                Hier ist es besser auf Datensatzbasis Übersetzungsmöglichkeiten anzubieten und alles was Statisch ist über Templates zu regeln. selbtsverständlich geht es nur um TEXTE.... Dafür gibt es eine Vorlage in der der Übersetzer seine Texte in den Templates pflegen kann. Alles andere ist in den einzelnen Sprachversionen gleich, da es auf das selbe Grundkonstrukt zurückgreift und muss somit nicht synchronisiert werden.

                Glaub mir, dieses System habe ich lange ausgetüftelt und mich mit den verschiedenen Möglichkeiten lang auseinandergesetzt. Von Kundenseite her habe ich mehrfach die bestätigung das dieses System sehr komfortabel ist.

                Das CMS braucht dann eine Import- und Exportroutine für Inhalte oder Zeichenketten - oder meinst du im ernst, irgendwer pflegt das manuell dann ein - womöglich in einer Sprache, die er nichtmal selbst spricht?

                Es gibt die Rolle Übersetzer dem eine Sprache zugewiesen werden. Die Bearbeitung erfolgt komfortabel onpage.

                Ich glaube wir haben uns Missverstanden... Es gibt ein äußeres grafisches Template und jedes Modul hat ein übersetzbares Template... Außerdem werden alles Daten auf Datensatzbasis einzeln zum übersetzen angeboten.

                Gruß Bobby

                --
                -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                ### Henry L. Mencken ###
                -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                ## Viktor Frankl ###
                ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                1. Alles andere darf vom Übersetzer nicht geändert werden.

                  "darf" darf doch in Sicherheitsfragen gar nicht benutzt werden, oder?

                  Ich glaube wir haben uns Missverstanden... Es gibt ein äußeres grafisches Template und jedes Modul hat ein übersetzbares Template...

                  Ich glaube, es ging hier eher um die kurzen Labels, die man auf Buttons etc. findet, als um die Texte/Inhalte. Eben nicht alles kann man über eigenständige pages regeln. Irgendwo braucht doch jeder Textbausteine.

                  LG,
                  LSpreee

            2. @@Bobby:

              nuqneH

              Meine Lösung sieht keine einzelnen Teilstrings vor, sondern verschiedene komplette Textsprachversionen. Das heißt […]

              dass du die Logik und Inhalt koppelst, also die Logok in den einzelnen Templates duplizierst? Das keine gute Lösung sein.

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
              1. Moin

                @@Bobby:

                nuqneH

                Meine Lösung sieht keine einzelnen Teilstrings vor, sondern verschiedene komplette Textsprachversionen. Das heißt […]

                dass du die Logik und Inhalt koppelst, also die Logok in den einzelnen Templates duplizierst? Das keine gute Lösung sein.

                Eben nicht. Die Logik ist durch Templates vom Inhalt getrennt. In den Templates werden nur statische Inhalte geladen. Für alles was dynamisch ist, wird an entsprechender Stelle für jeden Datensatz eine Übersetzungsmöglichkeit geboten. Ich bin Verfechter des EVA-Prinzips. Und dies habe ich auch eingehalten.

                Gruß Bobby

                --
                -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                ### Henry L. Mencken ###
                -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                ## Viktor Frankl ###
                ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                1. In den Templates werden nur statische Inhalte geladen.

                  Wobei dann ja der Begriff Template nicht ganz richtig wäre...
                  (Template = Gerüst für dynamische Inhalte)

                  LG,
                  LSpreee

        2. Das ist schlecht. Du definierst Konstanten. Konstanten in PHP sind relativ langsam. Definierst du viele Konstanten, wirkt sich das u.U. aus.

          Hahaha!

          Die Vorgehensweise beispielsweise beim Multi-Language-Plugin von Wordpress ist sowas:

          echo _t("This is the english output string!);

          Zugegeben: ziemlich coole Idee und die Vorteile leuchten mir ein.

          Gefällts?

          Nö.

          Danke für Dein Feingefühl bezgl. der Bewertung meines geistigen Eigentums und somit einer Verlängerung meiner Person.

          1. @@LSpreee:

            nuqneH

            Danke für Dein Feingefühl bezgl. der Bewertung meines geistigen Eigentums und somit einer Verlängerung meiner Person.

            Was soll das denn? Sven hat den fachlichen Inhalt deines Postings kritisiert. Du hast überhaupt keinen Grund, das persönlich zu nehmen.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
        3. Hi,

          Die Vorgehensweise beispielsweise beim Multi-Language-Plugin von Wordpress ist sowas:
          echo _t("This is the english output string!);
          _t() ist die Translate-Funktion, die in ihrem Speicher nachsieht, welcher Übersetzungstext der aktuellen Sprache für diesen String hinterlegt ist.

          1. Außerdem ist als Fallback der englische Text vollständig bekannt und kann als Ersatz ausgegeben werden, wenn keine Übersetzung gefunden wurde.

          Halte ich für ungünstig. Derselbe englische Text muß ggf. auf unterschiedliche Weise übersetzt werden, je nach Zusammenhang (z.B.: "line" kann mal Zeile, mal Linie bedeuten).

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. @@MudGuard:

            nuqneH

            1. Außerdem ist als Fallback der englische Text vollständig bekannt und kann als Ersatz ausgegeben werden, wenn keine Übersetzung gefunden wurde.

            Halte ich für ungünstig. Derselbe englische Text muß ggf. auf unterschiedliche Weise übersetzt werden, je nach Zusammenhang (z.B.: "line" kann mal Zeile, mal Linie bedeuten).

            Ich sehe nicht, was das eine mit dem anderen zu tun hätte.

            Die verwendeten Strings sollten natürlich nicht als einzelne Wörter, sondern als Phrasen vorhanden sein. [article-composite-messages, article-text-reuse]

            Wenn für eine Phrase keine Übersetzung vorhanden ist, erscheint sie komplett(!) auf englisch (oder was auch immer die Defaultsprache ist). Nicht schön, aber besser als gar nichts.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Wenn für eine Phrase keine Übersetzung vorhanden ist, erscheint sie komplett(!) auf englisch (oder was auch immer die Defaultsprache ist). Nicht schön, aber besser als gar nichts.

              Das ist genau das was GETTEXT (bzw. po/pot/mo) tut - und auch viele andere CAT-taugliche Übersetzungsformate.

              Nur ob der Originalstring eben eine menschenlesbare Phrase ist oder ein eindeutiger Bezeichner ist im Grunde egal.

              Es hat beides Vor- und Nachteile - die Phrasen-Variante hat aber häufig mehr Vor- als Nachteile.

            2. Hi,

              Halte ich für ungünstig. Derselbe englische Text muß ggf. auf unterschiedliche Weise übersetzt werden, je nach Zusammenhang (z.B.: "line" kann mal Zeile, mal Linie bedeuten).
              Ich sehe nicht, was das eine mit dem anderen zu tun hätte.

              Tja, dann findet der blinde Gunnar dieses Mal keinen Korn ... ;-)

              Die verwendeten Strings sollten natürlich nicht als einzelne Wörter, sondern als Phrasen vorhanden sein.

              Das hieße, daß die verwendete Technik nicht allgemein verwendbar ist.

              Was, wenn die Texte z.B. Beschriftungen für Buttons oder für Menüpunkte sind?
              Z.B. in einem Grafik-Programm, wo das Zeichne-Menü so aussehen könnte:

              Deutsch:                       English

              Ellipse                        Ellipsis
              Rechteck                       Rectangle
              Linie                          Line
              Text ->                        Text ->
                        Zeile                          Line
                        Zeichen                        Character
              Freihand                       Freehand

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              1. @@MudGuard:

                nuqneH

                Was, wenn die Texte z.B. Beschriftungen für Buttons oder für Menüpunkte sind?
                Z.B. in einem Grafik-Programm, wo das Zeichne-Menü so aussehen könnte:

                Deutsch:                       English

                Ellipse                        Ellipsis
                Rechteck                       Rectangle
                Linie                          Line
                Text ->                        Text ->
                          Zeile                          Line
                          Zeichen                        Character
                Freihand                       Freehand

                Der englische Begriff „Line“ muss in unterschiedlichen Bedeutungen natürlich in verschiedenen Feldern abgelegt sein:

                s['en']['line-figure'] = "Line";
                s['en']['text-line']   = "Line";

                Dann kann auch lokalisiert werden:

                s['de']['line-figure'] = "Linie";
                s['de']['text-line']   = "Zeile";

                Das müssen die Entwickler schon berücksichtigen. Ein I18n-Experte im Team dürfte sich als hilfreich erweisen. Dumm, wenn Fehler bei der Internationalisierung erst bei der Lokalisierung auffallen.

                Dennoch verstehe ich immer noch nicht, was deine Antwort mit Svens 3. Punkt zu tun hat.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. Hi,

                  Der englische Begriff „Line“ muss in unterschiedlichen Bedeutungen natürlich in verschiedenen Feldern abgelegt sein:

                  Sven wollte aber direkt den englischen Ausgabe-Text als Schlüssel verwenden - und dann gibt es eben das Problem, daß derselbe Text nicht unterschiedlich übersetzt werden kann.

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  O o ostern ...
                  Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                  1. @@MudGuard:

                    nuqneH

                    Sven wollte aber direkt den englischen Ausgabe-Text als Schlüssel verwenden - und dann gibt es eben das Problem, daß derselbe Text nicht unterschiedlich übersetzt werden kann.

                    *Pling* (nicht *Plonk*) Hast du den Groschen fallen hören?

                    Qapla'

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
        4. Moin,

          Das ist schlecht. Du definierst Konstanten. Konstanten in PHP sind relativ langsam. Definierst du viele Konstanten, wirkt sich das u.U. aus.

          Woher könnte man wissen, dass Konstanten in PHP langsam sind? Ich habe, nachdem ich deinen Beitrag gelesen habe, mal gegoogelt, wie sich das mit der Performanz von Arrays und Variablen verhält, was also schneller geht. Hab leider nicht wirklich etwas gefunden, außer irgendwelche Forenbeiträge mit vermutendem Halbwissen.
          Hast du da einen Tipp für mich, oder muss ich mir dann überlegen wie PHP das intern regelt und die Performanz selbst berechnen^^

          Grüße Marco

          1. Hi!

            Woher könnte man wissen, dass Konstanten in PHP langsam sind?

            Ich hab das vor langer Zeit mal in einem Labortest festgestellt. Ich glaube, der Versuchsaufbau waren viele Lesezugriffe auf eine Konstanten und genausoviele auf eine Variable. Die Variable hatte gewonnen. Vielleicht hat sich auch was geändert, aber einmal probiert hat man schnell mal sein Urteil, dass in nachfolgenden Versionen auch gern mal zum Vorurteil mutiert.

            In Maßen angewendet ist vieles problemlos, in Massen fällt es auf. Meist sind die benötigten Massen zum Auffallen aber jenseits von praktischen Grenzen. Das hat dann nur Auswirkungen, wenn die Ressourcenbelastung durch viele parallel laufende Vorgänge insgesamt an eine Grenze kommt (eine technische oder zumutbare oder beides).

            Hast du da einen Tipp für mich, oder muss ich mir dann überlegen wie PHP das intern regelt und die Performanz selbst berechnen^^

            Überlegen kann schiefgehen, nachschauen wäre besser. Aber dazu müsstest du dich in die Tiefen des C-Codes von PHP begeben. Eine Messschleife ist schneller geschrieben. Aber wie gesagt, Vorsicht bei der Interpretation, Laborergebnisse mit sehr großen Werten, damit man überhaupt was sieht, sind nicht immer praxisrelevant.

            Lo!

            1. Moin,

              In Maßen angewendet ist vieles problemlos, in Massen fällt es auf. Meist sind die benötigten Massen zum Auffallen aber jenseits von praktischen Grenzen. Das hat dann nur Auswirkungen, wenn die Ressourcenbelastung durch viele parallel laufende Vorgänge insgesamt an eine Grenze kommt (eine technische oder zumutbare oder beides).

              Wenn ich jetzt mal auf das Beispiel des OP zurückkomme: Wenn ich sagen wir 1000 Phrasen und Wörter habe, die ich multilingual machen will, dann ist es also deiner Aussage nach von der Performance fast wurst, ob ich ein Array erstelle:
              $multi["de"]["sendbutton"];
              oder ob ich dazu einfache Variablen verwende:
              $LANG_de_sendbutton;

              Grüße Marco

              1. Wenn ich sagen wir 1000 Phrasen und Wörter habe, die ich multilingual machen will, dann ist es also deiner Aussage nach von der Performance fast wurst, ob ich ein Array erstelle:
                $multi["de"]["sendbutton"];
                oder ob ich dazu einfache Variablen verwende:
                $LANG_de_sendbutton;

                Das ist der kern der aussage.

                Aber wenn du durch Konstanten- oder Variablenbezeichner mit Unterstrichen aufgliederst, weil sie eigentlich mehrere Dimensionen besitzen, dann ist das ein gutes Indiz dafür, dass ein mehrdimensionales Array die bessere Lösung ist :)

                1. Moin,

                  Aber wenn du durch Konstanten- oder Variablenbezeichner mit Unterstrichen aufgliederst, weil sie eigentlich mehrere Dimensionen besitzen, dann ist das ein gutes Indiz dafür, dass ein mehrdimensionales Array die bessere Lösung ist :)

                  Das wäre auch meine Wahl gewesen. Ich habe mir eben nur mal die Frage gestellt, ob das vielleicht performancetechnisch auch legitim ist, da ich wie gesagt nicht wusste, dass Konstanten langsamer sind. Die nutze ich in PHP aber allgemein nur sehr selten, um nicht zu sagen nie.

                  Grüße Marco

      2. @@LSpreee:

        nuqneH

        if($LANG == "eng"){
          if($LANG == "ger"){

        Wie ich kürzlich erst schrieb, würde ich als Sprachcodes nur die nach BCP 47 verwenden, d.h. 'en' und 'de'. [qa-lang-2or3]

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
  2. Moin,

    in diesem Faden lese ich zum Stichwort multilingual diese Schreibweise:
    echo $multilanguage["en"][123]

    Bei 123 Einträgen pro Sprache muss doch die Übersicht verloren gehen, zumal das scheinbar eine chronologische und keine alphabetische Reihenfolge ist.

    Nur um auch meinen Senf noch dazuzugeben: Das war nur ein kurzes Quick-and-Dirty-Beispiel, weil mir quasi auf die Schnelle nichts blöderes eingefallen ist :) Bessere Möglichkeiten wurden ja bereits vorgeschlagen.

    Grüße Marco