Format specifiers-de
Einführung
aMule wird in der Programmiersprache C++ entwickelt. Diese Sprache erlaubt eine recht einfache Behandlung von Texten, in welchen sie manchmal aber ein bisschen Feintuning braucht.
Beim Übersetzen von aMule, wirst du einige seltsame Zeilen entdecken. Manchmal sind das nur Schreibfehler, aber manchmal haben sie auch einen Zweck.
Diesen Artikel solltest du auf jeden Fall lesen, falls du planst, oder schon daran bist aMule zu Übersetzen. Es bescheibt alle Fälle von Zeichen die du niemal ändern darfst.
Das folgende beschreibt die Zeichen die nicht geändert werden dürfen und was sie bedeuten.
Sonderfunktionen
Nicht druckbare ASCII Zeichen
Dies sind ASCII-Zeichen die nicht auf der Tastatur abgebildet werden können.
- \a -> Erzeugt normalerweise einen hörbaren (manchmal sichtbaren) Alarm. In der Regel piepsen.
- \b -> Geht ein Zeichen zurück.
- \f -> Auf den meisten Systemen leert dies den Bildschirm.
- \n -> Beendet die aktuelle Zeile und beginnt eine neue mit der Schreibmarke am Anfang.
- \r -> Geht zum Anfang der aktuellen Zeile.
- \t -> Horizontaler Einzug (Tabulator).
- \v -> Vertikaler Einzug.
- \<Oktal Zahl> -> Zeigt Oktal Zahl in oktaler Schreibweise an.
- \x<Hex Zahl> -> Zeig Hex Zahl in hexadezimaler Schreibweise an.
Erklärende Sonderzeichen
Die folgenden Zeichen sind zwar anzeigbar, müssen aber aufgrund von Einschränkungen der C++ (englisch) Programmiersprache, auf diese Weise benutzte werden:
- \? -> Gibt ein Fragezeichen ( ? ) aus um Trigraph Übersetzungen welche nicht alle Compiler unterstützen, zu vermeiden.
- \\ -> Gibt einen Backslash ( \ ) aus.
- \' -> Gibt ein Anführungszeichen ( ' ) aus.
- \" -> Gibt doppelte Anführungszeichen ( " ) aus.
Beispiele
Das folgende sind einige Beispiele für oben genannte Sonderzeichen. Sie sind zu Quelltext+Ausgabe Paaren kombiniert. Die erste Zeile zeigt, wie sie im C++-Code geschrieben werden, die zweite Zeile (oder Gruppe von Zeilen falls mehr als eine benötigt wird) zeigt wie der C++-Code ausgegeben wird:
- Code-Zeile: "Ich habe 6\b5 Finger an meiner rechten Hand"
- Ausgabe: Ich habe 5 Finger an meiner rechten Hand
- Code-Zeile: "Wo ist die <RETURN> Taste\?\?\?\nAh, hier ist sie!"
- Ausgabe: Wo ist die <RETURN> Taste???
Ah, hier ist sie!
- Code-Zeile: "Ich bin ein Lügner\rIch bin mit Marilyn Monroe verheiratet"
- Ausgabe: Ich bin mit Marilyn Monroe verheiratet
- Code-Zeile: "\141\115\165\x6C\x65"
- Ausgabe: aMule (Beachte das der oktale Wert von a im ASCII-Zeichensatz 141 ist, der oktale Wert von M 115, der oktale Wert von u 165, der hexadezimale Wert von l 6C und der hexadezimale Wert von e is 65)
- Code-Zeile: "Ist es kompliziert das \" und \\ Zeichen zu benutzen\?"
- Ausgabe: Ist es kompliziert das " und \ Zeichen zu benutzen?
Format Angaben
Normale Format Angaben
Format Angaben sind Gruppen von Zeichen, die durch etwas anderes ersetzt werden. Die Format Angabe selbst gibt den Datentyp an, durch den sie ersetzt wird:
- %d -> Dezimal Wert (Ganzzahl mit Vorzeichen). Gleichbedeutend mit %i
- %i -> Dezimal Wert (Ganzzahl mit Vorzeichen). Gleichbedeutend mit %d
- %u -> Natürliche Zahl (Ganzzahl ohne Vorzeichen).
- %x -> Hexadezimal Wert mit Kleinbuchstaben (Ganzzahl ohne Vorzeichen)
- %X -> Hexadezimal Wert mit Großbuchstaben (Ganzzahl ohne Vorzeichen)
- %o -> Oktal Wert (Ganzzahl ohne Vorzeichen)
- %f -> Rationale Zahl (Zahl mit Komma) mit normaler (Zeigt alle Nachkommastellen) Notation (für Werte mit einfacher und doppelter Genauigkeit)
- %e -> Rationale Zahl (Zahl mit Komma) mit exponentialer Notation mit kleinem e (für Werte mit einfacher und doppelter Genauigkeit)
- %E -> Rationale Zahl (Zahl mit Komma) mit exponentialer Notation mit großem E (für Werte mit einfacher und doppelter Genauigkeit)
- %g -> Rationale Zahl (Zahl mit Komma) mit normaler oder exponentialer Notation abhängig vom Wert. Bei exponentialem Wert, wird ein kleines e benutzt (für Werte mit einfacher und doppelter Genauigkeit)
- %G -> Rationale Zahl (Zahl mit Komma) mit normaler oder exponentialer Notation abhängig vom Wert. Bei exponentialem Wert, wird ein großes E benutzt (für Werte mit einfacher und doppelter Genauigkeit)
- %c -> Ein einzelner Buchtabe (Ganzzahl Wert)
- %s -> Eine Zeichenkette (Aneinanderreihung die auf Ganzzahlwerte zeigt)
- %p -> Gibt eine Speicheradresse aus (Zeiger)
- %n -> Die Variable die dieser Formatangabe zugeorndet ist bekommt den Wert, wieviele Zeichen bis jetzt ausgegeben wurden (Ganzzahl Wert)
Größen Modifizierung
Manchmal werden Zeichen zwischen % und dem Zeichen für den Datentyp eingefügt. Diese eingefügten Zeichen geben an, wie der zu ersetzende Wert interpreitert werden soll:
- h -> Argument wird als kleiner Ganzzahlwert interpretiert. Gültig für d, i, o, u, x, X und n.
- l -> Argument wird als groß Ganzzahlwert interpretiert. Gültig für d, i, o, u, x, X und n.
- L -> Argument wird als große Zahl mit Komma und doppelter Genauigkeit interpretiert. Gültig für 'e, E, f, F, g, G
Ausgabe Tricks
Falls du ein & in einem Text siehst, bedeutet dies, dass das folgende Zeichen als Tastaturkürzel dargestellt wird (i.d.R. unterstrichen). Im Text "Kopiere eD2k &Link in Zwischenablage" wird das L unterstrichen um zu zeigen, dass dies das Tastaturkürzel in dem anzuzeigenden Menmü ist.
Ebenso erlauben manche Formatangaben festzulegen, wie diese auszugeben sind. Diese Angaben müssen zwischen % und dem Datentyp stehen:
- - -> Richtet Linksbündig aus.
- + -> Gitb ein Pluszeichen ( + ) aus, wenn der Wert positiv ist. Gültig für *d, i, e, E, f, g und G.
- 0 -> Füllt mit Nullen ( 0 ) anstatt Leerzeichen auf. Gültig für *d, i, u, x, X, o, e, E, f, g und G.
- # -> Verhält sich unterschiedlich, abhängig vom Datentyp:
- o': Eine Null ( 0 ) wird vorangestellt wenn der Wert nicht Null ist.
- x und X: Stellt 0x oder 0X den Daten vorn an. Abhängig davon, ob x oder X angegeben wurde.
- f, e, E, g und G: Zeigt den Dezimaltrenner an, auch wenn die Daten Ganzzahlen (ohne Komma) sind.
- g und G: Abschließende Nullen werden abgeschnitten.
- <Dezimalzahl ungleich Null> -> Gibt an, wie breit die Zahl mindestens sein muss. Kürzere Werten werden aufgefüllt). Kann zusammen mit 0 benutzt werden.
- .<Dezimalzahl> -> Verhält sich unterschiedlich, abhängig vom Datentyp:
- f, e und E: Gibt die Anzahl von Nachkommastellen an die ausgegeben werden dürfen (bei .0 werden keine Nachkommastellen ausgegeben).
- s: Maximale Zeichenanzahl die ausgegeben werden dürfen (wenn .0, werden keine Zeichen ausgegeben).
- %% -> Dies ist eigentlich keine Formatangabe, sondern wird verwendet um Doppeldeutigkeiten zu vermeiden. Es wird angezeigt als einzelnes %-Zeichen.
Wichtige Anmerkung
Du solltest NIEMALS die Reihenfolge der Formatangaben ändern, dies kann unvorhersehbare Folgen haben! Sie müssen in der Übersetzung die selbe Reihenfolge wie im Original haben.
Beispiel: Wenn du den Text "I am %d years old and my name is %s." übersetzt in "Meine name ist %s und ich bin %d Jahre alt." (beachte %s und %d sind vertauscht), wird aMule vielleicht abstürzen beim Versuch diesen Text anzuzeigen.
Beispiele
Hier folgen nun ein paar Beispiele zu oben genannten Formatangaben. Sie sind zu Quelltext+Ausgabe Paaren kombiniert. Die erste Zeile zeigt, wie sie im C++-Code geschrieben werden, die zweite Zeile (oder Gruppe von Zeilen falls mehr als eine benötigt wird) zeigt wie der C++-Code ausgegeben wird:
- Code Zeile: "Ich bin %s und Ich bin %d Jahre alt."
- Ausgabe: Ich bin Jacobo221 und Ich bin 19 Jahre alt.
- Code Zeile: "Der erste Buchstabe im Alphabet ist %c"
- Ausgabe: Der erste Buchstabe im Alphabet ist A
- Code Zeile: "Es gibt eine Formatangabe die lautet %%%c"
- Ausgabe: Es gibt eine Formatangabe die lautet %E
- Code Zeile: "Es gibt eine Formatangabe die lautet %%c"
- Ausgabe: Es gibt eine Formatangabe die lautet %c
- Code Zeile: "%E und %e sind die selbe Zahl"
- Ausgabe: 9.186329E+00 und 9.186329e+00 sind die selbe Zahl
- Code Zeile: "%g ist in normaler Schreibweise während %g exponentielle Schreibweise ist"
- Ausgabe: 0.25 ist in normaler Schreibweise während 3.234234E+34 exponentielle Schreibweise ist
- Code Zeile: "%+d ist eine positive Zahl"
- Ausgabe: +5 ist eine positive Zahl
- Code Zeile: "%05f hat 5 Dezimalstellen"
- Ausgabe: 000.25000 hat 5 Dezimalstellen
- Code Zeile: "Beides, %#o und %#X beginnen mit der Spezifikation der Schreibweise"
- Ausgabe: Beides, 0345 und 0X65FC beginnen mit der Spezifikation der Schreibweise
- Code Zeile: "%010x hat viele führende Nullen"
- Ausgabe: 00000065fc hat viele führende Nullen
- Code Zeile: "Pi ist %.2f"
- Ausgabe: Pi ist 3.14
Weiteres Zeug
Es gibt noch weiteres das du beim Übersetzen beachten musst, also lies weiter.
Groß-/Kleinschreibung
Die Programmiersprache C++ erachtet große und kleine Buchstaben als unterschiedlichs. Also ist 'a' ein anderer Buchstabe als 'A' für C++ Programme. In den meisten Fällen ist das für dich unwichtig, aber wenn du mit Sonderfunktionen und Format Angaben hantierst, ist es wichtig, also belasse sie wie sie sind.
Führende und angehängte Leerzeichen
Manchmal findest du Textzeilen die mit einem Leerzeichen beginnen oder enden. Das ist kein Schreibfehler. Diese Leerzeichen haben einen Grund. Meistens einen der folgenden:
- Aussehen. Vielleicht trennen sie den Text von etwas anderem, was ohne Trennung wohl wirklich häßlich wäre.
- Zukünftige Ergänzungen. In 99% der Fälle, werden noch Daten an den Text angehängt. Stell dir vor du findest einen Text der Form Ich bin . Dort ist kein %s zu finden, also wird auf jeden Fall später etwas angehängt. Wenn du also das Leerzeichen am Ende entfernst, wird der Text im übersetzten Programm so aussehen Ich binIch anstatt Ich bin Ich.
Beispiele
Die folgenden Beispiele sollten obige Ausnahmen verdeutlichen. Sie sind zu jeweils vier Zeilen gruppiert. Die erste Zeile zeigt den Originaltext, die zweite Zeile zeigt wie es übersett werden sollte (die Beispiele wurden ins Deutsche übersetzt),die dritte Zeile zeigt die mögliche Ausgabe und die vierte Zeile übersetzt das ganze wieder ins Englische zurück, sodass du es auch nachvollziehen kannst falls du kein Deutsch sprichst:
- Code Zeile:: " this line looks complete and the leading and ending spaces can be deleted because they seem typos "
- Übersetzung: " dies sieht nach einer kompletten Zeile aus, führende und nachfolgende Leerzeichen können gelöscht werden da sie Schreibfehler sind "
- Ausgabe: Immerhin, dies sieht nach einer kompletten Zeile aus, führende und nachfolgende Leerzeichen können gelöscht werden da sie Schreibfehler sind und nicht, wie du siehst, weil noch weiterer Text angehängt wird. Das zeigt dir, das du niemals diese Leerzeichen entfernen solltest
- Ausgabe (in Englisch): Allthough this line looks complete and the leading and ending spaces can be deleted because they seem typos it is not because, as you can see, there were still words to be added, so this shows you why you should never delete those spaces
Komplett Beispiel
Beispiel:
- Unübersetzt:
- msgid="I am %s and I a %d-year old\nand I\'m a happy \"aMule\" user "
- msgstr=""
- wird zu (übersetzung in Deutsch):
- msgid="I am %s, %d years old\nand &I\'m a happy \"aMule\" user "
- msgstr="Ich bin %s und %d Jahre alt\n&Ich bin glücklicher \"aMule\" Nutzer "
- Erklärung:
- %s und %d müssen in dieser Reihenfolge übernommen werden da sie im Programm mit einem Text oder einer Zahl ersetzt werden. Merke: Alles zwischen dem %-Zeichen und dem nächsten Buchstaben (also, a, b, 'c, etc...) oder Prozentzeichen (%) muss in dieser Reihenfolge übernommen werden.
- \n Muss übernommen werden wo es ist, da es die Zeile an dieser Stelle umbricht. Merke: \ und das nächste Zeichen (z.B. \, a, n, t, ,f, ", ', etc) muss in dieser Reihenfolge übernommen werden.
- & muss 'vor dem selben Buchstaben in der Übersetzung stehen, da es die Kombination ALT+Buchstabe angibt, mit der dieser Menüeintrag ausgwählt werden kann.
- Das Leerzeichen am Ende bleibt stehen, da es im Original auch da war.