FHIR Terminology Ecosystem IG, published by HL7 FHIR Product Director. This guide is not an authorized publication; it is the continuous build for version 1.9.1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-tx-ecosystem-ig/ and changes regularly. See the Directory of published versions
This page documents the expectations for servers in the terminology ecosystem around language support. Servers in the ecosystem must support the minimum features in this page around validation, whether or not the affected code system has more than one language supported or not.
Servers are also generally required to support CodeSystem supplements for language packs, though this may be waived for some code systems with their own alternative translation support and governance on discussion with HL7.
Clients might want to do one of three things:
Clients can specify the return displayLanguage in one of four places:
The first three may contain multiple languages with weights per the Accept-Language specification; which to use is a matter of operational control on the client. ValueSet Language is a single language code as described in BCP-47.
From a server point of view, the order of priority for the displayLanguage parameter is
request parameter > valueset-extension > HTTP Header > ValueSet.language
Language doesn't just affect what a server returns - in the ecosystem, it affects which server should be used, because authoritative claims can be made for particular languages: different servers may be the appropriate destination for the same code system depending on the language of the request (typically because they have different supplements loaded).
Consequences for clients using the ecosystem:
language parameter in the coordination server's resolve call$expand where a display
language is in play, $validate-code that carries a display language (even when no display is
provided to check, the display in the response comes back in the requested language, and callers
use it - e.g. display lookups when rendering), $lookup requesting designations. In practice:
route with the language whenever the request specifies one; requests with no language interest
should not invent onede, *;q=0.1 behavior) or to treat the language as unavailable (the de, *;q=0
behavior) remains the client's decision, exactly as it is for a single serverlanguage-support: unknown -
they host the code system, but the ecosystem does not know whether they can supply the requested
language. They are only usable under the wildcard reading; in particular, do not validate displays
against themSee Language Specific Claims for the registration format, matching rules, and resolution ordering.
Value sets may them selves make rules about the language behavior using a combination of:
The correct responses depends on the interplay between these various parameters, and are effectively specified by the test cases.
the tests here test out these combinations. To test this, we define four code systems, all basically related to each other:
Then a set of value sets are defined on this, that include all codes from one of those code systems. Some of the value sets specify the language of expansion (discussed below)
The first four tests simply echo the four code systems back with no language rules
Each of the tests below comes as a set of variants, depending on how the language is specified:
-mixed: mixing them up (testing precedence)
Having done these, we turn to the really interesting tests, switching the display language. These tests use the weight feature of the language,
specifying to return en: displayLanguage: en. By default, the wildcard is understood to be present at some low weight: displayLanguage: en, *; q=0.1. This results in the client getting displays in the language of it's choice, if there are any, and otherwise falling back to whatever is available. If the client wants to insist that it only get displays if they are in the specified language, it has to turn the wild card off explicitly: displayLanguage: en, *; q=0
For these tests, it's anticipated that the parameter handling tested out in the previous tests is working, so instead, these tests come in three variants:
-hard
Finally, we turn to an efficiency concern - restricting the set of designations that we get back using the designation parameter. We asked for designations, but we may only want a subset of the full set available. We could filter them on the client side, but it might be quite lot of traffic.
The validation use cases around language include tests for language specified as an HTTP header, as a value set parameter, a value set language, and for various combinations of language weights.
Note that by default, the wildcard is understood to not be present.