【问题标题】:Multilingual spellcheck on WPF richtextboxWPF 富文本框上的多语言拼写检查
【发布时间】:2010-04-16 17:05:00
【问题描述】:

我需要为富文本框打开拼写检查,并将语言设置为用户从下拉列表中选择的语言。现在,我只是通过在 xaml 中构建 Richtextbox 并为 xaml 语言属性提供一种语言来测试它。

我已经阅读了两种不同的资源,一种说我需要设置语言属性,另一种说我需要设置 xml:lang 属性。两者似乎都不起作用。我已经尝试将西班牙语中的任何一个设置为“es”,并且我也尝试将两者都设置为“es”。我还通过将它们设置为“fr-FR”来尝试法语,但没有成功。唯一发生的事情是没有标记英语单词,但其他语言单词被标记为拼写错误。

我还读到我需要更改键盘语言。这对我的应用程序来说是个问题,因为应用程序中的语言需要即时切换,因此让最终用户进入他们的键盘设置以便拼写检查工作是一个问题。但是,我更改了键盘设置,但拼写检查仍然无法正常工作。这次它不会将任何内容标记为拼写错误,甚至是拼写错误的英文单词。

我错过了什么?

编辑: 一些链接到我上面的参考资料 http://msdn.microsoft.com/en-us/library/system.windows.controls.spellcheck(v=VS.100).aspx

http://www.dev102.com/2008/03/25/customize-spellcheck-on-wpf-text-controls/

http://books.google.com/books?id=clLc5BBHqRMC&pg=PA121&lpg=PA121&dq=C%23+wpf+enable+spellcheck&source=bl&ots=_r59pZRDjP&sig=yHMBc39EHKK5gaRMzxlBaEsY890&hl=en&ei=oXnIS8zWH4G88gaq48yGBw&sa=X&oi=book_result&ct=result&resnum=6&ved=0CBMQ6AEwBQ#v=onepage&q&f=false

【问题讨论】:

  • 只是检查您使用的是 WPF 4.0(我假设是这种情况,因为您有一个 .net4 标签)...
  • 是的。我在我的帖子中有它,有人将它编辑出来并放入标签中。我在 3.5 中一直在尝试这个,并且得到了类似的结果。但是,msdn 网站确实说这在 4.0 中有效,所以我上周下载并安装了 2010,但仍然遇到同样的问题。

标签: c# wpf .net-4.0 richtextbox spell-checking


【解决方案1】:

我不确定问题出在哪里,但这绝对适用于我的机器:

    <StackPanel>
        <TextBox SpellCheck.IsEnabled="True"
            Language="{Binding SelectedItem.Content, ElementName=lg, ConverterCulture=en-us}">

            Turtle tortue tortuga Schildkröte 

        </TextBox>
        <ComboBox Name="lg">
            <ComboBoxItem Selector.IsSelected="True">en-US</ComboBoxItem>
            <ComboBoxItem>fr-FR</ComboBoxItem>
            <ComboBoxItem>es-ES</ComboBoxItem>
            <ComboBoxItem>de-DE</ComboBoxItem>
        </ComboBox>
    </StackPanel>

编辑在 3.5 中有效,在 4.0 中无效。很有趣。

在 3.5 中,所有支持的字典都可以正常工作。在 4.0 WPF 中,拼写检查仅适用于英语。

编辑 2

它似乎只适用于 3.5,因为我在 Windows 7 上,所以我不需要语言包。

另一个问题是它只能因为文本是预设的而起作用。 您输入的任何文本都将从当前用户设置中获取其语言。

我想您的问题的解决方案是遍历整个内容并在每次用户选择一种语言时更改其语言属性。

【讨论】:

  • mojocha,你有安装语言包吗?我在 MSDN 论坛上发布了同样的问题,版主告诉我需要下载 3.5 的语言包。在这样做和大约一个小时的测试之后,语言包的拼写检查仅适用于 3.5。所以拼写检查在其他语言的 4.0 中仍然不适用于我,但在 3.5 中对西班牙语有效,因为我现在有了那个语言包。如果键盘设置为该语言,它也仅适用于给定语言。因此,当您开始输入时,如果您的键盘设置为西班牙语,它将用西班牙语进行拼写检查。
  • 如果您的键盘设置为英文,它将用英文进行拼写检查。所以它似乎在 级别检查语言。在继承的语言中检查任何默认文本。因此,如果我将我的 RichTextBox 设置为 language="es",并输入一些硬编码文本,它不仅会在运行时用西班牙语进行拼写检查,而且会在设计器窗口中进行。
  • 是的,根据 MSDN 论坛,这是有道理的,如果您运行的是 Windows 7,则语言包已经包含在内。
【解决方案2】:

来自 MSDN 论坛:

“首先,我们究竟需要 WPF 组件来启用英语/西班牙语/德语/法语语言的拼写检查?

NetFx 3.5 SP1

Windows XP(语言包); Windows Vista(开箱即用); Windows 7(开箱即用)

NetFx 4 Windows XP(语言包); Windows Vista(语言包); Windows 7(语言包)

这里的“语言包”表示您需要安装相应的 .NET Framework 语言包。例如,如果要在 Windows XP 和 .NET Framework 3.5 SP1 上启用西班牙语拼写检查,则安装 .NET Framework 3.5 SP1 西班牙语语言包。如果您想在 .NET Framework 4.0 上启用德语拼写检查,请安装 .NET Framework 4.0 德语语言包。

.NET Framework 4.0 的语言包即将推出。

开箱即用意味着您无需执行任何操作,并且自动提供四种语言的拼写检查。

如果您通过 ClickOnce 部署应用程序,则可以包含相应的语言包作为先决条件。如需有关在 ClickOnce 部署中包含语言包的帮助,您可以使用 ClickOnce 和设置与部署项目论坛。

二、RichTextBox控件如何确定要检查的语言?

如果 Run 元素用特定语言标记,拼写检查将使用它:

uno dos tres cuatrro 一二三四

在运行时,拼写检查使用用于输入单词的输入语言,如上一篇文章所述。

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/06a2cc61-f2ae-4534-b35a-6c676bc2bcb2/?prof=required

【讨论】:

  • 所以,你只需要等待 4.0 语言包
  • 大声笑...除非您的应用程序是 3.5。我们目前是 3.5,但我们希望尽快将其提升到 4.0。可能仍然会发生,多语言拼写检查在优先级列表中没有那么高。
  • .NET Framework 4.0 语言包可用。除了英语/西班牙语/德语/法语之外,您还能使用其他任何语言吗?我尝试安装俄语语言包并设置语言标签,但这似乎不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2010-11-11
  • 2013-04-21
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多