DBD::PO. Mit SQL GNU gettext PO-Files bearbeiten



Ähnliche Dokumente
DBD::PO. Mit SQL GNU gettext PO-Files bearbeiten

POD Translation by pod2pdf 1.3. and DBD-PO_STEFFENW.pod

Professionelle Seminare im Bereich MS-Office

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

YouTube: Video-Untertitel übersetzen

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

! " # $ " % & Nicki Wruck worldwidewruck

Wie Sie mit Mastern arbeiten

Leichte-Sprache-Bilder

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Windows 7 Winbuilder USB Stick

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Anleitung über den Umgang mit Schildern

Bilder zum Upload verkleinern

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Was meinen die Leute eigentlich mit: Grexit?

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

MailUtilities: Remote Deployment - Einführung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Aber mancher braucht diese Funktionalität halt, doch wo ist sie unter Windows 8 zu finden?

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

EINFACHES HAUSHALT- KASSABUCH

Anwendungsbeispiele Buchhaltung

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Erstellen von x-y-diagrammen in OpenOffice.calc

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Info-Veranstaltung zur Erstellung von Zertifikaten

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Informationen zur Verwendung von Visual Studio und cmake

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Sie werden sehen, dass Sie für uns nur noch den direkten PDF-Export benötigen. Warum?

Anbieter auf dem Foto-Marktplatz werden

Quartalsabrechnung! " " " " " " " Stufe 1! Beheben von Abrechnungsfehlern" Stufe 2! Neue Abrechnung erstellen"

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

Anwendungsbeispiele Buchhaltung

Typo3 - Inhalte. 1. Gestaltung des Inhaltsbereichs. 2. Seitenunterteilung einfügen

Speichern. Speichern unter

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Die Textvorlagen in Microsoft WORD und LibreOffice Writer

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Drupal Kurzanleitung. Wie ändere ich den Inhalt meiner Seite?

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

Wie halte ich Ordnung auf meiner Festplatte?

Anleitung zur Erstellung und Bearbeitung von Seiten in Typo3. Typo3. Anleitung. Wenpas Informatik

Bauteilattribute als Sachdaten anzeigen

Der Kalender im ipad

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

PHPNuke Quick & Dirty

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Um über FTP Dateien auf Ihren Public Space Server - Zugang laden zu können benötigen Sie folgende Angaben:

Anwendungsbeispiele. Neuerungen in den s. Webling ist ein Produkt der Firma:

WinVetpro im Betriebsmodus Laptop

Argelander Institut für Astronomie. Persönliche Website

Qt-Projekte mit Visual Studio 2005

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Ich möchte eine Bildergalerie ins Internet stellen

COMPUTER MULTIMEDIA SERVICE

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

Der Gabelstapler: Wie? Was? Wer? Wo?

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Gimp Kurzanleitung. Offizielle Gimp Seite:

Erstellen einer PostScript-Datei unter Windows XP

Tevalo Handbuch v 1.1 vom

Monatstreff für Menschen ab 50 WORD 2007 / 2010

Dokumentenverwaltung im Internet

Schritt 1. Anmelden. Klicken Sie auf die Schaltfläche Anmelden

CodeSaver. Vorwort. Seite 1 von 6

Anleitung: Ändern von Seiteninhalten und anlegen eines News Beitrags auf der Homepage des DAV Zorneding

Serienbrief erstellen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Netzwerk einrichten unter Windows

Einrichten eines HBCI- Zugangs mit Bank X 5.1

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Pfötchenhoffung e.v. Tier Manager

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Die Bundes-Zentrale für politische Bildung stellt sich vor

DIE BUSINESS-APP FÜR DEUTSCHLAND

Was ist Sozial-Raum-Orientierung?

Ein Leitfaden für Anfänger unter Zuhilfenahme frei verfügbarer Software! (bei z.b. Google Microsoft Powertoys suchen, oder diesen Link verwenden )

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Partitionieren in Vista und Windows 7/8

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

-Versand an Galileo Kundenstamm. Galileo / Outlook

CVR Seniorentreff vom 04. und Serienbriefe/Seriendruck. Serienbriefe / Seriendruck

Transkript:

DBD::PO Mit SQL GNU gettext PO-Files bearbeiten

Über was ich heute spreche. Vom Quelltext bis zur mehrsprachigen Anwendung. Formate Irrwege Lösungen

Am Anfang ist der Quelltext. print 'You can log out here.'; printf '%s books are in %s shelves.', 5, 2;

Markieren print translate( ); 'You can log out here.' printf translate( ), 5, 2; '%s books are in %s shelves.'

Extrahieren Zeile 1: 'You can log out here.' Zeile 2: '%s books are in %s shelves.'

PO-Files - was ist das? PO ist die Abkürzung für 'Portable Object'. GNU getext PO-Files kann man benutzen, um Programme mehrsprachig zu machen. Im File stehen neben dem Originaltext und der Übersetzung verschiedene Kommentare und Flags.

Das sieht dann so aus. #: my_program.pl:1 msgid "You can log out here." msgstr "" #: my_program.pl:2 msgid "%s books are in %s shelves." msgstr ""

Poedit ein Übersetzungsprogramm

Das Ergebnis sieht dann so aus. #: my_program.pl:1 msgid "You can log out here." msgstr "Sie können sich hier abmelden." #: my_program.pl:2 msgid "%s books are in %s shelves." msgstr "%s Bücher sind in %s Regalen."

Platzhalter Übersetzt werden Textphrasen, welche auch Platzhalter enthalten können. Eine Variante sind die von printf bekannten %s o.ä. Diese Variante hat den Nachteil, dass sich die Reihenfolge der Platzhalter im Übersetzungsprozess ändern kann. Bei Platzhaltern wie %1, %2, usw. passiert das nicht.

Das folgende Beispiel ist zwar nur deutsch, zeigt aber anschaulich das Problem. %1 Bücher sind in %2 Regalen. In %2 Regalen sind %1 Bücher.

Quantifizierung und Zahlendarstellung Wir benötigen dafür kein Regal. Wir benötigen dafür 0,57 Regale. Wir benötigen dafür 1 Regal. Wir benötigen dafür 2 Regale.... Mehr dazu später.

Einzahl- bis Mehrzahl Es ist kein Buch. Es ist 1 Buch. Es sind 2 Bücher. Es sind 3 Bücher.... Locale::Maketext unterstützt Pluralformen nicht. Das ist nicht wirklich ein Problem. Man hinterlegt im Programm einfach mehrere Textphrasen.

Wie viele PO-Files braucht man? Im einfachsten Fall existiert 1 PO-File je zusätzliche Sprache. Im Beispiel ist das 'de.po' für Englisch/Deutsch. Man kann PO-Files für weitere Sprachvarianten, wie Dialekte, verschiedene Kontexte oder auch anwendungsspezifische Files benutzen, mit denen man dann die jeweilige Standardübersetzung ignoriert. Das kann man sich wie Vererbung vorstellen.

Kontext 'Sie können sich hier abmelden.' Was bedeutet das? Meldet man sich vom Büchereiprogramm ab oder ist man danach nicht mehr Kunde der Bibliothek? Im englischen Text ist das klarer. So unterschiedlich sind Sprachen.

Warum SQL? Die Idee kam mir, weil ich ein Projekt kenne, in dem die Übersetzungen in einer Datenbank gespeichert sind. Es ist recht einfach, so eine Datenbank inhaltlich zu analysieren. Es ist genau so einfach, PO-Files daraus zu erzeugen und umgekehrt. Somit ist auch die Übersetzung über PO-Files möglich, ohne dass der Übersetzer Datenbankzugang hat.

Anwendungen wachsen PO-Files können recht groß und damit unübersichtlich werden. Mit einem einfachen Texteditor kann man sie zwar bearbeiten, jedoch sind sie auch schnell kaputt. Ein PO-Editor ist recht praktisch aber typisch für Übersetzer gedacht und erfüllt somit mehr dessen Anforderungen. Somit war es naheliegend einen Datenbanktreiber für PO-Files zu erstellen.

Irrwege

Im Original sind keine englischen Texte vorhanden. Manch einer hat im Quelltext der Anwendung keine englischen Texte, sondern Schlüsselworte gespeichert. print translate('help'); Bei recht langen Texten mag das vorteilhaft erscheinen. Der Übersetzer übersetzt 'help' in 'Hilfe' und nicht wie gewünscht in den langen Text, der eigentlich ausgegeben werden soll. Außerdem ist nun für den Text 'help' = 'Hilfe' kein Schlüssel mehr da.

Ausweg Diese Schlüsselworte kann man wie eine virtuelle Sprache ansehen. Wenn man die Übersetzung angeht, hat man dann aber: Virtuell -> Englisch Virtuell -> Deutsch Virtuell ->... Damit kann ein Übersetzer nicht arbeiten.

Beim SQL kennt man join. Also joint man: Englisch -> Virtuell <- Deutsch Englisch -> Virtuell <-... Somit kann man die üblichen PO-Files erstellen, welche man nun auch übersetzten kann.

Wenn der Übersetzer kein Es gibt PO-Files für: Englisch -> Deutsch Englisch -> Polnisch Englisch kann. Es fehlt: Englisch -> Russisch

Der Übersetzer kann Polnisch in Russisch übersetzen. Also joint man: Polnisch -> Englisch <- Russisch Der Übersetzer erstellt die fehlenden russischen Texte.

Wie funktioniert DBD::PO? Man muss nur wissen, dass das Verzeichnis die Datenbank ist und das File die Tabelle. Jeder Eintrag im PO-File widerspiegelt einen zu übersetzenden Text. Damit ist klar, wie die Tabelle strukturiert sein muss. Sie hat so viele Spalten, wie es Möglichkeiten gibt, einen Eintrag zu beschreiben.

Das sind zum Beipiel: msgid VARCHAR Text, der übersetzt werden soll (einzeilig/mehrzeilig) Nur im Header ist dieser Text leer. msgstr VARCHAR Der übersetzte Text (einzeilig/mehrzeilig) Der Text ist leer, wenn keine Übersetzung existiert. reference VARCHAR Ein Kommentar, welcher beschreibt, wo der Text her ist (mehrzeilig)...

Es gibt also einen Header im PO-File. Im Header steht als wichtigste Information der Zeichensatz. Somit ist immer klar, wie die Datei gelesen werden muss.

Schreiben eines PO-Files Verbindung zur Datenbank herstellen: my $dbh = DBI->connect( "DBI:PO:f_dir=/temp/;po_charset=utf-8", undef, undef, { RaiseError => 1, PrintError => 0, }, ) or die 'Cannot connect: '. DBI->errstr();

Tabelle erstellen: $dbh->do(<<'eot'); CREATE TABLE de.po ( msgid VARCHAR, msgstr VARCHAR ) EOT

Header schreiben: my $header = dbh->func('build_header_msgstr'); $dbh->do(<<'eot', undef, $header); INSERT INTO de.po ( msgstr ) VALUES (?) EOT

Daten schreiben: my $text_en = 'You can log out here.'; my $text_de = 'Sie können sich hier abmelden.'; my $sth = $dbh->prepare(<<'eot'); INSERT INTO $table ( msgid, msgstr ) VALUES (?,?) EOT $sth->execute($text_en, $text_de);

Verarbeiten eines PO-Files in einer Anwendung Im Lexikon festlegen, woher die Daten bei der Sprache Deutsch geholt werden:

package Example::L10N; use base qw(locale::maketext); use Locale::Maketext::Lexicon; Locale::Maketext::Lexicon->import({ de => [ Gettext => '/po_path/de.po', ], _decode => 1, # unicode mode });

Language-Handle erzeugen: use Example::L10N; my $lh = Example::L10N->get_handle('de') or die 'What language';

und für Deutsch die Zahlendarstellung einstellen: $lh->{numf_comma} = $language =~ m{\a de_}xms;

und damit arbeiten: print $lh->maketext( 'You can log out here. ); print $lh->maketext( '[_1] books are in [_2] shelves.', 5, 2, ); Die Maketext-Schreibweise für Platzhalter ist nicht %1 sondern [_1].

Wie funktioniert Quantifizierung in einer Anwendung? for my $quantity (0, 0.57, 1, 2) { print $lh->maketext( 'We need [*,_1,shelf,shelves,no shelf] for this.', $quantity, ); } Wir benötigen dafür kein Regal. Wir benötigen dafür 0,57 Regale. Wir benötigen dafür 1 Regal. Wir benötigen dafür 2 Regale.

mehr Beispiele Die CPAN-Distribution DBD-PO enthält einen Ordner 'example'. Dort stehen ausführlichere Beispiele.

Bibliographie GNU gettext in Wikipedia http://en.wikipedia.org/wiki/gettext http://www.gnu.org/software/gettext/gettext.html CPAN-Modul DBD::PO http://search.cpan.org/dist/dbd-po/ CPAN-Modul DBI http://search.cpan.org/dist/dbi/ CPAN-Modul Locale::Maketext http://search.cpan.org/dist/locale-maketext/ CPAN-Modul Locale::Maketext::Lexicon http://search.cpan.org/dist/locale-maketext-lexicon/