Einzahl/ Mehrzahl Stunde Stunden Tage Tagen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Einzahl/ Mehrzahl Stunde Stunden Tage Tagen

      Tutorial für: dolph-in-forum.de 2010 by deeboo
      PDF erhältlich unter: Tutorial als PDF

      Anleitung zum ändern der Ein- / Mehrzalanzeige

      Hinweis zur Nutzung dieses Dokuments:
      Dieses Dokument zeigt einen Workaround auf, welcher nicht zwangsläufig richtig oder vollständig sein muss. Dieser wurde auf pxlartists.de getestet und führte dort zum Erfolg. Aufgrund der Vielfältigkeit der Systeme kann es immer zu unvorhersehbaren Auswirkungen kommen. Insbesondere, wenn andere Extensions/ Erweiterungen im Einsatz sind. Aus diesem Grund empfehle ich immer im Vorfeld ein Fullbackup zu erstellen. Für Datenverluste und sonstige Schäden, die durch Außerachtlassen dieser empfohlenen Sorgfalt entstehen, übernehme ich keine Haftung.


      Problemstellung:

      Jeder, der Dolphin in deutscher und englischer Sprache fährt, steht über kurz oder lang vor dem Problem, dass in der deutschen Sprachversion bei der Mehrzahl von Stunde nicht Stunden sondern Stundes angezeigt wird.
      So auch bei Minute. Statt Minuten wird hier Minutes angezeigt.


      Hintergrund des Problems:

      Verantwortlich ist hier die Datei util.inc.php aus dem inc Verzeichnis.
      In der Funktion „function _format_when ($iSec)“ (ca. Zeile 584 ff) wird nur auf die englische Sprache Rücksicht genommen. d.h. Dolphin merkt, dass es sich z.B. um mehrere Stunden handelt und zeigt die Mehrzahl. Im Englischen hour + s = hours

      Codeauszug:
      ### snap ###

      : _t('_x_minute_ago', $i, 's');

      ### snap ###

      Das ist natürlich im deutschen blöd, da für die Mehrzahl ein „n“ dran gehangen werden müsste.

      Was könnte man also tun, um es richtig oder besser zu gestalten?
      Falsch: nicht einfach das „s“ gegen ein „n“ tauschen.
      Denn dann hätte man im englischen des Problem der „minuten“ statt „minutes“…

      Da ich nicht wusste, wie man die Sprache abfängt habe ich nach einem Tipp von thomasp und modmysite (danke nochmal an dieser Stelle) folgende Lösung „ausgearbeitet“ & umgesetzt.


      Schritt 1) Keys ändern und neue erstellen

      Um im Backend die Sprachkeys zu verwalten ruft bitte folgenden Punkt auf:
      „Einstellungen > Sprachen > Sprachkeys verwalten“ (siehe Screenshot01)



      Screenshot01


      Wir werden nun nach und nach folgende Keys ändern:
      _x_minute_ago
      _x_hour_ago
      _x_day_ago
      _in_x_minute
      _in_x_hour
      _in_x_day

      Zudem werden wir folgende Keys erstellen:

      _x_minutes_ago
      _x_hours_ago
      _x_days_ago
      _in_x_minutes
      _in_x_hours
      _in_x_days


      Suchen wir nun nach unserem ersten Wert: _x_minute_ago
      Mit dem Setzen des Haken in “suche” (Screenshot01) wird dieser angezeigt.
      Diesen nun bearbeiten. Es erscheint folgendes Fenster (Screenshot 02):


      Screenshot02

      Wir löschen nun die {1} raus und speichern ab. Das machen wir mit allen oben genannten vorhandenen Werten.

      Somit wird unser „s“ nicht mehr angehangen. Aber wir benötigen ja die Mehrzahl.

      Dafür erstellen wir genauso viele neue Werte. In unserem Fall 6 Stück an der Zahl. (siehe oben)

      Wir klicken auf Sprachkey hinzufügen und tragen z.B. folgenden Namen ein:
      _x_minutes_ago

      Als Werte tagen wir nun die Mehrzahl ein. z.B (siehe Screenshot):
      String für Englisch => {0} minutes ago
      String für deutsch => vor {0} Minuten

      Hinweis: Namen und Werte der hinzugefügten Sprachkeys:

      _x_minutes_ago
      String für Englisch => {0} minutes ago
      String für deutsch => vor {0} Minuten

      _x_hours_ago
      String für Englisch => {0} hours ago
      String für deutsch => vor {0} Stunden

      _x_days_ago
      String für Englisch => {0} days ago
      String für deutsch => vor {0} Tagen

      _in_ x_minutes
      String für Englisch => in {0} minutes
      String für deutsch => in {0} Minuten

      _in_ x_hours
      String für Englisch => in {0} hours
      String für deutsch => in {0} Stunden

      _in_ x_days
      String für Englisch => in {0} days
      String für deutsch => in {0} Tagen


      2) Ändern der util.inc.php Datei

      Damit die Änderungen auch zum Erfolg führen ändern wir das Script util.inc.php ab. Dieses liegt im inc Ordner.

      ca. Zeile 584 ff vorher:
      $s .= (0 == $i || 1 == $i) ? _t('_x_minute_ago', '1') : _t('_x_minute_ago', $i, 's');

      Geänderte Zeile nachher:
      $s .= (0 == $i || 1 == $i) ? _t('_x_minute_ago', '1') : _t('_x_minutes_ago', $i);

      vollständiges Listing:

      ### snap ###

      function _format_when ($iSec) {
      $s = '';

      if ($iSec>0) {
      if ($iSec < 3600) {
      $i = round($iSec/60);
      $s .= (0 == $i || 1 == $i) ? _t('_x_minute_ago', '1') : _t('_x_minutes_ago', $i);
      } else if ($iSec < 86400) {
      $i = round($iSec/60/60);
      $s .= (0 == $i || 1 == $i) ? _t('_x_hour_ago', '1') : _t('_x_hours_ago', $i);
      } else {
      $i = round($iSec/60/60/24);
      $s .= (0 == $i || 1 == $i) ? _t('_x_day_ago', '1') : _t('_x_days_ago', $i);
      }
      } else {
      if ($iSec > -3600) {
      $i = round($iSec/60);
      $s .= (0 == $i || 1 == $i) ? _t('_in_x_minute', '1') : _t('_in_x_minutes', -$i);
      } else if ($iSec > -86400) {
      $i = round($iSec/60/60);
      $s .= (0 == $i || 1 == $i) ? _t('_in_x_hour', '1') : _t('_in_x_hours', -$i);
      } elseif ($iSec < -86400) {
      $i = round($iSec/60/60/24);
      $s .= (0 == $i || 1 == $i) ? _t('_in_x_day', '1') : _t('_in_x_days', -$i);
      }
      }
      return $s;
      }

      ### snap ###

      Danach Cache leeren und freuen. 

      Für Hinweise Anregungen kontaktiert mich bitte.
      Der Fuchs ist schlau und stellt sich dumm, bei manchen ist es andersrum.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von deeboo ()

    • Besten Dank - Weltklasse!
      Ich ärgere mich schon lange darüber.
      Es ist so gut erklärt, dass sogar ich der Webdesigner (und Nicht-Programmierer) es verstehen kann.

      Allerdings haben sich in der Auflistung noch 2 Fehler eingeschlichen:
      Abschnitt 2: _x_hours_ago
      Abschnitt 3: _x_days_ago


      _x_minutes_ago
      String für Englisch => {0} minutes ago
      String für deutsch => vor {0} Minuten

      _x_days_ago
      String für Englisch => {0} hours ago
      String für deutsch => vor {0} Stunden

      _x_minutes_ago
      String für Englisch => {0} days ago
      String für deutsch => vor {0} Tagen

      _in_ x_minutes
      String für Englisch => in {0} minutes
      String für deutsch => in {0} Minuten

      _in_ x_hours
      String für Englisch => in {0} hours
      String für deutsch => in {0} Stunden

      _in_ x_days
      String für Englisch => in {0} days
      String für deutsch => in {0} Tagen