feat: add language filter to local web search queries (#8976)

* feat: add language filter to local web search queries

Integrates user's language setting into search queries by applying a language filter based on the provider (Google, Bing, or others). This improves search relevance for localized results.

* fix: update language filter logic in LocalSearchProvider

Refactored applyLanguageFilter to use provider.id instead of provider.name for search engine identification. Adjusted filtering for Google, Bing, and Baidu, and removed default language filter for other providers.

* Update LocalSearchProvider.ts
This commit is contained in:
Pleasure1234
2025-08-08 21:03:04 +08:00
committed by GitHub
parent 97a63ea5b2
commit 3b7a99ff52
@@ -1,5 +1,6 @@
import { loggerService } from '@logger'
import { nanoid } from '@reduxjs/toolkit'
import store from '@renderer/store'
import { WebSearchState } from '@renderer/store/websearch'
import { WebSearchProvider, WebSearchProviderResponse, WebSearchProviderResult } from '@renderer/types'
import { createAbortPromise } from '@renderer/utils/abortController'
@@ -29,6 +30,7 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
httpOptions?: RequestInit
): Promise<WebSearchProviderResponse> {
const uid = nanoid()
const language = store.getState().settings.language
try {
if (!query.trim()) {
throw new Error('Search query cannot be empty')
@@ -38,7 +40,8 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
}
const cleanedQuery = query.split('\r\n')[1] ?? query
const url = this.provider.url.replace('%s', encodeURIComponent(cleanedQuery))
const queryWithLanguage = language ? this.applyLanguageFilter(cleanedQuery, language) : cleanedQuery
const url = this.provider.url.replace('%s', encodeURIComponent(queryWithLanguage))
let content: string = ''
const promisesToRace: [Promise<string>] = [window.api.searchService.openUrlInSearchWindow(uid, url)]
if (httpOptions?.signal) {
@@ -79,6 +82,25 @@ export default class LocalSearchProvider extends BaseWebSearchProvider {
}
}
/**
* 根据提供的语言为查询添加语言过滤器
* @param query 原始查询
* @param language 语言代码 (例如: 'zh-CN', 'en-US')
* @returns 带有语言过滤的查询
*/
protected applyLanguageFilter(query: string, language: string): string {
if (this.provider.id.includes('local-google')) {
return `${query} lang:${language.split('-')[0]}`
}
if (this.provider.id.includes('local-bing')) {
return `${query} language:${language}`
}
if (this.provider.id.includes('local-baidu')) {
return `${query} language:${language.split('-')[0]}`
}
return query
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
protected parseValidUrls(_htmlContent: string): SearchItem[] {
throw new Error('Not implemented')