アプリケーションで、rtl と ltr の両方が混在するテキストを表示したいと考えています。テキストの言語を特定でき、言語に応じて dir=ltr または dir=rtl を切り替えることができます。
この問題は、同じ文に英語とアラビア語の両方のテキストが含まれている場合に発生します。この場合、言語検出でアラビア語が検出され (主要言語であるため)、dir=rtl が選択されます。これらの混合文を表示するにはどうすればよいですか
よろしく、 Rohit
このdir
属性は、方向性が中立なテキストの方向性を設定します。ラテン文字またはアラビア文字の通常のテキストには影響しません。それらは固有の強い方向性に従います。まあ、少なくともそうすべきです。ブラウザにはバグがあり、どの方向性を設定する必要があるかを知っていればdir
、設定が役立つ場合があります。さらに、設定は全体的なレイアウトの方向を設定します。たとえば、アラビア語のテキストに英語のテキストが含まれている場合 (図式的には、最も単純なケースでは、Ar1 の後に En が続き、Ar2 が続きます)、正しく設定する必要があります (例では、Ar1 が最初に右に、次にAr2 が次に続きます)。その左に En があり、次に Ar2 が最後、つまり一番左です)。dir
dir=rtl
しかし、括弧のような方向があいまいな文字が含まれていると問題が発生します。たとえば、アラビア語テキスト内の英語テキストに「Hello world (42)」が含まれている場合です。のブロック内ではdir=rtl
、これは「(Hello world (42 .)」としてレンダリングされます。</p>
これに対処するには、英語のフラグメントも認識し、埋め込まれた方向性を設定した要素内にラップする必要があります。
<style>
.ltr { unicode-bidi: embed; direction: ltr; }
</style>
[...]
<p dir=rtl>
مرحبا العالم. <span class=ltr>Hello world (42).</span> وكان هذا الاختبار.</p>