Wie mischen Sie Skripte von links nach rechts und von rechts nach links, ohne dass Ihre Dateien verrückt aussehen?

9

Angenommen, Ihre Muttersprache ist Hebräisch, und Sie arbeiten in einer Programmiersprache wie Python 3, mit der Sie Hebräisch in den Quellcode einfügen können. Schön für dich! Du hast ein dict:

d = {'a': 1}

und Sie möchten das adurch etwas Hebräisch ersetzen . Sie ersetzen also dieses einzelne Zeichen:

d = {'א': 1}

Oh oh. Nur durch Ersetzen eines Zeichens, ohne weitere Änderungen vorzunehmen , wurde Ihre Anzeige verrückt. Alles vom Hebräischen bis zum Hebräischen 1ist rückwärts und es ist äußerst nicht offensichtlich, dass dies sogar eine gültige Syntax ist ( es ist ), geschweige denn, was es bedeutet.

Hebräisch ist an sich von rechts nach links, und selbst ohne unsichtbare Steuerzeichen wird hebräischer Text von rechts nach links angezeigt. Dies gilt auch für bestimmte "reguläre" Zeichen in Positionen in der Nähe von Hebräisch sowie für Zeichen aus einigen anderen Skripten. Die Details sind kompliziert.

Wie gehst du damit um? Sie können keine Steuerzeichen in Ihren Quellcode einfügen, um die Anzeige zu reparieren, ohne den Code zu beschädigen. Wenn Sie alles in hexadezimaler Schreibweise schreiben, wird eine Art von Unlesbarkeit gegen eine andere ausgetauscht. Selbst wenn Sie sich damit abfinden, alles mit Zeichen aus dem Basic Latin-Block zu benennen und alle hebräischen Zeichenfolgen in Lokalisierungsdateien einzufügen, ist es schwer zu vermeiden, Text von rechts nach links mit Text von links nach rechts zu mischen.

JSON oder CSV mit Hebräisch werden verstümmelt. Wenn diese Lokalisierungsdateien, in die Sie Ihre Zeichenfolgen verschoben haben, für Menschen lesbar sein sollten, sind sie dies wahrscheinlich nicht. Wie geht's?

user2357112 unterstützt Monica
quelle
1
Ich denke, das hängt mit Ihrem Code-Editor oder Ihrer IDE zusammen. Die logische Reihenfolge von gemischtem Englisch / Hebräisch hat kein Problem. Das Problem besteht nur visuell. Ich habe Ihre beiden Codezeilen in Visual Studio 2015 eingefügt und es wurde nur gut angezeigt. Das bedeutet hebräisches Zeichen links von 1.
Afshar Mohebbi
@afsharm: Wenn Sie mehr Hebräisch eingeben, wird das Hebräisch von links nach rechts oder von rechts nach links angezeigt? Wenn es von links nach rechts ist, wird Ihr Hebräisch rückwärts angezeigt, und Sie befinden sich in der Situation, dass ein englischer Muttersprachler wäre, wenn Visual Studio seine Zeichenfolgen als anzeigt '.dlrow olleH'. Wenn es von rechts nach links ist, macht Ihr Visual Studio etwas Seltsames, das weder von links nach rechts erzwungen wird, noch den richtigen bidirektionalen Unicode-Algorithmus. Jeder Fall hat seine eigenen Verwirrungsquellen.
user2357112 unterstützt Monica
@afsharm: In Ihrem Profil steht Iran, daher sind Sie mit Text von rechts nach links wahrscheinlich viel besser vertraut als ich. Wie sieht es aus, wenn Sie in Visual Studio Persisch eingeben? (Oder habe ich irgendwo eine schlechte Annahme gemacht?)
user2357112 unterstützt Monica
Sie raten richtig. Meine Muttersprache ist Persisch, eine RTL-Sprache wie Arabisch und Hebräisch. Visual Studio 2015 bringt keine einsprachigen Zeichenfolgen durcheinander. Siehe tinypic.com/r/2em2137/9. Visual Studio ist jedoch nicht intelligent genug, um Zeichenfolgen anzuzeigen , die sowohl RTL als auch LTR gleichzeitig korrekt enthalten.
Afshar Mohebbi
Andere Editoren unterstützen RTL-Sprachen möglicherweise besser oder nicht. Zum Beispiel haben Sublime standardmäßig keine gute Unterstützung für RTL-Skripte.
Afshar Mohebbi

Antworten:

2

AFAIK, dies ist meistens relevant, wenn Sie Nicht-ASCII-Buchstaben in Bezeichnern (und möglicherweise Kommentaren) in Ihrem Code verwenden.

Wenn Sie sich disziplinieren, um dies zu vermeiden, z. B. wenn Ihr Code "Englisch" aussehende Bezeichner sowie Schlüsselwörter und Kommentare verwendet, ist dies weitaus weniger ein Problem (und jeder Softwareentwickler sollte in der Lage sein, englische Dokumentation und Code zu lesen). Die Internationalisierung und Lokalisierung Ihrer Anwendung erfolgt dann nur in Nachrichten , insbesondere in wörtlichen Zeichenfolgen .

Sie könnten dann einen Nachrichtenkatalog verwenden. In C und POSIX verwenden Sie beispielsweise gettext (3) und friends. Der lokalisierte Nachrichtenkatalog enthält alle lokalisierten / internationalisierten Varianten der Nachricht. Wenn Ihre Anwendung nur für hebräische Benutzer ist (und das ist kein großer Markt), haben Sie Hebräisch nur in wörtlichen Zeichenfolgen.

Genauer gesagt würde die Hallo-Welt-Anwendung enthalten

void say_hello(char*towhom) {
  printf(gettext("hello %s"), towhom);
}

und Ihre Anwendung würde sich zu Beginn der Ausführung anpassen, indem sie setlocale (3) mit entsprechenden Argumenten aufruft .

Siehe Gebietsschema (7) . Passen Sie dies alles an Ihr Python und Betriebssystem an. Viele plattformübergreifende Frameworks (z. B. Qt ) bieten umfassende Unterstützung für Internationalisierung und Lokalisierung.

Natürlich gibt es das heikle Problem, Unicode-Zeichenfolgen anzuzeigen. Die meisten seriösen Anzeige- und GUI-Bibliotheken und Toolkits (Qt, GTk, ...) können mit Zeichenfolgen in verschiedenen Sprachen umgehen (z. B. Anzeigen von Inhalten, die Hebräisch und Englisch sowie Russisch und Chinesisch enthalten).

Lesen Sie für eine breitere Ansicht die Wikipage zur Internationalisierung und Lokalisierung von Software.

Eine JSON-Datei ist gültig, wenn sie nur ASCII-Zeichen enthält, wobei andere Zeichen (die nur in JSON-Zeichenfolgen vorkommen würden) mit \u05d0(anstelle von א) in der Zeichenfolge codiert sind .

Vielleicht könnten Sie einen ausreichend guten Editor finden und ihn an Ihre Bedürfnisse anpassen. Ich bin mir sicher, dass Sie einen Emacs- Submodus finden (oder einen anpassen) können, um das spezielle Problem der Verwendung hebräischer Literalzeichenfolgen in Python zu behandeln (aber immer noch englisch aussehende Bezeichner und Kommentare).

Übrigens weiß ich nicht, wie eine hebräische Tastatur aussieht, aber in den meisten Tastaturlayouts können Sie sie so konfigurieren, dass die Eingabe von ASCII-Buchstaben (dh lateinischen Buchstaben) schneller ist als die Eingabe von Nicht-ASCII-Buchstaben. Selbst für Sie könnte es besser sein, englisch aussehenden Code einzugeben.

In Bezug auf JSON-Daten sollten Sie Ihren Editor so konfigurieren können, dass er sieht, אwann eine Zeichenfolge enthält \u05d0(andernfalls verwenden Sie einen JSON-Konverter à la jq ).

Daher glaube ich, dass Ihr eigentliches Problem darin bestehen sollte, einen guten Editor gut genug auszuwählen und zu konfigurieren (während Hebräisch nur in wörtlichen Zeichenfolgen enthalten ist; in dem seltenen Fall, in dem eine wörtliche Zeichenfolge sowohl Hebräisch als auch Englisch enthalten muss, teilen Sie sie in mehrere Teile auf). Ich denke, dass sowohl Emacs als auch Vim so konfiguriert werden könnten, dass sie Ihren Anforderungen entsprechen.

Basile Starynkevitch
quelle
Es ist ziemlich lahm, ein Lokalisierungsframework für ein einsprachiges Programm einführen zu müssen, und Sie haben immer noch das Problem, dass Datendateien für den Menschen nicht lesbar sind. Akzeptieren Sie einfach, dass Datenformate, die für die Lesbarkeit bestimmt sind, diese Eigenschaft angesichts von bidirektionalem Text verlieren?
user2357112 unterstützt Monica
Ich würde das ja sagen, aber ich habe nie ein einsprachiges Programm für Nicht-ASCII-Dinge programmiert. Ich bin selbst kein englischer Muttersprachler (sondern ein französischer), aber mein Code ist immer englisch. Ich muss mich zwingen, mit französischen Bezeichnern zu codieren, und das mache ich fast nie (der einzige Sonderfall ist, wenn ich den Code nur für eine bestimmte Person schreibe, die Englisch nicht gut versteht; dies kommt selten vor: Softwareentwickler müssen es sein in der Lage, englische Dokumentation zu lesen)
Basile Starynkevitch