Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CIP-0124? | Extend token metadata for translations #488

Merged
merged 46 commits into from
Sep 3, 2024
Merged
Changes from 21 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0a2c571
CIP-1695: Add text localization to NFT standard
granada-pool Mar 19, 2023
f134912
Update readme.md
granada-pool Mar 19, 2023
683d6ef
Delete CIP-1695 directory
granada-pool Mar 19, 2023
7341d44
CIP-1856 | Extend NFT metadata standard
granada-pool Mar 19, 2023
7443ce0
First draft of CIP
granada-pool Mar 19, 2023
f010616
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 22, 2023
3a55674
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 22, 2023
aba057a
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 23, 2023
4edb0b5
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 24, 2023
ada533c
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 24, 2023
2626c7d
CIP1856 | Extend metadata standard (translations)
granada-pool Mar 24, 2023
7b7bb1d
Update CIP-1856/README.md
granada-pool Mar 25, 2023
4aa8762
Update CIP-1856/README.md
granada-pool Mar 25, 2023
9977605
Update CIP-1856/README.md
granada-pool Mar 25, 2023
8fb5dc4
Update CIP-1856/README.md
granada-pool Mar 25, 2023
16880e9
Update CIP-1856/README.md
granada-pool Mar 25, 2023
3ea852d
Update CIP-1856/README.md
granada-pool Mar 25, 2023
95bf441
Update CIP-1856/README.md
granada-pool Mar 25, 2023
25e9eb7
Update README.md
granada-pool Mar 26, 2023
e88e99b
Update README.md
granada-pool Mar 26, 2023
16dfcdd
Update README.md
granada-pool Mar 26, 2023
fab7db9
Update README.md
granada-pool Apr 13, 2023
44c98d7
Changed folder name
granada-pool Apr 13, 2023
ec57b31
Update CIP-token-metadata-translations/README.md
granada-pool Apr 25, 2023
44ddd8c
Merge branch 'cardano-foundation:master' into master
granada-pool May 30, 2024
6b4a7c3
Create CIP-???? | Token Metadata Translations
granada-pool May 30, 2024
8a317e2
Delete CIP-???? | Token Metadata Translations
granada-pool May 30, 2024
5154d25
Update README.md
granada-pool Jun 3, 2024
71b8669
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
bf3eb24
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
ed25aa4
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
ed815f7
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
558305d
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
025e01d
Update CIP-token-metadata-translations/README.md
granada-pool Jun 3, 2024
d984401
making Path to Active objective + fixing Copyright markup
rphair Jun 6, 2024
1e618b3
quick grammar fixes to my last commit
rphair Jun 6, 2024
39e596d
Update CIP-token-metadata-translations/README.md
granada-pool Aug 20, 2024
2a69480
Update CIP-token-metadata-translations/README.md
granada-pool Aug 20, 2024
65d5ecf
Update CIP-token-metadata-translations/README.md
granada-pool Aug 20, 2024
6f0c027
Improved Readme based on peer suggestions and comments of this CIP. A…
VitoMelchionna Aug 20, 2024
986289d
Changed directory name to CIP-0124
VitoMelchionna Aug 20, 2024
a011dfa
Update CIP-0124/README.md
granada-pool Aug 20, 2024
3e589d3
Moved References section as suggested.
VitoMelchionna Aug 20, 2024
8c67bd9
Merge branch 'master' of https://github.com/granada-pool/CIPs
VitoMelchionna Aug 20, 2024
0832f0c
Added spacing to CDDL version links
VitoMelchionna Aug 20, 2024
7623380
fix header level for CDDL section
rphair Sep 3, 2024
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
149 changes: 149 additions & 0 deletions CIP-1856/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
---
CIP: ?
Title: Extend token metadata for translations
Category: Metadata
Status: Proposed
Authors:
- Vito Melchionna <info@granadapool.com>
- Aaron Schmid <aaron@fortech.group>
- Carolina Isler @LaPetiteADA <lapetiteada@granadapool.com>
Implementors: N/A
Discussions:
- https://github.com/cardano-foundation/CIPs/pull/488
Created: 2023-03-19
License: CC-BY-4.0
---

<!-- Existing categories:

- Meta | For meta-CIPs which typically serve another category or group of categories.
- Reward-Sharing Schemes | For CIPs discussing the reward & incentive mechanisms of the protocol.
- Wallets | For standardization across wallets (hardware, full-node or light).
- Tokens | About tokens (fungible or non-fungible) and minting policies in general.
- Metadata | For proposals around metadata (on-chain or off-chain).
- Tools | A broad category for ecosystem tools not falling into any other category.
- Plutus | Changes or additions to Plutus
- Ledger | For proposals regarding the Cardano ledger
- Catalyst | For proposals affecting Project Catalyst / the Jörmungandr project

-->

## Abstract
This proposal defines an additional property to the metadata standard for tokens (NFTs and FTs) to support text localization.

## Motivation: why is this CIP necessary?
Current token metadata only supports a single hardcoded language (mostly English), which limits the accessibility to a certain culture. To get closer to mass adoption, we need to bring down language barriers by extending the current standard to support translations. This is especially relevant for games, metaverse solutions, and RealFi use cases of NFTs.

## Specification
This proposal follows the same specifications as [CIP-0025](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0025).

The name of a culture consists of its [[ISO-639]](https://www.iso.org/standard/4767.html) language code with small letters and its [[ISO-3166]](https://www.iso.org/standard/63545.html) country/region code with capital letter separated by a dash "-". For instance, this proposal was written in "en-US": English with the US culture.

This convention is compatible with most operative systems (Linux and Windows) and widely used translation software.

### Proposed structure

The new JSON metadata standard will look like this:
```
{
granada-pool marked this conversation as resolved.
Show resolved Hide resolved
"721": {
"<policy_id>": {
"<asset_name>": {
"name": <string>,
"image": <uri | array>,
"mediaType": image/<mime_sub_type>,
"description": <string | array>,
"files": [{
"name": <string>,
"mediaType": <mime_type>,
"src": "<uri | array>"
}],

<other properties>

"strings": {
"de-CH": {
"name": <string in Swiss German>,
"image": <localized uri for Swiss German | array>,
"description": <string in Swiss German | array>
<other localized properties>
},
"it-IT": {
"name": <string in Italian>,
"image": <localized uri for Italian German | array>,
"description": <string in Italian | array>
<other localized properties>
},

<other languages and cultures>
}
},
},
"version": <version_id>,

<information about collection>

"strings": {
"de-CH": {
<localized information about collection in de-CH>
},
"it-IT": {
<localized information about collection in it-IT>
},

<other languages and cultures>
}
}
}

```

> **Note**
> This metadata standard extension is backward compatible and it doesn't affect applications using the current standard. Dapps implementing the proposed extended standard can also default on the legacy values if the localized strings are not available on an asset.

### Code example to access localized properties (TypeScript)

To access the localized strings from the fetched metadata for a native asset, we can simply access the JSON properties from the front end by using the user's selected culture:

```

const response = await fetch(`${<BASE_URL>}/policyId/${<policyId>}`);

const metadata = response.json();
const policy = metadata["721"][<policy_id>];

function getPolicyString(policy, key, culture="en") {
return policy["strings"][culture][key]
? policy["strings"][culture][key]
: policy[key]; // default value (not localized)
}

function getAssetString(policy, asset, key, culture="en") {
return policy[asset]["strings"][culture][key]
? policy[asset]["strings"][culture][key]
: policy[asset][key]; // default value (not localized)
}

console.log(`Default policy property: ${getPolicyString(policy, <policy_property>)}`);
console.log(`Localized policy property: ${getPolicyString(policy, <policy_property>, "it-IT")}`);
console.log(`Default asset name: ${getAssetString(policy, <asset_name>, "name")}`);
console.log(`Localized asset name: ${getAssetString(policy, <asset_name>, "name", "de-CH")}`);

```

## Path to Active
rphair marked this conversation as resolved.
Show resolved Hide resolved

### Acceptance Criteria
- NFT metadata standard extension covers all existing localization needs and use cases on web2.
- Implementation is compliant with JSON conventions.
- Implementation is compliant with the [[ISO-639]](https://www.iso.org/standard/4767.html) standard for language code, and the [[ISO-3166]](https://www.iso.org/standard/63545.html) standard for country/region code.
- Access to localized strings is easy and logical from a coding perspective.

### Implementation Plan
Add this new standard to all relevant documentation and references for web3 developers.

## Copyright
This CIP is licensed under [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/legalcode).

[CC-BY-4.0]: https://creativecommons.org/licenses/by/4.0/legalcode
[Apache-2.0]: http://www.apache.org/licenses/LICENSE-2.0