Merge pull request #453 from sxlmnwb/master

i18n update add en in ping-pub/explorer #2
This commit is contained in:
ping 2023-06-21 16:41:58 +08:00 committed by GitHub
commit bc525a3dd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 231 additions and 132 deletions

View File

@ -135,7 +135,7 @@ const amount = computed({
}}</span>)
</div>
<div class="text-xs mt-2">
Rank:
{{ $t('index.rank') }}:
<div class="badge text-xs badge-error bg-[#fcebea] dark:bg-[#41384d] text-red-400">
#{{ coinInfo.market_cap_rank }}
</div>
@ -209,7 +209,7 @@ const amount = computed({
<input type="checkbox" id="calculator" class="modal-toggle" />
<div class="modal">
<div class="modal-box">
<h3 class="text-lg font-bold">Price Calculator</h3>
<h3 class="text-lg font-bold">{{ $t('index.price_calculator') }}</h3>
<div class="flex flex-col w-full mt-5">
<div class="grid h-20 flex-grow card rounded-box place-items-center">
<div class="join w-full">
@ -230,11 +230,11 @@ const amount = computed({
</div>
</div>
</div>
<label class="modal-backdrop" for="calculator">Close</label>
<label class="modal-backdrop" for="calculator">{{ $t('index.close') }}</label>
</div>
<a class="my-5 !text-white btn grow" :class="{'!btn-success': store.trustColor === 'green', '!btn-warning': store.trustColor === 'yellow'}" :href="ticker.trade_url"
target="_blank">
Buy {{ coinInfo.symbol || '' }}
{{ $t('index.buy') }} {{ coinInfo.symbol || '' }}
</a>
</div>
</div>
@ -264,13 +264,13 @@ const amount = computed({
<div v-if="blockchain.supportModule('governance')" class="bg-base-100 rounded mt-4 shadow">
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
Active Proposals
{{ $t('index.active_proposals') }}
</div>
<div class="px-4 pb-4">
<ProposalListItem :proposals="store?.proposals" />
</div>
<div class="pb-8 text-center" v-if="store.proposals?.proposals?.length === 0">
No active proposals
{{ $t('index.no_active_proposals') }}
</div>
</div>
@ -279,11 +279,11 @@ const amount = computed({
<span class="truncate" >{{ walletStore.currentAddress || 'Not Connected' }}</span>
<RouterLink v-if="walletStore.currentAddress"
class="float-right text-sm cursor-pointert link link-primary no-underline font-medium"
:to="`/${chain}/account/${walletStore.currentAddress}`">More</RouterLink>
:to="`/${chain}/account/${walletStore.currentAddress}`">{{ $t('index.more') }}</RouterLink>
</div>
<div class="grid grid-cols-1 md:!grid-cols-4 auto-cols-auto gap-4 px-4 pb-6">
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
<div class="text-sm mb-1">Balance</div>
<div class="text-sm mb-1">{{ $t('account.balance') }}</div>
<div class="text-lg font-semibold text-main">
{{ format.formatToken(walletStore.balanceOfStakingToken) }}
</div>
@ -292,7 +292,7 @@ const amount = computed({
</div>
</div>
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
<div class="text-sm mb-1">Staking</div>
<div class="text-sm mb-1">{{ $t('module.staking') }}</div>
<div class="text-lg font-semibold text-main">
{{ format.formatToken(walletStore.stakingAmount) }}
</div>
@ -301,7 +301,7 @@ const amount = computed({
</div>
</div>
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
<div class="text-sm mb-1">Reward</div>
<div class="text-sm mb-1">{{ $t('index.reward') }}</div>
<div class="text-lg font-semibold text-main">
{{ format.formatToken(walletStore.rewardAmount) }}
</div>
@ -310,7 +310,7 @@ const amount = computed({
</div>
</div>
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
<div class="text-sm mb-1">Unbonding</div>
<div class="text-sm mb-1">{{ $t('index.unbonding') }}</div>
<div class="text-lg font-semibold text-main">
{{ format.formatToken(walletStore.unbondingAmount) }}
</div>
@ -324,10 +324,10 @@ const amount = computed({
<table class="table table-compact w-full table-zebra">
<thead>
<tr>
<th>Validator</th>
<th>Delegations</th>
<th>Rewards</th>
<th>Actions</th>
<th>{{ $t('account.validator') }}</th>
<th>{{ $t('account.delegations') }}</th>
<th>{{ $t('account.rewards') }}</th>
<th>{{ $t('staking.actions') }}</th>
</tr>
</thead>
<tbody>
@ -354,11 +354,11 @@ const amount = computed({
<div>
<label for="delegate" class="btn !btn-xs !btn-primary btn-ghost rounded-sm mr-2"
@click="dialog.open('delegate', { validator_address: item.delegation.validator_address }, updateState)">
Delegate
{{ $t('account.btn_delegate') }}
</label>
<label for="withdraw" class="btn !btn-xs !btn-primary btn-ghost rounded-sm"
@click="dialog.open('withdraw', { validator_address: item.delegation.validator_address }, updateState)">
Withdraw Rewards
{{ $t('index.btn_withdraw_reward') }}
</label>
</div>
</td>
@ -368,11 +368,11 @@ const amount = computed({
</div>
<div class="grid grid-cols-3 gap-4 px-4 pb-6 mt-4">
<label for="PingTokenConvert" class="btn btn-primary text-white">Swap</label>
<label for="send" class="btn !bg-yes !border-yes text-white" @click="dialog.open('send', {}, updateState)">Send</label>
<label for="PingTokenConvert" class="btn btn-primary text-white">{{ $t('index.btn_swap') }}</label>
<label for="send" class="btn !bg-yes !border-yes text-white" @click="dialog.open('send', {}, updateState)">{{ $t('account.btn_send') }}</label>
<label for="delegate" class="btn !bg-info !border-info text-white"
@click="dialog.open('delegate', {}, updateState)">Delegate</label>
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white hidden">Receive</RouterLink>
@click="dialog.open('delegate', {}, updateState)">{{ $t('account.btn_delegate') }}</label>
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white hidden">{{ $t('index.receive') }}</RouterLink>
</div>
<Teleport to="body">
<ping-token-convert :chain-name="blockchain?.current?.prettyName" :endpoint="blockchain?.endpoint?.address"
@ -382,7 +382,7 @@ const amount = computed({
<div class="bg-base-100 rounded mt-4">
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
Application Versions
{{ $t('index.app_versions') }}
</div>
<!-- Application Version -->
<ArrayObjectElement :value="paramStore.appVersion?.items" :thead="false" />
@ -391,7 +391,7 @@ const amount = computed({
<div v-if="!store.coingeckoId" class="bg-base-100 rounded mt-4">
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
Node Information
{{ $t('index.node_info') }}
</div>
<ArrayObjectElement :value="paramStore.nodeVersion?.items" :thead="false" />
<div class="h-4"></div>

View File

@ -193,16 +193,16 @@ const tipMsg = computed(() => {
validator_address: v.operator_address,
})
"
>Delegate</label
>{{ $t('account.btn_delegate') }}</label
>
</div>
</div>
<div class="m-4 text-sm">
<p class="text-sm mb-3 font-medium">About Us</p>
<p class="text-sm mb-3 font-medium">{{ $t('staking.about_us') }}</p>
<div class="card-list">
<div class="flex items-center mb-2">
<Icon icon="mdi-web" class="text-xl mr-1" />
<span class="font-bold mr-2">Website: </span>
<span class="font-bold mr-2">{{ $t('staking.website') }}: </span>
<a
:href="v?.description?.website || '#'"
:class="
@ -216,22 +216,22 @@ const tipMsg = computed(() => {
</div>
<div class="flex items-center">
<Icon icon="mdi-email-outline" class="text-xl mr-1" />
<span class="font-bold mr-2">Contact: </span>
<span class="font-bold mr-2">{{ $t('staking.contact') }}: </span>
<span> {{ v.description?.security_contact }}</span>
</div>
</div>
<p class="text-sm mt-4 mb-3 font-medium">Validator Status</p>
<p class="text-sm mt-4 mb-3 font-medium">{{ $t('staking.validator_status') }}</p>
<div class="card-list">
<div class="flex items-center mb-2">
<Icon icon="mdi-shield-account-outline" class="text-xl mr-1" />
<span class="font-bold mr-2">Status: </span
<span class="font-bold mr-2">{{ $t('staking.status') }}: </span
><span>
{{ String(v.status).replace('BOND_STATUS_', '') }}
</span>
</div>
<div class="flex items-center">
<Icon icon="mdi-shield-alert-outline" class="text-xl mr-1" />
<span class="font-bold mr-2">Jailed: </span>
<span class="font-bold mr-2">{{ $t('staking.jailed') }}: </span>
<span> {{ v.jailed || '-' }} </span>
</div>
</div>
@ -255,7 +255,7 @@ const tipMsg = computed(() => {
})
}}
</h4>
<span class="text-sm">Total Bonded Tokens</span>
<span class="text-sm">{{ $t('staking.total_bonded') }}</span>
</div>
</div>
<div class="flex mb-2">
@ -269,7 +269,7 @@ const tipMsg = computed(() => {
<h4>
{{ format.formatToken(selfBonded.balance) }} ({{ selfRate }})
</h4>
<span class="text-sm">Self Bonded</span>
<span class="text-sm">{{ $t('staking.self_bonded') }}</span>
</div>
</div>
@ -285,7 +285,7 @@ const tipMsg = computed(() => {
<h4>
{{ v.min_self_delegation }} {{ staking.params.bond_denom }}
</h4>
<span class="text-sm">Min Self Delegation:</span>
<span class="text-sm">{{ $t('staking.min_self') }}</span>
</div>
</div>
<div class="flex mb-2">
@ -297,7 +297,7 @@ const tipMsg = computed(() => {
</div>
<div class="ml-3 flex flex-col justify-center">
<h4>{{ apr }}</h4>
<span class="text-sm">Annual Profit</span>
<span class="text-sm">{{ $t('staking.annual_profit') }}</span>
</div>
</div>
@ -310,7 +310,7 @@ const tipMsg = computed(() => {
</div>
<div class="ml-3 flex flex-col justify-center">
<h4>{{ v.unbonding_height }}</h4>
<span class="text-sm">Unbonding Height</span>
<span class="text-sm">{{ $t('staking.unbonding_height') }}</span>
</div>
</div>
@ -324,7 +324,7 @@ const tipMsg = computed(() => {
<div class="ml-3 flex flex-col justify-center">
<h4 v-if="v.unbonding_time && !v.unbonding_time.startsWith('1970')">{{ format.toDay(v.unbonding_time, 'from') }}</h4>
<h4 v-else>-</h4>
<span class="text-sm">Unbonding Time</span>
<span class="text-sm">{{ $t('staking.unbonding_time') }}</span>
</div>
</div>
</div>
@ -339,14 +339,14 @@ const tipMsg = computed(() => {
</div>
<div class="bg-base-100 rounded shadow relative overflow-auto">
<div class="text-lg font-semibold text-main px-4 pt-4">
Commissions & Rewards
{{ $t('staking.commissions_&_rewards') }}
</div>
<div
class="px-4 mt-1 flex flex-col justify-between pb-4"
style="height: calc(100% - 50px)"
>
<div class="overflow-auto flex-1">
<div class="text-sm mb-2">Commissions</div>
<div class="text-sm mb-2">{{ $t('staking.commissions') }}</div>
<div
v-for="(i, k) in commission"
:key="`reward-${k}`"
@ -357,7 +357,7 @@ const tipMsg = computed(() => {
>
{{ format.formatToken2(i) }}
</div>
<div class="text-sm mb-2 mt-2">Outstanding Rewards</div>
<div class="text-sm mb-2 mt-2">{{ $t('staking.outstanding') }} {{ $t('account.rewards') }}</div>
<div
v-for="(i, k) in rewards"
:key="`reward-${k}`"
@ -375,18 +375,18 @@ const tipMsg = computed(() => {
validator_address: v.operator_address,
})
"
>Withdraw</label
>{{ $t('account.btn_withdraw') }}</label
>
</div>
</div>
</div>
<div class="bg-base-100 rounded shadow overflow-x-auto">
<div class="px-4 pt-4 mb-2 text-main font-lg font-semibold">
Addresses
{{ $t('staking.addresses') }}
</div>
<div class="px-4 pb-4">
<div class="mb-3">
<div class="text-sm flex">Account
<div class="text-sm flex">{{ $t('staking.account_addr') }}
<Icon
icon="mdi:content-copy"
class="ml-2 cursor-pointer"
@ -402,7 +402,7 @@ const tipMsg = computed(() => {
</RouterLink>
</div>
<div class="mb-3">
<div class="text-sm flex">Operator Address
<div class="text-sm flex">{{ $t('staking.operator_addr') }}
<Icon
icon="mdi:content-copy"
class="ml-2 cursor-pointer"
@ -414,7 +414,7 @@ const tipMsg = computed(() => {
</div>
</div>
<div class="mb-3">
<div class="text-sm flex">Hex Address
<div class="text-sm flex">{{ $t('staking.hex_addr') }}
<Icon
icon="mdi:content-copy"
class="ml-2 cursor-pointer"
@ -425,7 +425,7 @@ const tipMsg = computed(() => {
<div class="text-xs">{{ addresses.hex }}</div>
</div>
<div class="mb-3">
<div class="text-sm flex">Signer Address
<div class="text-sm flex">{{ $t('staking.signer_addr') }}
<Icon
icon="mdi:content-copy"
class="ml-2 cursor-pointer"
@ -436,7 +436,7 @@ const tipMsg = computed(() => {
<div class="text-xs">{{ addresses.valCons }}</div>
</div>
<div>
<div class="text-sm flex">Consensus Public Key
<div class="text-sm flex">{{ $t('staking.consensus_pub_key') }}
<Icon
icon="mdi:content-copy"
class="ml-2 cursor-pointer"
@ -450,16 +450,16 @@ const tipMsg = computed(() => {
</div>
</div>
<div class="mt-5 bg-base-100 shadow rounded p-4">
<div class="text-lg mb-4 font-semibold">Transactions</div>
<div class="text-lg mb-4 font-semibold">{{ $t('account.transactions') }}</div>
<div class="rounded overflow-auto">
<table class="table validatore-table w-full">
<thead>
<th class="text-left pl-4" style="position: relative; z-index: 2">
Height
{{ $t('account.height') }}
</th>
<th class="text-left pl-4">Hash</th>
<th class="text-left pl-4" width="40%">Messages</th>
<th class="text-left pl-4">Time</th>
<th class="text-left pl-4">{{ $t('account.hash') }}</th>
<th class="text-left pl-4" width="40%">{{ $t('account.messages') }}</th>
<th class="text-left pl-4">{{ $t('account.time') }}</th>
</thead>
<tbody>
<tr v-for="(item, i) in txs.tx_responses">

View File

@ -196,7 +196,7 @@ loadAvatars();
</span>
<span>
<div class="font-bold">{{ format.percent(mintStore.inflation) }}</div>
<div class="text-xs">Infalation</div>
<div class="text-xs">{{ $t('staking.infalation') }}</div>
</span>
</div>
<div class="flex">
@ -208,7 +208,7 @@ loadAvatars();
</span>
<span>
<div class="font-bold">{{ formatSeconds(staking.params?.unbonding_time) }}</div>
<div class="text-xs">Unbonding Time</div>
<div class="text-xs">{{ $t('staking.unbonding_time') }}</div>
</span>
</div>
<div class="flex">
@ -220,7 +220,7 @@ loadAvatars();
</span>
<span>
<div class="font-bold">{{ format.percent(slashing.slash_fraction_double_sign) }}</div>
<div class="text-xs">Double Sign Slashing</div>
<div class="text-xs">{{ $t('staking.double_sign_slashing') }}</div>
</span>
</div>
<div class="flex">
@ -232,7 +232,7 @@ loadAvatars();
</span>
<span>
<div class="font-bold">{{ format.percent(slashing.slash_fraction_downtime) }}</div>
<div class="text-xs">Downtime Slashing</div>
<div class="text-xs">{{ $t('staking.downtime_slashing') }}</div>
</span>
</div>
</div>
@ -244,19 +244,19 @@ loadAvatars();
class="tab text-gray-400"
:class="{ 'tab-active': tab === 'featured' }"
@click="tab = 'featured'"
>Popular</a
>{{ $t('staking.popular') }}</a
>
<a
class="tab text-gray-400"
:class="{ 'tab-active': tab === 'active' }"
@click="tab = 'active'"
>Active</a
>{{ $t('staking.active') }}</a
>
<a
class="tab text-gray-400"
:class="{ 'tab-active': tab === 'inactive' }"
@click="tab = 'inactive'"
>Inactive</a
>{{ $t('staking.inactive') }}</a
>
</div>
@ -272,15 +272,16 @@ loadAvatars();
<tr>
<th
scope="col"
class="uppercase"
style="width: 3rem; position: relative"
>
#
{{ $t('staking.rank') }}
</th>
<th scope="col">VALIDATOR</th>
<th scope="col" class="text-right">VOTING POWER</th>
<th scope="col" class="text-right">24h CHANGES</th>
<th scope="col" class="text-right">COMMISSION</th>
<th scope="col" class="text-center">ACTIONS</th>
<th scope="col" class="uppercase">{{ $t('staking.validator') }}</th>
<th scope="col" class="text-right uppercase">{{ $t('staking.voting_power') }}</th>
<th scope="col" class="text-right uppercase">{{ $t('staking.24h_changes') }}</th>
<th scope="col" class="text-right uppercase">{{ $t('staking.commission') }}</th>
<th scope="col" class="text-center uppercase">{{ $t('staking.actions') }}</th>
</tr>
</thead>
<tbody>
@ -400,7 +401,7 @@ loadAvatars();
v-if="v.jailed"
class="badge badge-error gap-2 text-white"
>
Jailed
{{ $t('staking.jailed') }}
</div>
<label
v-else-if="rank !== 'error'"
@ -412,7 +413,7 @@ loadAvatars();
v.operator_address,
})
"
>Delegate</label
>{{ $t('account.btn_delegate') }}</label
>
</td>
</tr>
@ -428,7 +429,7 @@ loadAvatars();
<span
class="inset-x-0 inset-y-0 opacity-10 absolute bg-error"
></span>
Top 33%
{{ $t('staking.top') }} 33%
</div>
<div
class="text-xs truncate relative py-2 px-4 rounded-md w-fit text-warning"
@ -436,10 +437,10 @@ loadAvatars();
<span
class="inset-x-0 inset-y-0 opacity-10 absolute bg-warning"
></span>
Top 67%
{{ $t('staking.top') }} 67%
</div>
<div class="text-xs hidden md:!block pl-2">
Delegating to lower-rank validators will increase the overall security of the network
{{ $t('staking.description') }}
</div>
</div>
</div>

View File

@ -38,37 +38,33 @@ onMounted(() => {
<template>
<div>
<div class="bg-base-100 px-4 pt-3 pb-4 rounded mb-4 shadow">
<h2 class="card-title truncate mb-2">What's State Sync?</h2>
<h2 class="card-title truncate mb-2">{{ $t('statesync.title') }}</h2>
<div class="text-sm">
The Tendermint Core 0.34 release includes support for state sync, which
allows a new node to join a network by fetching a snapshot of the
application state at a recent height instead of fetching and replaying
all historical blocks. This can reduce the time needed to sync with the
network from days to minutes. Click
{{ $t('statesync.description') }}
<a
class="text-primary"
class="text-primary lowercase"
href="https://blog.cosmos.network/cosmos-sdk-state-sync-guide-99e4cf43be2f"
>here</a
>{{ $t('statesync.here') }}&nbsp;</a
>
for more infomation.
<a
class="lowercase">
{{ $t('statesync.for_more_info') }}.</a>
</div>
</div>
<div class="bg-base-100 px-4 pt-3 pb-4 rounded mb-4 shadow">
<h2 class="card-title truncate mb-2">
Starting New Node From State Sync
{{ $t('statesync.title_2') }}
</h2>
<div class="text-sm">
1. Install Binary ({{ appName }} Version:
1. {{ $t('statesync.text_1') }} ({{ appName }} {{ $t('statesync.version') }}:
{{ nodeInfo.application_version?.version || '' }})
<br />
We need to install the binary first and make sure that the version is
the one currently in use on mainnet.
{{ $t('statesync.text_1_1') }}.
<br />
<br />
2. Enable State Sync<br />
We can configure Tendermint to use state sync in
$DAEMON_HOME/config/config.toml.
2. {{ $t('statesync.text_2') }}<br />
{{ $t('statesync.text_2_1') }}.
<br /><br />
<div class="mockup-code bg-base-200 my-2">
<pre data-prefix=">"><code class="text-gray-800 dark:invert">[state-sync]</code></pre>
@ -82,20 +78,19 @@ onMounted(() => {
<pre data-prefix=">"><code class="text-gray-800 dark:invert">trust_period = "168h"</code></pre>
</div>
<br />
3. Start the daemon: <code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} start</code>
3. {{ $t('statesync.text_3') }}: <code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} start</code>
<br />
If you are resetting node, run
{{ $t('statesync.text_3_1') }}
<code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} unsafe-reset-all</code> or
<code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} tendermint unsafe-reset-all --home ~/.HOME</code>
before you start the daemon.
{{ $t('statesync.text_3_2') }}.
</div>
</div>
<div class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">
<h2 class="card-title truncate mb-2">Enable Snapshot For State Sync</h2>
<h2 class="card-title truncate mb-2">{{ $t('statesync.title_3') }}</h2>
<div class="text-sm">
To make state sync works, we can enable snapshot in
$DAEMON_HOME/config/app.toml
{{ $t('statesync.text_title_3') }}
<br /><br />
<div class="mockup-code bg-base-200 my-2">
<pre data-prefix=">"><code class="text-gray-800 dark:invert">[state-sync]</code></pre>

View File

@ -26,16 +26,16 @@ const messages = computed(() => {
<template>
<div>
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow mb-4">
<h2 class="card-title truncate mb-2">Summary</h2>
<h2 class="card-title truncate mb-2">{{ $t('tx.title') }}</h2>
<div class="overflow-auto-x">
<table class="table text-sm">
<tbody>
<tr>
<td>Tx Hash</td>
<td>{{ $t('tx.tx_hash') }}</td>
<td>{{ tx.tx_response.txhash }}</td>
</tr>
<tr>
<td>Height</td>
<td>{{ $t('account.height') }}</td>
<td>
<RouterLink :to="`/${props.chain}/block/${tx.tx_response.height}`" class="text-primary dark:invert">{{ tx.tx_response.height
}}
@ -43,7 +43,7 @@ const messages = computed(() => {
</td>
</tr>
<tr>
<td>Status</td>
<td>{{ $t('staking.status') }}</td>
<td>
<div class="text-xs truncate relative py-2 px-4 w-fit mr-2 rounded" :class="`text-${tx.tx_response.code === 0 ? 'success' : 'error'
}`">
@ -54,7 +54,7 @@ const messages = computed(() => {
</td>
</tr>
<tr>
<td>Time</td>
<td>{{ $t('account.time') }}</td>
<td>
{{ format.toLocaleDate(tx.tx_response.timestamp) }} ({{
format.toDay(tx.tx_response.timestamp, 'from')
@ -62,13 +62,13 @@ const messages = computed(() => {
</td>
</tr>
<tr>
<td>Gas</td>
<td>{{ $t('tx.gas') }}</td>
<td>
{{ tx.tx_response.gas_used }} / {{ tx.tx_response.gas_wanted }}
</td>
</tr>
<tr>
<td>Fee</td>
<td>{{ $t('tx.fee') }}</td>
<td>
{{
format.formatTokens(
@ -80,7 +80,7 @@ const messages = computed(() => {
</td>
</tr>
<tr>
<td>Memo</td>
<td>{{ $t('tx.memo') }}</td>
<td>{{ tx.tx.body.memo }}</td>
</tr>
</tbody>
@ -90,14 +90,14 @@ const messages = computed(() => {
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow mb-4">
<h2 class="card-title truncate mb-2">
Messages: ({{ messages.length }})
{{ $t('account.messages') }}: ({{ messages.length }})
</h2>
<div v-for="(msg, i) in messages">
<div class="border border-slate-400 rounded-md mt-4">
<DynamicComponent :value="msg" />
</div>
</div>
<div v-if="messages.length === 0">No messages</div>
<div v-if="messages.length === 0">{{ $t('tx.no_messages') }}</div>
</div>
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">

View File

@ -127,7 +127,7 @@ function color(v: string) {
<div class="overflow-x-auto w-full">
<div class="lg:!flex lg:!items-center lg:!justify-between bg-base-100 p-5">
<div class="min-w-0 flex-1">
<h2 class="text-2xl font-bold leading-7 sm:!truncate sm:!text-3xl sm:!tracking-tight">My Validators</h2>
<h2 class="text-2xl font-bold leading-7 sm:!truncate sm:!text-3xl sm:!tracking-tight">{{ $t('uptime.my_validators') }}</h2>
<div class="mt-1 flex flex-col sm:!mt-0 sm:!flex-row sm:!flex-wrap sm:!space-x-6">
<div class="mt-2 flex items-center text-sm text-gray-500">
<svg class="mr-1.5 h-5 w-5 flex-shrink-0 text-gray-400" viewBox="0 0 20 20" fill="currentColor"
@ -138,7 +138,7 @@ function color(v: string) {
<path
d="M3 15.055v-.684c.126.053.255.1.39.142 2.092.642 4.313.987 6.61.987 2.297 0 4.518-.345 6.61-.987.135-.041.264-.089.39-.142v.684c0 1.347-.985 2.53-2.363 2.686a41.454 41.454 0 01-9.274 0C3.985 17.585 3 16.402 3 15.055z" />
</svg>
Add validators you want to monitor
{{ $t('uptime.add_validators_monitor') }}
</div>
</div>
</div>
@ -149,13 +149,13 @@ function color(v: string) {
<table class="table table-compact w-full">
<thead>
<tr>
<th>#</th>
<th>{{ $t('uptime.no') }}</th>
<th>Blockchain</th>
<th>Validator</th>
<th>Signed Blocks</th>
<th>Last Jailed Time</th>
<th>Tombstoned</th>
<th>Missing Blocks</th>
<th>{{ $t('account.validator') }}</th>
<th>{{ $t('uptime.signed_blocks') }}</th>
<th>{{ $t('uptime.last_jailed_time') }}</th>
<th>{{ $t('uptime.tombstoned') }}</th>
<th>{{ $t('uptime.missing_blocks') }}</th>
<th></th>
</tr>
</thead>
@ -173,14 +173,14 @@ function color(v: string) {
</td>
<td class=" capitalize">{{ v.sigingInfo?.tombstoned }}</td>
<td><span v-if="v.sigingInfo" class="badge " :class="color( v.sigingInfo?.missed_blocks_counter)">{{ v.sigingInfo?.missed_blocks_counter }}</span></td>
<td class=""><RouterLink :to="`/${v.chainName}/uptime/#blocks`" class="btn btn-xs btn-primary">Blocks</RouterLink></td>
<td class=""><RouterLink :to="`/${v.chainName}/uptime/#blocks`" class="btn btn-xs btn-primary">{{ $t('module.blocks') }}</RouterLink></td>
</tr>
</tbody>
</table>
</div>
<div class="text-center">
<label for="add-validator" class="btn btn-primary mt-5">Add Validators</label>
<label for="add-validator" class="btn btn-primary mt-5">{{ $t('uptime.add_validators') }}</label>
</div>
<!-- Put this part before </body> tag -->
@ -188,7 +188,7 @@ function color(v: string) {
<div class="modal">
<div class="modal-box relative">
<label for="add-validator" class="btn btn-sm btn-circle absolute right-2 top-2"></label>
<h3 class="text-lg font-bold">Add Validators</h3>
<h3 class="text-lg font-bold">{{ $t('uptime.add_validators') }}</h3>
<div class="form-control my-5 border-2">
<div class="input-group input-group-md">
<select v-model="selectChain" class="select select-bordered capitalize" @change="changeChain">
@ -203,7 +203,7 @@ function color(v: string) {
<table class="table table-compact w-full hover">
<thead>
<tr><th>Validator</th><th></th></tr>
<tr><th>{{ $t('account.validator') }}</th><th></th></tr>
</thead>
<tbody>
<tr v-for="(v, i) in filterValidators">
@ -214,7 +214,7 @@ function color(v: string) {
</table>
</div>
<div class="modal-action">
<label class="btn btn-primary" @click="add">add</label>
<label class="btn btn-primary" @click="add">{{ $t('uptime.add') }}</label>
</div>
</div>
</div>

View File

@ -122,23 +122,23 @@ function changeTab(v: string) {
class="tab text-gray-400 capitalize"
:class="{ 'tab-active': tab === '3' }"
@click="changeTab('3')"
>Overall</a
>{{ $t('uptime.overall') }}</a
>
<a
class="tab text-gray-400 capitalize"
:class="{ 'tab-active': tab === '2' }"
@click="changeTab('2')"
>Blocks</a
>{{ $t('module.blocks') }}</a
>
<RouterLink :to="`/${chain}/uptime/customize`">
<a class="tab text-gray-400 capitalize">Customize</a>
<a class="tab text-gray-400 capitalize">{{ $t('uptime.customize') }}</a>
</RouterLink>
</div>
<div class="bg-base-100 px-5 pt-5">
<div class="flex items-center gap-x-4">
<label v-if="chainStore.isConsumerChain" class="text-center">
<input type="checkbox" v-model="filterOptout" class="checkbox" />
Only Consumer Set
{{ $t('uptime.only_consumer_set') }}
</label>
<input
type="text"
@ -180,12 +180,12 @@ function changeTab(v: string) {
<table class="table table-compact w-full mt-5">
<thead class="capitalize">
<tr>
<td>Validator</td>
<td class="text-right">Uptime</td>
<td>Last Jailed Time</td>
<td class="text-right">Signed Precommits</td>
<td class="text-right">Start Height</td>
<td>Tombstoned</td>
<td>{{ $t('account.validator') }}</td>
<td class="text-right">{{ $t('module.uptime') }}</td>
<td>{{ $t('uptime.last_jailed_time') }}</td>
<td class="text-right">{{ $t('uptime.signed_precommits') }}</td>
<td class="text-right">{{ $t('uptime.start_height') }}</td>
<td>{{ $t('uptime.tombstoned') }}</td>
</tr>
</thead>
<tr v-for="({ v, signing, uptime }, i) in list" class="hover">
@ -239,7 +239,7 @@ function changeTab(v: string) {
<tfoot>
<tr>
<td colspan="2" class="text-right">
Minimum uptime per window:
{{ $t('uptime.minimum_uptime') }}:
<span
class="lowercase tooltip"
:data-tip="`Window size: ${slashingParam.signed_blocks_window}`"

View File

@ -19,33 +19,33 @@ const hdPath = computed(() => {
<template>
<div>
<div class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">
<h2 class="card-title">Initial Setting</h2>
<h2 class="card-title">{{ $t('widget.title') }}</h2>
<div class="my-4 grid grid-flow-col auto-cols-max overflow-auto">
<div class="form-control">
<div class="input-group">
<span>Endpoint</span>
<span>{{ $t('widget.endpoint') }}</span>
<select v-model="endpoint" class="select select-bordered w-fit">
<option disabled selected>Select Endpoint</option>
<option disabled selected>{{ $t('widget.select_endpoint') }}</option>
<option v-for="v in chainStore.current?.endpoints.rest" :value="v.address">{{ v.address }}</option>
</select>
</div>
</div>
</div>
<span class="text-base">Import global script </span>
<span class="text-base">{{ $t('widget.text_1') }}</span>
<div class="mockup-code bg-base-200 my-2">
<pre data-prefix="1"><code class="text-gray-800 dark:invert">&lt;script type="module" src="https://unpkg.com/ping-widget@latest/dist/ping-widget.js"&gt;</code></pre>
</div>
</div>
<div class="bg-base-100 my-5 px-4 pt-3 pb-4 rounded shadow">
<h2 class="card-title">Widgets</h2>
<h2 class="card-title">{{ $t('module.widget') }}</h2>
<div class="mt-4">
<span class="text-base"> 1. Connect Wallet </span>
<span class="text-base"> 1. {{ $t('widget.text_2') }}</span>
<div class="mockup-code bg-base-200 my-2">
<pre data-prefix=">"><code class="text-green-400">&lt;!-- This widget is optional. --&gt; </code></pre>
<pre data-prefix=">"><code class="text-gray-800 dark:invert">&lt;ping-connect-wallet chain-id="{{ chainId }}" hd-path="{{ hdPath }}"/&gt;</code></pre>
</div>
<span class="text-base"> 2. Osmosis Convert </span>
<span class="text-base"> 2. {{ $t('widget.text_3') }}</span>
<div class="mockup-code bg-base-200 my-2">
<pre data-prefix=">"><code class=" text-gray-800 dark:invert">&lt;ping-token-convert chain-name="{{ chainName }}" endpoint="{{endpoint}}" hd-path="{{hdPath}}"/&gt;</code></pre>
<pre data-prefix=">"><code class="text-gray-800 dark:invert">&lt;label for="PingTokenConvert" class="btn btn-sm"&gt;Buy {{chainName.toUpperCase()}}&lt;/label&gt;</code></pre>

View File

@ -168,5 +168,108 @@
"time": "Time",
"btn_out": "Out",
"btn_in": "In"
},
"staking": {
"infalation": "Infalation",
"unbonding_time": "Unbonding Time",
"double_sign_slashing": "Double Sign Slashing",
"downtime_slashing": "Downtime Slashing",
"popular": "Popular",
"active": "Active",
"inactive": "Inactive",
"rank": "Rank",
"validator": "Validator",
"voting_power": "Voting Power",
"24h_changes": "24h Changes",
"commission": "Commission",
"actions": "Actions",
"jailed": "Jailed",
"top": "Top",
"description": "Delegating to lower-rank validators will increase the overall security of the network",
"about_us": "About Us",
"website": "Website",
"contact": "Contact",
"validator_status": "Validator Status",
"status": "Status",
"total_bonded": "Total Bonded Tokens",
"self_bonded": "Self Bonded",
"min_self": "Min Self Delegation",
"annual_profit": "Annual Profit",
"unbonding_height": "Unbonding Height",
"commissions_&_rewards": "Commissions & Rewards",
"commissions": "Commissions",
"outstanding": "Outstanding",
"addresses": "Addresses",
"account_addr": "Account Address",
"operator_addr": "Operator Address",
"hex_addr": "Hex Address",
"signer_addr": "Signer Address",
"consensus_pub_key": "Consensus Public Key"
},
"statesync": {
"title": "What's State Sync?",
"title_2": "Starting New Node From State Sync",
"title_3": "Enable Snapshot For State Sync",
"description": "The Tendermint Core 0.34 release includes support for state sync, which allows a new node to join a network by fetching a snapshot of the application state at a recent height instead of fetching and replaying all historical blocks. This can reduce the time needed to sync with the network from days to minutes. Click",
"here": "Here",
"version": "Version",
"for_more_info": "For more infomation",
"text_1": "Install Binary",
"text_1_1": "We need to install the binary first and make sure that the version is the one currently in use on mainnet",
"text_2": "Enable State Sync",
"text_2_1": "We can configure Tendermint to use state sync in $DAEMON_HOME/config/config.toml",
"text_3": "Start the daemon",
"text_3_1": "If you are resetting node, run",
"text_3_2": "before you start the daemon",
"text_title_3": "To make state sync works, we can enable snapshot in $DAEMON_HOME/config/app.toml"
},
"tx": {
"title": "Summary",
"tx_hash": "Tx Hash",
"gas": "Gas",
"fee": "Fee",
"memo": "Memo",
"no_messages": "No messages"
},
"uptime": {
"overall": "Overall",
"customize": "Customize",
"only_consumer_set": "Only Consumer Set",
"last_jailed_time": "Last Jailed Time",
"signed_precommits": "Signed Precommits",
"start_height": "Start Height",
"tombstoned": "Tombstoned",
"minimum_uptime": "Minimum uptime per window",
"my_validators": "My Validators",
"add_validators_monitor": "Add validators you want to monitor",
"no": "No",
"signed_blocks": "Signed Blocks",
"missing_blocks": "Missing Blocks",
"add_validators": "Add Validators",
"add": "Add"
},
"widget": {
"title": "Initial Setting",
"endpoint": "Endpoint",
"select_endpoint": "Select Endpoint",
"text_1": "Import global script",
"text_2": "Connect Wallet",
"text_3": "Osmosis Convert"
},
"index": {
"rank": "Rank",
"price_calculator": "Price Calculator",
"close": "Close",
"buy": "Buy",
"active_proposals": "Active Proposals",
"no_active_proposals": "No active proposals",
"more": "More",
"reward": "Reward",
"unbonding": "Unbonding",
"btn_withdraw_reward": "Withdraw Rewards",
"btn_swap": "Swap",
"receive": "Receive",
"app_versions": "Application Versions",
"node_info": "Node Information"
}
}