mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-09 03:24:06 +00:00
Adds language-aware country penalty in forward geocoding
Threads the caller's Accept-Language preference into ForwardGeocoder and uses it in rerank_by_query to check whether the query matches the localized name of a country result. If the caller's locale renders the country name differently (e.g. pt-BR gives "Brasil" ≠ "Brasilia"), the country's importance is added as an accuracy penalty, neutralising its dominance over lower-ranked places. If the locale matches (e.g. Finnish gives "Brasilia" = "Brasilia"), no penalty is applied and the country correctly wins.
This commit is contained in:
@@ -334,6 +334,8 @@ async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
|
||||
details['layers'] = DataLayer.ADDRESS
|
||||
else:
|
||||
details['layers'] = get_layers(params)
|
||||
details['locales'] = Locales.from_accept_languages(get_accepted_languages(params),
|
||||
params.config().OUTPUT_NAMES)
|
||||
|
||||
# unstructured query parameters
|
||||
query = params.get('q', None)
|
||||
@@ -359,8 +361,7 @@ async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
|
||||
except UsageError as err:
|
||||
params.raise_error(str(err))
|
||||
|
||||
Locales.from_accept_languages(get_accepted_languages(params),
|
||||
params.config().OUTPUT_NAMES).localize_results(results)
|
||||
details['locales'].localize_results(results)
|
||||
|
||||
if details['dedupe'] and len(results) > 1:
|
||||
results = helpers.deduplicate_results(results, max_results)
|
||||
|
||||
Reference in New Issue
Block a user