检测非英语格式

时间:2012-01-31 20:02:40

标签: c# text globalization right-to-left

我正在使用winform应用程序,并且在richbox_textchange中我想检测输入的文本是否为英文,因为如果是英文我将执行LeftToRight输入其他RightToLeft输入。

我使用了那段代码:

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        if (CultureInfo.CurrentCulture.TextInfo.IsRightToLeft)
        {
            label1.Text = "RTL";
        }
        else
        {
            label1.Text = "LTR";
        }
    }

但我总是得到:LTR only,label1永远不会将文本更改为RTL,即使我键入阿拉伯语!!!

编辑:回答!!

首先感谢大家帮助我,尤其是Oded,这是我能想出的解决方案

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        if (InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft)
        {
            label1.Text = "RTL";
        }
        else
        {
            label1.Text = "LTR";
        }
    }

2 个答案:

答案 0 :(得分:2)

您需要在类的顶部添加正确的命名空间:

using System.Globalization;

此时,CultureInfoTextInfo课程将直接提供。


更新

您似乎正在尝试查找当前的输入语言。看一下InputLanguage类及其方法。它位于System.Windows.Forms名称空间中。

InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft

答案 1 :(得分:1)

问题是CultureInfo.CurrentCulture.TextInfo.IsRightToLeft正在返回有关当前系统设置的信息,而不是输入到文本框中的特定文本。

你不知道你是否在文本框中键入了英语,阿拉伯语或西里尔语,而且它并不关心。它所关心的只是您的计算机配置显示的内容,这就是它永远不会改变的原因。

不幸的是,我不相信有可能获得特定文本字符串的语言。你可能Text.EncodingInfo.CodePage property有一些好运,但是不可能有任何东西会绝对确定地告诉你文本的语言。另一种可能的方法是遍历字符串中的字符,检查它们的信息。类似的内容描述为here

考虑到所有因素,最好只询问用户。其他应用程序如何支持多种输入语言?