_search-language
_search-language
is experimental, generated SQL and semantic may change in future!Search parameter
_search-language
can be used to search specifying language.GET [/fhir]/<resource>?_search-language=<locale>&<string-param>=<value>
Any string search parameters (e.g. name) will search in desired language if there is
_search-language
in query. Specifying only _search-language
without any other string search parameters won't affect anything (except _sort
).By default _search-language is skipped. It can be turned on by
features
{...
:multilingual
{:enable-search-language true}}
Aidbox searches for Translation Extension and if the resource contains it and the language is correct, then searches by the content of this translation.
Structure of a resource containing translation extension:
resourceType: <resourceType>
id: <id>
name: <name>
_name:
extension:
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: <locale1>
- url: content
valueString: <translation in locale1>
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: <locale2>
- url: content
valueString: <translation in locale2>
If desired language is not present in Translation Extension, it will search by search-parameter like without _search-language. This fallback can be turned off by
box_features_multilingual_fallback=false
environment variable (true by default).
Note on field overwriting: Aidbox returns resource in FHIR format without any replacements.
Use
Accept-Language
header instead of _search-language
:GET [/fhir]/<resourceType>?_sort=<string-search-param>
Accept-Language: <locale>
Note that browsers send requests with
Accept-Language
(e.g en-US,en;q=0.5) by default.To enable Accept-Language support use
box_features_multilingual_use__accept__language__header=true
environment variable.
_sort
search parameter will use desired language if Accept-Language
or _search-language
are present.GET [/fhir]/<resourceType>?_search-language=<locale>&_sort=<string-search-param>
By default PostgreSQL uses system locale to specify sort order. When searching by language, SQL will contain
GROUP BY <...> COLLATE "<locale>"
. Note that if locale does not contain a territory part (language[_territory]
), Aidbox will use "language_LANGUAGE", e.g. "en_EN" (is not an locale) or "ru_RU" (correct locale).Collation is supported in Aidboxdb version 14.7+.
Get all locations, those names start with 'Clinique' in French:
GET /Location?_search-language=fr-CA&name=Clinique
Same with
Accept-Language
header:GET /Location?name=Clinique
Accept-Language: fr-CA
Get all locations and sort by their names in French, using French locale for sort order (COLLATE):
GET /Location?_search-language=fr-CA%_sort=name
If some resource contains an array of strings, e.g. Location.alias, extensions can also be an array.
PUT /fhir/Location/my-loc
resourceType: Location
status: active
alias:
- a
- b
_alias:
- extension:
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: fr-CA
- url: content
valueString: a-fr-ca
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: en-CA
- url: content
valueString: a-en-ca
- extension:
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: fr-CA
- url: content
valueString: b-fr-ca
- url: http://hl7.org/fhir/StructureDefinition/translation
extension:
- url: lang
valueCode: en-CA
- url: content
valueString: b-en-ca
_search-language
can search through arrays (search parameter Location.name searches in name
, alias
, _name
and _alias
)GET /Location?_search-language=fr-CA&name=a-fr-ca // found my-loc
GET /Location?_search-language=fr-CA&name=b-fr-ca // found my-loc
GET /Location?_search-language=fr-CA&name=c-fr-ca // not found
GET /Location?_search-language=fr-CA&name=a-fr-ca,c-fr-ca // found my-loc
Last modified 2mo ago