Announcement

Collapse
No announcement yet.

GNU Gettext

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GNU Gettext

    hi leute,

    seit 1,5 wochen beschäftigte ich mich mit dem translation-manager von delphi und ein problem jagt das nächste!

    Bernhard Geyer hat nochmal das GNU Gettext ins gespräch gebracht! hat jemand schon mal damit gearbeitet?

    folgende dinge würden mich interessieren:

    1. wie funzt das ding vom prinzip her?
    (grobe vorgensweise, was ist alles zu tun)

    2. wie funktioniert die übersetzung von texten in komponenten
    (labels, menüs usw.)

    3. Wie funktioniert die übersetzung von Meldungen(showmessage usw.)

    4. wie gebe ich die zu übersetzenden texte einer dritten person

    5. wie baue ich die übersetzten texte ins projekt ein

    6. wie kann ich entscheiden in welcher sprache die anwendung laufen soll

    7. welche probleme kann es geben beim umstieg auf eine andere delphi-version?

    8. in welche sprachen kann übersetzt werden? ich brauche mindestens englisch und französisch!

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,
    ich benutze auch Gnugettext. Folgende kurze Antworten.
    1. Dein Programm wird nach Strings durchsucht, die Gnugettext für übersetzungsrelevant hält. Dabei werden sowohl die Formulare als auch die Pascaldateien durchsucht
    2. Du rufst im Formcreate TranslateComponent(self); auf
    3. Die Strings, die im Code zu übersetzen sind, rufts Du über _() auf. Zum Beispiel showmessage(_('hallo');
    4. Gnugettext erzeugt eine PO Datei, die Du zum übersetzer geben kannst. Dafür gibt es z.Bsp den POEdit, es kann aber auch einfach mit notepad übersetzt werden
    5. Die übersetzte po-Datei wird in ein MO File kopiliert. Dann hast Du zwei möglichkeiten. 1. Du kopierst die MO Datei in das Unterverzeichnis locale\de (für Deutschland) locale\en (England) usw. Oder Du wählst enbedded Translation aus dem Popupmenü des Explorers aus, wenn du Deine Exe markiert hast. Daraufhin mußt Du auswählen, welche Sprachen er dazulinken soll, und das wars.
    6. Über Uselang bevor Du translatecomponent nimmst. Standardmäßig benutzt das Programm die in Windows eingestellte Sprache, aber über Uselang kannst Du es überschreiben.
    7. Ich benutzer es mit Delphi 6 und Delphi 2005 ohne Probleme. (In Delphi 2005 erzeuge ich aber auch nur Win 32 Programme)
    8. Ich wüßte nicht, dass eine Sprache nicht unterstützt wir

    Comment


    • #3
      hallo frank,

      vielen dank für deine antworten!
      zu 2:
      habe ich in der doku gelesen und gemacht!
      <pre>
      procedure TForm1.FormCreate(Sender: TObject);
      begin
      TranslateComponent (self);
      end;
      </pre>
      ich markierte die exe, mache rechte maustaste und wähle "extract strings". in der erzeugten default.po datei fehlen aber schalterbeschriftungen und menü-beschriftungen!
      was ist verkehrt?

      zu 3)
      das hier:
      <pre>
      resourcestring
      Meldung1='Hallo Markus! Wie geht es ?';
      Meldung2='Es fusioniert!!!';
      Meldung3='Tach Kollege!!!';
      </pre>

      scheint auch zu gehen!

      gruß und danke!

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        hi frank,

        mein po-file sieht zum beispiel so aus:
        <pre>
        # SOME DESCRIPTIVE TITLE.
        # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
        # This file is distributed under the same license as the PACKAGE package.
        # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
        #
        msgid ""
        msgstr ""
        "Project-Id-Version: PACKAGE VERSION\n"
        "POT-Creation-Date: 2005-08-31 15:41\n"
        "PO-Revision-Date: 2005-08-31 15:41\n"
        "Last-Translator: Somebody <[email protected]>\n"
        "MIME-Version: 1.0\n"
        "Content-Type: text/plain; charset=UTF-8\n"
        "Content-Transfer-Encoding: 8bit\n"
        "X-Generator: dxgettext 1.2 RC 2\n"

        #. Resource 4085, item no. 4
        #: Sprache.exe:410124
        msgid "Fehler beim Entfernen des Steuerelements aus der "
        "Andock-Hierarchie"
        msgstr ""

        #. Resource 4085, item no. 5
        #: Sprache.exe:410124
        msgid " - Andockzone nicht gefunden"
        msgstr ""

        #. Resource 4085, item no. 6
        #: Sprache.exe:410124
        msgid " - Andockzone besitzt kein Steuerelement"
        msgstr ""

        #. Resource 4085, item no. 7
        #: Sprache.exe:410124
        msgid "Kein Inhaltsverzeichnis gefunden"
        msgstr ""

        #. Resource 4085, item no. 9
        #: Sprache.exe:410124
        msgid "Keine kontextsensitive Hilfe installiert"
        msgstr ""

        #. Resource 4085, item no. 10
        #: Sprache.exe:410124
        msgid "Es ist keine themenbasierte Hilfe installiert."
        msgstr ""

        #. Resource 4085, item no. 11
        #: Sprache.exe:410124
        msgid "Hallo Markus! Wie geht es ?"
        msgstr "Hello Markus How are you?"

        </pre>

        wie gebe ich da die übersetzungen mit?
        ich glaube msgstr ist verkehrt oder?

        p.s. wenn ich meine mo-dateien der exe hinzufügen möchte, meckert er, dass er irgendso einen patchcode nicht findet!
        was bedeutet das?

        &#10
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          also, habe nun meine ersten erfolge und erkenntnisse:

          1. um die zu übersetzenden strings in die po-datei zu bekommen, müssen diese wohl auch als resourcestring deklariert sein.
          beispiel:
          <pre>
          resourcestring
          Meldung1='Hallo Markus! Wie geht es ?';
          Meldung2='Es fusioniert!!!';
          Meldung3='Tach Kollege!!!';
          </pre>

          2. aufgerufen werden die strings im programm so:
          <pre>
          procedure TForm1.btnMessage1Click(Sender: TObject);
          var
          StrMeldung : String;
          begin
          StrMeldung := Meldung1;
          ShowMessage(Format(StrMeldung,[]));
          end;
          </pre>
          klappt bei mir komischer weise auch ohne unterstrich ???

          3. vom programmverzeichnis muss es ein unterverzeichnis "locale" geben. hier gibt es dann die unterverzeixchnisse für sprachen wie de,en,fr(deutsch.englisch,französisch) . in diesen verzeichnissen gibt es ein unterverzeichnis LC_MESSAGES da sind die po und mo-dateien drin mit den jeweiligen übersetzungen!
          beispielpfad: P:\Testprojekte\Mehrsprachigkeit\GNU\locale\en\LC_ MESSAGES

          wenn man dann die ländereinstellung umstellt, schnappt er sich dann immer die richtige mo-datei im richtigen verzeichnis!

          was ich noch nicht herausgefunden habe, ist wie man die beschriftungen der komponenten in die po-datei rein bekommt!

          gruß

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            hi,

            ich habe nun folgendes probiert:
            <pre>
            resourcestring
            Button1='Meldung 123';
            ....

            procedure TForm1.FormCreate(Sender: TObject);
            begin
            TranslateComponent(self);
            btnMessage1.Caption := Button1;
            end;
            </pre>

            das funktioniert, sprich der string
            <b>Meldung 123</b>
            landet beim string extrahieren in der mo-datei und wird dann auch zur laufzeit ersetzt!
            aber es kann doch wohl hoffentlich nicht sein, dass ich jede caiption nun zur laufzeit zuweisen muss oder?

            gruß

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              ich habe es!
              die html-doku ist besser wie die pdf!

              man muss sich ein batchfile schreiben:
              <pre>
              dxgettext *.pas *.dfm *.dpr -r
              </pre>

              dann extrahiert er <b>alle strings</b> in die mo-datei!!!

              gruß

              markus

              p.s. ein problem gibt es noch:
              wenn in meinem mo-file schon übersetzungen sind und ich führe die batchdatei nochmal aus, werden die bestehenden übersetzungen überschrieben! wie kann ich das verhindern?

              &#10
              Herzliche Grüße

              Markus Lemcke
              barrierefreies Webdesign

              Comment


              • #8
                Hallo Markus, entschuldige, das ich so lange nicht geantwortet habe. Ich habe aber im Moment Urlaub und bin außerdfem am Umziehen. Darum schaue ich hier nur selten rein. Es gibt für dein Problem aber das mergetool, das bestehende Übersetzungen aus zwei mo files zusammenführt. Also erst die erste Datei sichern, dann deine Batchdatei ausführen und anschliessen merge ausführen
                Gruss Frank Kneffe

                Comment


                • #9
                  hi frank,

                  ich hatte auch urlaub!

                  wir haben uns jetzt ein professionelles tool gekauft!
                  mit dem geht es einfacher!

                  gruß

                  marku
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment


                  • #10
                    Und welches ? Vielleicht ist das ja auch für uns interessan

                    Comment


                    • #11
                      hi frank,

                      schau mal hier:
                      http://www.ivs-solutions.de/products/tools/langcontrol/german/

                      gruß

                      marku
                      Herzliche Grüße

                      Markus Lemcke
                      barrierefreies Webdesign

                      Comment


                      • #12
                        Danke, ich werde es mir mal anschaue

                        Comment


                        • #13
                          Wir haben unser rel. großes Projekt auch mit GNU gettext übersetzt. Ich muß sagen, etwas besseres hab ich noch nicht gefunden. (Liegt vielleicht auch daran, das ich gern alles über die Kommandozeile mache)

                          ALso wenn Du trotzdem noch Fragen zu Gettext hast...

                          Sve

                          Comment


                          • #14
                            @sven
                            ne, wir haben ein kommerzielles tool genommen und das ist echt richtig gut!

                            marku
                            Herzliche Grüße

                            Markus Lemcke
                            barrierefreies Webdesign

                            Comment

                            Working...
                            X