Merge remote-tracking branch 'origin/master'

This commit is contained in:
Grahame Grieve 2022-11-08 11:27:22 +11:00
commit 27e373c7b7
18 changed files with 485 additions and 250 deletions

View File

@ -45,7 +45,6 @@ import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.TerminologyServiceException;
import org.hl7.fhir.r4b.context.TerminologyCache.CacheToken;
import org.hl7.fhir.r4b.elementmodel.Element;
import org.hl7.fhir.r4b.formats.IParser;
import org.hl7.fhir.r4b.formats.ParserType;
import org.hl7.fhir.r4b.model.Bundle;
@ -71,7 +70,6 @@ import org.hl7.fhir.utilities.TranslationServices;
import org.hl7.fhir.utilities.npm.BasePackageCacheManager;
import org.hl7.fhir.utilities.npm.NpmPackage;
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity;
import org.hl7.fhir.utilities.validation.ValidationMessage;
import org.hl7.fhir.utilities.validation.ValidationOptions;
import com.google.gson.JsonSyntaxException;
@ -554,7 +552,7 @@ public interface IWorkerContext {
void setLocale(Locale locale);
String formatMessage(String theMessage, Object... theMessageArguments);
String formatMessagePL(Integer pl, String theMessage, Object... theMessageArguments);
String formatMessagePlural(Integer pl, String theMessage, Object... theMessageArguments);
void setValidationMessageLanguage(Locale locale);

View File

@ -386,7 +386,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
}
}
}
return new ValidationResult(IssueSeverity.WARNING, context.formatMessagePL(b.count(), I18nConstants.DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF_PLURAL, code.getSystem(), code.getCode(), b.toString(), code.getDisplay()), code.getSystem(), cc);
return new ValidationResult(IssueSeverity.WARNING, context.formatMessagePlural(b.count(), I18nConstants.DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF, code.getSystem(), code.getCode(), b.toString(), code.getDisplay()), code.getSystem(), cc);
}
private ConceptReferenceComponent findValueSetRef(String system, String code) {

View File

@ -2,7 +2,6 @@ package org.hl7.fhir.r4b.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.server.LoaderHandler;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
@ -17,14 +16,11 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.lang3.RegExUtils;
import org.fhir.ucum.Decimal;
import org.fhir.ucum.Pair;
import org.fhir.ucum.UcumException;
import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.FHIRFormatError;
import org.hl7.fhir.exceptions.PathEngineException;
import org.hl7.fhir.r4b.conformance.ProfileUtilities;
import org.hl7.fhir.r4b.context.IWorkerContext;
@ -45,7 +41,6 @@ import org.hl7.fhir.r4b.model.ExpressionNode.CollectionStatus;
import org.hl7.fhir.r4b.model.ExpressionNode.Function;
import org.hl7.fhir.r4b.model.ExpressionNode.Kind;
import org.hl7.fhir.r4b.model.ExpressionNode.Operation;
import org.hl7.fhir.r4b.model.InstantType;
import org.hl7.fhir.r4b.model.Property.PropertyMatcher;
import org.hl7.fhir.r4b.model.IntegerType;
import org.hl7.fhir.r4b.model.Property;
@ -60,7 +55,6 @@ import org.hl7.fhir.r4b.model.TypeConvertor;
import org.hl7.fhir.r4b.model.TypeDetails;
import org.hl7.fhir.r4b.model.TypeDetails.ProfiledType;
import org.hl7.fhir.r4b.model.ValueSet;
import org.hl7.fhir.r4b.renderers.DataRenderer;
import org.hl7.fhir.r4b.utils.FHIRLexer.FHIRLexerException;
import org.hl7.fhir.r4b.utils.FHIRPathEngine.IEvaluationContext.FunctionDetails;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
@ -69,9 +63,7 @@ import org.hl7.fhir.utilities.MergedList.MergeNode;
import org.hl7.fhir.utilities.SourceLocation;
import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.i18n.I18nConstants;
import org.hl7.fhir.utilities.validation.ValidationMessage;
import org.hl7.fhir.utilities.validation.ValidationOptions;
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueType;
import org.hl7.fhir.utilities.xhtml.NodeType;
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
@ -577,8 +569,8 @@ public class FHIRPathEngine {
return executeType(new ExecutionTypeContext(appContext, resourceType, types, types), types, expr, true);
}
private FHIRException makeExceptionPL(Integer num, ExpressionNode holder, String constName, Object... args) {
String fmt = worker.formatMessagePL(num, constName, args);
private FHIRException makeExceptionPlural(Integer num, ExpressionNode holder, String constName, Object... args) {
String fmt = worker.formatMessagePlural(num, constName, args);
if (location != null) {
fmt = fmt + " "+worker.formatMessage(I18nConstants.FHIRPATH_LOCATION, location);
}
@ -2494,13 +2486,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "+");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "+");
}
if (!left.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "+", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "+");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "+");
}
if (!right.get(0).isPrimitive() && !((left.get(0).isDateTime() || "0".equals(left.get(0).primitiveValue()) || left.get(0).hasType("Quantity")) && right.get(0).hasType("Quantity"))) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "+", right.get(0).fhirType());
@ -2581,13 +2573,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "*");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "*");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "*", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "*");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "*");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "*", right.get(0).fhirType());
@ -2620,13 +2612,13 @@ public class FHIRPathEngine {
private List<Base> opConcatenate(List<Base> left, List<Base> right, ExpressionNode expr) throws PathEngineException {
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "&");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "&");
}
if (left.size() > 0 && !left.get(0).hasType(FHIR_TYPES_STRING)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "&", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "&");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "&");
}
if (right.size() > 0 && !right.get(0).hasType(FHIR_TYPES_STRING)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "&", right.get(0).fhirType());
@ -2753,13 +2745,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "-");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "-");
}
if (!left.get(0).isPrimitive() && !left.get(0).hasType("Quantity")) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "-", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "-");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "-");
}
if (!right.get(0).isPrimitive() && !((left.get(0).isDateTime() || "0".equals(left.get(0).primitiveValue()) || left.get(0).hasType("Quantity")) && right.get(0).hasType("Quantity"))) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "-", right.get(0).fhirType());
@ -2792,13 +2784,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "/");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "/");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "/", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "/");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "/");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "/", right.get(0).fhirType());
@ -2838,13 +2830,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "div");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "div");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "div", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "div");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "div");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "div", right.get(0).fhirType());
@ -2878,13 +2870,13 @@ public class FHIRPathEngine {
if (left.size() == 0 || right.size() == 0) {
return new ArrayList<Base>();
} if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "mod");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "mod");
}
if (!left.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "mod", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "mod");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "mod");
}
if (!right.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "mod", right.get(0).fhirType());
@ -3619,7 +3611,7 @@ public class FHIRPathEngine {
private List<Base> funcSqrt(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "sqrt", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "sqrt", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3639,7 +3631,7 @@ public class FHIRPathEngine {
private List<Base> funcAbs(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "abs", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "abs", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3662,7 +3654,7 @@ public class FHIRPathEngine {
private List<Base> funcCeiling(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "ceiling", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "ceiling", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3680,7 +3672,7 @@ public class FHIRPathEngine {
private List<Base> funcFloor(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "floor", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "floor", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3703,7 +3695,7 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (focus.size() > 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "exp", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "exp", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3724,7 +3716,7 @@ public class FHIRPathEngine {
private List<Base> funcLn(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "ln", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "ln", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3744,7 +3736,7 @@ public class FHIRPathEngine {
private List<Base> funcLog(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "log", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "log", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3772,7 +3764,7 @@ public class FHIRPathEngine {
private List<Base> funcPower(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "power", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "power", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3796,7 +3788,7 @@ public class FHIRPathEngine {
private List<Base> funcTruncate(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "truncate", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "truncate", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3814,7 +3806,7 @@ public class FHIRPathEngine {
private List<Base> funcLowBoundary(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "lowBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "lowBoundary", focus.size());
}
int precision = 0;
if (expr.getParameters().size() > 0) {
@ -3844,7 +3836,7 @@ public class FHIRPathEngine {
private List<Base> funcHighBoundary(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "highBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "highBoundary", focus.size());
}
int precision = 0;
if (expr.getParameters().size() > 0) {
@ -3874,7 +3866,7 @@ public class FHIRPathEngine {
private List<Base> funcPrecision(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "highBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "highBoundary", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3892,7 +3884,7 @@ public class FHIRPathEngine {
private List<Base> funcRound(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "round", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "round", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -5802,13 +5794,13 @@ public class FHIRPathEngine {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE, element.getElement().getId());
}
if (element.getTypes().size() > 1) {
throw makeExceptionPL(element.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_PLURAL, element.getElement().getId());
throw makeExceptionPlural(element.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES, element.getElement().getId());
}
if (!element.getTypes().get(0).hasTarget()) {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE, element.getElement().getId(), element.getElement().getType().get(0).getCode()+")");
}
if (element.getTypes().get(0).getTargetProfile().size() > 1) {
throw makeExceptionPL(element.getTypes().get(0).getTargetProfile().size(), expr, I18nConstants.FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL, element.getElement().getId());
throw makeExceptionPlural(element.getTypes().get(0).getTargetProfile().size(), expr, I18nConstants.FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET, element.getElement().getId());
}
sd = worker.fetchResource(StructureDefinition.class, element.getTypes().get(0).getTargetProfile().get(0).getValue());
if (sd == null) {
@ -5905,10 +5897,10 @@ public class FHIRPathEngine {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_NOTYPE, ed.getElement().getId());
}
if (ed.getTypes().size() > 1) {
throw makeExceptionPL(ed.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL, ed.getElement().getId());
throw makeExceptionPlural(ed.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES, ed.getElement().getId());
}
if (ed.getTypes().get(0).getProfile().size() > 1) {
throw makeExceptionPL(ed.getTypes().get(0).getProfile().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL, ed.getElement().getId());
throw makeExceptionPlural(ed.getTypes().get(0).getProfile().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES, ed.getElement().getId());
}
if (ed.getTypes().get(0).hasProfile()) {
return worker.fetchResource(StructureDefinition.class, ed.getTypes().get(0).getProfile().get(0).getValue());

View File

@ -638,7 +638,7 @@ public interface IWorkerContext {
* @return
*/
String formatMessage(String theMessage, Object... theMessageArguments);
String formatMessagePL(Integer pluralNum, String theMessage, Object... theMessageArguments);
String formatMessagePlural(Integer pluralNum, String theMessage, Object... theMessageArguments);
/**
* Validation of a code - consult the terminology infrstructure and/or service

View File

@ -43,7 +43,6 @@ import java.util.Set;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.NoTerminologyServiceException;
import org.hl7.fhir.r5.context.IWorkerContext;
import org.hl7.fhir.r5.context.IWorkerContext.PackageDetails;
import org.hl7.fhir.r5.context.IWorkerContext.PackageVersion;
import org.hl7.fhir.r5.context.IWorkerContext.ValidationResult;
import org.hl7.fhir.r5.model.CanonicalType;
@ -61,7 +60,6 @@ import org.hl7.fhir.r5.model.ValueSet.ConceptReferenceDesignationComponent;
import org.hl7.fhir.r5.model.ValueSet.ConceptSetComponent;
import org.hl7.fhir.r5.model.ValueSet.ConceptSetFilterComponent;
import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent;
import org.hl7.fhir.r5.terminologies.ValueSetChecker.ValidationProcessInfo;
import org.hl7.fhir.r5.terminologies.ValueSetExpander.TerminologyServiceErrorClass;
import org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
import org.hl7.fhir.r5.utils.ToolingExtensions;
@ -71,7 +69,6 @@ import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.VersionUtilities;
import org.hl7.fhir.utilities.i18n.I18nConstants;
import org.hl7.fhir.utilities.npm.PackageInfo;
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity;
import org.hl7.fhir.utilities.validation.ValidationOptions;
import org.hl7.fhir.utilities.validation.ValidationOptions.ValueSetMode;
@ -423,7 +420,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
}
}
}
return new ValidationResult(IssueSeverity.WARNING, context.formatMessagePL(b.count(), I18nConstants.DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF_PLURAL, code.getSystem(), code.getCode(), b.toString(), code.getDisplay()), code.getSystem(), cc);
return new ValidationResult(IssueSeverity.WARNING, context.formatMessagePlural(b.count(), I18nConstants.DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF, code.getSystem(), code.getCode(), b.toString(), code.getDisplay()), code.getSystem(), cc);
}
private ConceptReferenceComponent findValueSetRef(String system, String code) {

View File

@ -2,7 +2,6 @@ package org.hl7.fhir.r5.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.server.LoaderHandler;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
@ -17,14 +16,11 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.lang3.RegExUtils;
import org.fhir.ucum.Decimal;
import org.fhir.ucum.Pair;
import org.fhir.ucum.UcumException;
import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.FHIRFormatError;
import org.hl7.fhir.exceptions.PathEngineException;
import org.hl7.fhir.r5.conformance.ProfileUtilities;
import org.hl7.fhir.r5.conformance.ProfileUtilities.SourcedChildDefinitions;
@ -47,7 +43,6 @@ import org.hl7.fhir.r5.model.ExpressionNode.CollectionStatus;
import org.hl7.fhir.r5.model.ExpressionNode.Function;
import org.hl7.fhir.r5.model.ExpressionNode.Kind;
import org.hl7.fhir.r5.model.ExpressionNode.Operation;
import org.hl7.fhir.r5.model.InstantType;
import org.hl7.fhir.r5.model.Property.PropertyMatcher;
import org.hl7.fhir.r5.model.IntegerType;
import org.hl7.fhir.r5.model.Property;
@ -62,7 +57,6 @@ import org.hl7.fhir.r5.model.TypeConvertor;
import org.hl7.fhir.r5.model.TypeDetails;
import org.hl7.fhir.r5.model.TypeDetails.ProfiledType;
import org.hl7.fhir.r5.model.ValueSet;
import org.hl7.fhir.r5.renderers.DataRenderer;
import org.hl7.fhir.r5.utils.FHIRLexer.FHIRLexerException;
import org.hl7.fhir.r5.utils.FHIRPathEngine.IEvaluationContext.FunctionDetails;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
@ -71,9 +65,7 @@ import org.hl7.fhir.utilities.MergedList.MergeNode;
import org.hl7.fhir.utilities.SourceLocation;
import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.i18n.I18nConstants;
import org.hl7.fhir.utilities.validation.ValidationMessage;
import org.hl7.fhir.utilities.validation.ValidationOptions;
import org.hl7.fhir.utilities.validation.ValidationMessage.IssueType;
import org.hl7.fhir.utilities.xhtml.NodeType;
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
@ -579,10 +571,10 @@ public class FHIRPathEngine {
return executeType(new ExecutionTypeContext(appContext, resourceType, types, types), types, expr, true);
}
private FHIRException makeExceptionPL(Integer num, ExpressionNode holder, String constName, Object... args) {
String fmt = worker.formatMessagePL(num, constName, args);
private FHIRException makeExceptionPlural(Integer num, ExpressionNode holder, String constName, Object... args) {
String fmt = worker.formatMessagePlural(num, constName, args);
if (location != null) {
fmt = fmt + " "+worker.formatMessagePL(num, I18nConstants.FHIRPATH_LOCATION, location);
fmt = fmt + " "+worker.formatMessagePlural(num, I18nConstants.FHIRPATH_LOCATION, location);
}
if (holder != null) {
return new PathEngineException(fmt, holder.getStart(), holder.toString());
@ -2496,13 +2488,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "+");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "+");
}
if (!left.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "+", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "+");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "+");
}
if (!right.get(0).isPrimitive() && !((left.get(0).isDateTime() || "0".equals(left.get(0).primitiveValue()) || left.get(0).hasType("Quantity")) && right.get(0).hasType("Quantity"))) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "+", right.get(0).fhirType());
@ -2583,13 +2575,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "*");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "*");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "*", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "*");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "*");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "*", right.get(0).fhirType());
@ -2622,13 +2614,13 @@ public class FHIRPathEngine {
private List<Base> opConcatenate(List<Base> left, List<Base> right, ExpressionNode expr) throws PathEngineException {
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "&");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "&");
}
if (left.size() > 0 && !left.get(0).hasType(FHIR_TYPES_STRING)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "&", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "&");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "&");
}
if (right.size() > 0 && !right.get(0).hasType(FHIR_TYPES_STRING)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "&", right.get(0).fhirType());
@ -2755,13 +2747,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "-");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "-");
}
if (!left.get(0).isPrimitive() && !left.get(0).hasType("Quantity")) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "-", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "-");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "-");
}
if (!right.get(0).isPrimitive() && !((left.get(0).isDateTime() || "0".equals(left.get(0).primitiveValue()) || left.get(0).hasType("Quantity")) && right.get(0).hasType("Quantity"))) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "-", right.get(0).fhirType());
@ -2794,13 +2786,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "/");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "/");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "/", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "/");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "/");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "/", right.get(0).fhirType());
@ -2840,13 +2832,13 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "div");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "div");
}
if (!left.get(0).isPrimitive() && !(left.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "div", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "div");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "div");
}
if (!right.get(0).isPrimitive() && !(right.get(0) instanceof Quantity)) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "div", right.get(0).fhirType());
@ -2880,13 +2872,13 @@ public class FHIRPathEngine {
if (left.size() == 0 || right.size() == 0) {
return new ArrayList<Base>();
} if (left.size() > 1) {
throw makeExceptionPL(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE_PLURAL, "mod");
throw makeExceptionPlural(left.size(), expr, I18nConstants.FHIRPATH_LEFT_VALUE, "mod");
}
if (!left.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_LEFT_VALUE_WRONG_TYPE, "mod", left.get(0).fhirType());
}
if (right.size() > 1) {
throw makeExceptionPL(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE_PLURAL, "mod");
throw makeExceptionPlural(right.size(), expr, I18nConstants.FHIRPATH_RIGHT_VALUE, "mod");
}
if (!right.get(0).isPrimitive()) {
throw makeException(expr, I18nConstants.FHIRPATH_RIGHT_VALUE_WRONG_TYPE, "mod", right.get(0).fhirType());
@ -3621,7 +3613,7 @@ public class FHIRPathEngine {
private List<Base> funcSqrt(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "sqrt", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "sqrt", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3641,7 +3633,7 @@ public class FHIRPathEngine {
private List<Base> funcAbs(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "abs", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "abs", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3664,7 +3656,7 @@ public class FHIRPathEngine {
private List<Base> funcCeiling(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "ceiling", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "ceiling", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3682,7 +3674,7 @@ public class FHIRPathEngine {
private List<Base> funcFloor(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "floor", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "floor", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3705,7 +3697,7 @@ public class FHIRPathEngine {
return new ArrayList<Base>();
}
if (focus.size() > 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "exp", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "exp", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3726,7 +3718,7 @@ public class FHIRPathEngine {
private List<Base> funcLn(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "ln", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "ln", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3746,7 +3738,7 @@ public class FHIRPathEngine {
private List<Base> funcLog(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "log", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "log", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3774,7 +3766,7 @@ public class FHIRPathEngine {
private List<Base> funcPower(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "power", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "power", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3798,7 +3790,7 @@ public class FHIRPathEngine {
private List<Base> funcTruncate(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "truncate", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "truncate", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3816,7 +3808,7 @@ public class FHIRPathEngine {
private List<Base> funcLowBoundary(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "lowBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "lowBoundary", focus.size());
}
int precision = 0;
if (expr.getParameters().size() > 0) {
@ -3846,7 +3838,7 @@ public class FHIRPathEngine {
private List<Base> funcHighBoundary(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "highBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "highBoundary", focus.size());
}
int precision = 0;
if (expr.getParameters().size() > 0) {
@ -3876,7 +3868,7 @@ public class FHIRPathEngine {
private List<Base> funcPrecision(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "highBoundary", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "highBoundary", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -3894,7 +3886,7 @@ public class FHIRPathEngine {
private List<Base> funcRound(ExecutionContext context, List<Base> focus, ExpressionNode expr) {
if (focus.size() != 1) {
throw makeExceptionPL(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS_PLURAL, "round", focus.size());
throw makeExceptionPlural(focus.size(), expr, I18nConstants.FHIRPATH_FOCUS, "round", focus.size());
}
Base base = focus.get(0);
List<Base> result = new ArrayList<Base>();
@ -5804,13 +5796,13 @@ public class FHIRPathEngine {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE, element.getElement().getId());
}
if (element.getTypes().size() > 1) {
throw makeExceptionPL(element.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_PLURAL, element.getElement().getId());
throw makeExceptionPlural(element.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES, element.getElement().getId());
}
if (!element.getTypes().get(0).hasTarget()) {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE, element.getElement().getId(), element.getElement().getType().get(0).getCode()+")");
}
if (element.getTypes().get(0).getTargetProfile().size() > 1) {
throw makeExceptionPL(element.getTypes().get(0).getTargetProfile().size(), expr, I18nConstants.FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL, element.getElement().getId());
throw makeExceptionPlural(element.getTypes().get(0).getTargetProfile().size(), expr, I18nConstants.FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET, element.getElement().getId());
}
sd = worker.fetchResource(StructureDefinition.class, element.getTypes().get(0).getTargetProfile().get(0).getValue());
if (sd == null) {
@ -5907,10 +5899,10 @@ public class FHIRPathEngine {
throw makeException(expr, I18nConstants.FHIRPATH_DISCRIMINATOR_NOTYPE, ed.getElement().getId());
}
if (ed.getTypes().size() > 1) {
throw makeExceptionPL(ed.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL, ed.getElement().getId());
throw makeExceptionPlural(ed.getTypes().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES, ed.getElement().getId());
}
if (ed.getTypes().get(0).getProfile().size() > 1) {
throw makeExceptionPL(ed.getTypes().get(0).getProfile().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL, ed.getElement().getId());
throw makeExceptionPlural(ed.getTypes().get(0).getProfile().size(), expr, I18nConstants.FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES, ed.getElement().getId());
}
if (ed.getTypes().get(0).hasProfile()) {
return worker.fetchResource(StructureDefinition.class, ed.getTypes().get(0).getProfile().get(0).getValue());

View File

@ -80,6 +80,12 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>72.1</version>
</dependency>
<!-- JUnit Jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>

View File

@ -1,5 +1,7 @@
package org.hl7.fhir.utilities.i18n;
import com.ibm.icu.text.PluralRules;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.Objects;
@ -12,8 +14,11 @@ import java.util.ResourceBundle;
*/
public abstract class I18nBase {
public static final String PLURAL_SUFFIX = "PLURAL";
public static final String KEY_DELIMITER = "_";
private Locale locale;
private ResourceBundle i18nMessages;
private PluralRules pluralRules;
private boolean warnAboutMissingMessages = true;
public Locale getLocale() {
@ -38,6 +43,12 @@ public abstract class I18nBase {
}
}
private void checkPluralRulesAreLoaded() {
if (pluralRules == null) {
setPluralRules(getLocale());
}
}
/**
* Checks the loaded {@link ResourceBundle} to see if the passed in message exists with the current loaded {@link Locale}.
* If no {@link Locale} is currently loaded, it will load the {@link Locale} (default {@link Locale#US} is none is
@ -63,13 +74,14 @@ public abstract class I18nBase {
* @return The formatted, internationalized, {@link String}
*/
public String formatMessage(String theMessage, Object... theMessageArguments) {
if (theMessage.endsWith("_PLURAL")) {
throw new Error("I18n error: Plural Message called in non-plural mode");
}
return formatMessageP(theMessage, theMessageArguments);
return formatMessageForLocale(theMessage, theMessageArguments);
}
private String formatMessageP(String theMessage, Object... theMessageArguments) {
protected String getPluralKey(Integer number, String baseKey) {
return baseKey + KEY_DELIMITER + pluralRules.select(number);
}
private String formatMessageForLocale(String theMessage, Object... theMessageArguments) {
String message = theMessage;
if (messageExistsForLocale(theMessage, (theMessageArguments != null && theMessageArguments.length > 0))) {
if (Objects.nonNull(theMessageArguments) && theMessageArguments.length > 0) {
@ -80,16 +92,31 @@ public abstract class I18nBase {
}
return message;
}
public String formatMessagePL(Integer plural, String theMessage, Object... theMessageArguments) {
if (!theMessage.endsWith("_PLURAL")) {
throw new Error("I18n error: Non-plural Message called in plural mode");
}
/**
* Formats the message with locale correct pluralization using the passed in
* message arguments.
*
* In the message properties files, each plural specific message will have a
* key consisting of a root key and a suffix denoting the plurality rule (_one
* for singular, _other for multiple in English, for example). Suffixes are
* provided by th ICU4J library from unicode.org
*
* @param plural The number that indicates the plurality of the phrase
* @param theMessage the root key of the phrase.
* @param theMessageArguments Placeholder arguments, if needed.
* @return The formatted, internationalized, {@link String}
*/
public String formatMessagePlural(Integer plural, String theMessage, Object... theMessageArguments) {
Object[] args = new Object[theMessageArguments.length+1];
args[0] = plural;
for (int i = 0; i < theMessageArguments.length; i++) {
args[i+1] = theMessageArguments[i];
}
return formatMessageP(theMessage, args);
checkPluralRulesAreLoaded();
String pluralKey = getPluralKey(plural, theMessage);
return formatMessageForLocale(pluralKey, args);
}
/**
@ -100,6 +127,10 @@ public abstract class I18nBase {
i18nMessages = ResourceBundle.getBundle("Messages", locale);
}
public void setPluralRules(Locale locale) {
pluralRules = PluralRules.forLocale(locale);
}
public boolean isWarnAboutMissingMessages() {
return warnAboutMissingMessages;
}

View File

@ -28,13 +28,13 @@ public class I18nConstants {
public static final String BUNDLE_BUNDLE_ENTRY_FULLURL_REQUIRED = "BUNDLE_BUNDLE_ENTRY_FULLURL_REQUIRED";
public static final String BUNDLE_BUNDLE_ENTRY_NOPROFILE_EXPL = "Bundle_BUNDLE_Entry_NoProfile_EXPL";
public static final String BUNDLE_BUNDLE_ENTRY_NOPROFILE_TYPE = "Bundle_BUNDLE_Entry_NoProfile_TYPE";
public static final String BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_PLURAL = "BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_PLURAL";
public static final String BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES = "BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES";
public static final String BUNDLE_BUNDLE_ENTRY_NOTFOUND = "Bundle_BUNDLE_Entry_NotFound";
public static final String BUNDLE_BUNDLE_ENTRY_ORPHAN = "Bundle_BUNDLE_Entry_Orphan";
public static final String BUNDLE_BUNDLE_ENTRY_REVERSE = "BUNDLE_BUNDLE_ENTRY_REVERSE";
public static final String BUNDLE_BUNDLE_ENTRY_TYPE = "Bundle_BUNDLE_Entry_Type";
public static final String BUNDLE_BUNDLE_ENTRY_TYPE2 = "Bundle_BUNDLE_Entry_Type2";
public static final String BUNDLE_BUNDLE_ENTRY_TYPE3_PLURAL = "Bundle_BUNDLE_Entry_Type3_PLURAL";
public static final String BUNDLE_BUNDLE_ENTRY_TYPE3 = "Bundle_BUNDLE_Entry_Type3";
public static final String BUNDLE_BUNDLE_FULLURL_MISSING = "Bundle_BUNDLE_FullUrl_Missing";
public static final String BUNDLE_BUNDLE_FULLURL_NEEDVERSION = "Bundle_BUNDLE_FullUrl_NeedVersion";
public static final String BUNDLE_BUNDLE_MULTIPLEMATCHES = "Bundle_BUNDLE_MultipleMatches";
@ -57,8 +57,7 @@ public class I18nConstants {
public static final String CODE_FOUND_IN_EXPANSION_HOWEVER_ = "Code_found_in_expansion_however_";
public static final String CODING_HAS_NO_SYSTEM__CANNOT_VALIDATE = "Coding_has_no_system__cannot_validate";
public static final String CONTAINED_RESOURCE_DOES_NOT_APPEAR_TO_BE_A_FHIR_RESOURCE_UNKNOWN_NAME_ = "Contained_resource_does_not_appear_to_be_a_FHIR_resource_unknown_name_";
public static final String COULD_NOT_MATCH_ANY_DISCRIMINATORS__FOR_SLICE__IN_PROFILE___NONE_OF_THE_DISCRIMINATOR__HAVE_FIXED_VALUE_BINDING_OR_EXISTENCE_ASSERTIONS_PLURAL = "Could_not_match_any_discriminators__for_slice__in_profile___None_of_the_discriminator__have_fixed_value_binding_or_existence_assertions_PLURAL";
public static final String COULD_NOT_MATCH_DISCRIMINATOR__FOR_SLICE__IN_PROFILE___THE_DISCRIMINATOR__DOES_NOT_HAVE_FIXED_VALUE_BINDING_OR_EXISTENCE_ASSERTIONS = "Could_not_match_discriminator__for_slice__in_profile___the_discriminator__does_not_have_fixed_value_binding_or_existence_assertions";
public static final String Could_not_match_discriminator_for_slice_in_profile = "Could_not_match_discriminator_for_slice_in_profile";
public static final String DEFINED_IN_THE_PROFILE = "defined_in_the_profile";
public static final String DELIMITED_VERSIONS_HAVE_EXACT_MATCH_FOR_DELIMITER____VS_ = "Delimited_versions_have_exact_match_for_delimiter____vs_";
public static final String DERIVED_PROFILE__HAS_NO_DERIVATION_VALUE_AND_SO_CANT_BE_PROCESSED = "Derived_profile__has_no_derivation_value_and_so_cant_be_processed";
@ -69,10 +68,10 @@ public class I18nConstants {
public static final String DIFFERENTIAL_DOES_NOT_HAVE_A_SLICE__B_OF_____IN_PROFILE_ = "Differential_does_not_have_a_slice__b_of_____in_profile_";
public static final String DIFFERENTIAL_WALKS_INTO____BUT_THE_BASE_DOES_NOT_AND_THERE_IS_NOT_A_SINGLE_FIXED_TYPE_THE_TYPE_IS__THIS_IS_NOT_HANDLED_YET = "Differential_walks_into____but_the_base_does_not_and_there_is_not_a_single_fixed_type_The_type_is__This_is_not_handled_yet";
public static final String DISCRIMINATOR__IS_BASED_ON_ELEMENT_EXISTENCE_BUT_SLICE__NEITHER_SETS_MIN1_OR_MAX0 = "Discriminator__is_based_on_element_existence_but_slice__neither_sets_min1_or_max0";
public static final String DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_MULTIPLE_TYPES_PLURAL = "Discriminator__is_based_on_type_but_slice__in__has_multiple_types_PLURAL";
public static final String DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_MULTIPLE_TYPES = "Discriminator__is_based_on_type_but_slice__in__has_multiple_types";
public static final String DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_NO_TYPES = "Discriminator__is_based_on_type_but_slice__in__has_no_types";
public static final String DISCRIMINATOR_BAD_PATH = "DISCRIMINATOR_BAD_PATH";
public static final String DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF_PLURAL = "Display_Name_for__should_be_one_of__instead_of_PLURAL";
public static final String DISPLAY_NAME_FOR__SHOULD_BE_ONE_OF__INSTEAD_OF = "Display_Name_for__should_be_one_of__instead_of";
public static final String DOCUMENT = "documentmsg";
public static final String DOCUMENT_DATE_REQUIRED = "Bundle_Document_Date_Missing";
public static final String DOCUMENT_DATE_REQUIRED_HTML = "Bundle_Document_Date_Missing_html";
@ -144,20 +143,20 @@ public class I18nConstants {
public static final String FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP = "FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP";
public static final String FHIRPATH_DISCRIMINATOR_CANT_FIND = "FHIRPATH_DISCRIMINATOR_CANT_FIND";
public static final String FHIRPATH_DISCRIMINATOR_CANT_FIND_EXTENSION = "FHIRPATH_DISCRIMINATOR_CANT_FIND_EXTENSION";
public static final String FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL = "FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL";
public static final String FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL = "FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL";
public static final String FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES = "FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES";
public static final String FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES = "FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES";
public static final String FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED = "FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED";
public static final String FHIRPATH_DISCRIMINATOR_NOTYPE = "FHIRPATH_DISCRIMINATOR_NOTYPE";
public static final String FHIRPATH_DISCRIMINATOR_NO_CODE = "FHIRPATH_DISCRIMINATOR_NO_CODE";
public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_PLURAL = "FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_PLURAL";
public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES = "FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES";
public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = "FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE";
public static final String FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = "FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE";
public static final String FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = "FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND";
// public static final String FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = "FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE";
public static final String FHIRPATH_DISCRIMINATOR_TYPE_NONE = "FHIRPATH_DISCRIMINATOR_TYPE_NONE";
public static final String FHIRPATH_FOCUS_PLURAL = "FHIRPATH_FOCUS_PLURAL";
public static final String FHIRPATH_FOCUS = "FHIRPATH_FOCUS";
public static final String FHIRPATH_HO_HOST_SERVICES = "FHIRPATH_HO_HOST_SERVICES";
public static final String FHIRPATH_LEFT_VALUE_PLURAL = "FHIRPATH_LEFT_VALUE_PLURAL";
public static final String FHIRPATH_LEFT_VALUE = "FHIRPATH_LEFT_VALUE";
public static final String FHIRPATH_LEFT_VALUE_WRONG_TYPE = "FHIRPATH_LEFT_VALUE_WRONG_TYPE";
public static final String FHIRPATH_LOCATION = "FHIRPATH_LOCATION";
public static final String FHIRPATH_NOT_IMPLEMENTED = "FHIRPATH_NOT_IMPLEMENTED";
@ -170,8 +169,8 @@ public class I18nConstants {
public static final String FHIRPATH_PRIMITIVE_ONLY = "FHIRPATH_PRIMITIVE_ONLY";
public static final String FHIRPATH_REFERENCE_ONLY = "FHIRPATH_ORDERED_ONLY";
public static final String FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND = "FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND";
public static final String FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL = "FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL";
public static final String FHIRPATH_RIGHT_VALUE_PLURAL = "FHIRPATH_RIGHT_VALUE_PLURAL";
public static final String FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET = "FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET";
public static final String FHIRPATH_RIGHT_VALUE = "FHIRPATH_RIGHT_VALUE";
public static final String FHIRPATH_RIGHT_VALUE_WRONG_TYPE = "FHIRPATH_RIGHT_VALUE_WRONG_TYPE";
public static final String FHIRPATH_STRING_ORD_ONLY = "FHIRPATH_STRING_ORD_ONLY";
public static final String FHIRPATH_STRING_SING_ONLY = "FHIRPATH_STRING_SING_ONLY";
@ -247,7 +246,7 @@ public class I18nConstants {
public static final String MEASURE_M_LIB_UNKNOWN = "MEASURE_M_LIB_UNKNOWN";
public static final String MEASURE_M_NO_GROUPS = "MEASURE_M_NO_GROUPS";
public static final String META_RES_SECURITY_DUPLICATE = "Meta_RES_Security_Duplicate";
public static final String MULTIPLE_LOGICAL_MODELS_PLURAL = "MULTIPLE_LOGICAL_MODELS_PLURAL";
public static final String MULTIPLE_LOGICAL_MODELS = "MULTIPLE_LOGICAL_MODELS";
public static final String MUSTSUPPORT_VAL_MUSTSUPPORT = "MustSupport_VAL_MustSupport";
public static final String NAMED_ITEMS_ARE_OUT_OF_ORDER_IN_THE_SLICE = "Named_items_are_out_of_order_in_the_slice";
public static final String NEEDS_A_SNAPSHOT = "needs_a_snapshot";
@ -288,7 +287,7 @@ public class I18nConstants {
public static final String PROBLEM_PROCESSING_EXPRESSION__IN_PROFILE__PATH__ = "Problem_processing_expression__in_profile__path__";
public static final String PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_A_TYPE_WITH_A_PROFILE__IN_PROFILE_ = "Profile_based_discriminators_must_have_a_type_with_a_profile__in_profile_";
public static final String PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_A_TYPE__IN_PROFILE_ = "Profile_based_discriminators_must_have_a_type__in_profile_";
public static final String PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_ONLY_ONE_TYPE__IN_PROFILE_PLURAL = "Profile_based_discriminators_must_have_only_one_type__in_profile_PLURAL";
public static final String PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_ONLY_ONE_TYPE__IN_PROFILE = "Profile_based_discriminators_must_have_only_one_type__in_profile";
public static final String PROFILE_EXT_NOT_HERE = "Profile_EXT_Not_Here";
public static final String PROFILE_VAL_MISSINGELEMENT = "Profile_VAL_MissingElement";
public static final String PROFILE_VAL_NOTALLOWED = "Profile_VAL_NotAllowed";
@ -323,13 +322,12 @@ public class I18nConstants {
public static final String QUESTIONNAIRE_QR_ITEM_NOTIME = "Questionnaire_QR_Item_NoTime";
public static final String QUESTIONNAIRE_QR_ITEM_NOTYPE = "Questionnaire_QR_Item_NoType";
public static final String QUESTIONNAIRE_QR_ITEM_ONLYONEA = "Questionnaire_QR_Item_OnlyOneA";
public static final String QUESTIONNAIRE_QR_ITEM_ONLYONEI_PLURAL = "Questionnaire_QR_Item_OnlyOneI_PLURAL";
public static final String QUESTIONNAIRE_QR_ITEM_ONLYONEI = "Questionnaire_QR_Item_OnlyOneI";
public static final String QUESTIONNAIRE_QR_ITEM_ORDER = "Questionnaire_QR_Item_Order";
public static final String QUESTIONNAIRE_QR_ITEM_STRINGNOOPTIONS = "Questionnaire_QR_Item_StringNoOptions";
public static final String QUESTIONNAIRE_QR_ITEM_TEXT = "Questionnaire_QR_Item_Text";
public static final String QUESTIONNAIRE_QR_ITEM_TIMENOOPTIONS = "Questionnaire_QR_Item_TimeNoOptions";
public static final String QUESTIONNAIRE_QR_ITEM_WRONGTYPE = "Questionnaire_QR_Item_WrongType";
public static final String QUESTIONNAIRE_QR_ITEM_WRONGTYPE_PLURAL = "Questionnaire_QR_Item_WrongType_PLURAL";
public static final String QUESTIONNAIRE_QR_Q_NONE = "Questionnaire_QR_Q_None";
public static final String QUESTIONNAIRE_QR_Q_NOTFOUND = "Questionnaire_QR_Q_NotFound";
public static final String QUESTIONNAIRE_Q_ENABLEWHEN_AFTER = "Questionnaire_Q_EnableWhen_After";
@ -605,11 +603,11 @@ public class I18nConstants {
public static final String VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT = "VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT";
public static final String VALIDATION_VAL_NOTYPE = "Validation_VAL_NoType";
public static final String VALIDATION_VAL_PROFILE_MATCHMULTIPLE = "Validation_VAL_Profile_MatchMultiple";
public static final String VALIDATION_VAL_PROFILE_MAXIMUM_PLURAL = "Validation_VAL_Profile_Maximum_PLURAL";
public static final String VALIDATION_VAL_PROFILE_MINIMUM_PLURAL = "Validation_VAL_Profile_Minimum_PLURAL";
public static final String VALIDATION_VAL_PROFILE_MULTIPLEMATCHES_PLURAL = "Validation_VAL_Profile_MultipleMatches_PLURAL";
public static final String VALIDATION_VAL_PROFILE_NOCHECKMAX_PLURAL = "Validation_VAL_Profile_NoCheckMax_PLURAL";
public static final String VALIDATION_VAL_PROFILE_NOCHECKMIN_PLURAL = "Validation_VAL_Profile_NoCheckMin_PLURAL";
public static final String VALIDATION_VAL_PROFILE_MAXIMUM = "Validation_VAL_Profile_Maximum";
public static final String VALIDATION_VAL_PROFILE_MINIMUM = "Validation_VAL_Profile_Minimum";
public static final String VALIDATION_VAL_PROFILE_MULTIPLEMATCHES = "Validation_VAL_Profile_MultipleMatches";
public static final String VALIDATION_VAL_PROFILE_NOCHECKMAX = "Validation_VAL_Profile_NoCheckMax";
public static final String VALIDATION_VAL_PROFILE_NOCHECKMIN = "Validation_VAL_Profile_NoCheckMin";
public static final String VALIDATION_VAL_PROFILE_NODEFINITION = "Validation_VAL_Profile_NoDefinition";
public static final String VALIDATION_VAL_PROFILE_NOMATCH = "Validation_VAL_Profile_NoMatch";
public static final String VALIDATION_VAL_PROFILE_NOSNAPSHOT = "Validation_VAL_Profile_NoSnapshot";
@ -661,7 +659,7 @@ public class I18nConstants {
public static final String WRONG_TYPE_FOR_RESOURCE = "Wrong_type_for_resource";
public static final String XHTML_URL_EMPTY = "XHTML_URL_EMPTY";
public static final String XHTML_URL_INVALID = "XHTML_URL_INVALID";
public static final String XHTML_URL_INVALID_CHARS_PLURAL = "XHTML_URL_INVALID_CHARS_PLURAL";
public static final String XHTML_URL_INVALID_CHARS = "XHTML_URL_INVALID_CHARS";
public static final String XHTML_URL_DATA_NO_DATA = "XHTML_URL_DATA_NO_DATA";
public static final String XHTML_URL_DATA_DATA_INVALID_COMMA = "XHTML_URL_DATA_DATA_INVALID_COMMA";
public static final String XHTML_URL_DATA_DATA_INVALID = "XHTML_URL_DATA_DATA_INVALID";

View File

@ -16,7 +16,8 @@ Bundle_BUNDLE_Entry_Orphan = Entry {0} isn''t reachable by traversing from first
BUNDLE_BUNDLE_ENTRY_REVERSE = Entry {0} isn''t reachable by traversing forwards from first Bundle entry, and isn''t a resource type that is typically used that way - check this is not missed somewhere
Bundle_BUNDLE_Entry_Type = The type ''{0}'' is not valid - no resources allowed here (allowed = {1})
Bundle_BUNDLE_Entry_Type2 = The type ''{0}'' is not valid - must be {1} (allowed = {2})
Bundle_BUNDLE_Entry_Type3_PLURAL = The type ''{1}'' is not valid - must be one of {0} types: {2}
Bundle_BUNDLE_Entry_Type3_one = The type ''{1}'' is not valid - must be of type {2}
Bundle_BUNDLE_Entry_Type3_other = The type ''{1}'' is not valid - must be one of {0} types: {2}
Bundle_BUNDLE_FullUrl_Missing = Relative Reference appears inside Bundle whose entry is missing a fullUrl
Bundle_BUNDLE_FullUrl_NeedVersion = Entries matching fullURL {0} should declare meta/versionId because there are version-specific references
Bundle_BUNDLE_MultipleMatches = Multiple matches in bundle for reference {0}
@ -94,13 +95,15 @@ Questionnaire_QR_Item_NotEnabled = Item has answer (2), even though it is not en
Questionnaire_QR_Item_NotEnabled2 = Item has answer, even though it is not enabled (item id = ''{0}'')
Questionnaire_QR_Item_NotFound = LinkId ''{0}'' not found in questionnaire
Questionnaire_QR_Item_OnlyOneA = Only one response answer item with this linkId allowed
Questionnaire_QR_Item_OnlyOneI_PLURAL = Only one response item with the linkId {1} allowed - found {0} items
#The following error cannot occur for a single item. _one case left intentionally blank.
Questionnaire_QR_Item_OnlyOneI_one =
Questionnaire_QR_Item_OnlyOneI_other = Only one response item with the linkId {1} allowed - found {0} items
Questionnaire_QR_Item_Order = Structural Error: items are out of order
Questionnaire_QR_Item_StringNoOptions = Cannot validate string answer option because no option list is provided
Questionnaire_QR_Item_Text = If text exists, it must match the questionnaire definition for linkId {0}
Questionnaire_QR_Item_TimeNoOptions = Cannot validate time answer option because no option list is provided
Questionnaire_QR_Item_WrongType = Answer value must be of type {0}
Questionnaire_QR_Item_WrongType_PLURAL = Answer value must be one of the {0} types {1}
Questionnaire_QR_Item_WrongType_one = Answer value must be of the type {1}
Questionnaire_QR_Item_WrongType_other = Answer value must be one of the {0} types {1}
Questionnaire_QR_Q_None = No questionnaire is identified, so no validation can be performed against the base questionnaire
Questionnaire_QR_Q_NotFound = The questionnaire ''{0}'' could not be resolved, so no validation can be performed against the base questionnaire
Questionnaire_Q_EnableWhen_After = The target of this enableWhen rule ({0}) comes after the question itself
@ -221,12 +224,17 @@ Validation_BUNDLE_Message = The first entry in a message must be a MessageHeader
Validation_VAL_Content_Unknown = Unrecognised Content {0}
Validation_VAL_NoType = Unknown type {0}
Validation_VAL_Profile_MatchMultiple = Profile {0}, Element matches more than one slice - {1}, {2}
// for the next 4 messages, the available parameters are: 0: profile url, 1: ed.path, 2: ed.id, 3: ed.sliceName, 4: ed.label, 5: element.path, 6: ed.min and optionally 7: actual count
Validation_VAL_Profile_Maximum_PLURAL = {3}: max allowed = {7}, but found {0} (from {1})
Validation_VAL_Profile_Minimum_PLURAL = {3}: minimum required = {7}, but only found {0} (from {1})
Validation_VAL_Profile_NoCheckMax_PLURAL = {3}: Found {0} matches, but unable to check max allowed ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_NoCheckMin_PLURAL = {3}: Found {0} matches, but unable to check minimum required ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_MultipleMatches_PLURAL = Found multiple matching profiles among {0} choices: {1}
## for the next 4 messages, the available parameters are: 0: profile url, 1: ed.path, 2: ed.id, 3: ed.sliceName, 4: ed.label, 5: element.path, 6: ed.min and optionally 7: actual count
Validation_VAL_Profile_Maximum_one = {3}: max allowed = {7}, but found {0} (from {1})
Validation_VAL_Profile_Maximum_other = {3}: max allowed = {7}, but found {0} (from {1})
Validation_VAL_Profile_Minimum_one = {3}: minimum required = {7}, but only found {0} (from {1})
Validation_VAL_Profile_Minimum_other = {3}: minimum required = {7}, but only found {0} (from {1})
Validation_VAL_Profile_NoCheckMax_one = {3}: Found {0} match, but unable to check max allowed ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_NoCheckMax_other = {3}: Found {0} matches, but unable to check max allowed ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_NoCheckMin_one = {3}: Found {0} match, but unable to check minimum required ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_NoCheckMin_other = {3}: Found {0} matches, but unable to check minimum required ({2}) due to lack of slicing validation (from {1})
Validation_VAL_Profile_MultipleMatches_one = Found multiple matching profiles among {0} choice: {1}
Validation_VAL_Profile_MultipleMatches_other = Found multiple matching profiles among {0} choices: {1}
Validation_VAL_Profile_NoDefinition = No definition found for resource type ''{0}''
Validation_VAL_Profile_NoMatch = Unable to find a match for the specified profile among choices: {0}
Validation_VAL_Profile_NoSnapshot = StructureDefinition {0} has no snapshot - validation is against the snapshot, so it must be provided
@ -265,14 +273,18 @@ Unsupported_CodeableConcept_pattern__using_text__for_discriminator_for_slice_ =
Unsupported_Identifier_pattern__extensions_are_not_allowed__for_discriminator_for_slice_ = Unsupported Identifier pattern - extensions are not allowed - for discriminator ({0}) for slice {1}
Unsupported_fixed_pattern_type_for_discriminator_for_slice__ = Unsupported fixed pattern type for discriminator ({0}) for slice {1}: {2}
Problem_evaluating_slicing_expression_for_element_in_profile__path__fhirPath___ = Problem evaluating slicing expression for element in profile {0} path {1} (fhirPath = {2}): {3}
Could_not_match_discriminator__for_slice__in_profile___the_discriminator__does_not_have_fixed_value_binding_or_existence_assertions = Could not match discriminator ({0}) for slice {1} in profile {2} - the discriminator {3} does not have fixed value, binding or existence assertions
Could_not_match_any_discriminators__for_slice__in_profile___None_of_the_discriminator__have_fixed_value_binding_or_existence_assertions_PLURAL = Could not match any discriminators ({1}) for slice {2} in profile {3} - None of the {0} discriminators {4} have fixed value, binding or existence assertions
Could_not_match_discriminator_for_slice_in_profile_one = Could not match discriminator ({0}) for slice {1} in profile {2} - the discriminator {3} does not have fixed value, binding or existence assertions
Could_not_match_discriminator_for_slice_in_profile_other = Could not match any discriminators ({1}) for slice {2} in profile {3} - None of the {0} discriminators {4} have fixed value, binding or existence assertions
Discriminator__is_based_on_element_existence_but_slice__neither_sets_min1_or_max0 = Discriminator ({0}) is based on element existence, but slice {1} neither sets min>=1 or max=0
Profile_based_discriminators_must_have_a_type_with_a_profile__in_profile_ = Profile based discriminators must have a type with a profile ({0} in profile {1})
Profile_based_discriminators_must_have_only_one_type__in_profile_PLURAL = Profile based discriminators must have only one type ({1} in profile {2}) but found {0} types
#The following error cannot occur for a single item. _one case left intentionally blank.
Profile_based_discriminators_must_have_only_one_type__in_profile_one =
Profile_based_discriminators_must_have_only_one_type__in_profile_other = Profile based discriminators must have only one type ({1} in profile {2}) but found {0} types
Profile_based_discriminators_must_have_a_type__in_profile_ = Profile based discriminators must have a type ({0} in profile {1})
Discriminator__is_based_on_type_but_slice__in__has_no_types = Discriminator ({0}) is based on type, but slice {1} in {2} has no types
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_PLURAL = Discriminator ({1}) is based on type, but slice {2} in {3} has {0} types: {4}
#The following error cannot occur for a single item. _one case left intentionally blank.
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_one =
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_other = Discriminator ({1}) is based on type, but slice {2} in {3} has {0} types: {4}
Found__items_for__resolving_discriminator__from_ = Found {0} items for {1} resolving discriminator {2} from {3}
Unable_to_find__resolving_discriminator__from_ = Unable to find {0} resolving discriminator {1} from {2}
Unable_to_find_resource__at__resolving_discriminator__from_ = Unable to find resource {0} at {1} resolving discriminator {2} from {3}
@ -441,7 +453,8 @@ Version_mismatch_The_context_has_version__loaded_and_the_new_content_being_loade
Error_reading__from_package__ = Error reading {0} from package {1}#{2}: {3}
Error_parsing_ = Error parsing {0}:{1}
Unable_to_connect_to_terminology_server_Use_parameter_tx_na_tun_run_without_using_terminology_services_to_validate_LOINC_SNOMED_ICDX_etc_Error__ = Unable to connect to terminology server. Use parameter ''-tx n/a'' to run without using terminology services to validate LOINC, SNOMED, ICD-X etc. Error = {0}
Display_Name_for__should_be_one_of__instead_of_PLURAL = Display Name for {1}#{2} should be one of {0} choices from ''{3}'', not ''{4}''
Display_Name_for__should_be_one_of__instead_of_one = Display Name for {1}#{2} should be ''{3}'', not ''{4}''
Display_Name_for__should_be_one_of__instead_of_other = Display Name for {1}#{2} should be one of {0} choices from ''{3}'', not ''{4}''
Unknown_Code__in_ = Unknown Code {0} in {1}
UNKNOWN_CODE__IN_FRAGMENT = Unknown Code {0} in {1} - note that the code system is labelled as a fragment, so the code may be valid in some other fragment
Code_found_in_expansion_however_ = Code found in expansion, however: {0}
@ -508,7 +521,8 @@ MEASURE_M_CRITERIA_CQL_NO_ELM = Error in {0}: No compiled version of CQL found
MEASURE_M_CRITERIA_CQL_ELM_NOT_VALID = = Error in {0}: Compiled version of CQL is not valid
MEASURE_M_CRITERIA_CQL_NOT_FOUND = The function {1} does not exist in the library {0}
XHTML_URL_EMPTY = URL is empty
XHTML_URL_INVALID_CHARS_PLURAL = URL contains {0} Invalid Characters ({1})
XHTML_URL_INVALID_CHARS_one = URL contains Invalid Character ({1})
XHTML_URL_INVALID_CHARS_other = URL contains {0} Invalid Characters ({1})
TERMINOLOGY_TX_SYSTEM_HTTPS = The system URL ''{0}'' wrongly starts with https: not http:
CODESYSTEM_CS_NO_VS_NOTCOMPLETE = Review the All Codes Value Set - incomplete CodeSystems generally should not have an all codes value set specified
TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE = if identifier.system is ''urn:ietf:rfc:3986'', then the identifier.value must be a full URI (e.g. start with a scheme)
@ -560,9 +574,13 @@ FHIRPATH_UNKNOWN_NAME = Error evaluating FHIRPath expression: The name {0} is no
FHIRPATH_UNKNOWN_CONSTANT = Error evaluating FHIRPath expression: Invalid FHIR Constant {0}
FHIRPATH_CANNOT_USE = Error evaluating FHIRPath expression: Cannot use {0} in this context because {1}
FHIRPATH_CANT_COMPARE = Error evaluating FHIRPath expression: Unable to compare values of type {0} and {1}
FHIRPATH_LEFT_VALUE_PLURAL = Error evaluating FHIRPath expression: left operand to {1} can only have 1 value, but has {0} values
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_LEFT_VALUE_one =
FHIRPATH_LEFT_VALUE_other = Error evaluating FHIRPath expression: left operand to {1} can only have 1 value, but has {0} values
FHIRPATH_LEFT_VALUE_WRONG_TYPE = Error evaluating FHIRPath expression: left operand to {0} has the wrong type {1}
FHIRPATH_RIGHT_VALUE_PLURAL = Error evaluating FHIRPath expression: right operand to {1} can only have 1 value, but has {0} values
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_RIGHT_VALUE_one =
FHIRPATH_RIGHT_VALUE_other = Error evaluating FHIRPath expression: right operand to {1} can only have 1 value, but has {0} values
FHIRPATH_RIGHT_VALUE_WRONG_TYPE = Error evaluating FHIRPath expression: right operand to {0} has the wrong type {1}
FHIRPATH_OP_INCOMPATIBLE = Error evaluating FHIRPath expression {0}: left and right operand have incompatible or illegal types ({1}, {2})
FHIRPATH_HO_HOST_SERVICES = Internal Error evaluating FHIRPath expression: No host services are provided ({0})
@ -580,9 +598,13 @@ FHIRPATH_NO_TYPE = Error evaluating FHIRPath expression: The type ''{0}'' is unk
FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED = Error in discriminator at {0}: found a sliced element while resolving the fixed value for one of the slices
FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = Problem with use of resolve() - profile {0} on {1} could not be resolved
FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = illegal use of resolve() in discriminator - no type on element {0}
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_PLURAL = Illegal use of resolve() in discriminator - {0} possible types on {1} (can only be one)
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_one =
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other = Illegal use of resolve() in discriminator - {0} possible types on {1} (can only be one)
FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = illegal use of resolve() in discriminator - type on {0} is not Reference {1}
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL = illegal use of resolve() in discriminator - {0} possible target type profiles on {1} (can only be one)
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_one =
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other = illegal use of resolve() in discriminator - {0} possible target type profiles on {1} (can only be one)
FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND = Problem with use of resolve() - profile {0} on {1} could not be resolved
FHIRPATH_DISCRIMINATOR_TYPE_NONE = illegal use of ofType() in discriminator - no type on element {0}
FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = illegal use of ofType() in discriminator - Multiple possible types on {0}
@ -593,8 +615,12 @@ FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_CONST = illegal expression syntax in discrimin
FHIRPATH_DISCRIMINATOR_CANT_FIND = Unable to resolve discriminator in definitions: {0} in profile {1} on element {2}, looking in profile {3}
FHIRPATH_DISCRIMINATOR_CANT_FIND_EXTENSION = Unable to resolve discriminator {0} on {2} found in the definitions because the extension {1} wasn''t found in the profile {3}
FHIRPATH_DISCRIMINATOR_NOTYPE = Error in discriminator at {0}: no children, no type
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL = Error in discriminator at {1}: no children, {0} types
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL = Error in discriminator at {1}: no children, {0} type profiles
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_one =
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_other = Error in discriminator at {1}: no children, {0} types
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_one =
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_other = Error in discriminator at {1}: no children, {0} type profiles
FHIRPATH_UNABLE_BOOLEAN = Unable to evaluate as a boolean: {0}
XHTML_XHTML_DOCTYPE_ILLEGAL = Malformed XHTML: Found a DocType declaration, and these are not allowed (XXE security vulnerability protection)
PACKAGE_VERSION_MISMATCH = FHIR Version mismatch in package {0}: version is {2} but must be {1} (path: {3})
@ -604,7 +630,9 @@ SD_MUST_HAVE_DERIVATION = StructureDefinition {0} must have a derivation, since
VALIDATION_VAL_PROFILE_OTHER_VERSION = Profile is for a different version of FHIR ({0}) so has been ignored
VALIDATION_VAL_PROFILE_THIS_VERSION_OK = Profile for this version of FHIR - all OK
VALIDATION_VAL_PROFILE_THIS_VERSION_OTHER = Profile is for this version of FHIR, but is an invalid type {0}
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_PLURAL = {0} profiles found for {1} resource. More than one is not supported at this time. (Type {2}: {3})
#The following error cannot occur for a single item. _one case left intentionally blank.
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_one =
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_other = {0} profiles found for {1} resource. More than one is not supported at this time. (Type {2}: {3})
RENDER_BUNDLE_HEADER_ROOT = Bundle {0} of type {1}
RENDER_BUNDLE_HEADER_ENTRY = Entry {0}
RENDER_BUNDLE_HEADER_ENTRY_URL = Entry {0} - Full URL = {1}
@ -636,7 +664,9 @@ FHIRPATH_BAD_DATE = Unable to parse Date {0}
FHIRPATH_NUMERICAL_ONLY = Error evaluating FHIRPath expression: The function {0} can only be used on integer, decimal or Quantity but found {1}
FHIRPATH_DECIMAL_ONLY = Error evaluating FHIRPath expression: The function {0} can only be used on a decimal but found {1}
FHIRPATH_CONTINUOUS_ONLY= Error evaluating FHIRPath expression: The function {0} can only be used on a decimal or date type but found {1}
FHIRPATH_FOCUS_PLURAL = Error evaluating FHIRPath expression: focus for {0} can only have one value, but has {0} values
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_FOCUS_one =
FHIRPATH_FOCUS_other = Error evaluating FHIRPath expression: focus for {0} can only have one value, but has {0} values
REFERENCE_REF_SUSPICIOUS = The syntax of the reference ''{0}'' looks incorrect, and it should be checked
TYPE_SPECIFIC_CHECKS_DT_QTY_NO_ANNOTATIONS = UCUM Codes that contain human readable annotations like {0} can be misleading. Best Practice is not to use annotations in the UCUM code, and rather to make sure that Quantity.unit is correctly human readable
XHTML_XHTML_ELEMENT_ILLEGAL_IN_PARA = Illegal element name inside in a paragraph in the XHTML (''{0}'')
@ -752,7 +782,9 @@ TYPE_SPECIFIER_ABSTRACT_TYPE = The Type specifier {1} specified an abstract typ
TYPE_SPECIFIER_NM_ILLEGAL_TYPE = No Type specifier matched, and the underlying type {0} is not valid
TYPE_SPECIFIER_NM_ABSTRACT_TYPE = No Type specifier matched, and the underlying type {0} is not abstract
ELEMENT_CANNOT_BE_NULL = The element is not allowed to be 'null'
MULTIPLE_LOGICAL_MODELS_PLURAL={0} Logical Models found in supplied profiles, so unable to parse logical model (can only be one, found {1})
#The following error cannot occur for a single item. _one case left intentionally blank.
MULTIPLE_LOGICAL_MODELS_one=
MULTIPLE_LOGICAL_MODELS_other={0} Logical Models found in supplied profiles, so unable to parse logical model (can only be one, found {1})
UNRECOGNISED_PROPERTY_TYPE = Invalid JSON type {0} for the element {1}; valid types = {2}
UNRECOGNISED_PROPERTY_TYPE_WRONG = Invalid type {2} for the element {1}; valid types = {3}, JSON type = {0}
SD_TYPE_MISSING = No type found

View File

@ -15,7 +15,9 @@ Bundle_BUNDLE_Entry_NotFound="{0}" konnte nicht in bundle ({1}) gefunden werden
Bundle_BUNDLE_Entry_Orphan=Entry {0} ist nicht durch Traversierung, vom ersten Bundle-Entry ausgehend, erreichbar
Bundle_BUNDLE_Entry_Type=Der type "{0}" ist nicht g\u00fcltig - hier sind keine Ressourcen erlaubt
Bundle_BUNDLE_Entry_Type2=Der type "{0}" ist nicht g\u00fcltig - muss {1} sein
Bundle_BUNDLE_Entry_Type3_PLURAL=Der type "{1}" ist nicht g\u00fcltig - muss einer von {2} sein
#REPARIERE MICH PLURAL
Bundle_BUNDLE_Entry_Type3_one=Der type "{1}" ist nicht g\u00fcltig - muss einer von {2} sein
Bundle_BUNDLE_Entry_Type3_other=Der type "{1}" ist nicht g\u00fcltig - muss einer von {2} sein
Bundle_BUNDLE_FullUrl_Missing=Es besteht eine relative Reference innerhalb des Bundle, dessen Eintrag eine fullUrl fehlt
Bundle_BUNDLE_FullUrl_NeedVersion=Eintr\u00e4ge, die mit fullURL {0} \u00fcbereinstimmen, sollten meta/versionId deklarieren, da versionsspezifische Referenzen vorhanden sind.
Bundle_BUNDLE_MultipleMatches=Mehrere \u00dcbereinstimmungen im Bundle f\u00fcr reference {0}
@ -88,13 +90,15 @@ Questionnaire_QR_Item_NotEnabled=Item hat Antwort (2), auch wenn es nicht aktivi
Questionnaire_QR_Item_NotEnabled2=Item besitzt eine answer, auch wenn es nicht aktiviert ist (Element-ID = "{0}")
Questionnaire_QR_Item_NotFound=LinkId "{0}" im questionnaire nicht gefunden
Questionnaire_QR_Item_OnlyOneA=Nur ein Antwortelement mit dieser LinkId zul\u00e4ssig
Questionnaire_QR_Item_OnlyOneI_PLURAL=Nur ein Antwortelement mit dieser LinkId erlaubt - {1}
#The following error cannot occur for a single item. _one case left intentionally blank.
Questionnaire_QR_Item_OnlyOneI_one=
Questionnaire_QR_Item_OnlyOneI_other=Nur ein Antwortelement mit dieser LinkId erlaubt - {1}
Questionnaire_QR_Item_Order=Struktureller Fehler: Elemente in falscher Reihenfolge
Questionnaire_QR_Item_StringNoOptions=String answer option kann nicht validiert werden, da keine Optionsliste bereitgestellt wird
Questionnaire_QR_Item_Text=Wenn Text vorhanden ist, muss er mit der Fragebogen-Definition f\u00fcr linkId {0} \u00fcbereinstimmen.
Questionnaire_QR_Item_TimeNoOptions=Kann die time answer option nicht validieren, weil keine Optionsliste zur Verf\u00fcgung steht
Questionnaire_QR_Item_WrongType=Answer value muss vom Typ {0} sein.
Questionnaire_QR_Item_WrongType_PLURAL=Answer value muss einer der Typen {1} sein
Questionnaire_QR_Item_WrongType_one=Answer value muss vom Typ {0} sein.
Questionnaire_QR_Item_WrongType_other=Answer value muss einer der Typen {1} sein
Questionnaire_QR_Q_None=Es konnte kein passendes questionnaire identifiziert werden, so dass keine Validierung gegen den Basisfragebogen durchgef\u00fchrt werden kann.
Questionnaire_QR_Q_NotFound=Der Fragebogen "{0}" konnte nicht gefunden werden, so dass keine Validierung gegen den Basisfragebogen durchgef\u00fchrt werden kann.
Questionnaire_Q_EnableWhen_After=Das Ziel dieser enableWhen-Regel ({0}) kommt nach der Frage selbst
@ -208,11 +212,21 @@ Validation_BUNDLE_Message=Der erste Eintrag in einer Nachricht muss ein MessageH
Validation_VAL_Content_Unknown=Unerkannter Inhalt {0}
Validation_VAL_NoType=Unbekannter Typ {0}
Validation_VAL_Profile_MatchMultiple=Profil {0}, Element stimmt mit mehr als einem Slice \u00fcberein - {1}, {2}
Validation_VAL_Profile_Maximum_PLURAL={3}: maximal erlaubt = {7}, aber gefunden {0}
Validation_VAL_Profile_Minimum_PLURAL={3}: mindestens erforderlich = {7}, aber nur gefunden {0}
Validation_VAL_Profile_MultipleMatches_PLURAL=Es wurden mehrere passende Profile unter den Auswahlm\u00f6glichkeiten gefunden: {1}
Validation_VAL_Profile_NoCheckMax_PLURAL={1}: Kann die maximal zul\u00e4ssige Anzahl ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen.
Validation_VAL_Profile_NoCheckMin_PLURAL={1}": Kann das erforderliche Minimum ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen
#REPARIERE MICH PLURAL
Validation_VAL_Profile_Maximum_one={3}: maximal erlaubt = {7}, aber gefunden {0}
Validation_VAL_Profile_Maximum_other={3}: maximal erlaubt = {7}, aber gefunden {0}
#REPARIERE MICH PLURAL
Validation_VAL_Profile_Minimum_one={3}: mindestens erforderlich = {7}, aber nur gefunden {0}
Validation_VAL_Profile_Minimum_other={3}: mindestens erforderlich = {7}, aber nur gefunden {0}
#REPARIERE MICH PLURAL
Validation_VAL_Profile_MultipleMatches_one=Es wurden mehrere passende Profile unter den Auswahlm\u00f6glichkeiten gefunden: {1}
Validation_VAL_Profile_MultipleMatches_other=Es wurden mehrere passende Profile unter den Auswahlm\u00f6glichkeiten gefunden: {1}
#REPARIERE MICH PLURAL
Validation_VAL_Profile_NoCheckMax_one={1}: Kann die maximal zul\u00e4ssige Anzahl ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen.
Validation_VAL_Profile_NoCheckMax_other={1}: Kann die maximal zul\u00e4ssige Anzahl ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen.
#REPARIERE MICH PLURAL
Validation_VAL_Profile_NoCheckMin_one={1}: Kann das erforderliche Minimum ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen
Validation_VAL_Profile_NoCheckMin_other={1}: Kann das erforderliche Minimum ({1}) aufgrund fehlender Slicing-Validierung nicht \u00fcberpr\u00fcfen
Validation_VAL_Profile_NoDefinition=Keine Definition f\u00fcr Ressourcentyp "{0}" gefunden
Validation_VAL_Profile_NoMatch=Es ist nicht m\u00f6glich, ein passendes Profil unter den Kandidaten zu finden: {0}
Validation_VAL_Profile_NoSnapshot=StructureDefinition hat keinen Snapshot - die Validierung erfolgt gegen den Snapshot, daher muss dieser bereitgestellt werden
@ -246,14 +260,18 @@ Unsupported_CodeableConcept_pattern__using_text__for_discriminator_for_slice_=Ni
Unsupported_Identifier_pattern__extensions_are_not_allowed__for_discriminator_for_slice_=Nicht unterst\u00fctztes Identifier Pattern - Extensions sind nicht erlaubt - f\u00fcr Diskriminator({0}) f\u00fcr Slice {1}
Unsupported_fixed_pattern_type_for_discriminator_for_slice__=Nicht unterst\u00fctzter fixed Pattern Type f\u00fcr Diskriminator({0}) f\u00fcr Slice {1}: {2}
Problem_evaluating_slicing_expression_for_element_in_profile__path__fhirPath___=Problem bei der Auswertung des Slicing-Ausdrucks f\u00fcr Element im Profil {0} Pfad {1} (fhirPfad = {2}): {3}
Could_not_match_discriminator__for_slice__in_profile___the_discriminator__does_not_have_fixed_value_binding_or_existence_assertions=Konnte nicht mit dem Diskriminator ({0}) f\u00fcr Slice {1} in Profil {2} \u00fcbereinstimmen - der Diskriminator {3} hat keinen fixed Value, kein Binding oder existence assertions
Could_not_match_any_discriminators__for_slice__in_profile___None_of_the_discriminator__have_fixed_value_binding_or_existence_assertions_PLURAL=Konnte keinen Diskriminator ({1}) f\u00fcr Slice {2} im Profil {3} zuordnen - Keiner der Diskriminatoren {4} hat einen fixed value, eine Binding oder existence assertions
Could_not_match_discriminator_for_slice_in_profile_one=Konnte nicht mit dem Diskriminator ({0}) f\u00fcr Slice {1} in Profil {2} \u00fcbereinstimmen - der Diskriminator {3} hat keinen fixed Value, kein Binding oder existence assertions
Could_not_match_discriminator_for_slice_in_profile_other=Konnte keinen Diskriminator ({1}) f\u00fcr Slice {2} im Profil {3} zuordnen - Keiner der Diskriminatoren {4} hat einen fixed value, eine Binding oder existence assertions
Discriminator__is_based_on_element_existence_but_slice__neither_sets_min1_or_max0=Der Diskriminator ({0}) basiert auf der Existenz von Elementen, aber Slice {1} setzt weder min>=1 noch max=0
Profile_based_discriminators_must_have_a_type_with_a_profile__in_profile_=Profilbasierte Diskriminatoren m\u00fcssen einen Typ mit einem Profil ({0} im Profil {1}) haben.
Profile_based_discriminators_must_have_only_one_type__in_profile_PLURAL=Profilbasierte Diskriminatoren d\u00fcrfen nur einen Typ ({1} im Profil {2}) haben.
#The following error cannot occur for a single item. _one case left intentionally blank.
#Profile_based_discriminators_must_have_only_one_type__in_profile_one=
Profile_based_discriminators_must_have_only_one_type__in_profile_other=Profilbasierte Diskriminatoren d\u00fcrfen nur einen Typ ({1} im Profil {2}) haben.
Profile_based_discriminators_must_have_a_type__in_profile_=Profilbasierte Diskriminatoren m\u00fcssen einen Typ ({0} im Profil {1}) haben.
Discriminator__is_based_on_type_but_slice__in__has_no_types=Der Diskriminator ({0}) basiert auf dem Typ, aber das Slice {1} in {2} hat keine Typen
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_PLURAL=Der Diskriminator ({1}) basiert auf dem Typ, aber das Slice {2} in {3} hat mehrere Typen: {4}
#The following error cannot occur for a single item. _one case left intentionally blank.
#Discriminator__is_based_on_type_but_slice__in__has_multiple_types_one=
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_other=Der Diskriminator ({1}) basiert auf dem Typ, aber das Slice {2} in {3} hat mehrere Typen: {4}
Found__items_for__resolving_discriminator__from_={0} Elemente f\u00fcr {1} gefunden welche mit Diskriminators {2} von {3} \u00fcbereinstimmen
Unable_to_find__resolving_discriminator__from_=Kann keinen {0} aufl\u00f6senden Diskriminator {1} von {2} finden
Unable_to_find_resource__at__resolving_discriminator__from_=Ressource {0} bei {1} nicht auffindbar, Diskriminator {2} von {3}
@ -416,7 +434,9 @@ Version_mismatch_The_context_has_version__loaded_and_the_new_content_being_loade
Error_reading__from_package__=Fehler beim Lesen {0} aus dem Paket {1}#{2}: {3}
Error_parsing_=Fehler beim Parsen {0}:{1}
Unable_to_connect_to_terminology_server_Use_parameter_tx_na_tun_run_without_using_terminology_services_to_validate_LOINC_SNOMED_ICDX_etc_Error__=Keine Verbindung zum Terminologieserver m\u00f6glich. Verwenden Sie den Parameter ''-tx n/a'' um ohne Verwendung von Terminologiediensten zu laufen welche LOINC, SNOMED, ICD-X usw. zu validieren. Fehler = {0}
Display_Name_for__should_be_one_of__instead_of_PLURAL=Der Displayname f\u00fcr {1}#{2} sollte einer von ''{3}'' anstelle von ''{4}'' sein.
#REPARIERE MICH PLURAL
Display_Name_for__should_be_one_of__instead_of_one=Der Displayname f\u00fcr {1}#{2} sollte einer von ''{3}'' anstelle von ''{4}'' sein.
Display_Name_for__should_be_one_of__instead_of_other=Der Displayname f\u00fcr {1}#{2} sollte einer von ''{3}'' anstelle von ''{4}'' sein.
Unknown_Code__in_=Unbekannter Code {0} in {1}
Code_found_in_expansion_however_=Code in der Erweiterung gefunden, jedoch: {0}
None_of_the_provided_codes_are_in_the_value_set_=Keiner der bereitgestellten Codes ist im ValueSet {0}
@ -432,3 +452,43 @@ Unable_to_resolve_system__no_value_set=System nicht aufl\u00f6sbar - kein ValueS
This_base_property_must_be_an_Array_not_a_=Diese Basis Property muss ein Array sein, nicht ein {0}
This_property_must_be_an_Array_not_a_=Diese Eigenschaft muss ein Array sein, nicht ein {0}
documentmsg = (document)
#REPARIERE MICH PLURAL
#XHTML_URL_INVALID_CHARS_one =
#XHTML_URL_INVALID_CHARS_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_one =
#BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_LEFT_VALUE_one =
#FHIRPATH_LEFT_VALUE_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_RIGHT_VALUE_one =
#FHIRPATH_RIGHT_VALUE_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_one =
#FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_one =
#FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_one =
#FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_one =
#FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#FHIRPATH_FOCUS_one =
#FHIRPATH_FOCUS_other =
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPARIERE MICH PLURAL
#MULTIPLE_LOGICAL_MODELS_one=
#MULTIPLE_LOGICAL_MODELS_other=

View File

@ -13,7 +13,9 @@ Bundle_BUNDLE_Entry_NotFound = Kan ''{0}'' niet vinden in de bundle ({1})
Bundle_BUNDLE_Entry_Orphan = Entry {0} is niet bereikbaar via een referentie vanuit de eerste Bundle entry
Bundle_BUNDLE_Entry_Type = Het type ''{0}'' is niet geldig - hier zijn resources toegestaan (toegestaan = {1})
Bundle_BUNDLE_Entry_Type2 = Het type ''{0}'' is niet geldig - moet zijn {1} (toegestaan = {2})
Bundle_BUNDLE_Entry_Type3_PLURAL = The type ''{1}'' is niet geldig - moet een zijn van {2}
#REPAREER MIJ PLURAL
Bundle_BUNDLE_Entry_Type3_one = The type ''{1}'' is niet geldig - moet een zijn van {2}
Bundle_BUNDLE_Entry_Type3_other = The type ''{1}'' is niet geldig - moet een zijn van {2}
Bundle_BUNDLE_FullUrl_Missing = Relatieve reference in Bundle waarvan de entry een fullUrl mist
Bundle_BUNDLE_FullUrl_NeedVersion = Entries die overeenkomen met fullURL {0} moeten meta/versionId bevatten omdat er versie-specifieke references zijn
Bundle_BUNDLE_MultipleMatches = Meerdere overeenkomsten in Bundle voor reference {0}
@ -89,13 +91,15 @@ Questionnaire_QR_Item_NotEnabled = Item heeft een antwoord (2), terwijl deze nie
Questionnaire_QR_Item_NotEnabled2 = Item heeft een antwoord, terwijl deze niet actief is (item id = ''{0}'')
Questionnaire_QR_Item_NotFound = LinkId ''{0}'' niet gevonden in questionnaire
Questionnaire_QR_Item_OnlyOneA = Er is slechts een antwoorditem toegestaan bij dit linkId
Questionnaire_QR_Item_OnlyOneI_PLURAL = Er is slechts een item toegestaan bij dit linkId - {1}
#The following error cannot occur for a single item. _one case left intentionally blank.
Questionnaire_QR_Item_OnlyOneI_one =
Questionnaire_QR_Item_OnlyOneI_other = Er is slechts een item toegestaan bij dit linkId - {1}
Questionnaire_QR_Item_Order = Structuurfout: items staan niet in de juiste volgorde
Questionnaire_QR_Item_StringNoOptions = Kan string-antwoord niet valideren omdat er geen optielijst is gespecificeerd
Questionnaire_QR_Item_Text = Als text bestaat, dan moet dit een questionnaire-definitie bevatten voor linkId {0}
Questionnaire_QR_Item_TimeNoOptions = Kan tijd-antwoord niet valideren omdat er geen optielijst is gespecificeerd
Questionnaire_QR_Item_WrongType = Antwoord moet type {0} hebben
Questionnaire_QR_Item_WrongType_PLURAL = Antwoord moet een van de types {1} hebben
Questionnaire_QR_Item_WrongType_one=Antwoord moet type {0} hebben
Questionnaire_QR_Item_WrongType_other=Antwoord moet een van de types {1} hebben
Questionnaire_QR_Q_None = Er is geen questionnaire gedentificeerd, dus validatie tegen de questionnaire is niet mogelijk
Questionnaire_QR_Q_NotFound = De questionnaire ''{0}'' is niet gevonden, dus validatie tegen de questionnaire is niet mogelijk
Questionnaire_Q_EnableWhen_After = Het doel van deze enableWhen regel ({0}) komt pas na deze vraag
@ -213,11 +217,21 @@ Validation_VAL_Content_Unknown = Niet-herkende content {0}
Validation_VAL_NoType = Onbekend type {0}
Validation_VAL_Profile_MatchMultiple = Profiel {0}, element komt overeen met meer dan een slice - {1}, {2}
# for the next 4 messages, the available parameters are: 0: profile url, 1: ed.path, 2: ed.id, 3: ed.sliceName, 4: ed.label, 5: element.path, 6: ed.min and optionally 7: actual count
Validation_VAL_Profile_Maximum_PLURAL = {3}: max toegestaan = {7}, maar gevonden {0} (uit {1})
Validation_VAL_Profile_Minimum_PLURAL = {3}: minimum vereist = {7}, maar gevonden {0} (uit {1})
Validation_VAL_Profile_NoCheckMax_PLURAL = {3}: Kan max toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
Validation_VAL_Profile_NoCheckMin_PLURAL = {3}: Kan min toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
Validation_VAL_Profile_MultipleMatches_PLURAL = Meerdere overeenkomende profielen gevonden in de opties: {1}
#REPAREER MIJ PLURAL
Validation_VAL_Profile_Maximum_one = {3}: max toegestaan = {7}, maar gevonden {0} (uit {1})
Validation_VAL_Profile_Maximum_other = {3}: max toegestaan = {7}, maar gevonden {0} (uit {1})
#REPAREER MIJ PLURAL
Validation_VAL_Profile_Minimum_one = {3}: minimum vereist = {7}, maar gevonden {0} (uit {1})
Validation_VAL_Profile_Minimum_other = {3}: minimum vereist = {7}, maar gevonden {0} (uit {1})
#REPAREER MIJ PLURAL
Validation_VAL_Profile_NoCheckMax_one = {3}: Kan max toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
Validation_VAL_Profile_NoCheckMax_other = {3}: Kan max toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
#REPAREER MIJ PLURAL
Validation_VAL_Profile_NoCheckMin_one = {3}: Kan min toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
Validation_VAL_Profile_NoCheckMin_other = {3}: Kan min toegestaan niet controleren ({2}) vanwege missende slicing-validatie (uit {1})
#REPAREER MIJ PLURAL
Validation_VAL_Profile_MultipleMatches_one = Meerdere overeenkomende profielen gevonden in de opties: {1}
Validation_VAL_Profile_MultipleMatches_other = Meerdere overeenkomende profielen gevonden in de opties: {1}
Validation_VAL_Profile_NoDefinition = Geen definitie gevonden voor resourcetype ''{0}''
Validation_VAL_Profile_NoMatch = Kan geen overeenkomstig profiel vinden in de opties: {0}
Validation_VAL_Profile_NoSnapshot = StructureDefinition heeft geen snapshot - validatie is tegen de snapshot, dus deze is verplicht
@ -230,6 +244,7 @@ Validation_VAL_Profile_Unknown = Profiel-referentie ''{0}'' is niet gecontrolee
VALIDATION_VAL_PROFILE_UNKNOWN_NOT_POLICY = Profiel-referentie ''{0}'' is niet gecontroleerd omdat deze onbekend is en de validator ingesteld is om onbekende profielen niet op te zoeken
VALIDATION_VAL_PROFILE_UNKNOWN_ERROR = Profiel-referentie ''{0}'' is niet gecontroleerd omdat deze onbekend is en ophalen ervan resulteerde in een fout {1}
Validation_VAL_Profile_WrongType = Gespecificeerde profieltype was ''{0}'', maar gevonden type ''{1}''
Validation_VAL_Profile_WrongType = Gespecificeerde profieltype is ''{0}'', maar gevonden type is ''{1}''
Validation_VAL_Unknown_Profile = Onbekend profiel {0}
XHTML_XHTML_Attribute_Illegal = Illegaal attribuut in de XHTML (''{0}'' op ''{1}'')
XHTML_XHTML_Element_Illegal = Illegaal element in de XHTML (''{0}'')
@ -255,14 +270,18 @@ Unsupported_CodeableConcept_pattern__using_text__for_discriminator_for_slice_ =
Unsupported_Identifier_pattern__extensions_are_not_allowed__for_discriminator_for_slice_ = Niet-ondersteund Identifier patroon - extensies niet toegestaan - voor discriminator ({0}) voor slice {1}
Unsupported_fixed_pattern_type_for_discriminator_for_slice__ = Niet-ondersteund vast patroontype voor discriminator ({0}) voor slice {1}: {2}
Problem_evaluating_slicing_expression_for_element_in_profile__path__fhirPath___ = Probleem bij controle van slicing-expressie voor element in profiel {0} pad {1} (fhirPath = {2}): {3}
Could_not_match_discriminator__for_slice__in_profile___the_discriminator__does_not_have_fixed_value_binding_or_existence_assertions = Kan geen overeenkomende discriminator ({0}) bepalen voor slice {1} in profiel {2} - de discriminator {3} heeft geen vaste waarde, binding of aanwezigheidverplichtingen
Could_not_match_any_discriminators__for_slice__in_profile___None_of_the_discriminator__have_fixed_value_binding_or_existence_assertions_PLURAL = Kan geen overeenkomende discriminators ({1}) bepalen voor slice {2} in profiel {3} - Geen van de discriminators {4} hebben een vaste waarde, binding of aanwezigheidverplichtingen
Could_not_match_discriminator_for_slice_in_profile_one = Kan geen overeenkomende discriminator ({0}) bepalen voor slice {1} in profiel {2} - de discriminator {3} heeft geen vaste waarde, binding of aanwezigheidverplichtingen
Could_not_match_discriminator_for_slice_in_profile_other = Kan geen overeenkomende discriminators ({1}) bepalen voor slice {2} in profiel {3} - Geen van de discriminators {4} hebben een vaste waarde, binding of aanwezigheidverplichtingen
Discriminator__is_based_on_element_existence_but_slice__neither_sets_min1_or_max0 = Discriminator ({0}) is gebaseerd op elementaanwezigheid, maar slice {1} heeft geen min>=1 of max=0
Profile_based_discriminators_must_have_a_type_with_a_profile__in_profile_ = Profiel-gebaseerde discriminators moeten een type hebben met een profiel ({0} in profiel {1})
Profile_based_discriminators_must_have_only_one_type__in_profile_PLURAL = Profiel-gebaseerde discriminators moeten slechts een type bevatten ({1} in profile {2})
#The following error cannot occur for a single item. _one case left intentionally blank.
Profile_based_discriminators_must_have_only_one_type__in_profile_one =
Profile_based_discriminators_must_have_only_one_type__in_profile_other = Profiel-gebaseerde discriminators moeten slechts een type bevatten ({1} in profile {2})
Profile_based_discriminators_must_have_a_type__in_profile_ = Profiel-gebaseerde discriminators moeten een type hebben ({0} in profile {1})
Discriminator__is_based_on_type_but_slice__in__has_no_types = Discriminator ({0}) is gebaseerd op type, maar slice {1} in {2} heeft geen typen
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_PLURAL = Discriminator ({1}) is gebaseerd op type, maar slice {2} in {3} heeft meerdere typen: {4}
#The following error cannot occur for a single item. _one case left intentionally blank.
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_one =
Discriminator__is_based_on_type_but_slice__in__has_multiple_types_other = Discriminator ({1}) is gebaseerd op type, maar slice {2} in {3} heeft meerdere typen: {4}
Found__items_for__resolving_discriminator__from_ = {0} items gevonden voor {1} bij controle van discriminator {2} van {3}
Unable_to_find__resolving_discriminator__from_ = Kan {0} niet vinden bij controle van discriminator {1} van {2}
Unable_to_find_resource__at__resolving_discriminator__from_ = Kan resource {0} niet vinden in {1} bij controle van discriminator {2} van {3}
@ -373,6 +392,7 @@ This_property_must_be_an_object_not_ = Deze property moet een object zijn, geen
This_property_must_be_an_simple_value_not_ = Deze property moet een eenvoudige waarde zijn, geen {0} ({1} bij {2})
This_property_must_be__not_ = Deze property {2} moet {0} zijn, geen {1} (bij {3})
This_property_must_be_an_Array_not_ = De property {1} moet een JSON Array zijn, geen {0} (bij {2})
This_property_must_be_an_Array_not_ = Deze property moet een Array zijn, geen {0}
Unrecognised_property_ = Niet-herkende property ''@{0}''
Object_must_have_some_content = Object moet inhoud hebben
Error_parsing_JSON_ = Fout bij verwerken JSON: {0}
@ -425,7 +445,9 @@ Version_mismatch_The_context_has_version__loaded_and_the_new_content_being_loade
Error_reading__from_package__ = Fout bij lezen {0} uit package {1}#{2}: {3}
Error_parsing_ = Fout bij verwerken {0}:{1}
Unable_to_connect_to_terminology_server_Use_parameter_tx_na_tun_run_without_using_terminology_services_to_validate_LOINC_SNOMED_ICDX_etc_Error__ = Kan niet verbinden met terminologieserver. Gebruik parameter ''-tx n/a'' om te starten zonder terminologieservices voor validatie van LOINC, SNOMED, ICD-X etc. Fout = {0}
Display_Name_for__should_be_one_of__instead_of_PLURAL = Weergavenaam voor {1}#{2} zou een van ''{3}'' moeten zijn in plaats van ''{4}''
#REPAREER MIJ PLURAL
Display_Name_for__should_be_one_of__instead_of_one = Weergavenaam voor {1}#{2} zou een van ''{3}'' moeten zijn in plaats van ''{4}''
Display_Name_for__should_be_one_of__instead_of_other = Weergavenaam voor {1}#{2} zou een van ''{3}'' moeten zijn in plaats van ''{4}''
Unknown_Code__in_ = Onbekende code {0} in {1}
UNKNOWN_CODE__IN_FRAGMENT = Onbekende code {0} in {1} - merk op dat het codesysteem is gemarkeerd als fragment, waardoor mogelijk geldig is in een ander fragment
Code_found_in_expansion_however_ = Code gevonden in expansion, echter: {0}
@ -440,7 +462,6 @@ Unable_to_resolve_system__value_set_has_no_includes_or_expansion = Kan system ni
Unable_to_resolve_system__value_set_has_excludes = Kan system niet vinden - waardelijst heeft excludes
Unable_to_resolve_system__no_value_set = Kan system niet vinden - geen waardelijst
This_base_property_must_be_an_Array_not_ = Deze basis-property moet een Array zijn, geen {0}
This_property_must_be_an_Array_not_ = Deze property moet een Array zijn, geen {0}
documentmsg = (document)
xml_attr_value_invalid = Het XML attribuut {0} bevat een onjuist teken
xml_encoding_invalid = De XML encoding is onjuist (moet UTF-8 zijn)
@ -490,7 +511,9 @@ MEASURE_M_CRITERIA_CQL_NO_ELM = Fout in {0}: Geen gecompileerde versie van CQL g
MEASURE_M_CRITERIA_CQL_ELM_NOT_VALID = = Fout in {0}: Gecompileerde versie van CQL is niet geldig
MEASURE_M_CRITERIA_CQL_NOT_FOUND = De functie {1} bestaat niet in de bibliotheek {0}
XHTML_URL_EMPTY = URL is leeg
XHTML_URL_INVALID_CHARS_PLURAL = URL bevat ongeldige tekens ({1})
#REPAREER MIJ PLURAL
XHTML_URL_INVALID_CHARS_one = URL bevat ongeldige tekens ({1})
XHTML_URL_INVALID_CHARS_other = URL bevat ongeldige tekens ({1})
TERMINOLOGY_TX_SYSTEM_HTTPS = De system URL ''{0}'' begint onterecht met https: in plaats van http:
CODESYSTEM_CS_NO_VS_NOTCOMPLETE = Review de ''alle codes'' ValueSet - incomplete CodeSystems moeten generiek geen waardelijst voor ''alle codes'' specificeren
TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE = als identifier.system ''urn:ietf:rfc:3986'' is, dan moet de identifier.value een volledige URI zijn (dus beginnen met een scheme)
@ -503,7 +526,6 @@ TYPE_SPECIFIC_CHECKS_DT_ATT_TOO_LONG = Attachment grootte is {0} bytes, wat grot
TYPE_SPECIFIC_CHECKS_DT_ATT_NO_CONTENT = Attachments bevatten data en/of url, of ZOUDEN contentType en/of language MOETEN bevatten
TYPE_SPECIFIC_CHECKS_DT_BASE64_TOO_LONG = Base64 grootte is {0} bytes, wat groter is dan de ingestelde grenswaarde van {1} bytes
TYPE_SPECIFIC_CHECKS_DT_DECIMAL_CHARS = {0} decimalen gevonden wat groter is dan de ingestelde grenswaarde van {1} cijfers
Validation_VAL_Profile_WrongType = Gespecificeerde profieltype is ''{0}'', maar gevonden type is ''{1}''
Validation_VAL_Profile_WrongType2 = Type komt niet overeen bij verwerken van profiel {0} bij pad {1}: Het elementtype is {4}, maar het profiel {3} is voor een ander type {2}
VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT = Ongeldige inperking in profiel {0} bij pad {1} - kan type {2} niet inperken ten opzichte van basistypen {3}
EXTENSION_EXT_CONTEXT_WRONG_XVER = De extensie {0} uit FHIR-versie {3} is niet toegestaan om te gebruiken op deze plaats (toegestaan = {1}; dit element is [{2}; dit is een waarschuwing aangezien context kan worden gewijzigd in FHIR-versies)
@ -539,9 +561,13 @@ FHIRPATH_UNKNOWN_NAME = Fout bij evalueren FHIRPath expressie: De naam {0} is ni
FHIRPATH_UNKNOWN_CONSTANT = Fout bij evalueren FHIRPath expressie: Ongeldige FHIR constante {0}
FHIRPATH_CANNOT_USE = Fout bij evalueren FHIRPath expressie: Kan {0} niet gebruiken in deze context omdat {1}
FHIRPATH_CANT_COMPARE = Fout bij evalueren FHIRPath expressie: Kan geen waarden vergelijken van type {0} en {1}
FHIRPATH_LEFT_VALUE_PLURAL = Fout bij evalueren FHIRPath expressie: linker operandus van {1} heeft meer dan een waarde
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_LEFT_VALUE_one =
FHIRPATH_LEFT_VALUE_other = Fout bij evalueren FHIRPath expressie: linker operandus van {1} heeft meer dan een waarde
FHIRPATH_LEFT_VALUE_WRONG_TYPE = Fout bij evalueren FHIRPath expressie: linker operandus van {0} heeft het verkeerde type {1}
FHIRPATH_RIGHT_VALUE_PLURAL = Fout bij evalueren FHIRPath expressie: rechter operandus van {1} heeft meer dan een waarde
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_RIGHT_VALUE_one =
FHIRPATH_RIGHT_VALUE_other = Fout bij evalueren FHIRPath expressie: rechter operandus van {1} heeft meer dan een waarde
FHIRPATH_RIGHT_VALUE_WRONG_TYPE = Fout bij evalueren FHIRPath expressie: rechter operandus van {0} heeft het verkeerde type {1}
FHIRPATH_OP_INCOMPATIBLE = Fout bij evalueren FHIRPath expressie {0}: linker en rechter operandus hebben incompatibele of ongeldige typen ({1}, {2})
FHIRPATH_HO_HOST_SERVICES = Interne fout bij evalueren FHIRPath expressie: er zijn geen host services gespecificeerd ({0})
@ -558,9 +584,13 @@ FHIRPATH_NO_TYPE = Fout bij evalueren FHIRPath expressie: Het type ''{0}'' is on
FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED = Fout in discriminator bij {0}: sliced element gevonden bij opzoeken van de vaste waarde voor een van de slices
FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = Probleem in gebruik van resolve() - profiel {0} op {1} is niet gevonden
FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = onjuist gebruik van resolve() in discriminator - geen type op element {0}
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES = onjuist gebruik van resolve() in discriminator - Meerdere mogelijke typen op {0}
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_one =
FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other = onjuist gebruik van resolve() in discriminator - Meerdere mogelijke typen op {0}
FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = onjuist gebruik van resolve() in discriminator - Type op {0} is niet Reference {1}
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_PLURAL = onjuist gebruik van resolve() in discriminator - Meerdere mogelijke doelprofielen op {1}
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_one =
FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other = onjuist gebruik van resolve() in discriminator - Meerdere mogelijke doelprofielen op {1}
FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND = Probleem met gebruik van resolve() - profiel {0} op {1} is niet gevonden
FHIRPATH_DISCRIMINATOR_TYPE_NONE = onjuist gebruik van ofType() in discriminator - geen type op element {0}
FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = onjuist gebruik van ofType() in discriminator - Meerdere mogelijke typen op {0}
@ -570,8 +600,12 @@ FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP = onjuiste expressiesyntax in discrimina
FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_CONST = onjuiste expressiesyntax in discriminator (const)
FHIRPATH_DISCRIMINATOR_CANT_FIND = Kan discriminator niet vinden in definities: {0}
FHIRPATH_DISCRIMINATOR_NOTYPE = Fout in discriminator bij {0}: geen onderliggende elementen, geen type
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_PLURAL = Fout in discriminator bij {1}: geen onderliggende elementen, meerdere typen
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_PLURAL = Fout in discriminator bij {1}: geen onderliggende elementen, meerdere typeprofielen
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_one =
FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_other = Fout in discriminator bij {1}: geen onderliggende elementen, meerdere typen
#The following error cannot occur for a single item. _one case left intentionally blank.
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_one =
FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_other = Fout in discriminator bij {1}: geen onderliggende elementen, meerdere typeprofielen
FHIRPATH_UNABLE_BOOLEAN = Kan niet verwerken als een boolean: {0}
XHTML_XHTML_DOCTYPE_ILLEGAL = Misvormde XHTML: DocType declaratie gevonden en deze zijn niet toegestaan (bescherming tegen XXE veiligheidsrisico)
PACKAGE_VERSION_MISMATCH = FHIR-versie incorrect in package {0}: versie is {2} moet moet zijn {1} (pad: {3})
@ -581,7 +615,9 @@ SD_MUST_HAVE_DERIVATION = StructureDefinition {0} moet een derivation bevatten,
VALIDATION_VAL_PROFILE_OTHER_VERSION = Profiel is voor een andere versie van FHIR ({0}) dus wordt genegeerd
VALIDATION_VAL_PROFILE_THIS_VERSION_OK = Profiel voor deze versie van FHIR - alles in orde
VALIDATION_VAL_PROFILE_THIS_VERSION_OTHER = Profiel is voor deze versie van FHIR, maar heeft een onjuist type {0}
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_PLURAL = Meerdere profielen gevonden voor contained resource. Dit wordt momenteel niet ondersteund. (Type {2}: {3})
#The following error cannot occur for a single item. _one case left intentionally blank.
#BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_one =
BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_other = Meerdere profielen gevonden voor contained resource. Dit wordt momenteel niet ondersteund. (Type {2}: {3})
RENDER_BUNDLE_HEADER_ROOT = Bundle {0} van type {1}
RENDER_BUNDLE_HEADER_ENTRY = Entry {0}
RENDER_BUNDLE_HEADER_ENTRY_URL = Entry {0} - Full URL = {1}
@ -608,7 +644,9 @@ TERMINOLOGY_TX_SYSTEM_WRONG_BUILD = De codesysteemverwijzing {0} is incorrect -
FHIRPATH_BAD_DATE = Kan Date {0} niet verwerken
FHIRPATH_NUMERICAL_ONLY = Fout bij evalueren FHIRPath expressie: De functie {0} kan alleen worden gebruikt met integer, decimal of Quantity maar gevonden {1}
FHIRPATH_DECIMAL_ONLY = Fout bij evalueren FHIRPath expressie: De functie {0} kan alleen worden gebruikt met decimal maar gevonden {1}
FHIRPATH_FOCUS_PLURAL = Fout bij evalueren FHIRPath expressie: focus voor {1} heeft meer dan een waarde
#The following error cannot occur for a single item. _one case left intentionally blank.
#FHIRPATH_FOCUS_one =
FHIRPATH_FOCUS_other = Fout bij evalueren FHIRPath expressie: focus voor {1} heeft meer dan een waarde
REFERENCE_REF_SUSPICIOUS = De syntax van de reference ''{0}'' oogt incorrect en moeten worden gecontroleerd
TYPE_SPECIFIC_CHECKS_DT_QTY_NO_ANNOTATIONS = UCUM-codes met menselijk leesbare annotaties zoals {0} kunnen misleidend zijn. Aanbevolen is om geen annotaties in de UCUM-code te gebruiken en in plaats daarvan te zorgen dat Quantity.unit goed leesbaar is
XHTML_XHTML_ELEMENT_ILLEGAL_IN_PARA = Ongeldige elementnaam binnen een paragraph in de XHTML (''{0}'')
@ -654,3 +692,7 @@ BUNDLE_SEARCH_ENTRY_WRONG_RESOURCE_TYPE_OUTCOME = Dit is geen OperationOutcome (
BUNDLE_SEARCH_ENTRY_WRONG_RESOURCE_TYPE_NO_MODE = Dit is geen overeenkomstig resourcetype voor de opgegeven zoekactie (is een search.mode nodig?) ({0} verwacht {1})
BUNDLE_SEARCH_NO_MODE = SearchSet bundles zouden search.mode op de entries moeten hebben
INV_FAILED = Regel {0} mislukt
#The following error cannot occur for a single item. _one case left intentionally blank.
#REPAREER MIJ PLURAL
#MULTIPLE_LOGICAL_MODELS_one=
#MULTIPLE_LOGICAL_MODELS_other=

View File

@ -1,6 +1,8 @@
package org.hl7.fhir.utilities.i18n;
import com.ibm.icu.text.PluralRules;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@ -12,6 +14,11 @@ import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.util.*;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
class I18nBaseTest {
public static final String BAD_STRING_ARG = "THIS_DOES_NOT_EXIST";
@ -40,6 +47,37 @@ class I18nBaseTest {
Assertions.assertEquals(form.format(testArgs), result);
}
@Test
@DisplayName("Test pluralization works without initializing Locale.")
void testFormatMessagePluralWithoutInitLocale() {
I18nTestClass testClass = new I18nTestClass();
//Answer value must be of the type {1}
String resultOne = testClass.formatMessagePlural(1, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE);
assertThat(resultOne, containsString("be of the type"));
//Answer value must be one of the {0} types {1}
String resultMany = testClass.formatMessagePlural(3, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE);
assertThat(resultMany, containsString("one of the 3 types "));
}
@Test
@DisplayName("Test pluralization works with initializing Locale.")
void testFormatMessagePluralWithInitLocale() {
I18nTestClass testClass = new I18nTestClass();
testClass.setLocale(Locale.GERMAN);
//Answer value muss vom Typ {0} sein.
String resultOne = testClass.formatMessagePlural(1, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE);
assertThat(resultOne, containsString("muss vom Typ"));
//Answer value muss einer der Typen {1} sein
String resultMany = testClass.formatMessagePlural(3, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE);
assertThat(resultMany, containsString("einer der Typen "));
}
@Test
@DisplayName("Assert no string modification is done when no match is found.")
void testFormatMessageForNonExistentMessage() {
@ -68,7 +106,7 @@ class I18nBaseTest {
String line;
while ((line = reader.readLine()) != null) {
// System.out.println("Searching for umlauts -> " + line);
Assertions.assertFalse(stringContainsItemFromList(line, UMLAUTS));
assertFalse(stringContainsItemFromList(line, UMLAUTS));
}
} catch (IOException e) {
e.printStackTrace();
@ -80,4 +118,6 @@ class I18nBaseTest {
public static boolean stringContainsItemFromList(String inputStr, String[] items) {
return Arrays.stream(items).anyMatch(inputStr::contains);
}
}

View File

@ -0,0 +1,52 @@
package org.hl7.fhir.utilities.i18n;
import com.ibm.icu.text.PluralRules;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class ICU4JTests {
static final String[] EN_KEYWORDS = {
PluralRules.KEYWORD_ONE,
PluralRules.KEYWORD_OTHER
};
@Test
void getEnLocalePlurals() {
final Set<String> keywords = getPluralKeywords(Locale.ENGLISH);
assertEquals(keywords, new HashSet<String>(Arrays.asList(EN_KEYWORDS)));
}
static final String[] DE_KEYWORDS = {
PluralRules.KEYWORD_ONE,
PluralRules.KEYWORD_OTHER
};
@Test
void getDeLocalePlurals() {
final Set<String> keywords = getPluralKeywords(Locale.GERMAN);
assertEquals(keywords, new HashSet<String>(Arrays.asList(DE_KEYWORDS)));
}
static final String[] NL_KEYWORDS = {
PluralRules.KEYWORD_ONE,
PluralRules.KEYWORD_OTHER
};
@Test
void getNlLocalePlurals() {
final Set<String> keywords = getPluralKeywords(Locale.forLanguageTag("nl"));
assertEquals(keywords, new HashSet<String>(Arrays.asList(NL_KEYWORDS)));
}
private static Set<String> getPluralKeywords(Locale locale) {
final PluralRules pluralRules = PluralRules.forLocale(locale);
return pluralRules.getKeywords();
}
}

View File

@ -320,9 +320,9 @@ public class BaseValidator implements IValidationContextResourceLoader {
return thePass;
}
protected boolean hintPL(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
protected boolean hintPlural(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
if (!thePass && doingHints()) {
String message = context.formatMessagePL(num, theMessage, theMessageArguments);
String message = context.formatMessagePlural(num, theMessage, theMessageArguments);
addValidationMessage(errors, type, line, col, path, message, IssueSeverity.INFORMATION, theMessage);
}
return thePass;
@ -387,9 +387,9 @@ public class BaseValidator implements IValidationContextResourceLoader {
return thePass;
}
protected boolean rulePL(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
protected boolean rulePlural(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
if (!thePass && doingErrors()) {
String message = context.formatMessagePL(num, theMessage, theMessageArguments);
String message = context.formatMessagePlural(num, theMessage, theMessageArguments);
addValidationMessage(errors, type, line, col, path, message, IssueSeverity.ERROR, theMessage);
}
return thePass;
@ -454,9 +454,9 @@ public class BaseValidator implements IValidationContextResourceLoader {
return thePass;
}
protected boolean rulePL(List<ValidationMessage> errors, IssueType type, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
protected boolean rulePlural(List<ValidationMessage> errors, IssueType type, String path, boolean thePass, int num, String theMessage, Object... theMessageArguments) {
if (!thePass && doingErrors()) {
String message = context.formatMessagePL(num, theMessage, theMessageArguments);
String message = context.formatMessagePlural(num, theMessage, theMessageArguments);
addValidationMessage(errors, type, -1, -1, path, message, IssueSeverity.ERROR, theMessage);
}
return thePass;
@ -530,9 +530,9 @@ public class BaseValidator implements IValidationContextResourceLoader {
}
protected boolean warningPL(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String msg, Object... theMessageArguments) {
protected boolean warningPlural(List<ValidationMessage> errors, IssueType type, int line, int col, String path, boolean thePass, int num, String msg, Object... theMessageArguments) {
if (!thePass && doingWarnings()) {
String nmsg = context.formatMessagePL(num, msg, theMessageArguments);
String nmsg = context.formatMessagePlural(num, msg, theMessageArguments);
IssueSeverity severity = IssueSeverity.WARNING;
addValidationMessage(errors, type, line, col, path, nmsg, severity, msg);
}

View File

@ -669,7 +669,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
}
}
if (logicals.size() > 0) {
if (rulePL(errors, IssueType.BUSINESSRULE, "Configuration", logicals.size() == 1, logicals.size(), I18nConstants.MULTIPLE_LOGICAL_MODELS_PLURAL, ResourceUtilities.listUrls(logicals))) {
if (rulePlural(errors, IssueType.BUSINESSRULE, "Configuration", logicals.size() == 1, logicals.size(), I18nConstants.MULTIPLE_LOGICAL_MODELS, ResourceUtilities.listUrls(logicals))) {
parser.setLogical(logicals.get(0));
}
}
@ -2871,7 +2871,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
if (invalidChars.isEmpty()) {
return null;
} else {
return context.formatMessagePL(c, I18nConstants.XHTML_URL_INVALID_CHARS_PLURAL, invalidChars.toString());
return context.formatMessagePlural(c, I18nConstants.XHTML_URL_INVALID_CHARS, invalidChars.toString());
}
}
}
@ -4291,7 +4291,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
throw new DefinitionException(context.formatMessage(I18nConstants.DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_NO_TYPES, discriminator, ed.getId(), profile.getVersionedUrl()));
}
} else if (criteriaElement.getType().size() > 1) {
throw new DefinitionException(context.formatMessagePL(criteriaElement.getType().size(), I18nConstants.DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_MULTIPLE_TYPES_PLURAL, discriminator, ed.getId(), profile.getVersionedUrl(), criteriaElement.typeSummary()));
throw new DefinitionException(context.formatMessagePlural(criteriaElement.getType().size(), I18nConstants.DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_MULTIPLE_TYPES, discriminator, ed.getId(), profile.getVersionedUrl(), criteriaElement.typeSummary()));
} else
throw new DefinitionException(context.formatMessage(I18nConstants.DISCRIMINATOR__IS_BASED_ON_TYPE_BUT_SLICE__IN__HAS_NO_TYPES, discriminator, ed.getId(), profile.getVersionedUrl()));
if (discriminator.isEmpty()) {
@ -4304,7 +4304,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
throw new DefinitionException(context.formatMessage(I18nConstants.PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_A_TYPE__IN_PROFILE_, criteriaElement.getId(), profile.getVersionedUrl()));
}
if (criteriaElement.getType().size() != 1) {
throw new DefinitionException(context.formatMessagePL(criteriaElement.getType().size(), I18nConstants.PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_ONLY_ONE_TYPE__IN_PROFILE_PLURAL, criteriaElement.getId(), profile.getVersionedUrl()));
throw new DefinitionException(context.formatMessagePlural(criteriaElement.getType().size(), I18nConstants.PROFILE_BASED_DISCRIMINATORS_MUST_HAVE_ONLY_ONE_TYPE__IN_PROFILE, criteriaElement.getId(), profile.getVersionedUrl()));
}
List<CanonicalType> list = discriminator.endsWith(".resolve()") || discriminator.equals("resolve()") ? criteriaElement.getType().get(0).getTargetProfile() : criteriaElement.getType().get(0).getProfile();
if (list.size() == 0) {
@ -4342,10 +4342,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
anyFound = true;
}
if (!anyFound) {
if (slicer.getSlicing().getDiscriminator().size() > 1)
throw new DefinitionException(context.formatMessagePL(slicer.getSlicing().getDiscriminator().size(), I18nConstants.COULD_NOT_MATCH_ANY_DISCRIMINATORS__FOR_SLICE__IN_PROFILE___NONE_OF_THE_DISCRIMINATOR__HAVE_FIXED_VALUE_BINDING_OR_EXISTENCE_ASSERTIONS_PLURAL, discriminators, ed.getId(), profile.getVersionedUrl(), discriminators));
else
throw new DefinitionException(context.formatMessage(I18nConstants.COULD_NOT_MATCH_DISCRIMINATOR__FOR_SLICE__IN_PROFILE___THE_DISCRIMINATOR__DOES_NOT_HAVE_FIXED_VALUE_BINDING_OR_EXISTENCE_ASSERTIONS, discriminators, ed.getId(), profile.getVersionedUrl(), discriminators));
throw new DefinitionException(context.formatMessagePlural(slicer.getSlicing().getDiscriminator().size(), I18nConstants.Could_not_match_discriminator_for_slice_in_profile, discriminators, ed.getId(), profile.getVersionedUrl(), discriminators));
}
try {
@ -5148,8 +5145,8 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
for (CanonicalType u : typeForResource.getProfile()) {
b.append(u.asStringValue());
}
ok = rulePL(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(),
false, typeForResource.getProfile().size(), I18nConstants.BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_PLURAL, special.toHuman(), typeForResource.getCode(), b.toString()) && ok;
ok = rulePlural(errors, IssueType.INVALID, element.line(), element.col(), stack.getLiteralPath(),
false, typeForResource.getProfile().size(), I18nConstants.BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES, special.toHuman(), typeForResource.getCode(), b.toString()) && ok;
}
}
} else {
@ -5165,8 +5162,8 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
false, I18nConstants.BUNDLE_BUNDLE_ENTRY_TYPE2, resourceName, types.get(0)) && ok;
} else {
ok = rulePL(errors, IssueType.INFORMATIONAL, element.line(), element.col(), stack.getLiteralPath(),
false, types.size(), I18nConstants.BUNDLE_BUNDLE_ENTRY_TYPE3_PLURAL, resourceName, types) && ok;
ok = rulePlural(errors, IssueType.INFORMATIONAL, element.line(), element.col(), stack.getLiteralPath(),
false, types.size(), I18nConstants.BUNDLE_BUNDLE_ENTRY_TYPE3, resourceName, types) && ok;
}
}
}
@ -5575,7 +5572,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
}
}
} else {
warningPL(errors, IssueType.STRUCTURE, ei.line(), ei.col(), ei.getPath(), false, goodProfiles.size(), I18nConstants.VALIDATION_VAL_PROFILE_MULTIPLEMATCHES_PLURAL, ResourceUtilities.listStrings(goodProfiles.keySet()));
warningPlural(errors, IssueType.STRUCTURE, ei.line(), ei.col(), ei.getPath(), false, goodProfiles.size(), I18nConstants.VALIDATION_VAL_PROFILE_MULTIPLEMATCHES, ResourceUtilities.listStrings(goodProfiles.keySet()));
for (String m : goodProfiles.keySet()) {
p = this.context.fetchResource(StructureDefinition.class, m);
for (ValidationMessage message : goodProfiles.get(m)) {
@ -5714,18 +5711,18 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
}
if (ed.getMin() > 0) {
if (problematicPaths.contains(ed.getPath()))
hintPL(errors, IssueType.NOTSUPPORTED, element.line(), element.col(), stack.getLiteralPath(), count >= ed.getMin(), count, I18nConstants.VALIDATION_VAL_PROFILE_NOCHECKMIN_PLURAL, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), Integer.toString(ed.getMin()));
hintPlural(errors, IssueType.NOTSUPPORTED, element.line(), element.col(), stack.getLiteralPath(), count >= ed.getMin(), count, I18nConstants.VALIDATION_VAL_PROFILE_NOCHECKMIN, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), Integer.toString(ed.getMin()));
else {
if (count < ed.getMin()) {
ok = rulePL(errors, IssueType.STRUCTURE, element.line(), element.col(), stack.getLiteralPath(), false, count, I18nConstants.VALIDATION_VAL_PROFILE_MINIMUM_PLURAL, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), Integer.toString(ed.getMin())) && ok;
ok = rulePlural(errors, IssueType.STRUCTURE, element.line(), element.col(), stack.getLiteralPath(), false, count, I18nConstants.VALIDATION_VAL_PROFILE_MINIMUM, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), Integer.toString(ed.getMin())) && ok;
}
}
}
if (ed.hasMax() && !ed.getMax().equals("*")) {
if (problematicPaths.contains(ed.getPath()))
hintPL(errors, IssueType.NOTSUPPORTED, element.line(), element.col(), stack.getLiteralPath(), count <= Integer.parseInt(ed.getMax()), count, I18nConstants.VALIDATION_VAL_PROFILE_NOCHECKMAX_PLURAL, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), ed.getMax());
hintPlural(errors, IssueType.NOTSUPPORTED, element.line(), element.col(), stack.getLiteralPath(), count <= Integer.parseInt(ed.getMax()), count, I18nConstants.VALIDATION_VAL_PROFILE_NOCHECKMAX, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), ed.getMax());
else if (count > Integer.parseInt(ed.getMax())) {
ok = rulePL(errors, IssueType.STRUCTURE, element.line(), element.col(), stack.getLiteralPath(), false, count, I18nConstants.VALIDATION_VAL_PROFILE_MAXIMUM_PLURAL, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), ed.getMax(), Integer.toString(count)) && ok;
ok = rulePlural(errors, IssueType.STRUCTURE, element.line(), element.col(), stack.getLiteralPath(), false, count, I18nConstants.VALIDATION_VAL_PROFILE_MAXIMUM, profile.getVersionedUrl(), ed.getPath(), ed.getId(), ed.getSliceName(),ed.getLabel(), stack.getLiteralPath(), ed.getMax(), Integer.toString(count)) && ok;
}
}
}

View File

@ -402,7 +402,7 @@ public class QuestionnaireValidator extends BaseValidator {
private boolean validateQuestionnaireResponseItem(ValidatorHostContext hostcontext, QuestionnaireWithContext qsrc, QuestionnaireItemComponent qItem, List<ValidationMessage> errors, List<ElementWithIndex> elements, NodeStack stack, boolean inProgress, Element questionnaireResponseRoot, QStack qstack) {
boolean ok = true;
if (elements.size() > 1) {
ok = rulePL(errors, IssueType.INVALID, elements.get(1).getElement().line(), elements.get(1).getElement().col(), stack.getLiteralPath(), qItem.getRepeats(), elements.size(), I18nConstants.QUESTIONNAIRE_QR_ITEM_ONLYONEI_PLURAL, qItem.getLinkId()) && ok;
ok = rulePlural(errors, IssueType.INVALID, elements.get(1).getElement().line(), elements.get(1).getElement().col(), stack.getLiteralPath(), qItem.getRepeats(), elements.size(), I18nConstants.QUESTIONNAIRE_QR_ITEM_ONLYONEI, qItem.getLinkId()) && ok;
}
for (ElementWithIndex element : elements) {
NodeStack ns = stack.push(element.getElement(), element.getIndex(), null, null);
@ -518,10 +518,8 @@ public class QuestionnaireValidator extends BaseValidator {
if (values.get(0).getName().equals("value" + Utilities.capitalize(s)))
return (s);
}
if (types.length == 1)
ok.see(rule(errors, IssueType.STRUCTURE, values.get(0).line(), values.get(0).col(), ns.getLiteralPath(), false, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE, types[0]));
else
ok.see(rulePL(errors, IssueType.STRUCTURE, values.get(0).line(), values.get(0).col(), ns.getLiteralPath(), false, types.length, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE_PLURAL, l.toString()));
ok.see(rulePlural(errors, IssueType.STRUCTURE, values.get(0).line(), values.get(0).col(), ns.getLiteralPath(), false, types.length, I18nConstants.QUESTIONNAIRE_QR_ITEM_WRONGTYPE, l.toString()));
}
return null;
}

View File

@ -19,7 +19,7 @@
<properties>
<hapi_fhir_version>5.4.0</hapi_fhir_version>
<validator_test_case_version>1.1.122</validator_test_case_version>
<validator_test_case_version>1.1.123-SNAPSHOT</validator_test_case_version>
<junit_jupiter_version>5.7.1</junit_jupiter_version>
<junit_platform_launcher_version>1.8.2</junit_platform_launcher_version>
<maven_surefire_version>3.0.0-M5</maven_surefire_version>