From 3b7a99ff52f91e07fada9930d92afc656b3ceb52 Mon Sep 17 00:00:00 2001 From: Pleasure1234 <3196812536@qq.com> Date: Fri, 8 Aug 2025 21:03:04 +0800 Subject: [PATCH] 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 --- .../WebSearchProvider/LocalSearchProvider.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/providers/WebSearchProvider/LocalSearchProvider.ts b/src/renderer/src/providers/WebSearchProvider/LocalSearchProvider.ts index 10ea773360..abdf9fc826 100644 --- a/src/renderer/src/providers/WebSearchProvider/LocalSearchProvider.ts +++ b/src/renderer/src/providers/WebSearchProvider/LocalSearchProvider.ts @@ -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 { 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] = [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')