diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java index b7d119827..6f6437b41 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java @@ -30,7 +30,9 @@ import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; import org.apache.commons.lang3.StringUtils; @@ -94,6 +96,8 @@ import com.google.gson.JsonObject; public abstract class BaseWorkerContext implements IWorkerContext { + private Locale locale; + public class MetadataResourceVersionComparator implements Comparator { private List list; @@ -417,6 +421,19 @@ public abstract class BaseWorkerContext implements IWorkerContext { this.expandCodesLimit = expandCodesLimit; } + @Override + public Locale getLocale() { + if (Objects.nonNull(locale)){ + return locale; + } else { + return Locale.US; + } + } + + @Override + public void setLocale(Locale locale) { + this.locale = locale; + } @Override public ValueSetExpansionOutcome expandVS(ElementDefinitionBindingComponent binding, boolean cacheOk, boolean heirarchical) throws FHIRException { ValueSet vs = null; diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java index 11c4a94cf..242055e44 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java @@ -24,6 +24,7 @@ import java.util.EnumSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -327,7 +328,11 @@ public interface IWorkerContext { * @throws FHIRException */ public ValueSetExpansionOutcome expandVS(ConceptSetComponent inc, boolean hierarchical) throws TerminologyServiceException; - + + Locale getLocale(); + + void setLocale(Locale locale); + public class ValidationResult { private ConceptDefinitionComponent definition; private IssueSeverity severity; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java index 3c81d0ec3..cac38fb49 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java @@ -53,7 +53,10 @@ POSSIBILITY OF SUCH DAMAGE. import java.text.MessageFormat; import java.util.List; +import java.util.ResourceBundle; import org.apache.commons.lang3.StringUtils; +import org.hl7.fhir.dstu3.model.Resource; +import org.hl7.fhir.r5.context.IWorkerContext; import org.hl7.fhir.utilities.validation.ValidationMessage; import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity; import org.hl7.fhir.utilities.validation.ValidationMessage.IssueType; @@ -62,7 +65,19 @@ import org.hl7.fhir.utilities.validation.ValidationMessage.Source; public class BaseValidator { protected Source source; - + protected IWorkerContext context; + private ResourceBundle messages; + + public BaseValidator(IWorkerContext context){ + this.context = context; + messages = ResourceBundle.getBundle("Messages", context.getLocale() ); + } + + public void setContext(IWorkerContext context) { + this.context = context; + messages = ResourceBundle.getBundle("Messages", context.getLocale() ); + } + /** * Test a rule and add a {@link IssueSeverity#FATAL} validation message if the validation fails * @@ -134,7 +149,7 @@ public class BaseValidator { private String formatMessage(String theMessage, Object... theMessageArguments) { String message; if (theMessageArguments != null && theMessageArguments.length > 0) { - message = MessageFormat.format(theMessage, theMessageArguments); + message = MessageFormat.format(messages.getString(theMessage), theMessageArguments); } else { message = theMessage; } @@ -546,5 +561,4 @@ public class BaseValidator { } return thePass; } - } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/profile/ProfileValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/profile/ProfileValidator.java index 054adb258..01db7feb0 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/profile/ProfileValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/profile/ProfileValidator.java @@ -37,12 +37,11 @@ import org.hl7.fhir.validation.BaseValidator; public class ProfileValidator extends BaseValidator { - IWorkerContext context; private boolean checkAggregation = false; private boolean checkMustSupport = false; - public void setContext(IWorkerContext context) { - this.context = context; + public ProfileValidator(IWorkerContext context) { + super(context); } public boolean isCheckAggregation() { diff --git a/org.hl7.fhir.validation/src/main/resources/Messages_de_DE.properties b/org.hl7.fhir.validation/src/main/resources/Messages_de_DE.properties new file mode 100644 index 000000000..19ba4a1e4 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/Messages_de_DE.properties @@ -0,0 +1,230 @@ +The_element__is_not_marked_as_mustSupport_in_the_profile__Consider_not_using_the_element_or_marking_the_element_as_mustSupport_in_the_profile = The element {0} is not marked as 'mustSupport' in the profile {1}. Consider not using the element, or marking the element as must-Support in the profile +Expected__but_found__line_elements = Expected {0} but found {1} line elements +_for_ = {0} for '{1}#{2}' +Unknown_Code_System_ = Unknown Code System '{0}' +Unknown_Code_ = Unknown Code ({0}#{1}) +Display_should_be_ = Display should be '{0}' +Invalid_System_URI_ = Invalid System URI: {0} +Invalid_System_URI___cannot_use_a_value_set_URI_as_a_system = Invalid System URI: {0} - cannot use a value set URI as a system +Code_System_URI__is_unknown_so_the_code_cannot_be_validated = Code System URI '{0}' is unknown so the code cannot be validated +Expected__but_found__coding_elements = Expected {0} but found {1} coding elements +Binding_for__missing_cc = Binding for {0} missing (cc) +ValueSet__not_found_by_validator = ValueSet {0} not found by validator +No_code_provided_and_a_code_is_required_from_the_value_set__ = No code provided, and a code is required from the value set {0} ({1}) +No_code_provided_and_a_code_must_be_provided_from_the_value_set__max_value_set_ = No code provided, and a code must be provided from the value set {0} (max value set {1}) +No_code_provided_and_a_code_should_be_provided_from_the_value_set__ = No code provided, and a code should be provided from the value set {0} ({1}) +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_from_this_value_set_is_required_class__ = Could not confirm that the codes provided are in the value set {0} and a code from this value set is required (class = {1}) +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code_class__ = Could not confirm that the codes provided are in the value set {0} and a code should come from this value set unless it has no suitable code (class = {1}) +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_is_recommended_to_come_from_this_value_set_class__ = Could not confirm that the codes provided are in the value set {0} and a code is recommended to come from this value set (class = {1}) +None_of_the_codes_provided_are_in_the_value_set___and_a_code_from_this_value_set_is_required_codes__ = None of the codes provided are in the value set {0} ({1}, and a code from this value set is required) (codes = {2}) +None_of_the_codes_provided_are_in_the_value_set___and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code_codes__ = None of the codes provided are in the value set {0} ({1}, and a code should come from this value set unless it has no suitable code) (codes = {2}) +None_of_the_codes_provided_are_in_the_value_set___and_a_code_is_recommended_to_come_from_this_value_set_codes__ = None of the codes provided are in the value set {0} ({1}, and a code is recommended to come from this value set) (codes = {2}) +Error__validating_CodeableConcept = Error {0} validating CodeableConcept +Binding_by_URI_reference_cannot_be_checked = Binding by URI reference cannot be checked +Binding_for_path__has_no_source_so_cant_be_checked = Binding for path {0} has no source, so can't be checked +Code_0_is_not_a_valid_code_in_code_system_1 = Code {0} is not a valid code in code system {1} +Codingsystem_must_be_an_absolute_reference_not_a_local_reference = Coding.system must be an absolute reference, not a local reference +The_Coding_references_a_value_set_not_a_code_system_ = The Coding references a value set, not a code system ('{0}') +Binding_for__missing = Binding for {0} missing +The_value_provided_could_not_be_validated_in_the_absence_of_a_terminology_server = The value provided could not be validated in the absence of a terminology server +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_from_this_value_set_is_required = Could not confirm that the codes provided are in the value set {0}, and a code from this value set is required +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code = Could not confirm that the codes provided are in the value set {0}, and a code should come from this value set unless it has no suitable code +Could_not_confirm_that_the_codes_provided_are_in_the_value_set__and_a_code_is_recommended_to_come_from_this_value_set = Could not confirm that the codes provided are in the value set {0}, and a code is recommended to come from this value set +The_Coding_provided_is_not_in_the_value_set__and_a_code_is_required_from_this_value_set = The Coding provided is not in the value set {0}, and a code is required from this value set{1} +The_Coding_provided_is_not_in_the_value_set__and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code = The Coding provided is not in the value set {0}, and a code should come from this value set unless it has no suitable code{1} +The_Coding_provided_is_not_in_the_value_set__and_a_code_is_recommended_to_come_from_this_value_set = The Coding provided is not in the value set {0}, and a code is recommended to come from this value set{1} +Error__validating_Coding = Error {0} validating Coding +Error__validating_Coding_ = Error {0} validating Coding: {1} +None_of_the_codes_provided_could_be_validated_against_the_maximum_value_set___error__ = None of the codes provided could be validated against the maximum value set {0} ({1}), (error = {2}) +None_of_the_codes_provided_are_in_the_maximum_value_set___and_a_code_from_this_value_set_is_required_codes__ = None of the codes provided are in the maximum value set {0} ({1}, and a code from this value set is required) (codes = {2}) +Error__validating_CodeableConcept_using_maxValueSet = Error {0} validating CodeableConcept using maxValueSet +The_code_provided_could_not_be_validated_against_the_maximum_value_set___error__ = The code provided could not be validated against the maximum value set {0} ({1}), (error = {2}) +The_code_provided_is_not_in_the_maximum_value_set___and_a_code_from_this_value_set_is_required_code__ = The code provided is not in the maximum value set {0} ({1}, and a code from this value set is required) (code = {2}#{3}) +The_code_provided_is_not_in_the_maximum_value_set__ = The code provided is not in the maximum value set {0} ({1}{2} +The_Coding_provided_is_not_in_the_value_set__and_a_code_is_required_from_this_value_set_ = The Coding provided is not in the value set {0}, and a code is required from this value set. {1} +The_Coding_provided_is_not_in_the_value_set__and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code_ = The Coding provided is not in the value set {0}, and a code should come from this value set unless it has no suitable code. {1} +The_Coding_provided_is_not_in_the_value_set__and_a_code_is_recommended_to_come_from_this_value_set_ = The Coding provided is not in the value set {0}, and a code is recommended to come from this value set. {1} +Extension_url__is_not_valid_invalidVersion = Extension url '{0}' is not valid (invalidVersion'{1}') +Extension_url__is_not_valid_unknown_Element_id = Extension url '{0}' is not valid (unknown Element id'{1}') +Extension_url__is_not_valid_Element_id_is_valid_but_cannot_be_used_in_a_crossversion_paradigm_because_there_has_been_no_changes_across_the_relevant_versions = Extension url '{0}' is not valid (Element id'{1}' is valid, but cannot be used in a cross-version paradigm because there has been no changes across the relevant versions) +Extension_url__evaluation_state_illegal = Extension url '{0}' evaluation state illegal +Subextension_url__is_not_defined_by_the_Extension_ = Sub-extension url '{0}' is not defined by the Extension {1} +The_extension__is_unknown_and_not_allowed_here = The extension {0} is unknown, and not allowed here +Unknown_extension_ = Unknown extension {0} +Extension_modifier_mismatch_the_extension_element_is_labelled_as_a_modifier_but_the_underlying_extension_is_not = Extension modifier mismatch: the extension element is labelled as a modifier, but the underlying extension is not +Extension_modifier_mismatch_the_extension_element_is_not_labelled_as_a_modifier_but_the_underlying_extension_is = Extension modifier mismatch: the extension element is not labelled as a modifier, but the underlying extension is +The_Extension__must_be_used_as_a_modifierExtension = The Extension '{0}' must be used as a modifierExtension +The_Extension__must_not_be_used_as_an_extension_its_a_modifierExtension = The Extension '{0}' must not be used as an extension (it's a modifierExtension) +The_Extension__definition_is_for_a_simple_extension_so_it_must_contain_a_value_not_extensions = The Extension '{0}' definition is for a simple extension, so it must contain a value, not extensions +The_Extension__definition_allows_for_the_types__but_found_type_ = The Extension '{0}' definition allows for the types {1} but found type {2} +The_extension__is_not_allowed_to_be_used_at_this_point_allowed___this_element_is_ = The extension {0} is not allowed to be used at this point (allowed = {1}; this element is [{2}) +The_extension__is_not_allowed_to_be_used_at_this_point_based_on_context_invariant_ = The extension {0} is not allowed to be used at this point (based on context invariant '{1}') +The_element__is_present_in_the_instance_but_not_allowed_in_the_applicable__specified_in_profile = The element {0} is present in the instance but not allowed in the applicable {1} specified in profile +Missing_element___required_by_fixed_value_assigned_in_profile_ = Missing element '{0}' - required by fixed value assigned in profile {1} +Value_is__but_must_be_ = Value is '{0}' but must be '{1}' +Unhandled_fixed_value_type_ = Unhandled fixed value type {0} +No_extensions_allowed_as_the_specified_fixed_value_doesnt_contain_any_extensions = No extensions allowed, as the specified fixed value doesn't contain any extensions +Extensions_count_mismatch_expected__but_found_ = Extensions count mismatch: expected {0} but found {1} +Extension_count_mismatch_unable_to_find_extension_ = Extension count mismatch: unable to find extension: {0} +Expected__but_found__family_elements = Expected {0} but found {1} family elements +Expected__but_found__given_elements = Expected {0} but found {1} given elements +Expected__but_found__prefix_elements = Expected {0} but found {1} prefix elements +Expected__but_found__suffix_elements = Expected {0} but found {1} suffix elements +Identifiersystem_must_be_an_absolute_reference_not_a_local_reference = Identifier.system must be an absolute reference, not a local reference +Primitive_types_must_have_a_value_or_must_have_child_extensions = Primitive types must have a value or must have child extensions +Primitive_types_must_have_a_value_that_is_not_empty = Primitive types must have a value that is not empty +Primitive_types_should_not_only_be_whitespace = Primitive types should not only be whitespace +Element_value__does_not_meet_regex_ = Element value '{0}' does not meet regex '{1}' +boolean_values_must_be_true_or_false = boolean values must be 'true' or 'false' +URI_values_cannot_start_with_oid = URI values cannot start with oid: +URI_values_cannot_start_with_uuid = URI values cannot start with uuid: +URI_values_cannot_have_whitespace = URI values cannot have whitespace('{0}') +value_is_longer_than_permitted_maximum_length_of_ = value is longer than permitted maximum length of {0} +OIDs_must_start_with_urnoid = OIDs must start with urn:oid: +OIDs_must_be_valid = OIDs must be valid +UUIDs_must_start_with_urnuuid = UUIDs must start with urn:uuid: +UUIDs_must_be_valid_ = UUIDs must be valid ({0}) +URL_value__does_not_resolve = URL value '{0}' does not resolve +id_value__is_not_valid = id value '{0}' is not valid +value_cannot_be_empty = @value cannot be empty +value_should_not_start_or_finish_with_whitespace = value should not start or finish with whitespace +value_is_longer_than_permitted_maximum_length_of_1_MB_1048576_bytes = value is longer than permitted maximum length of 1 MB (1048576 bytes) +The_value__is_outside_the_range_of_reasonable_years__check_for_data_entry_error = The value '{0}' is outside the range of reasonable years - check for data entry error +Not_a_valid_date_time = Not a valid date time +if_a_date_has_a_time_it_must_have_a_timezone = if a date has a time, it must have a timezone +Not_a_valid_datetime_ = Not a valid date/time ({0}) +Not_a_valid_time = Not a valid time +Not_a_valid_time_ = Not a valid time ({0}) +Not_a_valid_date = Not a valid date +value_is_longer_than_permitted_maximum_value_of_ = value is longer than permitted maximum value of {0} +Not_a_valid_date_ = Not a valid date ({0}) +The_value0_is_not_a_valid_Base64_value = The value'{0}' is not a valid Base64 value +The_value__is_not_a_valid_integer = The value '{0}' is not a valid integer +value_is_greater_than_permitted_maximum_value_of_ = value is greater than permitted maximum value of {0} +value_is_less_than_permitted_minimum_value_of_ = value is less than permitted minimum value of {0} +value_is_less_than_permitted_minimum_value_of_0 = value is less than permitted minimum value of 0 +value_is_less_than_permitted_minimum_value_of_1 = value is less than permitted minimum value of 1 +The_value__is_not_a_valid_integer64 = The value '{0}' is not a valid integer64 +The_value__is_not_a_valid_decimal = The value '{0}' is not a valid decimal +The_value__is_outside_the_range_of_commonlyreasonably_supported_decimals = The value '{0}' is outside the range of commonly/reasonably supported decimals +The_instant__is_not_valid_by_regex = The instant '{0}' is not valid (by regex) +Not_a_valid_instant_ = Not a valid instant ({0}) +The_code__is_not_valid_whitespace_rules = The code '{0}' is not valid (whitespace rules) +Wrong_namespace_on_the_XHTML__should_be_ = Wrong namespace on the XHTML ('{0}', should be '{1}') +Wrong_name_on_the_XHTML___must_start_with_div = Wrong name on the XHTML ('{0}') - must start with div +Illegal_element_name_in_the_XHTML_ = Illegal element name in the XHTML ('{0}') +Illegal_attribute_name_in_the_XHTML__on_ = Illegal attribute name in the XHTML ('{0}' on '{1}') +ValueSet_0_not_found_by_validator = ValueSet {0} not found by validator +The_value_provided__could_not_be_validated_in_the_absence_of_a_terminology_server = The value provided ('{0}') could not be validated in the absence of a terminology server +The_value_provided__is_not_in_the_value_set___and_a_code_is_required_from_this_value_set = The value provided ('{0}') is not in the value set {1} ({2}, and a code is required from this value set){3} +The_value_provided__is_not_in_the_value_set___and_a_code_should_come_from_this_value_set_unless_it_has_no_suitable_code = The value provided ('{0}') is not in the value set {1} ({2}, and a code should come from this value set unless it has no suitable code){3} +The_value_provided__is_not_in_the_value_set___and_a_code_is_recommended_to_come_from_this_value_set = The value provided ('{0}') is not in the value set {1} ({2}, and a code is recommended to come from this value set){3} +Binding_has_no_source_so_cant_be_checked = Binding has no source, so can't be checked +A_Reference_without_an_actual_reference_or_identifier_should_have_a_display = A Reference without an actual reference or identifier should have a display +Unable_to_resolve_resource_ = Unable to resolve resource '{0}' +The_type__is_not_a_valid_Target_for_this_element_must_be_one_of_ = The type '{0}' is not a valid Target for this element (must be one of {1}) +The_specified_type__does_not_match_the_found_type_ = The specified type '{0}' does not match the found type '{1}' +Unable_to_determine_type_of_target_resource = Unable to determine type of target resource +Unable_to_resolve_the_profile_reference_ = Unable to resolve the profile reference '{0}' +Unable_to_find_matching_profile_for__by_type_among_choices_ = Unable to find matching profile for {0} (by type) among choices: {1} +Unable_to_find_matching_profile_for__among_choices_ = Unable to find matching profile for {0} among choices: {1} +Found_multiple_matching_profiles_for__among_choices_ = Found multiple matching profiles for {0} among choices: {1} +Invalid_Resource_target_type_Found__but_expected_one_of_ = Invalid Resource target type. Found {0}, but expected one of ({1}) +Reference_is__which_isnt_supported_by_the_specified_aggregation_modes_for_the_reference = Reference is {0} which isn't supported by the specified aggregation mode(s) for the reference +Bundled_or_contained_reference_not_found_within_the_bundleresource_ = Bundled or contained reference not found within the bundle/resource {0} +The_type__implied_by_the_reference_URL__is_not_a_valid_Target_for_this_element_must_be_one_of_ = The type '{0}' implied by the reference URL {1} is not a valid Target for this element (must be one of {2}) +Expected__but_found__event_elements = Expected {0} but found {1} event elements +Relative_Reference_appears_inside_Bundle_whose_entry_is_missing_a_fullUrl = Relative Reference appears inside Bundle whose entry is missing a fullUrl +Relative_URLs_must_be_of_the_format_ResourceNameid_or_a_search_ULR_is_allowed_typeparameters__Encountered_ = Relative URLs must be of the format [ResourceName]/[id], or a search ULR is allowed ([type]?parameters. Encountered {0}) +Relative_URLs_must_be_of_the_format_ResourceNameid__Encountered_ = Relative URLs must be of the format [ResourceName]/[id]. Encountered {0} +Multiple_matches_in_bundle_for_reference_ = Multiple matches in bundle for reference {0} +Entries_matching_fullURL__should_declare_metaversionId_because_there_are_versionspecific_references = Entries matching fullURL {0} should declare meta/versionId because there are version-specific references +Matching_reference_for_reference__has_resourceType_ = Matching reference for reference {0} has resourceType {1} +URN_reference_is_not_locally_contained_within_the_bundle_ = URN reference is not locally contained within the bundle {0} +Bundle_entry_missing_fullUrl = Bundle entry missing fullUrl +Profile_reference__could_not_be_resolved_so_has_not_been_checked = Profile reference '{0}' could not be resolved, so has not been checked +StructureDefinition_has_no_snapshot__validation_is_against_the_snapshot_so_it_must_be_provided = StructureDefinition has no snapshot - validation is against the snapshot, so it must be provided +Questions_with_an_enableWhen_must_have_a_value_for_the_question_link = Questions with an enableWhen must have a value for the question link +Questions_with_an_enableWhen_cannot_refer_to_an_inner_question_for_its_enableWhen_condition = Questions with an enableWhen cannot refer to an inner question for it's enableWhen condition +Unable_to_find_target__for_this_question_enableWhen = Unable to find target '{0}' for this question enableWhen +Target_for_this_question_enableWhen_cant_reference_itself = Target for this question enableWhen can't reference itself +The_target_of_this_enableWhen_rule__comes_after_the_question_itself = The target of this enableWhen rule ({0}) comes after the question itself +Resource_has_a_language_but_the_XHTML_does_not_have_an_lang_or_an_xmllang_tag_needs_both__see_httpswwww3orgTRi18nhtmltechlanglangvalues = Resource has a language, but the XHTML does not have an lang or an xml:lang tag (needs both - see https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Resource_has_a_language_but_the_XHTML_does_not_have_a_lang_tag_needs_both_lang_and_xmllang__see_httpswwww3orgTRi18nhtmltechlanglangvalues = Resource has a language, but the XHTML does not have a lang tag (needs both lang and xml:lang - see https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Resource_has_a_language__and_the_XHTML_has_a_lang__but_they_differ_ = Resource has a language ({0}), and the XHTML has a lang ({1}), but they differ +Resource_has_a_language_but_the_XHTML_does_not_have_an_xmllang_tag_needs_both_lang_and_xmllang__see_httpswwww3orgTRi18nhtmltechlanglangvalues = Resource has a language, but the XHTML does not have an xml:lang tag (needs both lang and xml:lang - see https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Resource_has_a_language__and_the_XHTML_has_an_xmllang__but_they_differ_ = Resource has a language ({0}), and the XHTML has an xml:lang ({1}), but they differ +Duplicate_Security_Label_ = Duplicate Security Label {0} +Type_mismatch__SearchParameter__type_is__but_type_here_is_ = Type mismatch - SearchParameter '{0}' type is {1}, but type here is {2} +CodeSystem__has_a_all_system_value_set_of__but_it_is_an_expansion = CodeSystem {0} has a 'all system' value set of {1}, but it is an expansion +CodeSystem__has_a_all_system_value_set_of__but_doesnt_have_a_single_include = CodeSystem {0} has a 'all system' value set of {1}, but doesn't have a single include +CodeSystem__has_a_all_system_value_set_of__but_doesnt_have_a_matching_system_ = CodeSystem {0} has a 'all system' value set of {1}, but doesn't have a matching system ({2}) +CodeSystem__has_a_all_system_value_set_of__but_the_include_has_extra_details = CodeSystem {0} has a 'all system' value set of {1}, but the include has extra details +No_questionnaire_is_identified_so_no_validation_can_be_performed_against_the_base_questionnaire = No questionnaire is identified, so no validation can be performed against the base questionnaire +The_questionnaire_could_not_be_resolved_so_no_validation_can_be_performed_against_the_base_questionnaire = The questionnaire'{0}' could not be resolved, so no validation can be performed against the base questionnaire +If_text_exists_it_must_match_the_questionnaire_definition_for_linkId_ = If text exists, it must match the questionnaire definition for linkId {0} +No_response_answer_found_for_required_item_ = No response answer found for required item {0} +Item_has_answer_2_even_though_it_is_not_enabled_ = Item has answer (2), even though it is not enabled {0} +Only_one_response_answer_item_with_this_linkId_allowed = Only one response answer item with this linkId allowed +Items_of_type_group_should_not_have_answers = Items of type group should not have answers +Definition_for_item__does_not_contain_a_type = Definition for item {0} does not contain a type +Items_not_of_type_DISPLAY_should_not_have_items__linkId_0 = Items not of type DISPLAY should not have items - linkId {0} +Only_one_response_item_with_this_linkId_allowed__ = Only one response item with this linkId allowed - {0} +No_LinkId_so_cant_be_validated = No LinkId, so can't be validated +LinkId_not_found_in_questionnaire = LinkId'{0}' not found in questionnaire +Structural_Error_items_are_out_of_order = Structural Error: items are out of order +Item_has_answer_even_though_it_is_not_enabled_item_id__ = Item has answer, even though it is not enabled (item id = '{0}') +Answer_value_must_be_of_type_ = Answer value must be of type {0} +Answer_value_must_be_one_of_the_types_ = Answer value must be one of the types {0} +The_value_provided__is_not_in_the_options_value_set_in_the_questionnaire = The value provided ({0}::{1}) is not in the options value set in the questionnaire +Error__validating_Coding_against_Questionnaire_Options = Error {0} validating Coding against Questionnaire Options +Cannot_validate_options_because_no_option_or_options_are_provided = Cannot validate options because no option or options are provided +Option_list_has_no_option_values_of_type_integer = Option list has no option values of type integer +The_integer__is_not_a_valid_option = The integer {0} is not a valid option +Cannot_validate_integer_answer_option_because_no_option_list_is_provided = Cannot validate integer answer option because no option list is provided +Option_list_has_no_option_values_of_type_date = Option list has no option values of type date +The_date__is_not_a_valid_option = The date {0} is not a valid option +Cannot_validate_date_answer_option_because_no_option_list_is_provided = Cannot validate date answer option because no option list is provided +Option_list_has_no_option_values_of_type_time = Option list has no option values of type time +The_time__is_not_a_valid_option = The time {0} is not a valid option +Cannot_validate_time_answer_option_because_no_option_list_is_provided = Cannot validate time answer option because no option list is provided +Option_list_has_no_option_values_of_type_string = Option list has no option values of type string +The_string__is_not_a_valid_option = The string {0} is not a valid option +Cannot_validate_string_answer_option_because_no_option_list_is_provided = Cannot validate string answer option because no option list is provided +Option_list_has_no_option_values_of_type_coding = Option list has no option values of type coding +The_code__is_not_a_valid_option = The code {0}::{1} is not a valid option +Cannot_validate_Coding_option_because_no_option_list_is_provided = Cannot validate Coding option because no option list is provided +Documents_or_Messages_must_contain_at_least_one_entry = Documents or Messages must contain at least one entry +No_resource_on_first_entry = No resource on first entry +The_canonical_URL__cannot_match_the_fullUrl__unless_the_resource_id__also_matches = The canonical URL ({0}) cannot match the fullUrl ({1}) unless the resource id ({2}) also matches +The_canonical_URL__cannot_match_the_fullUrl__unless_on_the_canonical_server_itself = The canonical URL ({0}) cannot match the fullUrl ({1}) unless on the canonical server itself +Resource_ID_does_not_match_the_ID_in_the_entry_full_URL__vs__ = Resource ID does not match the ID in the entry full URL ('{0}' vs '{1}') +Entry__isnt_reachable_by_traversing_from_first_Bundle_entry = Entry {0} isn't reachable by traversing from first Bundle entry +Cant_find__in_the_bundle_ = Can't find '{0}' in the bundle ({1}) +The_type__is_not_valid__no_resources_allowed_here = The type '{0} is not valid - no resources allowed here +No_profile_found_for_contained_resource_of_type_ = No profile found for contained resource of type '{0}' +The_type__is_not_valid__must_be_ = The type '{0}' is not valid - must be {1} +The_type__is_not_valid__must_be_one_of_ = The type '{0}' is not valid - must be one of {1} +The_first_entry_in_a_document_must_be_a_composition = The first entry in a document must be a composition +The_type_of_element__is_not_known_which_is_illegal_Valid_types_at_this_point_are_ = The type of element {0} is not known, which is illegal. Valid types at this point are {1} +Extensionurl_is_required = Extension.url is required +Extensionurl_must_be_an_absolute_URL = Extension.url must be an absolute URL +Unrecognised_Content_ = Unrecognised Content {0} +Unknown_type_ = Unknown type {0} +Unknown_profile_ = Unknown profile {0} +Unable_to_find_matching_profile_among_choices_ = Unable to find matching profile among choices: {0} +Found_multiple_matching_profiles_among_choices_ = Found multiple matching profiles among choices: {0} +_Unable_to_check_minimum_required__due_to_lack_of_slicing_validation = {0}': Unable to check minimum required ({1}) due to lack of slicing validation +_minimum_required___but_only_found_ = {0}: minimum required = {1}, but only found {2} +_Unable_to_check_max_allowed__due_to_lack_of_slicing_validation = {0}: Unable to check max allowed ({1}) due to lack of slicing validation +_max_allowed___but_found_ = {0}: max allowed = {1}, but found {2} +This_element_does_not_match_any_known_slice_ = This element does not match any known slice {0} +This_element_is_not_allowed_by_the_profile_ = This element is not allowed by the profile {0} +As_specified_by_profile__Element__is_out_of_order = As specified by profile {0}, Element '{1}' is out of order +As_specified_by_profile__Element__is_out_of_order_in_ordered_slice = As specified by profile {0}, Element '{1}' is out of order in ordered slice +Profile__Element_matches_more_than_one_slice___ = Profile {0}, Element matches more than one slice - {1}, {2} +The_first_entry_in_a_message_must_be_a_MessageHeader = The first entry in a message must be a MessageHeader +No_definition_found_for_resource_type_ = No definition found for resource type '{0}' +Specified_profile_type_was__but_found_type_ = Specified profile type was '{0}', but found type '{1}' +Resource_requires_an_id_but_none_is_present = Resource requires an id, but none is present +Resource_has_an_id_but_none_is_allowed = Resource has an id, but none is allowed