Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 57 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ <h3>The `renderMethod` Property</h3>

<p>
The `renderMethod` property is a reserved extension point in the
[[[VC-DATA-MODEL-2.1]]] specification . An [=issuer=] can utilize this property
[[[VC-DATA-MODEL-2.1]]] specification. An [=issuer=] can utilize this property
in a [=verifiable credential=] to express one or more preferred render methods.
</p>

Expand All @@ -310,6 +310,53 @@ <h3>The `renderMethod` Property</h3>
</dl>
</section>

<section>
<h4>Localization: Selecting on Language and Locale</h4>

<p>
One of the core use cases for this specification is the ability to present a
different rendering payload based on the preferred language or locale of the
user. This extends beyond the value-level localization offered by the core
[[VC-DATA-MODEL#internationalization-considerations]] specification, and beyond
translating field labels. Clients displaying or rendering VCs must be able to
select arbitrary layouts, styling or full pre-rendered payloads based on the
user's language and locale preferences.
</p>

<p>
In the example below, the `renderMethod` property contains an array of two
`static` render method objects, each providing a pre-rendered PNG image of
the credential. The client selects the one whose `inLanguage` value best
matches the user's language preference.
</p>

<pre class="example nohighlight"
title="Selecting a render method by language">
{
<span class="comment">...</span>
"renderMethod": [
{
"type": "SuiteRenderMethod",
"renderSuite": "static",
"inLanguage": "en",
"mediaType": "image/png",
"name": "Credential image",
"payload": "data:image/png;base64,iVBORw0KGgo...AAAElFTkSuQmCC"
},
{
"type": "SuiteRenderMethod",
"renderSuite": "static",
"inLanguage": "es",
"mediaType": "image/png",
"name": "Imagen de la credencial",
"payload": "data:image/png;base64,iVBORw0KGgo...AAAElFTkSuQmCC"
}
]
<span class="comment">...</span>
}
</pre>
</section>

<section>
<h4>SuiteRenderMethod</h4>

Expand Down Expand Up @@ -370,6 +417,15 @@ <h4>SuiteRenderMethod</h4>
than `name` of when the particular rendering might be useful.
</td>
</tr>
<tr>
<td>inLanguage</td>
<td>
An OPTIONAL [=string=] that designates a language range (based on
<a href="https://schema.org/inLanguage">schema.org/inLanguage</a>) this render
method is meant to support (see the <a href="https://www.w3.org/TR/international-specs/#lang-matching">Matching
language and language tags</a> section for more details).
</td>
</tr>
Comment on lines +420 to +428

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this isn't well optimized for either scalability or privacy. I think it would be better for the payload to have language information, so every client fetches the same payload and then makes the language choice privately on the client. I think this would also avoid making issuers list many different render methods, one per language.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is exactly that -- it's specified once at issuance, and the selection is made on the client. The privacy considerations of fetching external payloads is a very valid concern, but it's part of the overall render method threat model (it's not specific to language).

@TallTed TallTed Oct 7, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that payload size has to come into play somewhere, like using ConNeg to GET a representation in only one language, instead of one representation including all of the "approximately 7,170" (!!) "living languages spoken in the world today".

Yes, privacy considerations are in play, but there has to be a balance between concerns!

<tr>
<td>renderProperty</td>
<td>
Expand Down
Loading