Windows 搜索支持的语言

本主题介绍 Windows 搜索如何支持多种语言。

标记化、断字器和语言资源

Windows 搜索与语言无关,但不同语言的搜索准确性可能因断字器标记文本的方式而异。 断字器为语言实现各种标记化规则,并将文本拆分为要编制索引或搜索的单个标记或字词。

索引文本和查询字符串的语言都分为标记。 由于标记化规则因语言而异,因此每个语言或语言系列都有单独的断字器。 如果查询语言与索引语言不匹配,则结果可能不可预知。

Windows 搜索附带了一组定义完善的断字器。 Windows Vista 及更高版本中支持经典断字器和词干分析器组件。 如果无法确定文档的语言,Windows 搜索会尝试检测语言以识别最合适的断字器。 Windows 搜索尝试通过调用 GetSystemPreferredUILanguages 函数来检测语言,以确定第一种多用户界面(MUI)语言(这通常是系统 UI 语言,除非安装了 MUI 语言包)。 如果调用成功,则使用第一种 MUI 语言的断字器。 如果调用 GetSystemPreferredUILanguages 失败,Windows 搜索将通过调用 GetSystemDefaultLCID 函数并使用与该区域设置关联的断字符来检索系统区域设置。

如果未为语言安装断字器,Windows 搜索将使用 中性 断字器在空白区域中断。

可以通过注册表删除语言,如以下示例所示。

HKEY_LOCAL_MACHINE
   SYSTEM
      CurrentControlSet
         Control
            ContentIndex
               Language
                  Dutch_Dutch
                     (Default)
                     Locale
                     NoiseFile
                     StemmerClass = CLSID
                     WBreakerClass = CLSID

提示

如果对注册表进行更改,请重启 Windows 搜索。

 

当 Windows 搜索需要新的断字器时,将读取类标识符(CLSID),并缓存实例化断字器。

可以通过实现 IWordBreaker 接口,为语言创建自定义断字器。 然后,Windows 搜索在生成内容索引并运行查询时调用 IWordBreaker 方法。

从内容源检索索引内容的区域设置信息。 如果源实现者不知道索引内容的区域设置,则应将区域设置设置为 LOCALE_NEUTRAL

例如,如果实现筛选器处理程序(IFilter 接口的实现)、属性处理程序或协议处理程序,则应将索引内容的区域设置设置为 LOCALE_NEUTRAL,除非你具有特定的区域设置信息并且确信其准确性。

提示

如果索引查询基于用户输入,则区域设置应与用户键入的语言匹配。 可以通过调用 GetKeyboardLayout 函数来确定此区域设置。

 

断字器支持的语言

Windows 搜索包括用于支持以下语言的断字器。

注册表项 语言(子语言) LCID
Arabic_SaudiArabia 阿拉伯语(中性) 0x0001
Bengali_Default 孟加拉语(中性) 0x0045
Bulgarian_Default 保加利亚语(保加利亚) 0x0402
Catalan_Default 加泰罗尼亚语(加泰罗尼亚语) 0x0403
Chinese_HongKong 中文(香港特别行政区,中国) 0x0C04
Chinese_Simplified 中文(简体中文) 0x0804
Chinese_Traditional 中文(传统) 0x0404
Croatian_Default 克罗地亚(克罗地亚) 0x041A
Czech_Default 捷克(捷克共和国) 0x0405
Danish_Default 丹麦语(丹麦) 0x0406
Dutch_Dutch 荷兰语(荷兰) 0x0413
English_UK 英语(英国) 0x0809
English_US 英语(美国) 0x0409
Finnish_Default 芬兰语(芬兰) 0x040B
French_French 法语(法国) 0x040C
German_German 德语(德国) 0x0407
Greek_Default 希腊语(希腊) 0x0408
Gujarati_Default 古吉拉特(印度) 0x0447
Hebrew_Default 希伯来语(中性) 0x000D
Hindi_Default 印地语 (印度) 0x0439
Hungarian_Default 匈牙利语(匈牙利) 0x040E
Icelandic_Default 冰岛语(冰岛) 0x040F
Indonesian_Default 印度尼西亚语(印度尼西亚) 0x0421
Italian_Italian 意大利语(意大利) 0x0410
Japanese_Default 日语(日本) 0x0411
Kannada_Default 卡纳达(印度) 0x044B
Korean_Default 韩国(韩国) 0x0412
Latvian_Default 拉脱维亚语(拉脱维亚) 0x0426
Lithuanian_Default 立陶宛语(立陶宛) 0x0427
Malay_Malaysia 马来语(马来西亚) 0x043E
Malayalam_Default 马拉雅拉姆语 (中性) 0x004C
Marathi_Default 马拉蒂(印度) 0x044E
Norwegian_Bokmal 挪威语(挪威博克马尔) 0x0414
Polish_Default 波兰语(波兰) 0x0415
Portuguese_Portugal 葡萄牙语(葡萄牙) 0x0816
Portuguese_Brazil 葡萄牙语(巴西) 0x0416
Punjabi_Default 旁遮普语(印度) 0x0446
Romanian_Default 罗马尼亚语(罗马尼亚) 0x0418
Russian_Default 俄语(中性) 0x0019
Serbian_Cyrillic 塞尔维亚语(塞尔维亚和黑山,前,西里尔文) 0x0C1A
Serbian_Latin 塞尔维亚语(塞尔维亚和黑山,前、拉丁语) 0x081A
Slovak_Default 斯洛伐克语(斯洛伐克) 0x041B
Slovenian_Default 斯洛文尼亚语(斯洛文尼亚) 0x0424
Spanish_Modern 西班牙语(西班牙,现代排序) 0x0C0A
Swedish_Default 瑞典语(瑞典) 0x041D
Tamil_Default 泰米尔语(印度) 0x0449
Telugu_Default 泰卢固语(印度) 0x044A
Thai_Default 泰国 (泰国) 0x041E
Turkish_Default 土耳其语(图尔基耶) 0x041F
Ukrainian_Default 乌克兰语(乌克兰) 0x0422
Urdu_Default 乌尔都语(巴基斯坦) 0x0420
Vietnamese_Default 越南语(越南) 0x042A

 

注意

表中某些语言的 LCID 是使用语言标识符、子语言标识符和排序标识符生成的。

 

有关语言和关联标识符的详细信息,请参阅 语言标识符常量和字符串

注意

不能保证所有这些语言注册表项都存在于任何给定计算机上。 任何给定语言的断字器可能或可能未安装在计算机中,具体取决于用户设置。

 

从 Windows 8.1开始,使用断字的首选方法是通过 WinRT API WordsSegmenter 类

其他资源

  • 有关如何实现和使用其他语言和区域设置的自定义断字符和词干分析器的信息,请参阅 在 Windows 搜索中扩展语言资源。
  • 如果需要识别文本的语言,可以使用 Windows 7 及更高版本中提供的语言自动检测(LAD)。 有关详细信息,请参阅 扩展语言服务(ELS)。
  • 有关管理、查询和扩展索引的信息,请参阅 Windows 搜索开发人员指南

Windows 搜索概述

Windows 搜索作为开发平台

将托管代码与 Shell 数据和 Windows 搜索 配合使用