RTL Arabi c текст, точка в конце, а не в начале - PullRequest
1 голос
/ 13 июля 2020

См. Ниже текстовое поле Testo имеет правильную точку в начале: enter image description here

In the Watch Window and in memory string variables the FullStop is incorrectly at the End: введите описание изображения здесь

Результатом этого является то, что когда я графически обрабатываю строку, точка Full Stop (также известная как точка) находится в неправильном положении, как мне переместить ее при запуске?

1 Ответ

1 голос
/ 13 июля 2020

Вы можете использовать Visual Studio для создания приложений на основе Windows, которые поддерживают двунаправленные (справа налево) языки, такие как арабский c и иврит, вам нужно будет установить Control.RightToLeft Свойство

Получает или задает значение, указывающее, выровнены ли элементы управления для поддержки языковых стандартов с использованием шрифтов с письмом справа налево.

Оба из них ответы не удались , но помогли идентифицировать решение .

Если вы хотите получить значение RTL в коде с переменными, вы должны полагаться на управляющие символы Unicode, чтобы пометить их как RTL.

var badWhenSetRTLtrue = textBox1.Text;
var goodWhenSetRTLtrue = ((Char)0x202B).ToString() + textBox1.Text;

Было бы разумно использовать их в качестве методов расширения:

partial class StringExtensions {

private const char LTR_EMBED = '\u202A';
private const char RTL_EMBED = '\u0x202B';
private const char POP_DIRECTIONAL = '\u202C';
private string ForceLTR(this string inputStr)
{
    return LTR_EMBED + inputStr + POP_DIRECTIONAL;
}

private string ForceRTL(this string inputStr)
{
    return RTL_EMBED  + inputStr;
}

}

например:

textBox1.Text.ForceRTL();

Для всех, кто хочет сделать это с веб-браузер и HTML (вместо WinForms) вы можете установить direction: rtl;, например:

<p style="direction: rtl;">טקסט</p>

Или любой из этих ответов: { ссылка }

...