ファイルを狂わせずに、左から右へのスクリプトと右から左へのスクリプトをどのように混合しますか?


9

あなたの母国語がヘブライ語であり、ヘブライ語をソースコードに入れることができるPython 3のようなプログラミング言語で作業しているとします。よかったね!あなたは持っていdictます:

d = {'a': 1}

そして、あなたはそれをaヘブライ語で置き換えたいです。したがって、その単一の文字を置き換えます。

d = {'א': 1}

ええとああ。他の変更を行わずに1つの文字を置き換えるだけで、表示がおかしくなりました。ヘブライ語からまでのすべて1が逆向きであり、これが何を意味するかは言うまでもなく、これが有効な構文(それがそうである)であることは極めて明白ではありません。

ヘブライ語は本質的に右から左であり、目に見えない制御文字がなくても、ヘブライ語のテキストは右から左に表示されます。これは、ヘブライ語の近くにある特定の「通常の」文字、および他のいくつかのスクリプトの文字にも適用されます。詳細は複雑です。

これにどう対処しますか?制御文字をソースコードに貼り付けて、コードを壊さずに表示を修正することはできません。16進数のエスケープですべてを書き込むと、ある種の読みづらさは別の種類と交換されます。Basic Latinブロックの文字を使用してすべてに名前を付け、ローカリゼーションファイルにすべてのヘブライ語の文字列を貼り付けることを辞任したとしても、右から左へのテキストと左から右への混合を避けるのは困難です。

ヘブライ語を含むJSONまたはCSVは文字化けします。文字列を押し込んだローカリゼーションファイルが人間が読めると想定されていたとしても、おそらくそうではありません。職業はなんですか?


1
これはコードエディタまたはIDEに関連していると思います。英語/ヘブライ語の混合の論理的順序は問題ありません。問題は視覚的にのみ存在します。私はあなたの2行のコードをVisual Studio 2015に入れましたが、うまく表示されました。平均ヘブライ語の文字が1のの左側に表示されたもの
Afshar Mohebbi

@afsharm:ヘブライ語を追加すると、ヘブライ語は左から右に表示されますか、それとも右から左に表示されますか?左から右の場合、ヘブライ語は後方に表示されており、Visual Studioが文字列をと表示した場合、英語のネイティブになります'.dlrow olleH'。右から左の場合、Visual Studioは、左から右に強制されることも、適切なUnicode双方向アルゴリズムも行われない奇妙なことをしています。どちらの場合にも、独自の混乱の原因があります。
user2357112は、モニカの2016

@afsharm:あなたのプロフィールにはイランと書かれているので、おそらく私よりも右から左へのテキストに慣れているでしょう。Visual Studioでペルシャ語を入力すると、どのように見えますか?(それとも私が悪いの仮定のどこかにしてきた?)
user2357112はモニカ・サポート

あなたは正しく推測します。私の母国語はペルシア語で、アラビア語やヘブライ語と同様にRTL言語です。Visual Studio 2015は単一言語の文字列を混乱させません。tinypic.com/r/2em2137/9を参照してくださいただし、Visual Studioは、RTLとLTRの両方を同時に正しく含む文字列を表示するほどスマートではありません。
Afshar Mohebbi

他の編集者は、RTL言語のサポートが優れている場合とそうでない場合があります。たとえば、SublimeはデフォルトではRTLスクリプトを適切にサポートしていません。
Afshar Mohebbi

回答:


2

私の知る限り、これはコード内の識別子(およびおそらくコメント)で非ASCII文字を使用する場合にほとんど関係があります。

たとえば、コードで「英語」のような識別子とキーワード、コメントを使用している場合など、それを回避するように自分を統制する場合、これはそれほど問題ではありません(すべてのソフトウェア開発者が英語のドキュメントとコードを読むことができるはずです)。次に、アプリケーションの国際化とローカリゼーションは、メッセージ、特にリテラル文字列でのみ発生します

その後、メッセージカタログを使用できます。たとえば、CとPOSIXでは、gettext(3)とその仲間を使用します。ローカライズされたメッセージカタログには、メッセージのローカライズされた/国際化されたバリアントがすべて含まれています。アプリケーションがヘブライ語ユーザー専用である(そしてそれが大きな市場ではない)場合は、リテラル文字列でのみヘブライ語を使用します。

より具体的には、hello worldアプリケーションには

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

そして、あなたのアプリケーションは、適切な引数でいくつかのsetlocale(3)を呼び出すことによって、実行の開始時にそれ自身をカスタマイズします。

locale(7)を参照してください。これらすべてをPythonとオペレーティングシステムに適合させます。多くのクロスプラットフォームフレームワーク(Qtなど)は、国際化とローカリゼーションを幅広くサポートしています。

もちろん、Unicode文字列を表示するには微妙な問題があります。最も重要なディスプレイとGUIライブラリおよびツールキット(Qt、GTkなど)は、混合言語の文字列(たとえば、ヘブライ語と英語とロシア語と中国語を含むものの表示)を処理できます。

より広い見方については、ソフトウェアの国際化とローカリゼーションに関するウィキページを読んでください。

JSONファイルは、ASCII文字のみを含み、他の文字(JSON文字列でのみ表示されます)が文字列に\u05d0(の代わりにא)エンコードされている場合に有効です。

おそらく、十分に優れたエディターを見つけて、ニーズに合わせてカスタマイズできます。Pythonにヘブライ語リテラル文字列があるという特定の問題をカバーするために、Emacsサブモードを見つける(またはカスタマイズする)ことができると思います(ただし、英語の識別子とコメントはまだ残っています)。

ところで、ヘブライ語のキーボードがどのように見えるかはわかりませんが、ほとんどのキーボードレイアウトでは、ASCII以外の文字を入力するよりもASCII文字(ラテン文字など)を入力する方が速くなるように設定できます。ですから、あなた自身にとっても、英語のようなコードを入力する方が良いでしょう。

JSONデータに関してはא、文字列がいつ含まれるかを確認するようにエディターを設定できるはずです\u05d0(そうでない場合は、JSONコンバーターàla jqを使用してください

だから私はあなたの本当の問題は良いエディターを十分に選択して設定することだと信じています(ヘブライ語をリテラル文字列内にのみ持つ一方で、リテラル文字列にヘブライ語と英語の両方を含める必要があるまれなケースでは、いくつかに分割します)。EmacsVimはどちらもあなたのニーズに合うように設定できると思います。


単一言語プログラム用のローカリゼーションフレームワークを導入するのはかなり不自由であり、データファイルが人間が読めないという問題が依然としてあります。人間が読みやすいように意図されたデータ形式が双方向テキストに直面してその特性を失うことを受け入れるだけですか?
user2357112はMonica

そうだと思いますが、ASCII以外の言語用の単一言語プログラムをコーディングしたことはありません。私自身は英語のネイティブスピーカーではありませんが(フランス語を話します)、コードは常に英語に似ています。私はフランス語の識別子を使ってコーディングするように強いなければなりませんが、それを行うことはほとんどありません(唯一の特別なケースは、英語を十分に理解していない特定の人だけのためにコードを書いている場合です。これはめったに起こりません:ソフトウェア開発者は英語のドキュメントを読むことができます)
Basile Starynkevitch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.