RTL 阿拉伯文文本,句号在结尾而不是开头

RTL Arabic text, full stop's at the end not beginning

请看下面的德图文本框在开头正确地加上了句号:

在 Watch Window 和内存字符串变量中,FullStop 错误地位于末尾:

这样做的结果是,当我以图形方式处理字符串时,句号(又名点)位于错误的位置,我应该如何在开始时移动它?

您可以使用 Visual Studio 创建基于 Windows 的支持双向(从右到左)语言(例如阿拉伯语和希伯来语)的应用程序,您需要设置 Control.RightToLeft Property

Gets or sets a value indicating whether control's elements are aligned to support locales using right-to-left fonts.

but helped identify the solution.

如果您想在带有变量的代码中获取 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>

或以下任一答案: