@visualizevalue/mint-app-base 0.1.60 → 0.1.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.env.example +1 -1
  2. package/components/Artist/Detail.client.vue +1 -1
  3. package/components/Button/AddCollection.vue +1 -1
  4. package/components/Button/EditProfile.vue +1 -1
  5. package/components/Collection/Actions.vue +1 -1
  6. package/components/Collection/Detail.client.vue +1 -1
  7. package/components/Collection/Intro.vue +4 -4
  8. package/components/Collection/OverviewCard.vue +1 -1
  9. package/components/Collection/Withdraw.client.vue +1 -1
  10. package/components/CollectionsOverview.client.vue +4 -4
  11. package/components/Connect.client.vue +1 -1
  12. package/components/Form/SelectFile.vue +1 -1
  13. package/components/Mint/Action.client.vue +1 -1
  14. package/components/Mint/Preview.client.vue +8 -5
  15. package/components/Mint/Renderer/Base.client.vue +5 -4
  16. package/components/Mint/Renderer/P5.client.vue +2 -2
  17. package/components/Mint/SelectRenderer.client.vue +1 -1
  18. package/components/MintGasPricePopover.client.vue +13 -19
  19. package/components/Profile/Header.client.vue +1 -1
  20. package/components/Renderer/InstallButton.vue +1 -1
  21. package/components/Renderer/InstallCustom.client.vue +1 -1
  22. package/components/Renderer/Overview.client.vue +3 -3
  23. package/components/Token/Detail.client.vue +11 -5
  24. package/components/Token/MintTimeline.client.vue +4 -4
  25. package/components/Token/OverviewCard.vue +8 -4
  26. package/components/TransactionFlow.vue +3 -3
  27. package/i18n.config.ts +10 -0
  28. package/locales/en.json +107 -0
  29. package/nuxt.config.ts +1 -0
  30. package/package.json +2 -1
  31. package/pages/[id]/create.vue +8 -8
  32. package/pages/index.vue +1 -1
package/.env.example CHANGED
@@ -16,7 +16,7 @@ NUXT_PUBLIC_CREATOR_ADDRESS=0xc8f8e2F59Dd95fF67c3d39109ecA2e2A017D4c8a
16
16
  # =========================
17
17
  # SERVICES
18
18
  # =========================
19
- NUXT_PUBLIC_BLOCK_EXPLORER=https://etherscan.io
19
+ NUXT_PUBLIC_BLOCK_EXPLORER=https://sepolia.etherscan.io
20
20
  NUXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=
21
21
  NUXT_PUBLIC_RPC1=
22
22
  NUXT_PUBLIC_RPC2=
@@ -6,7 +6,7 @@
6
6
  <CollectionsOverview :id="id" :key="`${isMe}-${id}`">
7
7
  <template #before="{ collections }">
8
8
  <HeaderSection v-if="isMe && collections.length">
9
- <h1>Your Collections</h1>
9
+ <h1>{{ $t('profile.your_collections') }}</h1>
10
10
  <Actions>
11
11
  <ButtonAddCollection :id="id" />
12
12
  </Actions>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <Button :to="{ name: `id-create`, params: { id } }">
3
3
  <Icon type="add" />
4
- <span>Collection</span>
4
+ <span>{{ $t('profile.add_collection_button') }}</span>
5
5
  </Button>
6
6
  </template>
7
7
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <Button :to="`https://app.ens.domains/${address}`">
3
3
  <Icon type="edit" />
4
- <span>Edit Profile</span>
4
+ <span>{{ $t('profile.edit_button') }}</span>
5
5
  </Button>
6
6
  </template>
7
7
 
@@ -6,7 +6,7 @@
6
6
  id="mint-new"
7
7
  >
8
8
  <Icon type="add" />
9
- <span>Mint</span>
9
+ <span>{{ $t('mint_button') }}</span>
10
10
  </Button>
11
11
  </menu>
12
12
  </template>
@@ -6,7 +6,7 @@
6
6
 
7
7
  <Loading v-if="loading" />
8
8
  <div v-if="! tokens.length && !loading" >
9
- <p>No tokens yet</p>
9
+ <p>{{ $('collection.no_tokens')}}</p>
10
10
  </div>
11
11
  </slot>
12
12
  </template>
@@ -6,7 +6,7 @@
6
6
  </figure>
7
7
  <div class="text">
8
8
  <div>
9
- <h1>{{ collection.name || 'Unnamed Collection' }} <small v-if="collection.symbol">({{ collection.symbol }})</small></h1>
9
+ <h1>{{ collection.name || $t('collection.unnamed') }} <small v-if="collection.symbol">({{ collection.symbol }})</small></h1>
10
10
  <p v-if="collection.description">
11
11
  <ExpandableText :text="collection.description" />
12
12
  </p>
@@ -15,13 +15,13 @@
15
15
  <div v-if="id">
16
16
  <p>
17
17
  <span>
18
- By <NuxtLink :to="{ name: 'id', params: { id } }">{{ store.displayName(id) }}</NuxtLink>
18
+ {{ $t('collection.by') }} <NuxtLink :to="{ name: 'id', params: { id } }">{{ store.displayName(id) }}</NuxtLink>
19
19
  </span>
20
20
  <span>
21
- {{ collection.latestTokenId }} {{ pluralize('token', Number(collection.latestTokenId)) }}
21
+ {{ collection.latestTokenId }} {{ $t('tokens', Number(collection.latestTokenId)) }}
22
22
  </span>
23
23
  <span>
24
- Created at Block {{ collection.initBlock }}
24
+ {{ $t('collection.created_at_block')}} {{ collection.initBlock }}
25
25
  </span>
26
26
  </p>
27
27
  </div>
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
 
15
15
  <div class="details">
16
- <p>{{ collection.latestTokenId }} {{ pluralize('token', Number(collection.latestTokenId)) }} · Created at Block {{ collection.initBlock }}</p>
16
+ <p>{{ collection.latestTokenId }} {{ $t('tokens', Number(collection.latestTokenId)) }} · {{ $t('collection.created_at_block')}} {{ collection.initBlock }}</p>
17
17
  </div>
18
18
  </div>
19
19
 
@@ -21,7 +21,7 @@
21
21
  <template #start="{ start }">
22
22
  <Button @click="start">
23
23
  <Icon type="withdraw" />
24
- <span>Withdraw ({{ balance.value }} {{ balance.format }})</span>
24
+ <span>{{ $t('collection.withdraw')}} ({{ balance.value }} {{ balance.format }})</span>
25
25
  </Button>
26
26
  </template>
27
27
  </TransactionFlow>
@@ -10,19 +10,19 @@
10
10
  </section>
11
11
  <section v-else-if="! loading" class="collections-overview-empty">
12
12
  <template v-if="isMe">
13
- <p>It looks like you haven't deployed any collections.</p>
13
+ <p>{{ $t('collections_overview.no_collections') }}</p>
14
14
  <div>
15
15
  <Button :to="{ name: `id-create`, params: { id } }">
16
16
  <Icon type="plus" />
17
- <span>Create Your First</span>
17
+ <span>{{ $t('collections_overview.create_first') }}</span>
18
18
  </Button>
19
19
  </div>
20
20
  </template>
21
21
  <template v-else>
22
- <p>It looks like this account hasn't deployed any collections.</p>
22
+ <p>{{ $t('collections_overview.no_collections_other') }}</p>
23
23
  </template>
24
24
  </section>
25
- <Loading v-if="loading" txt="Querying the blockchain..." />
25
+ <Loading v-if="loading" :txt="$t('collections_overview.querying_blockchain')" />
26
26
  </template>
27
27
 
28
28
  <script setup>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <Button v-if="showConnect" @click="chooseModalOpen = true" :class="class">
3
- <slot>Connect</slot>
3
+ <slot>{{ $t('connect_button') }}</slot>
4
4
  </Button>
5
5
  <slot v-else name="connected">
6
6
  <Account :address="address" />
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <Button v-if="! file" type="button" @click="() => open()">
3
3
  <Icon type="image" />
4
- <span>Choose file</span>
4
+ <span>{{ $t('choose_file') }}</span>
5
5
  </Button>
6
6
  <FormGroup v-else>
7
7
  <Button type="button" disabled>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <Actions class="borderless">
3
- <Button @click="mint">Mint</Button>
3
+ <Button @click="mint">{{ $t('mint_button') }}</Button>
4
4
  </Actions>
5
5
 
6
6
  <TransactionFlow
@@ -3,14 +3,14 @@
3
3
  <Embed v-if="animationUrl" :src="animationUrl" />
4
4
 
5
5
  <div class="static">
6
- <Image v-if="image" :src="image" alt="Preview" />
6
+ <Image v-if="image" :src="image" :alt="$t('mint.preview.title')" />
7
7
  <ImagePreview v-else />
8
8
  </div>
9
9
 
10
10
  <div class="text">
11
- <h1 :class="{ '': !name }">{{ name || 'Token' }}</h1>
11
+ <h1 :class="{ '': !name }">{{ name || $t('tokens') }}</h1>
12
12
  <p :class="{ '': !description }">
13
- {{ description || 'No description' }}
13
+ {{ description || $t('mint.preview.no_description') }}
14
14
  </p>
15
15
  </div>
16
16
  </article>
@@ -22,8 +22,6 @@ const { image, animationUrl, name, description } = useCreateMintData()
22
22
 
23
23
  <style scoped>
24
24
  .mint-preview {
25
- position: sticky;
26
- top: var(--spacer);
27
25
  height: min-content;
28
26
  place-content: start center;
29
27
  border-radius: var(--card-border-radius);
@@ -31,6 +29,11 @@ const { image, animationUrl, name, description } = useCreateMintData()
31
29
  grid-template-columns: 20% 1fr;
32
30
  gap: var(--spacer);
33
31
 
32
+ @media (--md) {
33
+ position: sticky;
34
+ top: var(--spacer);
35
+ }
36
+
34
37
  > * {
35
38
  grid-column: span 2;
36
39
  }
@@ -13,16 +13,17 @@
13
13
  <FormSelectFile ref="select" @change="setArtifact" />
14
14
  <p v-if="! isSmall" class="muted">
15
15
  <small>
16
- Note: This should be a small file, prefferably an SVG like <a href="https://presence.art/tokens/perspective.svg" target="_blank">this one (810 bytes)</a>.
17
- If it is larger than what we can store within one transaction, the token creation will be split up into multiple transactions.
16
+ {{ $t('mint.base.note.start') }}
17
+ <a href="https://presence.art/tokens/perspective.svg" target="_blank">{{ $t('mint.base.note.link_text') }}</a>.
18
+ {{ $t('mint.base.note.end') }}
18
19
  </small>
19
20
  </p>
20
21
  </div>
21
22
  <FormInput v-else-if="mode === 'ipfs'" v-model="ipfsCid" placeholder="CID (qmx...)" prefix="ipfs://" required />
22
23
  <FormInput v-else-if="mode === 'ar'" v-model="arTxId" placeholder="TX ID (frV...)" prefix="ar://" required />
23
24
 
24
- <FormInput v-model="name" placeholder="Title" required />
25
- <FormInput v-model="description" placeholder="Description" />
25
+ <FormInput v-model="name" :placeholder="$t('mint.base.title_placeholder')" required />
26
+ <FormInput v-model="description" :placeholder="$t('mint.base.description_placeholder')" />
26
27
  </div>
27
28
  </div>
28
29
  </template>
@@ -6,11 +6,11 @@
6
6
  <Button
7
7
  @click="select('base')"
8
8
  :class="{ active: active === 'base' }"
9
- >Static</Button>
9
+ >{{ $t('mint.p5.static') }}</Button>
10
10
  <Button
11
11
  @click="select('script')"
12
12
  :class="{ active: active === 'script' }"
13
- >P5 Script</Button>
13
+ >{{ $t('mint.p5.p5_script') }}</Button>
14
14
  </template>
15
15
 
16
16
  <template #content="{ active }">
@@ -10,7 +10,7 @@
10
10
  :title="renderer.name"
11
11
  >{{ renderer.name }}</option>
12
12
  <option disabled>----</option>
13
- <option value="new">Install New</option>
13
+ <option value="new">{{ $t('mint.select.install_new') }}</option>
14
14
  </select>
15
15
  </aside>
16
16
  </template>
@@ -3,21 +3,18 @@
3
3
  <template #trigger><MintGasPrice :mint-count="2" /></template>
4
4
  <template #content>
5
5
  <div class="prose">
6
- <h1>Mint Pricing</h1>
7
- <p>Artifacts are priced based on the Ethereum network fees at the time of collecting.</p>
8
- <p>Network fees (Gas fees) are an essential component of securing and running decentralized blockchains.</p>
9
- <p>
10
- The cost to store and secure the object on the network is mirrored as compensation to the artist,
11
- creating a direct link between network value and creator reward.
12
- </p>
6
+ <h1>{{ $t('popover.mint_pricing')}}</h1>
7
+ <p>{{ $t('popover.pricing_info')}}</p>
8
+ <p>{{ $t('popover.network_fees')}}</p>
9
+ <p>{{ $t('popover.artist_reward') }}</p>
13
10
  <table>
14
11
  <tbody>
15
12
  <tr>
16
- <td>Gas price</td>
13
+ <td>{{ $t('popover.gas_price') }}</td>
17
14
  <td><GasPrice /></td>
18
15
  </tr>
19
16
  <tr>
20
- <td>Cost to mint</td>
17
+ <td>{{ $t('popover.cost_to_mint') }}</td>
21
18
  <td>
22
19
  <span>
23
20
  60.000 gas * <GasPrice />
@@ -25,29 +22,26 @@
25
22
  </td>
26
23
  </tr>
27
24
  <tr>
28
- <td>Ethereum fee (50%)</td>
25
+ <td>{{ $t('popover.ethereum_fee') }}</td>
29
26
  <td><MintGasPrice /></td>
30
27
  </tr>
31
28
  <tr>
32
- <td>Artist <abbr title="Artist Compensation">comp.</abbr> (50%)</td>
29
+ <td>{{ $t('popover.artist_comp') }} (50%)</td>
33
30
  <td><MintGasPrice /></td>
34
31
  </tr>
35
32
  <tr>
36
- <td>Mint price</td>
33
+ <td>{{ $t('popover.mint_price') }}</td>
37
34
  <td><MintGasPrice :mint-count="2" /></td>
38
35
  </tr>
39
36
  </tbody>
40
37
  </table>
41
- <p>
42
- Mints of more than one don't increase the Ethereum fee, resulting in higher
43
- artist compensation.
44
- </p>
38
+ <p>{{ $t('popover.mint_more_info') }}</p>
45
39
  <table>
46
40
  <thead>
47
41
  <tr>
48
- <th>Amount</th>
49
- <th>Ethereum fee</th>
50
- <th>Artist <abbr title="Artist Compensation">comp.</abbr></th>
42
+ <th>{{ $t('popover.amount') }}</th>
43
+ <th>{{ $t('popover.eth_fee')}}</th>
44
+ <th>{{ $t('popover.artist_comp') }}</th>
51
45
  </tr>
52
46
  </thead>
53
47
  <tbody>
@@ -5,7 +5,7 @@
5
5
  <img :src="artist.avatar || avatar" :alt="name" />
6
6
  <h1 @click="() => ! hideAddress && copy(address)">
7
7
  <span>{{ name }}</span>
8
- <small v-if="copied">copied...</small>
8
+ <small v-if="copied">{{ $t('profile.address_copied') }}</small>
9
9
  <small v-else-if="! hideAddress">{{ shortAddress(address) }}</small>
10
10
  </h1>
11
11
  <p v-if="description">{{ description }}</p>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <Button @click="install">Install</Button>
2
+ <Button @click="install">{{ $t('renderer.install_button')}}</Button>
3
3
  <TransactionFlow
4
4
  ref="txFlow"
5
5
  :request="installRequest"
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <article class="install-custom-renderer">
3
- <h1>Add Custom Renderer</h1>
3
+ <h1>{{ $t('renderer.add_custom')}}</h1>
4
4
  <FormInput v-model="rendererAddressInput" placeholder="0x..." />
5
5
 
6
6
  <Loading v-if="loading" />
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <section class="renderers" id="installed-renderers">
3
- <h1>Installed Renderers</h1>
3
+ <h1>{{ $t('renderer.installed') }}</h1>
4
4
 
5
5
  <div>
6
6
  <RendererOverviewCard
@@ -11,7 +11,7 @@
11
11
  </section>
12
12
 
13
13
  <section class="renderers" id="available-renderers">
14
- <h1>Available Renderers</h1>
14
+ <h1>{{ $t('renderer.available') }}</h1>
15
15
 
16
16
  <div v-if="availableRenderers.length">
17
17
  <RendererOverviewCard
@@ -30,7 +30,7 @@
30
30
  </div>
31
31
 
32
32
  <div v-if="! availableRenderers.length" class="empty">
33
- <p>All known Renderers installed</p>
33
+ <p>{{ $t('renderer.all_installed') }}</p>
34
34
  </div>
35
35
 
36
36
  <RendererInstallCustom :collection="collection" />
@@ -32,10 +32,10 @@
32
32
  <header class="title">
33
33
  <h1>{{ token.name }} <small>#{{ token.tokenId }}</small></h1>
34
34
  <p v-if="token.description">
35
- <ExpandableText :text="token.description" :length="95" expand-text="Read More" />
35
+ <ExpandableText :text="token.description" :length="95" :expand-text="$t('read_more')" :collapse-text="$t('collapse')" />
36
36
  </p>
37
37
  <p v-if="collection" class="artist">
38
- By <NuxtLink :to="{ name: 'id', params: { id: collection.owner } }">{{ store.displayName(collection.owner) }}</NuxtLink>
38
+ {{ $t('token.by') }} <NuxtLink :to="{ name: 'id', params: { id: collection.owner } }">{{ store.displayName(collection.owner) }}</NuxtLink>
39
39
  </p>
40
40
  </header>
41
41
 
@@ -54,9 +54,15 @@
54
54
  </div>
55
55
 
56
56
  <div class="mint-status">
57
- <p v-if="mintOpen">{{ blocksRemaining }} blocks remaining</p>
58
- <p v-else-if="currentBlock">Closed at block {{ token.mintedBlock + BLOCKS_PER_DAY }}</p>
59
- <p v-if="ownedBalance">You own {{ ownedBalance }} {{ pluralize('token', Number(ownedBalance)) }}</p>
57
+ <p v-if="mintOpen">{{ $t('token.blocks_remaining', { blocksRemaining }) }}</p>
58
+ <p v-else-if="currentBlock">
59
+ {{ $t('token.closed_at_block')}}
60
+ {{ token.mintedBlock + BLOCKS_PER_DAY }}
61
+ </p>
62
+ <p v-if="ownedBalance">
63
+ {{ $t('token.you_own', { ownedBalance }) }}
64
+ {{ $t('tokens', Number(ownedBalance)) }}
65
+ </p>
60
66
  </div>
61
67
 
62
68
  <TokenMintTimeline :token="token" :collection="collection" class="network-mints" />
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <section class="token-mint-timeline">
3
3
  <slot :mints="mints" :loading="loading">
4
- <h1>Mint Timeline</h1>
4
+ <h1>{{ $t('token.mint_timeline') }}</h1>
5
5
 
6
6
  <template v-if="currentBlock">
7
7
  <TokenMintTimelineVirtualScroller
@@ -13,7 +13,7 @@
13
13
  <Account :address="collection.owner" class="account" />
14
14
 
15
15
  <span class="amount">1<span>×</span></span>
16
- <span class="price">Artist Mint</span>
16
+ <span class="price">{{ $t('token.artist_mint')}}</span>
17
17
 
18
18
  <span class="time-ago"><BlocksTimeAgo v-if="currentBlock" :blocks="currentBlock - token.mintedBlock" /></span>
19
19
 
@@ -28,10 +28,10 @@
28
28
  </template>
29
29
 
30
30
  <div v-if="! backfillComplete" v-show="! loading" ref="loadMore" class="load-more">
31
- <Button @click="backfill">Load more</Button>
31
+ <Button @click="backfill">{{ $t('token.load_more')}}</Button>
32
32
  </div>
33
33
 
34
- <Loading v-if="loading || ! currentBlock" txt="Loading Mint History..." />
34
+ <Loading v-if="loading || ! currentBlock" :txt="$t('token.loading_mint_history')" />
35
35
  </slot>
36
36
  </section>
37
37
  </template>
@@ -29,8 +29,10 @@
29
29
  <span>{{ token.name }} <span class="token-id">#{{ token.tokenId }}</span></span>
30
30
  <span v-if="token.description" class="description">{{ shortString(token.description, 60, 30) }}</span>
31
31
  </h1>
32
- <p v-if="mintOpen" class="closes-in">Closes in {{ blocksRemaining }} {{ pluralize('block', Number(blocksRemaining))}}</p>
33
- <p v-else class="closed-at">Closed at block {{ token.mintedBlock + BLOCKS_PER_DAY }}</p>
32
+ <p v-if="mintOpen" class="closes-in">
33
+ {{ $t('token.closes_in') }} {{ blocksRemaining }} {{ $t('blocks', Number(blocksRemaining)) }}
34
+ </p>
35
+ <p v-else class="closed-at">{{ $t('token.closed_at_block') }} {{ token.mintedBlock + BLOCKS_PER_DAY }}</p>
34
36
  </header>
35
37
  <Embed v-if="token.animationUrl" :src="token.animationUrl" />
36
38
  <Image v-else-if="token.image" :src="token.image" :alt="token.name" />
@@ -38,7 +40,7 @@
38
40
  <CardLink :to="{
39
41
  name: 'id-collection-tokenId',
40
42
  params: { id: collection.owner, collection: token.collection, tokenId: `${token.tokenId}` }
41
- }">View {{ token.name }}</CardLink>
43
+ }">{{ $t('token.view')}} {{ token.name }}</CardLink>
42
44
  </div>
43
45
  <footer>
44
46
  <MintTokenBar
@@ -53,7 +55,9 @@
53
55
  minted,
54
56
  }"
55
57
  />
56
- <p class="muted" v-if="ownedBalance">You own {{ ownedBalance }} "{{ token.name }}" {{ pluralize('token', Number(ownedBalance)) }}</p>
58
+ <p class="muted" v-if="ownedBalance">
59
+ {{ $t('token.you_own', { ownedBalance: ownedBalance, token: token.name }) }} {{ $t('tokens', Number(ownedBalance)) }}
60
+ </p>
57
61
  </footer>
58
62
  </slot>
59
63
  </article>
@@ -19,15 +19,15 @@
19
19
 
20
20
  <Button v-if="step === 'waiting'" :to="txLink" target="_blank" class="block-explorer">
21
21
  <Icon type="loader" class="spin" />
22
- <span>View on Etherscan</span>
22
+ <span>{{ $t('transaction_flow.view_on_etherscan') }}</span>
23
23
  </Button>
24
24
 
25
25
  <Actions v-if="step === 'chain'">
26
- <Button @click="cancel" class="secondary">Cancel</Button>
26
+ <Button @click="cancel" class="secondary">{{ $t('transaction_flow.cancel') }}</Button>
27
27
  </Actions>
28
28
 
29
29
  <Actions v-if="step === 'confirm' || step === 'error'">
30
- <Button @click="cancel" class="secondary">Cancel</Button>
30
+ <Button @click="cancel" class="secondary">{{ $t('transaction_flow.cancel') }}</Button>
31
31
  <Button @click="() => initializeRequest()">{{ text.action[step] || 'Execute' }}</Button>
32
32
  </Actions>
33
33
  </Modal>
package/i18n.config.ts ADDED
@@ -0,0 +1,10 @@
1
+ import enMessages from './locales/en.json';
2
+
3
+ export default defineI18nConfig(() => ({
4
+ legacy: false,
5
+ locale: 'en',
6
+ fallbackLocale: 'en',
7
+ messages: {
8
+ en: enMessages,
9
+ }
10
+ }))
@@ -0,0 +1,107 @@
1
+ {
2
+ "connect_button": "Connect",
3
+ "mint_button": "Mint",
4
+ "read_more": "Read More",
5
+ "collapse": "Collapse",
6
+ "tokens": "token | tokens",
7
+ "blocks": "block | blocks",
8
+ "choose_file": "Choose File",
9
+ "popover": {
10
+ "mint_pricing": "Mint Pricing",
11
+ "pricing_info": "Artifacts are priced based on the Ethereum network fees at the time of collecting.",
12
+ "network_fees": "Network fees (Gas fees) are an essential component of securing and running decentralized blockchains.",
13
+ "artist_reward": "The cost to store and secure the object on the network is mirrored as compensation to the artist, creating a direct link between network value and creator reward.",
14
+ "gas_price": "Gas price",
15
+ "cost_to_mint": "Cost to mint",
16
+ "ethereum_fee": "Ethereum fee (50%)",
17
+ "artist_compensation": "Artist comp. (50%)",
18
+ "mint_price": "Mint price",
19
+ "mint_more_info": "Mints of more than one don't increase the Ethereum fee, resulting in higher artist compensation.",
20
+ "amount": "Amount",
21
+ "eth_fee": "Ethereum fee",
22
+ "artist_comp": "Artist comp."
23
+ },
24
+ "profile": {
25
+ "address_copied": "copied...",
26
+ "edit_button": "Edit Profile",
27
+ "add_collection_button": "Collection",
28
+ "your_collections": "Your Collections"
29
+ },
30
+ "collections_overview": {
31
+ "no_collections": "It looks like you haven't deployed any collections.",
32
+ "create_first": "Create Your First",
33
+ "no_collections_other": "It looks like this account hasn't deployed any collections.",
34
+ "querying_blockchain": "Querying the blockchain..."
35
+ },
36
+ "collection": {
37
+ "unnamed": "Unnamed Collection",
38
+ "created_at_block": "Created at Block",
39
+ "by": "By",
40
+ "no_tokens": "No tokens yet.",
41
+ "withdraw": "Withdraw"
42
+ },
43
+ "mint": {
44
+ "base": {
45
+ "note": {
46
+ "start": "Note: This should be a small file, preferably an SVG like",
47
+ "link_text": "this one (810 bytes)",
48
+ "end": "If it is larger than what we can store within one transaction, the token creation will be split up into multiple transactions."
49
+ },
50
+ "title_placeholder": "Title",
51
+ "description_placeholder": "Description"
52
+ },
53
+ "p5": {
54
+ "static": "Static",
55
+ "p5_script": "P5 Script"
56
+ },
57
+ "preview": {
58
+ "title": "Preview",
59
+ "no_description": "No description"
60
+ },
61
+ "select": {
62
+ "install_new": "Install New"
63
+ }
64
+ },
65
+ "renderer": {
66
+ "install_button": "Install",
67
+ "add_custom": "Add Custom Renderer",
68
+ "installed": "Installed Renderers",
69
+ "available": "Available Renderers",
70
+ "all_installed": "All known Renderers installed"
71
+ },
72
+ "token": {
73
+ "by": "By",
74
+ "closes_in": "Closes in",
75
+ "blocks_remaining": "{blocksRemaining} blocks remaining",
76
+ "closed_at_block": "Closed at block",
77
+ "you_own": "You own {ownedBalance} {tokens}",
78
+ "mint_timeline": "Mint Timeline",
79
+ "artist_mint": "Artist Mint",
80
+ "load_more": "Load more",
81
+ "blocks_ago": "{blocks} blocks ago",
82
+ "loading_mint_history": "Loading Mint History...",
83
+ "view": "View"
84
+ },
85
+ "transaction_flow": {
86
+ "view_on_etherscan": "View on Etherscan",
87
+ "cancel": "Cancel"
88
+ },
89
+ "create": {
90
+ "title": "Create New",
91
+ "note": {
92
+ "start": "Note: This should be a small file, preferably a simple SVG like",
93
+ "link_text": "this one (273 bytes)",
94
+ "end": "Try to make it less than 10kb."
95
+ },
96
+ "preview": {
97
+ "token": "Token",
98
+ "no_description": "No description"
99
+ },
100
+ "form": {
101
+ "title_placeholder": "Title",
102
+ "symbol_placeholder": "Symbol",
103
+ "description_placeholder": "Description",
104
+ "deploy_button": "Deploy"
105
+ }
106
+ }
107
+ }
package/nuxt.config.ts CHANGED
@@ -10,6 +10,7 @@ export default defineNuxtConfig({
10
10
  modules: [
11
11
  '@pinia/nuxt',
12
12
  '@pinia-plugin-persistedstate/nuxt',
13
+ '@nuxtjs/i18n',
13
14
  ],
14
15
 
15
16
  runtimeConfig: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visualizevalue/mint-app-base",
3
- "version": "0.1.60",
3
+ "version": "0.1.62",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "dependencies": {
@@ -27,6 +27,7 @@
27
27
  "@visualizevalue/mint-utils": "^0.0.4"
28
28
  },
29
29
  "devDependencies": {
30
+ "@nuxtjs/i18n": "^8.5.5",
30
31
  "@types/codemirror": "^5.60.15",
31
32
  "nuxt": "^3.13.2",
32
33
  "typescript": "^5.5.4"
@@ -3,7 +3,7 @@
3
3
  <PageFrame
4
4
  :title="[
5
5
  {
6
- text: `Create New`
6
+ text: $t('create.title')
7
7
  }
8
8
  ]"
9
9
  class="inset"
@@ -15,11 +15,11 @@
15
15
  <ImagePreview v-else />
16
16
  </div>
17
17
  <h1>
18
- <span :class="{ '': !title }">{{ title || 'Token' }}</span>
18
+ <span :class="{ '': !title }">{{ title || $t('create.preview.token') }}</span>
19
19
  <small :class="{ '': !symbol }">{{ symbol || '$T' }}</small>
20
20
  </h1>
21
21
  <p :class="{ '': !description }">
22
- {{ description || 'No description' }}
22
+ {{ description || $t('create.preview.no_description') }}
23
23
  </p>
24
24
  </article>
25
25
 
@@ -54,19 +54,19 @@
54
54
  <div>
55
55
  <FormSelectFile @change="setImage" />
56
56
  <p v-if="! isSmall" class="muted">
57
- <small>Note: This should be a small file, prefferably a simple SVG like <a :href="`${base}example-contract-icon.svg`" target="_blank">this one (273 bytes)</a>. Try to make it less than 10kb.</small>
57
+ <small> {{ $t('create.note.start') }} <a :href="`${base}example-contract-icon.svg`" target="_blank">{{ $t('create.note.link_text') }}</a>. {{ $t('create.note.end') }}</small>
58
58
  </p>
59
59
  </div>
60
60
  <FormGroup>
61
- <FormInput v-model="title" placeholder="Title" required class="title" />
62
- <FormInput v-model="symbol" placeholder="Symbol" required />
61
+ <FormInput v-model="title" :placeholder="$t('create.form.title_placeholder')" required class="title" />
62
+ <FormInput v-model="symbol" :placeholder="$t('create.form.symbol_placeholder')" required />
63
63
  </FormGroup>
64
- <FormInput v-model="description" placeholder="Description" />
64
+ <FormInput v-model="description" :placeholder="$t('create.form.description_placeholder')" />
65
65
  </div>
66
66
 
67
67
  <Actions>
68
68
  <Button type="submit">
69
- Deploy
69
+ {{ $t('create.form.deploy_button') }}
70
70
  </Button>
71
71
  </Actions>
72
72
  </form>
package/pages/index.vue CHANGED
@@ -10,7 +10,7 @@
10
10
  </template>
11
11
  </Connect>
12
12
  <template #fallback>
13
- <Button>Connect</Button>
13
+ <Button>{{ $t('connect_button') }}</Button>
14
14
  </template>
15
15
  </ClientOnly>
16
16
  </header>