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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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')