On 2023-06-22 12:52,
c.b...@posteo.jp <
c.b...@posteo.jp> wrote:
> Hallo Petter,
Nur ein t. Ich wohne vermutlich südlich von dir, nicht nördlich ;-).
> danke für die Rückmeldung und entschuldige meinen Bullshit-Code. Das
> ging daneben.
>
> OK, vielleicht ist das reale Beispiel einfacher. So habe ich print nie
> verwendet, aber das scheint valider Code zu sein.
>
> print(_('Trying to keep min %d%% free inodes') % minFreeInodes)
>
> Nun wollte ich das "modernisieren", auch weil die Übersetzer mit "%d%%"
> oft nichts anfangen können.
>
> print(_('Trying to keep min {perc}% free
> inodes').format(perc=minFreeInodes))
>
> Das geht auch. Aber meine Übersetzungsplatform (Weblate 4.17) moniert
> hier ein Problem: Nach dem % ist ein Leerzeichen und danach kommt ein f
> . Weblate denkt, es müsste dort %f heißen und moniert es.
Sagt es: "Das ist falsch" oder "Das schaut verdächtig aus, könnte ein
Tippfehler sein, schau Dir das noch einmal an"?
> Würde ich das % an der Stelle escapen meckert Weblate nicht.
Wie würdest Du das denn escapen?
> Liegt Weblate hier falsch bzw. ist einfach zu umodern/unflexibel?
Möglich. Kann man Weblate sagen, welcher Syntax diese Strings gehorchen
sollen? Das ist ja von Programmiersprache zu Programmiersprache
unterschiedlich und selbst innerhalb der gleichen Programmiersprache
gibt es oft mehrere Möglichkeiten (wie man hier sieht).
Offensichtlich glaubt Weblate, dass der String entweder für die
C-Funktion printf oder den Python-Operator % oder etwas ähnliches
gedacht ist. Das ist hier aber nicht der Fall.
> Muss ich bei dem zweiten Beispiel das % eigentlich escapen
Nein. Das %-Zeichen hat für str.format() keine spezielle Bedeutung. Du
kannst es daher IMHO auch gar nicht escapen. (Du könntest natürlich
"\x25" statt "%" schreiben, kann sein dass das Weblate zufriedenstellt,
aber für Python ist es genau das Gleiche).
> und der Python Interpreter ist hier einfach nur gnädig mit mir und
> lässt es mir durchgehen, obwohl es nicht Standard/PEP-konform ist?
Kleine Anmerkung: PEP-008 ist ein Styleguide für die Python-Library. Die
ist für Leute, die Module schreiben, die Teil des Python-Standard-Pakets
sind, mehr oder weniger verpflichtend (es gibt auch dort alten Code, der
nicht PEP-008-konform ist). Für alle anderen ist das bestenfalls eine
freundliche Empfehlung. Code, der sich nicht an diese Empfehlung hält
ist deshalb nicht falsch und der Python-Interpreter wird das nie
anmeckern. (Linter schon, denn deren Zweck ist es ja, zu meckern, und
die sind erstens konfigurierbar und zweitens kann sich der Entwickler
aussuchen, ob er überhaupt einen verwendet, wenn ja, welchen und mit
welchen Optionen, und was er dann mit dem Ergebnis macht.)
Abgesehen davon sind alle drei Formatierungsmöglichkeiten ok. Keine ist
veraltet oder nicht empfehlenswert.
hp