Merge remote-tracking branch 'origin/master' into do-20240506-cr-shims

This commit is contained in:
dotasek 2024-05-08 09:29:03 -04:00
commit e05660a76c
9 changed files with 36 additions and 18 deletions

View File

@ -204,6 +204,15 @@ compile group: 'ca.uhn.hapi.fhir', name: 'hapi-fhir-structures-r4', version: '(l
compile group: 'ca.uhn.hapi.fhir', name: 'hapi-fhir-structures-r5', version: '(latest version)' compile group: 'ca.uhn.hapi.fhir', name: 'hapi-fhir-structures-r5', version: '(latest version)'
``` ```
## Internationalization
This project implements internationalization for its user tools and utilities for several locales using a combination of [GNU PO](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html) and [Java Properties](https://docs.oracle.com/javase/tutorial/i18n/resbundle/propfile.html) files.
Translation from the core library's original English locale to other supported locales is an ongoing process. The current level of coverage is calculated by the number of translated phrases, and can be viewed in the following figure:
<p align="center">
<img alt="Table of Internationalization Coverage" src="/i18n-coverage-table.png" width="300">
</p>
## CI/CD ## CI/CD
All integration and delivery done on Azure pipelines. Azure project can be viewed [here][Link-AzureProject]. All integration and delivery done on Azure pipelines. Azure project can be viewed [here][Link-AzureProject].

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,5 +1,5 @@
Locale,Coverage #,Coverage % Locale,Coverage #,Coverage %
de,869,43% de,869,43%
es,740,37% es,740,36%
ja,935,46% ja,935,46%
nl,873,43% nl,873,43%

1 Locale Coverage # Coverage %
2 de 869 43%
3 es 740 37% 36%
4 ja 935 46%
5 nl 873 43%

View File

@ -595,7 +595,8 @@ public class ProfilePathProcessor {
} else if (diffMatches.get(0).hasType() } else if (diffMatches.get(0).hasType()
&& diffMatches.get(0).getType().size() == 1 && diffMatches.get(0).getType().size() == 1
&& diffMatches.get(0).getType().get(0).hasProfile() && diffMatches.get(0).getType().get(0).hasProfile()
&& !"Reference".equals(diffMatches.get(0).getType().get(0).getWorkingCode())) { && !"Reference".equals(diffMatches.get(0).getType().get(0).getWorkingCode())
&& !(currentBase.getType().get(0).hasProfile() && currentBase.getType().get(0).getProfile().get(0).primitiveValue().equals(diffMatches.get(0).getType().get(0).getProfile().get(0).primitiveValue()))) {
CanonicalType firstTypeProfile = diffMatches.get(0).getType().get(0).getProfile().get(0); CanonicalType firstTypeProfile = diffMatches.get(0).getType().get(0).getProfile().get(0);
StructureDefinition firstTypeStructureDefinition = profileUtilities.getContext().fetchResource(StructureDefinition.class, firstTypeProfile.getValue()); StructureDefinition firstTypeStructureDefinition = profileUtilities.getContext().fetchResource(StructureDefinition.class, firstTypeProfile.getValue());
if (firstTypeStructureDefinition == null && profileUtilities.getXver() != null && profileUtilities.getXver().matchingUrl(firstTypeProfile.getValue())) { if (firstTypeStructureDefinition == null && profileUtilities.getXver() != null && profileUtilities.getXver().matchingUrl(firstTypeProfile.getValue())) {

View File

@ -55,7 +55,7 @@ public class Renderer {
public void genStandardsStatus(XhtmlNode td, StandardsStatus ss) { public void genStandardsStatus(XhtmlNode td, StandardsStatus ss) {
if (ss != null) { if (ss != null) {
td.tx(" "); td.tx(" ");
XhtmlNode a = td.ah(Utilities.pathURL(context.getLink(KnownLinkType.SPEC), "versions.html#std-process"), (context.formatMessage(RenderingContext.REND_STANDARDS, ss.toDisplay())+" ")); XhtmlNode a = td.ah(Utilities.pathURL(context.getLink(KnownLinkType.SPEC), "versions.html#std-process"), (context.formatMessage(RenderingContext.REND_STANDARDS, ss.toDisplay())));
a.style("padding-left: 3px; padding-right: 3px; border: 1px grey solid; font-weight: bold; color: black; background-color: "+ss.getColor()); a.style("padding-left: 3px; padding-right: 3px; border: 1px grey solid; font-weight: bold; color: black; background-color: "+ss.getColor());
a.tx(ss.getAbbrev()); a.tx(ss.getAbbrev());
} }
@ -72,19 +72,19 @@ public class Renderer {
switch (vca.getType()) { switch (vca.getType()) {
case Added: case Added:
XhtmlNode spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null); XhtmlNode spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null);
XhtmlNode spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion())+" ")); XhtmlNode spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE_ADDED, context.getChangeVersion())));
spanInner.img("icon-change-add.png", "icon"); spanInner.img("icon-change-add.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_ADDED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_ADDED));
return spanOuter; return spanOuter;
case Changed: case Changed:
spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null); spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null);
spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion()+(vca.getOriginal() != null ? " (was '"+vca.getOriginal()+"')" : "")))+" "); spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", vca.getOriginal() == null ? context.formatMessage(RenderingContext.REND_SINCE_CHANGED, context.getChangeVersion()) : context.formatMessage(RenderingContext.REND_SINCE_CHANGED_WAS, context.getChangeVersion(), vca.getOriginal()));
spanInner.img("icon-change-edit.png", "icon"); spanInner.img("icon-change-edit.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_CHANGED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_CHANGED));
return spanOuter; return spanOuter;
case Deleted: case Deleted:
spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null); spanOuter = x.span("border: solid 1px #dddddd; margin: 2px; padding: 2px", null);
spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion())+" ")); spanInner = spanOuter.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE_DELETED, context.getChangeVersion())));
spanInner.img("icon-change-remove.png", "icon"); spanInner.img("icon-change-remove.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_REMOVED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_REMOVED));
return spanOuter.strikethrough(); return spanOuter.strikethrough();
@ -104,19 +104,19 @@ public class Renderer {
switch (vca.getType()) { switch (vca.getType()) {
case Added: case Added:
XhtmlNode divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px"); XhtmlNode divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px");
XhtmlNode spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion())+" ")); XhtmlNode spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE_ADDED, context.getChangeVersion())));
spanInner.img("icon-change-add.png", "icon"); spanInner.img("icon-change-add.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_ADDED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_ADDED));
return divOuter; return divOuter;
case Changed: case Changed:
divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px"); divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px");
spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion())+(vca.getOriginal() != null ? " (was '"+(vca.getOriginal())+"')" : ""))+" "); spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", vca.getOriginal() == null ? context.formatMessage(RenderingContext.REND_SINCE_CHANGED, context.getChangeVersion()) : context.formatMessage(RenderingContext.REND_SINCE_CHANGED_WAS, context.getChangeVersion(), vca.getOriginal()));
spanInner.img("icon-change-edit.png", "icon"); spanInner.img("icon-change-edit.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_CHANGED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_CHANGED));
return divOuter; return divOuter;
case Deleted: case Deleted:
divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px"); divOuter = x.div("border: solid 1px #dddddd; margin: 2px; padding: 2px");
spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE, context.getChangeVersion())+" ")); spanInner = divOuter.para().style("margin: 0").span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_SINCE_DELETED, context.getChangeVersion())));
spanInner.img("icon-change-remove.png", "icon"); spanInner.img("icon-change-remove.png", "icon");
spanInner.tx(" "+context.formatMessage(RenderingContext.REND_REMOVED)); spanInner.tx(" "+context.formatMessage(RenderingContext.REND_REMOVED));
return divOuter.strikethrough(); return divOuter.strikethrough();
@ -140,7 +140,7 @@ public class Renderer {
tr.style("border: solid 1px #dddddd; margin: 2px; padding: 2px"); tr.style("border: solid 1px #dddddd; margin: 2px; padding: 2px");
} }
XhtmlNode td = tr.td(); XhtmlNode td = tr.td();
XhtmlNode span = td.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_ROW_SINCE, context.getChangeVersion())+" ")); XhtmlNode span = td.span("background-color: #fff2ff; border-left: solid 3px #ffa0ff; margin: 2px; padding: 2px", (context.formatMessage(RenderingContext.REND_ROW_SINCE, context.getChangeVersion())));
span.img("icon-change-add.png", "icon"); span.img("icon-change-add.png", "icon");
span.tx(" "+/*!#*/"Added:"); span.tx(" "+/*!#*/"Added:");
XhtmlNode x = new XhtmlNode(NodeType.Element, "holder"); XhtmlNode x = new XhtmlNode(NodeType.Element, "holder");

View File

@ -1369,7 +1369,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
String ref2 = null; String ref2 = null;
String fixedUrl = null; String fixedUrl = null;
if (ed != null) { if (ed != null) {
String p = ed.getWebPath(); ref = ed.getWebPath();
fixedUrl = getFixedUrl(ed); fixedUrl = getFixedUrl(ed);
if (fixedUrl != null) {// if its null, we guess that it's not a profiled extension? if (fixedUrl != null) {// if its null, we guess that it's not a profiled extension?
if (fixedUrl.equals(url)) if (fixedUrl.equals(url))
@ -3649,7 +3649,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_DEFINITION), null, strikethrough, compareMarkdown(sd.getName(), d.getDefinitionElement(), (compare==null) || slicedExtension ? null : compare.getDefinitionElement(), mode)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_DEFINITION), null, strikethrough, compareMarkdown(sd.getName(), d.getDefinitionElement(), (compare==null) || slicedExtension ? null : compare.getDefinitionElement(), mode));
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_SHORT), null, strikethrough, compareString(d.hasShort() ? d.getShort() : null, d.getShortElement(), null, "short", d, compare!= null && compare.hasShortElement() ? compare.getShort() : null, null, mode, false, false)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_SHORT), null, strikethrough, compareString(d.hasShort() ? d.getShort() : null, d.getShortElement(), null, "short", d, compare!= null && compare.hasShortElement() ? compare.getShort() : null, null, mode, false, false));
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_COMMENTS), null, strikethrough, compareMarkdown(sd.getName(), d.getCommentElement(), (compare==null) || slicedExtension ? null : compare.getCommentElement(), mode)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_COMMENTS), null, strikethrough, compareMarkdown(sd.getName(), d.getCommentElement(), (compare==null) || slicedExtension ? null : compare.getCommentElement(), mode));
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_NOTE), null, strikethrough, businessIdWarning(sd.getName(), tail(d.getPath()))); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_NOTE_C), null, strikethrough, businessIdWarning(sd.getName(), tail(d.getPath())));
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_CONTROL), "conformance-rules.html#conformance", strikethrough, describeCardinality(d, compare, mode)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_CONTROL), "conformance-rules.html#conformance", strikethrough, describeCardinality(d, compare, mode));
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_BINDING), "terminologies.html", strikethrough, describeBinding(sd, d, d.getPath(), compare, mode)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_BINDING), "terminologies.html", strikethrough, describeBinding(sd, d, d.getPath(), compare, mode));
if (d.hasContentReference()) { if (d.hasContentReference()) {
@ -3664,7 +3664,7 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
tableRow(tbl, Utilities.pluralize(/*!#*/"Type Specifier", d.getExtensionsByUrl(ToolingExtensions.EXT_TYPE_SPEC).size()), "datatypes.html", strikethrough, formatTypeSpecifiers(d)); tableRow(tbl, Utilities.pluralize(/*!#*/"Type Specifier", d.getExtensionsByUrl(ToolingExtensions.EXT_TYPE_SPEC).size()), "datatypes.html", strikethrough, formatTypeSpecifiers(d));
} }
if (d.getPath().endsWith("[x]") && !d.prohibited()) { if (d.getPath().endsWith("[x]") && !d.prohibited()) {
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_NOTE), null, strikethrough).ahWithText("See ", spec("formats.html#choice"), null, /*!#*/"Choice of Data Types", " for further information about how to use [x]"); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_NOTE_X), null, strikethrough).ahWithText("See ", spec("formats.html#choice"), null, /*!#*/"Choice of Data Types", " for further information about how to use [x]");
} }
tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_MODIFIER), "conformance-rules.html#ismodifier", strikethrough, presentModifier(d, mode, compare)); tableRow(tbl, context.formatMessage(RenderingContext.STRUC_DEF_MODIFIER), "conformance-rules.html#ismodifier", strikethrough, presentModifier(d, mode, compare));
if (d.getMustHaveValue()) { if (d.getMustHaveValue()) {

View File

@ -487,7 +487,10 @@ public class RenderingI18nContext extends I18nBase {
public static final String QUEST_TRUE = "QUEST_TRUE"; public static final String QUEST_TRUE = "QUEST_TRUE";
public static final String QUEST_ARE_TRUE = "QUEST_ARE_TRUE"; public static final String QUEST_ARE_TRUE = "QUEST_ARE_TRUE";
public static final String REND_STANDARDS = "REND_STANDARDS"; public static final String REND_STANDARDS = "REND_STANDARDS";
public static final String REND_SINCE = "REND_SINCE"; public static final String REND_SINCE_ADDED = "REND_SINCE_ADDED";
public static final String REND_SINCE_CHANGED = "REND_SINCE_CHANGED";
public static final String REND_SINCE_CHANGED_WAS = "REND_SINCE_CHANGED_WAS";
public static final String REND_SINCE_DELETED = "REND_SINCE_DELETED";
public static final String REND_ADDED = "REND_ADDED"; public static final String REND_ADDED = "REND_ADDED";
public static final String REND_CHANGED = "REND_CHANGED"; public static final String REND_CHANGED = "REND_CHANGED";
public static final String REND_REMOVED = "REND_REMOVED"; public static final String REND_REMOVED = "REND_REMOVED";
@ -752,7 +755,8 @@ public class RenderingI18nContext extends I18nBase {
public static final String STRUC_DEF_DEFINITION = "STRUC_DEF_DEFINITION"; public static final String STRUC_DEF_DEFINITION = "STRUC_DEF_DEFINITION";
public static final String STRUC_DEF_SHORT = "STRUC_DEF_SHORT"; public static final String STRUC_DEF_SHORT = "STRUC_DEF_SHORT";
public static final String STRUC_DEF_COMMENTS = "STRUC_DEF_COMMENTS"; public static final String STRUC_DEF_COMMENTS = "STRUC_DEF_COMMENTS";
public static final String STRUC_DEF_NOTE = "STRUC_DEF_NOTE"; public static final String STRUC_DEF_NOTE_X = "STRUC_DEF_NOTE_X";
public static final String STRUC_DEF_NOTE_C = "STRUC_DEF_NOTE_C";
public static final String STRUC_DEF_CONTROL = "STRUC_DEF_CONTROL"; public static final String STRUC_DEF_CONTROL = "STRUC_DEF_CONTROL";
public static final String STRUC_DEF_TYPE = "STRUC_DEF_TYPE"; public static final String STRUC_DEF_TYPE = "STRUC_DEF_TYPE";
public static final String STRUC_DEF_DEFAULT_TYPE = "STRUC_DEF_DEFAULT_TYPE"; public static final String STRUC_DEF_DEFAULT_TYPE = "STRUC_DEF_DEFAULT_TYPE";

View File

@ -494,7 +494,10 @@ QUEST_OBSERVATION = Observation Link Period
QUEST_TRUE = are true: QUEST_TRUE = are true:
QUEST_ARE_TRUE = ?? are true: QUEST_ARE_TRUE = ?? are true:
REND_STANDARDS = Standards Status = {0} REND_STANDARDS = Standards Status = {0}
REND_SINCE = This content has been added since {0} REND_SINCE_ADDED = This content has been added since {0}
REND_SINCE_CHANGED = This content has been changed since {0}
REND_SINCE_CHANGED_WAS = This content has been changed since {0} (was ''{1}'')
REND_SINCE_DELETED = This content has been removed since {0}
REND_ADDED = Added: REND_ADDED = Added:
REND_CHANGED = Changed: REND_CHANGED = Changed:
REND_REMOVED = Removed: REND_REMOVED = Removed:
@ -757,7 +760,8 @@ STRUC_DEF_CONSTRAINING = Slice Constraining
STRUC_DEF_DEFINITION = Definition STRUC_DEF_DEFINITION = Definition
STRUC_DEF_SHORT = Short STRUC_DEF_SHORT = Short
STRUC_DEF_COMMENTS = Comments STRUC_DEF_COMMENTS = Comments
STRUC_DEF_NOTE = [x] Note STRUC_DEF_NOTE_X = [x] Note
STRUC_DEF_NOTE_C = Note
STRUC_DEF_CONTROL = Control STRUC_DEF_CONTROL = Control
STRUC_DEF_TYPE = Type STRUC_DEF_TYPE = Type
STRUC_DEF_DEFAULT_TYPE = Default Type STRUC_DEF_DEFAULT_TYPE = Default Type

View File

@ -21,7 +21,7 @@
<commons_compress_version>1.26.0</commons_compress_version> <commons_compress_version>1.26.0</commons_compress_version>
<guava_version>32.0.1-jre</guava_version> <guava_version>32.0.1-jre</guava_version>
<hapi_fhir_version>6.4.1</hapi_fhir_version> <hapi_fhir_version>6.4.1</hapi_fhir_version>
<validator_test_case_version>1.5.6</validator_test_case_version> <validator_test_case_version>1.5.7-SNAPSHOT</validator_test_case_version>
<jackson_version>2.17.0</jackson_version> <jackson_version>2.17.0</jackson_version>
<junit_jupiter_version>5.9.2</junit_jupiter_version> <junit_jupiter_version>5.9.2</junit_jupiter_version>
<junit_platform_launcher_version>1.8.2</junit_platform_launcher_version> <junit_platform_launcher_version>1.8.2</junit_platform_launcher_version>