Discussed in #59
Option 3: DisplayName Complex Type
It was mentioned on the November 8, 2022 Transport call that perhaps we could use Complex Types to avoid having to repeat data or join on a normalized structure.
See the following comments for more information:
We probably want to change the format a bit from the initial suggestion, for one not have things keyed by locale codes and making the display names into a list so their shape is more normal (regular) and easier to query.
<ComplexType Name="I18nString">
<Property Name="Locale" Nullable="false" Type="Edm.String" />
<Property Name="Value" Nullable="false" Type="Edm.String" />
</ComplexType>
<EntityType Name="Field">
...
<Property Name="FieldKey" Type="Edm.String" />
<Property Name="FieldName" Type="Edm.String" />
<Property Name="DisplayNames" Type="Collection(I18nString)" />
...
</EntityType>
This would allow for querying as well using any and all.
GET /Field?$filter=DisplayNames/any(item: item/Locale in ('en-CA', 'fr-CA'))
{
"@odata.context": "/Field?$filter=DisplayNames/any(item: item/Locale in ('en-CA', 'fr-CA'))",
"value": [
{
"FieldKey": "f1",
"FieldName": "ListPrice",
"DisplayNames": [
{
"Locale": "en-CA",
"Value": "List Price"
},
{
"Locale": "fr-CA",
"Value": "Liste des Prix"
}
]
}
]
}
This would also work with Lookups:
<ComplexType Name="I18nString">
<Property Name="Locale" Nullable="false" Type="Edm.String" />
<Property Name="Value" Nullable="false" Type="Edm.String" />
</ComplexType>
<EntityType Name="Lookup">
...
<Property Name="LookupKey" Type="Edm.String" />
<Property Name="LookupName" Type="Edm.String" />
<Property Name="LookupValue" Type="Edm.String" />
<Property Name="DisplayNames" Type="Collection(I18nString)" />
...
</EntityType>
GET /Lookup?$filter=DisplayNames/any(item: item/Locale in ('en-CA', 'fr-CA'))
{
"@odata.context": "/Lookup?$filter=DisplayNames/any(item: item/Locale in ('en-CA', 'fr-CA'))",
"value": [
{
"LookupKey": "l1",
"LookupName": "StandardStatus",
"LookupValue": "Pending",
"DisplayNames": [
{
"Locale": "en-CA",
"Value": "Pending"
},
{
"Locale": "fr-CA",
"Value": "En Attente"
}
]
}
]
}
TODOs
Lock down the Locale property so that it only accepts ISO Primary Locales, but still supports additional custom locales as per the ISO standard. Done
Consideration of languages other than those supported by UTF-8. UTF-8 can encode all languages.
- Consider adding a field for the Field and Lookup resource that indicates whether a given item has translations available.
Discussed in #59
Option 3: DisplayName Complex Type
It was mentioned on the November 8, 2022 Transport call that perhaps we could use Complex Types to avoid having to repeat data or join on a normalized structure.
See the following comments for more information:
We probably want to change the format a bit from the initial suggestion, for one not have things keyed by locale codes and making the display names into a list so their shape is more normal (regular) and easier to query.
This would allow for querying as well using any and all.
This would also work with Lookups:
TODOs
Lock down the Locale property so that it only accepts ISO Primary Locales, but still supports additional custom locales as per the ISO standard.DoneConsideration of languages other than those supported by UTF-8.UTF-8 can encode all languages.