Ich brauche einen String-Ersatz in Perl, um die Übersetzung zu vereinfachen, d. h. viele ersetzen
%Vor%von etwas wie
%Vor%Allerdings möchte ich printf durch etwas leichteres parsen für Menschen ersetzen:
%Vor%oder generell etwas mehr Perly.
Können Sie etwas (von CPAN oder nicht), das Sie mögen und verwenden, empfehlen?
Die meisten Templating-Module auf CPAN werden wahrscheinlich tun, was Sie wollen. Hier ist ein Beispiel mit Template Toolkit ...
%Vor%
Und Sie können Ihr benötigtes Beispiel mit etwas Ähnlichem nachahmen ...
und du hast ...
%Vor%Was ist mit einfach:
%Vor%Das ist sehr Perly. Wenn Sie keine aufwendige Formatierung benötigen, ist die String-Interpolation definitiv der richtige Weg.
Die eingebaute print
ist für die meisten Situationen sehr praktisch. Neben variabler Interpolation:
Denken Sie daran, dass print
mehrere Argumente annehmen kann, so dass es nicht notwendig ist, sie zuerst zu einer einzigen Zeichenfolge zu verketten, wenn Sie das Ergebnis eines Unterprogrammaufrufs ausdrucken müssen:
Um jedoch andere Zahlen als einfache Ganzzahlen auszugeben, möchten Sie wahrscheinlich die Formatierung von printf vereinfachen. Die Ausgabe anderer Datentypen ist jedoch einfach mit print
möglich.
Sie können join
verwenden, um Arrays bequem auszugeben:
Und kombinieren Sie mit map
und keys
, um Hashes auszugeben:
Verwenden Sie den Operator qq
, wenn Sie Anführungszeichen um die Daten ausgeben möchten:
Wenn Sie Übersetzungen vereinfachen möchten, sollten Sie eines der verfügbaren L10n / i18n CPAN-Module in Erwägung ziehen. Genauer gesagt, ein guter Überblick darüber, warum Ihr Ansatz zu kurz kommt, ist als Teil des Locals geschrieben: Maketext-Dokumente .
Ein weiteres großartiges Modul, das gut zu Locale :: Maketext passt, ist Locale :: Maketext :: Lexicon . Auf diese Weise können Sie mehr standardmäßige Lokalisierungsformate wie die .po / .mo-Dateien von gettext verwenden, die über GUI-Tools verfügen, die den Übersetzern dabei helfen, den gesamten zu übersetzenden Text zu bearbeiten. Locale :: Maketext :: Lexicon enthält außerdem ein Hilfsskript (xgettext.pl), mit dem Sie Ihre Lokalisierungsdateien mit Ihren Vorlagen oder Modulen auf dem neuesten Stand halten können, die Text enthalten, der übersetzt werden muss. Ich hatte in der Vergangenheit sehr gute Ergebnisse mit dieser Art von Setup.
Es scheint, dass Sie eine andere Art der String-Analyse haben möchten. Ich würde dir raten, das nicht zu tun. Der einzige, der die Syntax mit dem% d darin sieht, ist der Entwickler und er wird genau verstehen, was gemeint ist. Die printf-Syntax ist aufgrund der Optionen wie Padding, Dezimalzahlen usw. sehr mächtig.
Ich denke, Sie möchten mehr eine Ersetzungsmethode verwenden. Es ist s / {num} / $ n /.
Angesichts Ihres Kommentars über das Sein für Übersetzer empfehle ich, ein Perl-Skript zu schreiben, das alle printf()
streift und sie in einer leichter übersetzerfreundlichen Weise tabelliert.
In etwa so:
%Vor%Wenn Sie auch die Zeilennummer ausdrucken, können Sie einfach ein anderes Programm schreiben, um den übersetzten Text zu ersetzen.
Diese Lösung würde Sie nicht länger brauchen, als von printf()
neu zu faktorisieren und es ist wiederverwendbar.
Ich würde definitiv bei printf()
bleiben, das ist Standard in vielen Sprachen.
Es ist fast ein Standard für die String-Ausgabe geworden. Wie i
ist für for
loops.
Im Allgemeinen ist die Antwort von Draegtun großartig, aber wenn Sie etwas kleiner (d. h. weniger Speicher) benötigen und nicht so leistungsstark, können Sie dies leicht mit dieser Funktion tun:
%Vor%Nun, Perl hat printf Funktion ... Warten Sie, möchten Sie etwas wie python String-Formatierung mit dict ?
%Vor%mmm, ich weiß nicht, dass sowas in Perl existiert ... zumindest nicht so "einfach" ... vielleicht Text :: Sprintf :: Benannt kann sei dein Freund
Tags und Links perl string-formatting printf