首页 > 解决方案 > RTL 阿拉伯语文本,句号在结尾而不是开始

问题描述

请参阅下面的 Testo 文本框的开头正确地有句号: 在此处输入图像描述

在 Watch Window 和内存字符串变量中,FullStop 错误地位于末尾: 在此处输入图像描述

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

标签: c#winformslocalearabicright-to-left

解决方案


您可以使用 Visual Studio 创建支持双向(从右到左)语言(如阿拉伯语和希伯来语)的基于 Windows 的应用程序,您需要设置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();

对于任何想要使用 Web 浏览器和 HTML(而不是 WinForms)的人,您可以设置direction: rtl;,例如:

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

或以下任何一个答案:https ://stackoverflow.com/a/42551367/495455


推荐阅读