diff --git a/buildSrc/src/main/kotlin/Releases.kt b/buildSrc/src/main/kotlin/Releases.kt index ed3960c77b..0c6f736dfa 100644 --- a/buildSrc/src/main/kotlin/Releases.kt +++ b/buildSrc/src/main/kotlin/Releases.kt @@ -23,7 +23,7 @@ object Releases { object Common { const val artifactId = "common" - const val version = "0.1.0-alpha01" + const val version = "0.1.0-alpha02" const val name = "Android FHIR Common Library" } diff --git a/common/src/main/java/com/google/android/fhir/MoreTypes.kt b/common/src/main/java/com/google/android/fhir/MoreTypes.kt index 1a2932c6d1..3adcdc2c66 100644 --- a/common/src/main/java/com/google/android/fhir/MoreTypes.kt +++ b/common/src/main/java/com/google/android/fhir/MoreTypes.kt @@ -18,8 +18,10 @@ package com.google.android.fhir import java.util.Calendar import java.util.Date +import java.util.Locale import org.hl7.fhir.r4.model.Coding import org.hl7.fhir.r4.model.Quantity +import org.hl7.fhir.r4.model.StringType import org.hl7.fhir.r4.model.Type /** @@ -89,3 +91,7 @@ private fun clearTimeFromDateValue(dateValue: Date): Date { calendarValue.set(Calendar.MILLISECOND, 0) return calendarValue.time } + +fun StringType.getLocalizedText(lang: String = Locale.getDefault().toLanguageTag()): String? { + return getTranslation(lang) ?: getTranslation(lang.split("-").firstOrNull()) ?: value +} diff --git a/common/src/test/java/com/google/android/fhir/MoreTypesTest.kt b/common/src/test/java/com/google/android/fhir/MoreTypesTest.kt index 1288402185..81a7f379bf 100644 --- a/common/src/test/java/com/google/android/fhir/MoreTypesTest.kt +++ b/common/src/test/java/com/google/android/fhir/MoreTypesTest.kt @@ -19,15 +19,19 @@ package com.google.android.fhir import android.os.Build import com.google.common.truth.Truth.assertThat import java.util.Calendar +import java.util.Locale import kotlin.test.assertFailsWith import org.hl7.fhir.r4.model.Attachment import org.hl7.fhir.r4.model.BooleanType import org.hl7.fhir.r4.model.Coding import org.hl7.fhir.r4.model.DateType import org.hl7.fhir.r4.model.DecimalType +import org.hl7.fhir.r4.model.Extension import org.hl7.fhir.r4.model.IntegerType import org.hl7.fhir.r4.model.Quantity import org.hl7.fhir.r4.model.Reference +import org.hl7.fhir.r4.model.StringType +import org.hl7.fhir.r4.utils.ToolingExtensions import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith @@ -238,4 +242,72 @@ class MoreTypesTest { value.compareTo(otherValue) } } + + @Test + fun localizedText_swahiliTranslation_shouldReturnTranslatedText() { + Locale.setDefault(Locale.forLanguageTag("sw")) + + val displayElement = + StringType("Man").apply { + addExtension( + Extension(ToolingExtensions.EXT_TRANSLATION).apply { + addExtension(Extension("lang", StringType("sw"))) + addExtension(Extension("content", StringType("Mwanaume"))) + } + ) + } + + assertThat(displayElement.getLocalizedText()).isEqualTo("Mwanaume") + } + + @Test + fun localizedText_swahiliTranslationWithLocale_shouldReturnTranslatedText() { + Locale.setDefault(Locale.forLanguageTag("sw-KE")) + + val displayElement = + StringType("Woman").apply { + addExtension( + Extension(ToolingExtensions.EXT_TRANSLATION).apply { + addExtension(Extension("lang", StringType("sw-KE"))) + addExtension(Extension("content", StringType("Mwanamke"))) + } + ) + } + + assertThat(displayElement.getLocalizedText()).isEqualTo("Mwanamke") + } + + @Test + fun localizedText_noMatchingLocaleTranslation_shouldReturnDefaultText() { + Locale.setDefault(Locale.forLanguageTag("sw-KE")) + + val displayElement = + StringType("Woman").apply { + addExtension( + Extension(ToolingExtensions.EXT_TRANSLATION).apply { + addExtension(Extension("lang", StringType("fr-FR"))) + addExtension(Extension("content", StringType("Femme"))) + } + ) + } + + assertThat(displayElement.getLocalizedText()).isEqualTo("Woman") + } + + @Test + fun localizedText_localeTagWithCountry_shouldReturnTranslatedText() { + Locale.setDefault(Locale.forLanguageTag("fr-FR")) + + val displayElement = + StringType("Woman").apply { + addExtension( + Extension(ToolingExtensions.EXT_TRANSLATION).apply { + addExtension(Extension("lang", StringType("fr"))) + addExtension(Extension("content", StringType("Femme"))) + } + ) + } + + assertThat(displayElement.getLocalizedText()).isEqualTo("Femme") + } }