diff --git a/packages/mask/content-script/components/CompositionDialog/EncryptionTargetSelector.tsx b/packages/mask/content-script/components/CompositionDialog/EncryptionTargetSelector.tsx index d346f120b954..ebbfa0053207 100644 --- a/packages/mask/content-script/components/CompositionDialog/EncryptionTargetSelector.tsx +++ b/packages/mask/content-script/components/CompositionDialog/EncryptionTargetSelector.tsx @@ -12,7 +12,7 @@ import { E2EUnavailableReason } from './CompositionUI.js' import { usePersonasFromDB } from '../../../shared-ui/hooks/usePersonasFromDB.js' import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI.js' import Services from '#services' -import { plural, Trans } from '@lingui/macro' +import { Plural, Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ optionTitle: { @@ -112,10 +112,7 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) { const selected = props.target const shareWithNum = props.selectedRecipientLength if (selected === EncryptionTargetType.E2E) - return plural(shareWithNum, { - one: '1 friend', - other: `${shareWithNum} friends`, - }) + return else if (selected === EncryptionTargetType.Public) return All else if (selected === EncryptionTargetType.Self) return Private unreachable(selected) diff --git a/packages/mask/shared-ui/locale/en-US.json b/packages/mask/shared-ui/locale/en-US.json index 96e206abd3c6..e32d21e2804f 100644 --- a/packages/mask/shared-ui/locale/en-US.json +++ b/packages/mask/shared-ui/locale/en-US.json @@ -4,6 +4,7 @@ "KMgp2+": [["0"], " available"], "y6VCOb": [["0"], " Mins"], "ovXZv6": [["shareWithNum", "plural", { "one": "1 friend", "other": [["shareWithNum"], " friends"] }]], + "ANYjcp": [["shareWithNum", "plural", { "one": "1 friend", "other": ["#", " friends"] }]], "lKldOY": "12-word recovery phrase is used to recover your persona data.", "llLBQ1": "a token", "uyJsf6": "About", diff --git a/packages/mask/shared-ui/locale/en-US.po b/packages/mask/shared-ui/locale/en-US.po index 691d58417121..a87de173cda9 100644 --- a/packages/mask/shared-ui/locale/en-US.po +++ b/packages/mask/shared-ui/locale/en-US.po @@ -26,7 +26,11 @@ msgid "{0} Mins" msgstr "" #: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 -msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgstr "" + +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 +msgid "{shareWithNum, plural, one {1 friend} other {# friends}}" msgstr "" #: dashboard/pages/SetupPersona/Mnemonic/index.tsx:161 @@ -140,8 +144,8 @@ msgstr "" msgid "Agree" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:119 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:139 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:116 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:136 msgid "All" msgstr "" @@ -917,7 +921,7 @@ msgstr "" msgid "Ethereum {HD_PATH_WITHOUT_INDEX_ETHEREUM}" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:140 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:137 msgid "Everyone" msgstr "" @@ -1286,11 +1290,11 @@ msgstr "" msgid "Issued at" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:147 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:144 msgid "Just Me" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:157 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:154 msgid "Just Selected Contacts" msgstr "" @@ -1891,8 +1895,8 @@ msgstr "" msgid "Privacy Policy" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:120 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:146 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:117 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:143 msgid "Private" msgstr "" @@ -2179,7 +2183,7 @@ msgstr "" msgid "Settings" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:156 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:153 #: content-script/components/InjectedComponents/SelectPeopleDialog.tsx:120 #: content-script/components/shared/SelectRecipients/SelectRecipientsDialog.tsx:206 msgid "Share with" @@ -2646,7 +2650,7 @@ msgstr "" msgid "View on Explorer" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:126 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:123 msgid "Visible To" msgstr "" diff --git a/packages/mask/shared-ui/locale/ja-JP.json b/packages/mask/shared-ui/locale/ja-JP.json index b61ec42740ef..1d1766404cf6 100644 --- a/packages/mask/shared-ui/locale/ja-JP.json +++ b/packages/mask/shared-ui/locale/ja-JP.json @@ -4,6 +4,7 @@ "KMgp2+": [["0"], " 利用可能です"], "y6VCOb": [["0"], " 分"], "ovXZv6": [["shareWithNum", "plural", { "one": "1 friend", "other": [["shareWithNum"], " friends"] }]], + "ANYjcp": [["shareWithNum", "plural", { "one": "1 friend", "other": ["#", " friends"] }]], "lKldOY": "12単語の復元フレーズは、ペルソナデータを回復するために使用されます。", "llLBQ1": "トークン", "uyJsf6": "詳細", diff --git a/packages/mask/shared-ui/locale/ja-JP.po b/packages/mask/shared-ui/locale/ja-JP.po index 053017ca609c..0c0f0966ba71 100644 --- a/packages/mask/shared-ui/locale/ja-JP.po +++ b/packages/mask/shared-ui/locale/ja-JP.po @@ -31,7 +31,11 @@ msgid "{0} Mins" msgstr "{0} 分" #: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 -msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgstr "" + +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 +msgid "{shareWithNum, plural, one {1 friend} other {# friends}}" msgstr "" #: dashboard/pages/SetupPersona/Mnemonic/index.tsx:161 @@ -145,8 +149,8 @@ msgstr "ログアウト後、関連付けられたソーシャルアカウント msgid "Agree" msgstr "同意" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:119 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:139 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:116 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:136 msgid "All" msgstr "全て" @@ -922,7 +926,7 @@ msgstr "支払いパスワードを入力する" msgid "Ethereum {HD_PATH_WITHOUT_INDEX_ETHEREUM}" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:140 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:137 msgid "Everyone" msgstr "全員" @@ -1291,11 +1295,11 @@ msgstr "認証コードが無効です。" msgid "Issued at" msgstr "発行元" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:147 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:144 msgid "Just Me" msgstr "自分のみ" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:157 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:154 msgid "Just Selected Contacts" msgstr "選択された連絡先のみ" @@ -1896,8 +1900,8 @@ msgstr "" msgid "Privacy Policy" msgstr "プライバシー・ポリシー(個人情報に関する方針)" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:120 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:146 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:117 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:143 msgid "Private" msgstr "プライベート" @@ -2184,7 +2188,7 @@ msgstr "あなたのペルソナ名を24文字以内で設定してください" msgid "Settings" msgstr "設定" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:156 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:153 #: content-script/components/InjectedComponents/SelectPeopleDialog.tsx:120 #: content-script/components/shared/SelectRecipients/SelectRecipientsDialog.tsx:206 msgid "Share with" @@ -2651,7 +2655,7 @@ msgstr "取引の詳細を表示する" msgid "View on Explorer" msgstr "エクスプローラーで表示" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:126 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:123 msgid "Visible To" msgstr "表示対象:" diff --git a/packages/mask/shared-ui/locale/ko-KR.json b/packages/mask/shared-ui/locale/ko-KR.json index a1419330c7ae..c83e2bb8cae1 100644 --- a/packages/mask/shared-ui/locale/ko-KR.json +++ b/packages/mask/shared-ui/locale/ko-KR.json @@ -4,6 +4,7 @@ "KMgp2+": [["0"], " 이용가능"], "y6VCOb": [["0"], " 분"], "ovXZv6": [["shareWithNum", "plural", { "one": "1 friend", "other": [["shareWithNum"], " friends"] }]], + "ANYjcp": [["shareWithNum", "plural", { "one": "1 friend", "other": ["#", " friends"] }]], "lKldOY": "12개 복구 문구로 페르소나 데어터를 복구할 수 있습니다.", "llLBQ1": "a token", "uyJsf6": "알아보기", diff --git a/packages/mask/shared-ui/locale/ko-KR.po b/packages/mask/shared-ui/locale/ko-KR.po index e6ced9485834..831435911b22 100644 --- a/packages/mask/shared-ui/locale/ko-KR.po +++ b/packages/mask/shared-ui/locale/ko-KR.po @@ -31,7 +31,11 @@ msgid "{0} Mins" msgstr "{0} 분" #: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 -msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgstr "" + +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 +msgid "{shareWithNum, plural, one {1 friend} other {# friends}}" msgstr "" #: dashboard/pages/SetupPersona/Mnemonic/index.tsx:161 @@ -145,8 +149,8 @@ msgstr "로그아웃 후, 연결된 소셜 계정은 더 이상 암호화하거 msgid "Agree" msgstr "동의" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:119 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:139 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:116 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:136 msgid "All" msgstr "전체" @@ -922,7 +926,7 @@ msgstr "결제 비밀번호 입력" msgid "Ethereum {HD_PATH_WITHOUT_INDEX_ETHEREUM}" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:140 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:137 msgid "Everyone" msgstr "공개" @@ -1291,11 +1295,11 @@ msgstr "유효하지 않은 인증 코드입니다." msgid "Issued at" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:147 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:144 msgid "Just Me" msgstr "나만 보기" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:157 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:154 msgid "Just Selected Contacts" msgstr "선정된 연락처에게만 공유" @@ -1896,8 +1900,8 @@ msgstr "" msgid "Privacy Policy" msgstr "개인정보처리방침" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:120 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:146 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:117 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:143 msgid "Private" msgstr "비공개" @@ -2184,7 +2188,7 @@ msgstr "최대 24자로 페로소나 이름 설정합니다" msgid "Settings" msgstr "설정" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:156 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:153 #: content-script/components/InjectedComponents/SelectPeopleDialog.tsx:120 #: content-script/components/shared/SelectRecipients/SelectRecipientsDialog.tsx:206 msgid "Share with" @@ -2651,7 +2655,7 @@ msgstr "거래 세부 내역 보기" msgid "View on Explorer" msgstr "Explorer에서 보기" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:126 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:123 msgid "Visible To" msgstr "공개 대상" diff --git a/packages/mask/shared-ui/locale/zh-CN.json b/packages/mask/shared-ui/locale/zh-CN.json index dc0a645537d2..8a18b0975bba 100644 --- a/packages/mask/shared-ui/locale/zh-CN.json +++ b/packages/mask/shared-ui/locale/zh-CN.json @@ -4,6 +4,7 @@ "KMgp2+": [["0"], " 可用"], "y6VCOb": [["0"], " 分钟"], "ovXZv6": [["shareWithNum", "plural", { "one": "1 friend", "other": [["shareWithNum"], " friends"] }]], + "ANYjcp": [["shareWithNum", "plural", { "one": "1 friend", "other": ["#", " friends"] }]], "lKldOY": "请选择恢复备份的正确方法。", "llLBQ1": "代币", "uyJsf6": "关于", diff --git a/packages/mask/shared-ui/locale/zh-CN.po b/packages/mask/shared-ui/locale/zh-CN.po index bea1c4d7233e..8f9edbaed44f 100644 --- a/packages/mask/shared-ui/locale/zh-CN.po +++ b/packages/mask/shared-ui/locale/zh-CN.po @@ -31,7 +31,11 @@ msgid "{0} Mins" msgstr "{0} 分钟" #: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 -msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgstr "" + +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 +msgid "{shareWithNum, plural, one {1 friend} other {# friends}}" msgstr "" #: dashboard/pages/SetupPersona/Mnemonic/index.tsx:161 @@ -145,8 +149,8 @@ msgstr "身份登出后,您所关联的社交网络账户将不能解密过去 msgid "Agree" msgstr "同意" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:119 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:139 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:116 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:136 msgid "All" msgstr "所有人" @@ -922,7 +926,7 @@ msgstr "输入支付密码" msgid "Ethereum {HD_PATH_WITHOUT_INDEX_ETHEREUM}" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:140 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:137 msgid "Everyone" msgstr "任何用户可见" @@ -1291,11 +1295,11 @@ msgstr "验证码错误。" msgid "Issued at" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:147 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:144 msgid "Just Me" msgstr "仅自己可见" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:157 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:154 msgid "Just Selected Contacts" msgstr "仅选定的联系人可见" @@ -1896,8 +1900,8 @@ msgstr "" msgid "Privacy Policy" msgstr "隐私政策" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:120 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:146 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:117 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:143 msgid "Private" msgstr "私密" @@ -2184,7 +2188,7 @@ msgstr "设置您的身份名称,最大长度为24个字符" msgid "Settings" msgstr "设置" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:156 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:153 #: content-script/components/InjectedComponents/SelectPeopleDialog.tsx:120 #: content-script/components/shared/SelectRecipients/SelectRecipientsDialog.tsx:206 msgid "Share with" @@ -2651,7 +2655,7 @@ msgstr "查看交易详情" msgid "View on Explorer" msgstr "在区块链浏览器查看" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:126 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:123 msgid "Visible To" msgstr "可见范围" diff --git a/packages/mask/shared-ui/locale/zh-TW.json b/packages/mask/shared-ui/locale/zh-TW.json index b8fdf9311713..a65553cfe40c 100644 --- a/packages/mask/shared-ui/locale/zh-TW.json +++ b/packages/mask/shared-ui/locale/zh-TW.json @@ -4,6 +4,7 @@ "KMgp2+": [["0"], " 可用"], "y6VCOb": [["0"], " 分钟"], "ovXZv6": [["shareWithNum", "plural", { "one": "1 friend", "other": [["shareWithNum"], " friends"] }]], + "ANYjcp": [["shareWithNum", "plural", { "one": "1 friend", "other": ["#", " friends"] }]], "lKldOY": "请选择恢复备份的正确方法。", "llLBQ1": "代币", "uyJsf6": "关于", diff --git a/packages/mask/shared-ui/locale/zh-TW.po b/packages/mask/shared-ui/locale/zh-TW.po index f4e80a7fd385..039a4272841f 100644 --- a/packages/mask/shared-ui/locale/zh-TW.po +++ b/packages/mask/shared-ui/locale/zh-TW.po @@ -31,7 +31,11 @@ msgid "{0} Mins" msgstr "" #: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 -msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgid "{shareWithNum, plural, one {1 friend} other {{shareWithNum} friends}}" +#~ msgstr "" + +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:115 +msgid "{shareWithNum, plural, one {1 friend} other {# friends}}" msgstr "" #: dashboard/pages/SetupPersona/Mnemonic/index.tsx:161 @@ -145,8 +149,8 @@ msgstr "" msgid "Agree" msgstr "同意" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:119 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:139 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:116 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:136 msgid "All" msgstr "" @@ -922,7 +926,7 @@ msgstr "" msgid "Ethereum {HD_PATH_WITHOUT_INDEX_ETHEREUM}" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:140 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:137 msgid "Everyone" msgstr "" @@ -1291,11 +1295,11 @@ msgstr "" msgid "Issued at" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:147 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:144 msgid "Just Me" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:157 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:154 msgid "Just Selected Contacts" msgstr "" @@ -1896,8 +1900,8 @@ msgstr "" msgid "Privacy Policy" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:120 -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:146 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:117 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:143 msgid "Private" msgstr "" @@ -2184,7 +2188,7 @@ msgstr "" msgid "Settings" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:156 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:153 #: content-script/components/InjectedComponents/SelectPeopleDialog.tsx:120 #: content-script/components/shared/SelectRecipients/SelectRecipientsDialog.tsx:206 msgid "Share with" @@ -2651,7 +2655,7 @@ msgstr "" msgid "View on Explorer" msgstr "" -#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:126 +#: content-script/components/CompositionDialog/EncryptionTargetSelector.tsx:123 msgid "Visible To" msgstr "" diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index b113a04af6fe..d93120848d75 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -351,7 +351,7 @@ export namespace Plugin.SiteAdaptor { */ RenderEntryComponent?: (props: { disabled: boolean - tooltipHint?: string + tooltipHint?: React.ReactNode onClick?: (walletConnectedCallback?: () => void, requiredSupportPluginID?: NetworkPluginID) => void }) => JSX.Element | null /** diff --git a/packages/plugins/Claim/src/SiteAdaptor/components/ClaimEntry/index.tsx b/packages/plugins/Claim/src/SiteAdaptor/components/ClaimEntry/index.tsx index 63a46104bfe6..c517141b866c 100644 --- a/packages/plugins/Claim/src/SiteAdaptor/components/ClaimEntry/index.tsx +++ b/packages/plugins/Claim/src/SiteAdaptor/components/ClaimEntry/index.tsx @@ -1,4 +1,4 @@ -import { memo, useCallback } from 'react' +import { memo, useCallback, type ReactNode } from 'react' import { Icons } from '@masknet/icons' import { ApplicationEntry } from '@masknet/shared' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' @@ -7,7 +7,7 @@ import { Trans } from '@lingui/macro' interface ClaimEntryProps { disabled: boolean - tooltipHint?: string + tooltipHint?: ReactNode onClick?: (walletConnectedCallback?: () => void) => void } diff --git a/packages/plugins/SmartPay/src/SiteAdaptor/components/SmartPayEntry.tsx b/packages/plugins/SmartPay/src/SiteAdaptor/components/SmartPayEntry.tsx index 2474716a6a79..20477db5f501 100644 --- a/packages/plugins/SmartPay/src/SiteAdaptor/components/SmartPayEntry.tsx +++ b/packages/plugins/SmartPay/src/SiteAdaptor/components/SmartPayEntry.tsx @@ -1,4 +1,4 @@ -import { memo, useCallback, useEffect } from 'react' +import { memo, useCallback, useEffect, type ReactNode } from 'react' import { ApplicationEntry, LeavePageConfirmModal, PersonaSelectPanelModal, useSharedTrans } from '@masknet/shared' import { CrossIsolationMessages, DashboardRoutes, PluginID } from '@masknet/shared-base' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' @@ -12,7 +12,7 @@ import { Trans } from '@lingui/macro' interface SmartPayEntryProps { disabled: boolean - tooltipHint?: string + tooltipHint?: ReactNode onClick?: (walletConnectedCallback?: () => void) => void } diff --git a/packages/plugins/Snapshot/src/SiteAdaptor/InformationCard.tsx b/packages/plugins/Snapshot/src/SiteAdaptor/InformationCard.tsx index 5fcb05233fff..541b5c0029ad 100644 --- a/packages/plugins/Snapshot/src/SiteAdaptor/InformationCard.tsx +++ b/packages/plugins/Snapshot/src/SiteAdaptor/InformationCard.tsx @@ -12,7 +12,7 @@ import { SnapshotContext } from '../context.js' import { useProposal } from './hooks/useProposal.js' import { SnapshotCard } from './SnapshotCard.js' import { SNAPSHOT_IPFS } from '../constants.js' -import { plural, Trans } from '@lingui/macro' +import { Plural, Trans } from '@lingui/macro' interface InfoFieldProps extends withClasses<'field'>, PropsWithChildren { title: ReactNode @@ -75,10 +75,7 @@ export function InformationCard() { return ( Information}> } classes={{ field: classes.info }}> {strategies diff --git a/packages/plugins/Snapshot/src/locale/en-US.po b/packages/plugins/Snapshot/src/locale/en-US.po index 60086dabc006..ce142e2ca085 100644 --- a/packages/plugins/Snapshot/src/locale/en-US.po +++ b/packages/plugins/Snapshot/src/locale/en-US.po @@ -21,7 +21,7 @@ msgstr "" msgid "{0} members" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:98 +#: src/SiteAdaptor/InformationCard.tsx:95 msgid "Author" msgstr "" @@ -47,7 +47,7 @@ msgstr "" msgid "Download report" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:129 +#: src/SiteAdaptor/InformationCard.tsx:126 msgid "End date" msgstr "" @@ -63,7 +63,7 @@ msgstr "" msgid "Information" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:114 +#: src/SiteAdaptor/InformationCard.tsx:111 msgid "IPFS" msgstr "" @@ -113,7 +113,7 @@ msgstr "" msgid "Results" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:134 +#: src/SiteAdaptor/InformationCard.tsx:131 #: src/SiteAdaptor/PluginDescriptor.tsx:33 #: src/SiteAdaptor/ProfileView.tsx:83 #: src/SiteAdaptor/VoteConfirmDialog.tsx:73 @@ -124,7 +124,7 @@ msgstr "" msgid "Space" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:124 +#: src/SiteAdaptor/InformationCard.tsx:121 msgid "Start date" msgstr "" diff --git a/packages/plugins/Snapshot/src/locale/ja-JP.po b/packages/plugins/Snapshot/src/locale/ja-JP.po index b946510f6ec3..b6a404a3925e 100644 --- a/packages/plugins/Snapshot/src/locale/ja-JP.po +++ b/packages/plugins/Snapshot/src/locale/ja-JP.po @@ -26,7 +26,7 @@ msgstr "" msgid "{0} members" msgstr "{0} メンバー" -#: src/SiteAdaptor/InformationCard.tsx:98 +#: src/SiteAdaptor/InformationCard.tsx:95 msgid "Author" msgstr "著者" @@ -52,7 +52,7 @@ msgstr "それぞれのプロジェクトまたはプロトコルのTwitterペ msgid "Download report" msgstr "レポートをダウンロードする" -#: src/SiteAdaptor/InformationCard.tsx:129 +#: src/SiteAdaptor/InformationCard.tsx:126 msgid "End date" msgstr "終了日" @@ -68,7 +68,7 @@ msgstr "" msgid "Information" msgstr "情報" -#: src/SiteAdaptor/InformationCard.tsx:114 +#: src/SiteAdaptor/InformationCard.tsx:111 msgid "IPFS" msgstr "IPFS" @@ -118,7 +118,7 @@ msgstr "提案" msgid "Results" msgstr "結果" -#: src/SiteAdaptor/InformationCard.tsx:134 +#: src/SiteAdaptor/InformationCard.tsx:131 #: src/SiteAdaptor/PluginDescriptor.tsx:33 #: src/SiteAdaptor/ProfileView.tsx:83 #: src/SiteAdaptor/VoteConfirmDialog.tsx:73 @@ -129,7 +129,7 @@ msgstr "Snapshot" msgid "Space" msgstr "スペース" -#: src/SiteAdaptor/InformationCard.tsx:124 +#: src/SiteAdaptor/InformationCard.tsx:121 msgid "Start date" msgstr "開始日" diff --git a/packages/plugins/Snapshot/src/locale/ko-KR.po b/packages/plugins/Snapshot/src/locale/ko-KR.po index 40a7a60b6951..4c3fc07db024 100644 --- a/packages/plugins/Snapshot/src/locale/ko-KR.po +++ b/packages/plugins/Snapshot/src/locale/ko-KR.po @@ -26,7 +26,7 @@ msgstr "" msgid "{0} members" msgstr "{0} 맴버" -#: src/SiteAdaptor/InformationCard.tsx:98 +#: src/SiteAdaptor/InformationCard.tsx:95 msgid "Author" msgstr "작성자" @@ -52,7 +52,7 @@ msgstr "각 프로젝트 또는 프로토콜의 트위터 페이지에 스냅샷 msgid "Download report" msgstr "리포트 다운로드" -#: src/SiteAdaptor/InformationCard.tsx:129 +#: src/SiteAdaptor/InformationCard.tsx:126 msgid "End date" msgstr "종료 날짜" @@ -68,7 +68,7 @@ msgstr "" msgid "Information" msgstr "정보" -#: src/SiteAdaptor/InformationCard.tsx:114 +#: src/SiteAdaptor/InformationCard.tsx:111 msgid "IPFS" msgstr "IPFS" @@ -118,7 +118,7 @@ msgstr "프로포절" msgid "Results" msgstr "결과" -#: src/SiteAdaptor/InformationCard.tsx:134 +#: src/SiteAdaptor/InformationCard.tsx:131 #: src/SiteAdaptor/PluginDescriptor.tsx:33 #: src/SiteAdaptor/ProfileView.tsx:83 #: src/SiteAdaptor/VoteConfirmDialog.tsx:73 @@ -129,7 +129,7 @@ msgstr "스냅숏" msgid "Space" msgstr "스페이스" -#: src/SiteAdaptor/InformationCard.tsx:124 +#: src/SiteAdaptor/InformationCard.tsx:121 msgid "Start date" msgstr "시작 날짜" diff --git a/packages/plugins/Snapshot/src/locale/zh-CN.po b/packages/plugins/Snapshot/src/locale/zh-CN.po index 2578a1429f6f..8dffde981137 100644 --- a/packages/plugins/Snapshot/src/locale/zh-CN.po +++ b/packages/plugins/Snapshot/src/locale/zh-CN.po @@ -26,7 +26,7 @@ msgstr "" msgid "{0} members" msgstr "{0} 位成员" -#: src/SiteAdaptor/InformationCard.tsx:98 +#: src/SiteAdaptor/InformationCard.tsx:95 msgid "Author" msgstr "作者" @@ -52,7 +52,7 @@ msgstr "在相应项目或协议的Twitter页面显示 Snapshot 提议。" msgid "Download report" msgstr "下载报告" -#: src/SiteAdaptor/InformationCard.tsx:129 +#: src/SiteAdaptor/InformationCard.tsx:126 msgid "End date" msgstr "结束日期" @@ -68,7 +68,7 @@ msgstr "" msgid "Information" msgstr "信息" -#: src/SiteAdaptor/InformationCard.tsx:114 +#: src/SiteAdaptor/InformationCard.tsx:111 msgid "IPFS" msgstr "IPFS" @@ -118,7 +118,7 @@ msgstr "提案" msgid "Results" msgstr "结果" -#: src/SiteAdaptor/InformationCard.tsx:134 +#: src/SiteAdaptor/InformationCard.tsx:131 #: src/SiteAdaptor/PluginDescriptor.tsx:33 #: src/SiteAdaptor/ProfileView.tsx:83 #: src/SiteAdaptor/VoteConfirmDialog.tsx:73 @@ -129,7 +129,7 @@ msgstr "Snapshot" msgid "Space" msgstr "空格" -#: src/SiteAdaptor/InformationCard.tsx:124 +#: src/SiteAdaptor/InformationCard.tsx:121 msgid "Start date" msgstr "开始日期" diff --git a/packages/plugins/Snapshot/src/locale/zh-TW.po b/packages/plugins/Snapshot/src/locale/zh-TW.po index b48ef7c5e0cb..7b3f2af2733c 100644 --- a/packages/plugins/Snapshot/src/locale/zh-TW.po +++ b/packages/plugins/Snapshot/src/locale/zh-TW.po @@ -26,7 +26,7 @@ msgstr "" msgid "{0} members" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:98 +#: src/SiteAdaptor/InformationCard.tsx:95 msgid "Author" msgstr "" @@ -52,7 +52,7 @@ msgstr "" msgid "Download report" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:129 +#: src/SiteAdaptor/InformationCard.tsx:126 msgid "End date" msgstr "" @@ -68,7 +68,7 @@ msgstr "" msgid "Information" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:114 +#: src/SiteAdaptor/InformationCard.tsx:111 msgid "IPFS" msgstr "" @@ -118,7 +118,7 @@ msgstr "" msgid "Results" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:134 +#: src/SiteAdaptor/InformationCard.tsx:131 #: src/SiteAdaptor/PluginDescriptor.tsx:33 #: src/SiteAdaptor/ProfileView.tsx:83 #: src/SiteAdaptor/VoteConfirmDialog.tsx:73 @@ -129,7 +129,7 @@ msgstr "" msgid "Space" msgstr "" -#: src/SiteAdaptor/InformationCard.tsx:124 +#: src/SiteAdaptor/InformationCard.tsx:121 msgid "Start date" msgstr "" diff --git a/packages/scripts/src/locale-kit-next/migrate.ts b/packages/scripts/src/locale-kit-next/migrate.ts index 4e947a0a4a42..df52f785ac2b 100644 --- a/packages/scripts/src/locale-kit-next/migrate.ts +++ b/packages/scripts/src/locale-kit-next/migrate.ts @@ -62,9 +62,9 @@ export async function migrate() { suppressDiagnosticEvents: true, }) - const cwd = new URL('../../../mask/', import.meta.url) - const inputURL = new URL('./shared-ui/locales/i18n_generated.ts', cwd) - const enUS_URL = new URL('./shared-ui/locales/en-US.json', cwd) + const cwd = new URL('../../../shared/', import.meta.url) + const inputURL = new URL('./src/locales/i18n_generated.ts', cwd) + const enUS_URL = new URL('./src/locales/en-US.json', cwd) const json = JSON.parse(await readFile(enUS_URL, 'utf-8')) processFile(inputURL, json) @@ -74,7 +74,7 @@ export async function migrate() { ['ja-JP', 'ko-KR', 'zh-CN', 'zh-TW'].map(async (lang) => { const langFile = JSON.parse(await readFile(new URL('./' + lang + '.json', enUS_URL), 'utf-8')) - const poFilePath = new URL('./shared-ui/locale/' + lang + '.po', cwd) + const poFilePath = new URL('./src/locale/' + lang + '.po', cwd) const poFile = await readFile(poFilePath, 'utf-8') const nextPoFile: string[] = [] diff --git a/packages/shared/src/UI/components/AccountIcons/index.tsx b/packages/shared/src/UI/components/AccountIcons/index.tsx index 883f1c3a2829..09dd4d06b1d4 100644 --- a/packages/shared/src/UI/components/AccountIcons/index.tsx +++ b/packages/shared/src/UI/components/AccountIcons/index.tsx @@ -7,6 +7,7 @@ import { Typography, type TooltipProps, Link } from '@mui/material' import { compact } from 'lodash-es' import { Linking } from '../../../index.js' import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -74,11 +75,7 @@ function AccountTooltips({ platform, type, children }: AccountTooltipsProps) { t.account_icon_tooltips_only({ context: platform!, }) - : t.account_icon_tooltips({ - source: type?.replace('_', ' ') ?? '', - context: platform, - }) - } + : Data source is retrieved from {type?.replace('_', ' ') ?? ''}.} } arrow> diff --git a/packages/shared/src/UI/components/AddCollectibles/index.tsx b/packages/shared/src/UI/components/AddCollectibles/index.tsx index 975358566fd7..ad02a9fe8ec4 100644 --- a/packages/shared/src/UI/components/AddCollectibles/index.tsx +++ b/packages/shared/src/UI/components/AddCollectibles/index.tsx @@ -18,11 +18,12 @@ import { useQueries, useQuery } from '@tanstack/react-query' import { compact, uniq } from 'lodash-es' import { memo, useCallback, useMemo, useState, type FormEvent } from 'react' import { Controller, useForm } from 'react-hook-form' -import { useSharedTrans } from '../../../locales/index.js' import { CollectibleItem, CollectibleItemSkeleton } from '../AssetsManagement/CollectibleItem.js' import { EmptyStatus } from '../EmptyStatus/index.js' import { LoadingStatus } from '../LoadingStatus/index.js' import { ReloadStatus } from '../ReloadStatus/index.js' +import { msg, Trans } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => ({ form: { @@ -124,9 +125,9 @@ function isValidTokenIds(rawIds: string) { } export const AddCollectibles = memo(function AddCollectibles(props: AddCollectiblesProps) { + const { _ } = useLingui() const { pluginID, chainId: defaultChainId, account: defaultAccount, onAdd } = props const { chainId } = useChainContext({ chainId: defaultChainId }) - const t = useSharedTrans() const theme = useTheme() const walletAccount = useAccount() const account = defaultAccount || walletAccount @@ -160,7 +161,7 @@ export const AddCollectibles = memo(function AddCollectibles(props: AddCollectib const validationMsgForAddress = useMemo(() => { if (!address) return '' if (!Utils.isValidAddress?.(address ?? '') || (addressType !== AddressType.Contract && !loadingAddressType)) - return t.collectible_contract_invalid() + return Incorrect contract address. return '' }, [address, addressType, loadingAddressType]) @@ -242,7 +243,7 @@ export const AddCollectibles = memo(function AddCollectibles(props: AddCollectib {someNotMine ? - {t.collection_not_belong_to_you()} + The contract address is incorrect or the collection does not belong to you. : null}
@@ -314,7 +315,9 @@ export const AddCollectibles = memo(function AddCollectibles(props: AddCollectib : isError ? : noResults ? - {t.no_results()} + + No results + : {assetsQueries .filter((x) => x.data) @@ -329,7 +332,7 @@ export const AddCollectibles = memo(function AddCollectibles(props: AddCollectib asset={asset} pluginID={pluginID} disableName - actionLabel={t.send()} + actionLabel={Send} disableAction onItemClick={isMine ? toggleSelect : undefined} isSelected={selectedTokenIds.includes(asset.tokenId)} @@ -342,7 +345,7 @@ export const AddCollectibles = memo(function AddCollectibles(props: AddCollectib
} disabled={disabled} onClick={handleAdd}> - {t.add_collectibles()} + Add NFTs diff --git a/packages/shared/src/UI/components/AssetsManagement/CollectibleItem.tsx b/packages/shared/src/UI/components/AssetsManagement/CollectibleItem.tsx index 727e289d8613..068ae17a2c05 100644 --- a/packages/shared/src/UI/components/AssetsManagement/CollectibleItem.tsx +++ b/packages/shared/src/UI/components/AssetsManagement/CollectibleItem.tsx @@ -8,11 +8,11 @@ import { isXnsContractAddress, } from '@masknet/web3-shared-evm' import { Button, Skeleton, Typography } from '@mui/material' -import { memo, useCallback, useMemo, type HTMLProps } from 'react' +import { memo, useCallback, useMemo, type HTMLProps, type ReactNode } from 'react' import { CollectibleCard, type CollectibleCardProps } from './CollectibleCard.js' import { Icons } from '@masknet/icons' -import { useSharedTrans } from '../../../index.js' import { EMPTY_LIST } from '@masknet/shared-base' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme, _, refs) => ({ card: { @@ -110,7 +110,7 @@ export interface CollectibleItemProps extends HTMLProps, Collect disableName?: boolean /** @default true */ disableAction?: boolean - actionLabel?: string + actionLabel?: ReactNode verifiedBy?: string[] onActionClick?(asset: CollectibleCardProps['asset']): void onItemClick?(asset: CollectibleCardProps['asset']): void @@ -132,7 +132,6 @@ export const CollectibleItem = memo((props: CollectibleItemProps) => { showUnCheckedIndicator, ...rest } = props - const t = useSharedTrans() const { classes, cx } = useStyles() const name = asset.collection?.name ?? '' const popperProps = useBoundedPopperProps() @@ -184,7 +183,7 @@ export const CollectibleItem = memo((props: CollectibleItemProps) => { {verifiedBy.length ? - + Verified by {verifiedBy.join(', ')}}> : null} diff --git a/packages/shared/src/UI/components/AssetsManagement/Collection.tsx b/packages/shared/src/UI/components/AssetsManagement/Collection.tsx index a3f6e4c5b124..b49fbab6e8fe 100644 --- a/packages/shared/src/UI/components/AssetsManagement/Collection.tsx +++ b/packages/shared/src/UI/components/AssetsManagement/Collection.tsx @@ -6,11 +6,11 @@ import type { Web3Helper } from '@masknet/web3-helpers' import { Skeleton, Typography, useForkRef } from '@mui/material' import { range } from 'lodash-es' import { memo, useLayoutEffect, type HTMLProps, useMemo } from 'react' -import { useSharedTrans } from '../../../index.js' import { isSameNFT } from '../../../utils/index.js' import { CollectibleCard } from './CollectibleCard.js' import { CollectibleItem, CollectibleItemSkeleton, type CollectibleItemProps } from './CollectibleItem.js' import { useCompactDetection } from './useCompactDetection.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles<{ compact?: boolean }>()((theme, { compact }) => ({ folder: { @@ -113,7 +113,6 @@ export const Collection = memo( selectedAsset, ...rest }: CollectionProps) => { - const t = useSharedTrans() const { compact, containerRef } = useCompactDetection() const popperProps = useBoundedPopperProps() const { classes, cx } = useStyles({ compact }) @@ -145,7 +144,7 @@ export const Collection = memo( asset={asset} pluginID={pluginID} disableName={expanded} - actionLabel={t.send()} + actionLabel={Send} disableAction={disableAction} onActionClick={onActionClick} onItemClick={onItemClick} @@ -195,7 +194,7 @@ export const Collection = memo( {verifiedBy?.length ? + title={Verified by {verifiedBy.join(', ')}}> : null} diff --git a/packages/shared/src/UI/components/AssetsManagement/CollectionHeader.tsx b/packages/shared/src/UI/components/AssetsManagement/CollectionHeader.tsx index 72c747061faf..91ecfac6da34 100644 --- a/packages/shared/src/UI/components/AssetsManagement/CollectionHeader.tsx +++ b/packages/shared/src/UI/components/AssetsManagement/CollectionHeader.tsx @@ -3,9 +3,9 @@ import { Image, NFTSpamBadge, useReportSpam } from '@masknet/shared' import { LoadingBase, ShadowRootTooltip, makeStyles } from '@masknet/theme' import { Box, Button, Typography } from '@mui/material' import { memo, type HTMLProps } from 'react' -import { useSharedTrans } from '../../../locales/index.js' import { useUserAssets } from './AssetsProvider.js' import { CollectionsContext } from './CollectionsProvider.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -44,7 +44,6 @@ interface Props extends HTMLProps { } export const CollectionHeader = memo(function CollectionHeader({ className, onResetCollection, ...rest }: Props) { - const t = useSharedTrans() const { classes, cx } = useStyles() const { getVerifiedBy } = useUserAssets() const { currentCollectionId, currentCollection } = CollectionsContext.useContainer() @@ -65,7 +64,7 @@ export const CollectionHeader = memo(function CollectionHeader({ className, onRe : null} {currentCollection.name} {currentVerifiedBy.length ? - + Verified by {currentVerifiedBy.join(', ')}}> : null} diff --git a/packages/shared/src/UI/components/AssetsManagement/CollectionList.tsx b/packages/shared/src/UI/components/AssetsManagement/CollectionList.tsx index f315447486e0..c30c944bbf0e 100644 --- a/packages/shared/src/UI/components/AssetsManagement/CollectionList.tsx +++ b/packages/shared/src/UI/components/AssetsManagement/CollectionList.tsx @@ -6,7 +6,6 @@ import { LoadingBase, makeStyles } from '@masknet/theme' import type { Web3Helper } from '@masknet/web3-helpers' import { Box, useForkRef } from '@mui/material' import type { BoxProps } from '@mui/system' -import { useSharedTrans } from '../../../locales/index.js' import { CollectibleItem, CollectibleItemSkeleton } from './CollectibleItem.js' import { Collection, CollectionSkeleton, LazyCollection, type CollectionProps } from './Collection.js' import { LoadingSkeleton } from './LoadingSkeleton.js' @@ -18,6 +17,7 @@ import { useChainRuntime } from './ChainRuntimeProvider.js' import { CollectionHeader } from './CollectionHeader.js' import { Telemetry } from '@masknet/web3-telemetry' import { EventID, EventType } from '@masknet/web3-telemetry/types' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme, { columns = 4, gap = 1.5 }) => { const gapIsNumber = typeof gap === 'number' @@ -125,7 +125,6 @@ export const CollectionList = memo(function CollectionList({ from, ...rest }: CollectionListProps) { - const t = useSharedTrans() const { classes, cx } = useStyles(gridProps, { props: rest }) const { pluginID, account, chainId, setChainId, networks } = useChainRuntime() @@ -239,7 +238,7 @@ export const CollectionList = memo(function CollectionList({
{sidebar} - {emptyText ?? t.no_NFTs_found()} + {emptyText ?? No NFTs found.}
@@ -284,7 +283,7 @@ export const CollectionList = memo(function CollectionList({ asset={asset} pluginID={pluginID} disableName - actionLabel={t.send()} + actionLabel={Send} disableAction={disableAction} isSelected={isSameNFT(pluginID, asset, selectedAsset)} onActionClick={onActionClick} @@ -334,13 +333,13 @@ const ExpandedCollection = memo(function ExpandedCollection({ emptyText, ...collectionProps }: ExpandedCollectionProps) { - const t = useSharedTrans() const { loadAssets, getAssets } = useUserAssets() const { classes, theme } = useStyles(gridProps) const { collection, assets } = collectionProps const { finished, loading } = getAssets(collection) - if (finished && !assets.length) return {emptyText ?? t.no_NFTs_found()} + if (finished && !assets.length) + return {emptyText ?? No NFTs found.} return ( <> diff --git a/packages/shared/src/UI/components/ChainBoundary/index.tsx b/packages/shared/src/UI/components/ChainBoundary/index.tsx index 5aee1ffbd4b2..40d8719d6e73 100644 --- a/packages/shared/src/UI/components/ChainBoundary/index.tsx +++ b/packages/shared/src/UI/components/ChainBoundary/index.tsx @@ -19,8 +19,8 @@ import type { Web3Helper } from '@masknet/web3-helpers' import { ProviderType } from '@masknet/web3-shared-evm' import { WalletIcon } from '../WalletIcon/index.js' import { type ActionButtonPromiseProps } from '../ActionButton/index.js' -import { useSharedTrans } from '../../../locales/index.js' import { SelectProviderModal } from '../../modals/modals.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ tooltip: { @@ -71,8 +71,6 @@ export function ChainBoundaryWithoutContext(props: Ch predicate = (actualPluginID, actualChainId) => actualPluginID === expectedPluginID && actualChainId === expectedChainId, } = props - - const t = useSharedTrans() const { classes } = useStyles(undefined, { props }) const { pluginID: actualPluginID } = useNetworkContext(actualNetworkPluginID) @@ -108,17 +106,22 @@ export function ChainBoundaryWithoutContext(props: Ch } catch (error) { if (error instanceof Error) { if (error.message === 'Chain currently not supported' || error.message === 'Invalid Request') { - showSnackbar(t.plugin_wallet_switch_network_title(), { + showSnackbar(Switch Network, { processing: false, variant: 'error', - message: t.plugin_wallet_unsupported_chain({ network: expectedChainName ?? '' }), + message: ( + + {expectedChainName ?? ''} network is not added in the wallet. Please add and try it + again. + + ), autoHideDuration: 5000, }) } else { - showSnackbar(t.plugin_wallet_switch_network_title(), { + showSnackbar(Switch Network, { processing: false, variant: 'error', - message: t.plugin_wallet_switch_chain_failed(), + message: Network error or user cancels the process., autoHideDuration: 5000, }) } @@ -127,7 +130,7 @@ export function ChainBoundaryWithoutContext(props: Ch } }, [expectedChainAllowed, isMatched, expectedChainId, actualProviderType, Web3, expectedChainName]) - const renderBox = (children?: React.ReactNode, tips?: string) => { + const renderBox = (children?: React.ReactNode, tips?: React.ReactNode) => { return ( (props: Ch startIcon={} onClick={() => SelectProviderModal.open()} {...props.ActionButtonPromiseProps}> - {t.plugin_wallet_wrong_network()} + Wrong Network : null, ) @@ -164,7 +167,7 @@ export function ChainBoundaryWithoutContext(props: Ch startIcon={} onClick={() => SelectProviderModal.open()} {...props.ActionButtonPromiseProps}> - {t.plugin_wallet_connect_a_wallet()} + Connect Wallet : null, ) @@ -180,11 +183,11 @@ export function ChainBoundaryWithoutContext(props: Ch sx={props.ActionButtonPromiseProps?.sx} onClick={() => SelectProviderModal.open()} {...props.ActionButtonPromiseProps}> - {t.plugin_wallet_change_wallet()} + Change Wallet , actualProviderType === ProviderType.WalletConnect ? - t.plugin_wallet_connect_tips() - : t.plugin_wallet_not_support_network(), + Please switch to this network in the mobile application wallet you are connected to. + : This network is not supported yet., ) } @@ -198,9 +201,9 @@ export function ChainBoundaryWithoutContext(props: Ch className={classes.switchButton} sx={props.ActionButtonPromiseProps?.sx} {...props.ActionButtonPromiseProps}> - {switchText ?? t.plugin_wallet_switch_network({ network: expectedChainName ?? '' })} + {switchText ?? Switch to {expectedChainName ?? ''}} , - t.plugin_wallet_connect_tips(), + Please switch to this network in the mobile application wallet you are connected to., ) } diff --git a/packages/shared/src/UI/components/CoinMetadataTable/index.tsx b/packages/shared/src/UI/components/CoinMetadataTable/index.tsx index 03e7b7ef5263..84348a256452 100644 --- a/packages/shared/src/UI/components/CoinMetadataTable/index.tsx +++ b/packages/shared/src/UI/components/CoinMetadataTable/index.tsx @@ -17,9 +17,9 @@ import { Typography, } from '@mui/material' import { memo, useEffect } from 'react' -import { useSharedTrans } from '../../../locales/index.js' import { ContractItem } from './ContractItem.js' import { ContractSection } from './ContractSection.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ container: { @@ -98,10 +98,10 @@ const brands: Record = { } export const CoinMetadataTable = memo(function CoinMetadataTable({ trending }: CoinMetadataTableProps) { - const t = useSharedTrans() const { classes } = useStyles() - const metadataLinks = [[t.website(), trending?.coin.home_urls]] as Array<[string, string[] | undefined]> + // eslint-disable-next-line react/no-missing-key + const metadataLinks = [[Website, trending?.coin.home_urls]] as const const contracts = trending?.contracts?.filter((x) => x.chainId) ?? [ { @@ -145,7 +145,7 @@ export const CoinMetadataTable = memo(function CoinMetadataTable({ trending }: C - {t.info()} + Info @@ -155,7 +155,7 @@ export const CoinMetadataTable = memo(function CoinMetadataTable({ trending }: C - {t.contract()} + Contract @@ -210,7 +210,7 @@ export const CoinMetadataTable = memo(function CoinMetadataTable({ trending }: C - {t.community()} + Community @@ -246,14 +246,13 @@ export const CoinMetadataTable = memo(function CoinMetadataTable({ trending }: C }) export const CoinMetadataTableSkeleton = memo(function CoinMetadataTableSkeleton() { - const t = useSharedTrans() const { classes } = useStyles() return ( - {t.info()} + Info @@ -262,7 +261,7 @@ export const CoinMetadataTableSkeleton = memo(function CoinMetadataTableSkeleton - {t.contract()} + Contract @@ -272,7 +271,7 @@ export const CoinMetadataTableSkeleton = memo(function CoinMetadataTableSkeleton - {t.website()} + Website @@ -282,7 +281,7 @@ export const CoinMetadataTableSkeleton = memo(function CoinMetadataTableSkeleton - {t.community()} + Community diff --git a/packages/shared/src/UI/components/CollectibleList/CollectibleList.tsx b/packages/shared/src/UI/components/CollectibleList/CollectibleList.tsx index 4c4d97fb1cbe..d8f38f872517 100644 --- a/packages/shared/src/UI/components/CollectibleList/CollectibleList.tsx +++ b/packages/shared/src/UI/components/CollectibleList/CollectibleList.tsx @@ -5,11 +5,11 @@ import { useWeb3Utils } from '@masknet/web3-hooks-base' import { SourceType } from '@masknet/web3-shared-base' import { Box, type BoxProps } from '@mui/material' import { memo, useCallback, useMemo, useRef } from 'react' -import { useSharedTrans } from '../../../index.js' import { ReloadStatus } from '../index.js' import { CollectibleItem, type ChangeEventOptions, type SelectableProps } from './CollectibleItem.js' import { LoadingSkeleton } from './LoadingSkeleton.js' import type { CollectibleGridProps } from './type.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme, { columns = 3, gap = 2 }) => { const gapIsNumber = typeof gap === 'number' @@ -85,7 +85,6 @@ export const CollectibleList = memo(function CollectibleList(props: CollectibleL className, ...rest } = props - const t = useSharedTrans() const { classes, cx } = useStyles({ columns, gap }) const Utils = useWeb3Utils() @@ -110,7 +109,7 @@ export const CollectibleList = memo(function CollectibleList(props: CollectibleL {loading && collectibles.length === 0 ? : error || (collectibles.length === 0 && !loading) ? - + No collectible found.} onRetry={retry} /> : {collectibles.map((token, index) => { const name = token.metadata?.name diff --git a/packages/shared/src/UI/components/CompositionDialog/BadgeRenderer.tsx b/packages/shared/src/UI/components/CompositionDialog/BadgeRenderer.tsx index baaf38a62a79..23ab6a20f9a5 100644 --- a/packages/shared/src/UI/components/CompositionDialog/BadgeRenderer.tsx +++ b/packages/shared/src/UI/components/CompositionDialog/BadgeRenderer.tsx @@ -2,7 +2,7 @@ import { useActivatedPluginsSiteAdaptor, type Plugin, usePluginTransField } from import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import type { TypedMessage } from '@masknet/typed-message' import { Box, Chip } from '@mui/material' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ chip: { @@ -21,7 +21,6 @@ interface BadgeRendererProps { export function BadgeRenderer({ meta, onDeleteMeta, readonly }: BadgeRendererProps) { const plugins = useActivatedPluginsSiteAdaptor('any') const i18n = usePluginTransField() - const t = useSharedTrans() if (!meta) return null const result = [...meta.entries()].flatMap(([metaKey, metaValue]) => { @@ -47,7 +46,7 @@ export function BadgeRenderer({ meta, onDeleteMeta, readonly }: BadgeRendererPro if (typeof desc === 'string') desc = { text: desc, - tooltip: `${t.badge_renderer_provided_by_plugin()} "${i18n(plugin.ID, plugin.name)}"`, + tooltip: Provided by plugin "{i18n(plugin.ID, plugin.name)}", } return ( ({ root: { @@ -73,7 +73,6 @@ export interface CompositionRef { } export function CompositionDialogUI(props: CompositionProps) { const { classes } = useStyles() - const t = useSharedTrans() const [initialMeta, setInitialMeta] = useState>(EMPTY_OBJECT) const [currentPostSize, __updatePostSize] = useState(0) @@ -142,7 +141,9 @@ export function CompositionDialogUI(props: CompositionProps) {
- {t.plugins()} + + Plugins +
@@ -159,7 +160,7 @@ export function CompositionDialogUI(props: CompositionProps) { variant="roundedContained" onClick={onSubmit} startIcon={}> - {t.post_dialog__button()} + Encrypt diff --git a/packages/shared/src/UI/components/CompositionDialog/PluginEntryRender.tsx b/packages/shared/src/UI/components/CompositionDialog/PluginEntryRender.tsx index bd22d4084d9b..f11d9b462283 100644 --- a/packages/shared/src/UI/components/CompositionDialog/PluginEntryRender.tsx +++ b/packages/shared/src/UI/components/CompositionDialog/PluginEntryRender.tsx @@ -10,16 +10,11 @@ import { } from '@masknet/plugin-infra/content-script' import { DialogContent, alpha } from '@mui/material' import { makeStyles } from '@masknet/theme' -import { - ClickableChip, - GrantPermissions, - InjectedDialog, - usePluginHostPermissionCheck, - useSharedTrans, -} from '@masknet/shared' +import { ClickableChip, GrantPermissions, InjectedDialog, usePluginHostPermissionCheck } from '@masknet/shared' import { EMPTY_LIST, PluginID } from '@masknet/shared-base' import { ErrorBoundary } from '@masknet/shared-base-ui' import { requestHostPermission } from '@masknet/plugin-infra/dom/context' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ sup: { @@ -106,12 +101,11 @@ const cache = new Map< function getPluginEntryDisabledDialog(define: Plugin.Shared.Definition) { if (!cache.has(define)) { cache.set(define, (props: Plugin.SiteAdaptor.CompositionDialogEntry_DialogProps) => { - const t = useSharedTrans() const { classes } = usePermissionDialogStyles() return ( Domain Request} open={props.open} onClose={props.onClose} maxWidth="sm" diff --git a/packages/shared/src/UI/components/CompositionDialog/TypedMessageEditor.tsx b/packages/shared/src/UI/components/CompositionDialog/TypedMessageEditor.tsx index 18603e6d24b0..ea5d30c1e000 100644 --- a/packages/shared/src/UI/components/CompositionDialog/TypedMessageEditor.tsx +++ b/packages/shared/src/UI/components/CompositionDialog/TypedMessageEditor.tsx @@ -10,7 +10,8 @@ import { makeStyles } from '@masknet/theme' import { InputBase, Alert, Button, inputBaseClasses, alpha } from '@mui/material' import { useCallback, useImperativeHandle, useState, useRef, memo, useMemo, useEffect, type RefAttributes } from 'react' import { BadgeRenderer } from './BadgeRenderer.js' -import { useSharedTrans } from '../../../index.js' +import { msg, Trans } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => ({ root: { @@ -81,9 +82,9 @@ export interface TypedMessageEditorRef { const emptyMessage = makeTypedMessageText('') // This is an **uncontrolled** component. (performance consideration, because it will be re-rendered very frequently). export const TypedMessageEditor = memo(function TypedMessageEditor(props: TypedMessageEditorProps) { + const { _ } = useLingui() const { onChange, readonly, ref } = props const { classes, cx } = useStyles() - const t = useSharedTrans() const [value, setValue] = useState(props.defaultValue ?? emptyMessage) const currentValue = useRef(value) @@ -148,10 +149,10 @@ export const TypedMessageEditor = memo(function TypedMessageEditor(props: TypedM severity="error" action={ }> - {t.typed_message_text_alert()} + Only TypedMessageText is supported currently. ) } @@ -175,7 +176,7 @@ export const TypedMessageEditor = memo(function TypedMessageEditor(props: TypedM onChange={setAsText} fullWidth multiline - placeholder={t.post_dialog__placeholder()} + placeholder={_(msg`Tell selective friends what's happening...`)} rows={value.meta ? 11 : 13} /> ) diff --git a/packages/shared/src/UI/components/ConnectPersonaBoundary/index.tsx b/packages/shared/src/UI/components/ConnectPersonaBoundary/index.tsx index 84e3cd37b1d5..de6aae73d38d 100644 --- a/packages/shared/src/UI/components/ConnectPersonaBoundary/index.tsx +++ b/packages/shared/src/UI/components/ConnectPersonaBoundary/index.tsx @@ -5,6 +5,7 @@ import { Icons } from '@masknet/icons' import { DashboardRoutes, type PersonaIdentifier, type PersonaInformation, type PluginID } from '@masknet/shared-base' import { type PersonaConnectStatus, useCurrentPersonaConnectStatus, useSharedTrans } from '../../../index.js' import type { IdentityResolved } from '@masknet/plugin-infra' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -83,7 +84,7 @@ export const ConnectPersonaBoundary = memo( return ( ) @@ -91,14 +92,14 @@ export const ConnectPersonaBoundary = memo( return ( ) if (!status.verified) return ( ) return null diff --git a/packages/shared/src/UI/components/CopyButton/index.tsx b/packages/shared/src/UI/components/CopyButton/index.tsx index 95079465e6d4..191ef5f91bd3 100644 --- a/packages/shared/src/UI/components/CopyButton/index.tsx +++ b/packages/shared/src/UI/components/CopyButton/index.tsx @@ -12,7 +12,7 @@ import { type ReactNode, } from 'react' import { useCopyToClipboard } from 'react-use' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ copy: { @@ -49,7 +49,6 @@ export const CopyButton = memo(function CopyButton({ ref, ...props }: CopyButtonProps) { - const t = useSharedTrans() const { classes, cx, theme } = useStyles(undefined, { props }) const [, copyToClipboard] = useCopyToClipboard() @@ -72,7 +71,7 @@ export const CopyButton = memo(function CopyButton({ [text, scoped], ) - const tooltipTitle = copied ? successText ?? t.copied() : title ?? t.copy() + const tooltipTitle = copied ? successText ?? Copied! : title ?? Copy const iconProps = { size, color } useImperativeHandle( diff --git a/packages/shared/src/UI/components/CountryCodePicker/index.tsx b/packages/shared/src/UI/components/CountryCodePicker/index.tsx index ebcd36a2b804..2c650c64713e 100644 --- a/packages/shared/src/UI/components/CountryCodePicker/index.tsx +++ b/packages/shared/src/UI/components/CountryCodePicker/index.tsx @@ -4,9 +4,11 @@ import { memo, useDeferredValue, useMemo, useState } from 'react' import { Icons } from '@masknet/icons' import { makeStyles } from '@masknet/theme' import Fuse from 'fuse.js' -import { EmptyStatus, useSharedTrans } from '../../../index.js' +import { EmptyStatus } from '../../../index.js' import { COUNTRIES, useRenderPhraseCallbackOnDepsChange } from '@masknet/shared-base-ui' import { getCountryFlag } from '../../../utils/getCountryFlag.js' +import { msg, Trans } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => ({ paper: { @@ -63,7 +65,7 @@ export interface CountryCodePickerProps { } export const CountryCodePicker = memo(({ open, anchorEl, onClose, code }) => { - const t = useSharedTrans() + const { _ } = useLingui() const { classes } = useStyles() const [query, setQuery] = useState() const deferredQuery = useDeferredValue(query) @@ -107,7 +109,7 @@ export const CountryCodePicker = memo(({ open, anchorEl, value={query} autoFocus onChange={(event) => setQuery(event.target.value)} - placeholder={t.search_area()} + placeholder={_(msg`Search Area`)} InputProps={{ disableUnderline: true, startAdornment: , size: 'small' }} sx={{ marginBottom: 0.5 }} /> @@ -139,7 +141,10 @@ export const CountryCodePicker = memo(({ open, anchorEl, ) })} - : {t.no_results()}} + : + No results + + } ) }) diff --git a/packages/shared/src/UI/components/ERC721ContractSelectPanel/index.tsx b/packages/shared/src/UI/components/ERC721ContractSelectPanel/index.tsx index 3f3f1ce800c5..5d7d403aa9ff 100644 --- a/packages/shared/src/UI/components/ERC721ContractSelectPanel/index.tsx +++ b/packages/shared/src/UI/components/ERC721ContractSelectPanel/index.tsx @@ -5,9 +5,9 @@ import { makeStyles } from '@masknet/theme' import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material' import { type NonFungibleCollection, SourceType } from '@masknet/web3-shared-base' import { useWeb3Utils } from '@masknet/web3-hooks-base' -import { useSharedTrans } from '../../../locales/index.js' import { NetworkPluginID } from '@masknet/shared-base' import { SelectNonFungibleContractModal } from '../../modals/index.js' +import { Trans } from '@lingui/macro' interface StyleProps { hasIcon: boolean @@ -69,7 +69,6 @@ export interface ERC721TokenSelectPanelProps { export function ERC721ContractSelectPanel(props: ERC721TokenSelectPanelProps) { const { onContractChange, collection, label, chainId = ChainId.Mainnet, balance } = props - const t = useSharedTrans() const { classes, cx } = useStyles({ hasIcon: !!collection?.iconURL }) const Utils = useWeb3Utils() @@ -94,7 +93,7 @@ export function ERC721ContractSelectPanel(props: ERC721TokenSelectPanelProps) {
- {label ?? t.select_an_nft()} + {label ?? Select an NFT} {( !collection?.address || @@ -103,7 +102,7 @@ export function ERC721ContractSelectPanel(props: ERC721TokenSelectPanelProps) { ) ? null : - {t.wallet_balance()}: {balance ? balance : '0'} + Balance: {balance ? balance : '0'} }
diff --git a/packages/shared/src/UI/components/EmptyStatus/index.tsx b/packages/shared/src/UI/components/EmptyStatus/index.tsx index 4ca5d80d2a41..9f62d7fe5150 100644 --- a/packages/shared/src/UI/components/EmptyStatus/index.tsx +++ b/packages/shared/src/UI/components/EmptyStatus/index.tsx @@ -2,7 +2,7 @@ import { Icons } from '@masknet/icons' import { makeStyles } from '@masknet/theme' import { Box, Typography, type BoxProps } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../locales/i18n_generated.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ statusBox: { @@ -24,13 +24,12 @@ interface Props extends BoxProps { } export const EmptyStatus = memo(function EmptyStatus({ className, children, iconSize = 32, ...rest }: Props) { - const t = useSharedTrans() const { classes, cx } = useStyles() return ( - {children ?? t.no_data()} + {children ?? No Data} ) diff --git a/packages/shared/src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx b/packages/shared/src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx index 5bf17d963292..69b6f72f89f0 100644 --- a/packages/shared/src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx +++ b/packages/shared/src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx @@ -8,7 +8,7 @@ import { ApproveStateType, useERC20TokenApproveCallback } from '@masknet/web3-ho import { isGte, isSameAddress, type FungibleToken, rightShift } from '@masknet/web3-shared-base' import type { ChainId, SchemaType } from '@masknet/web3-shared-evm' import { HelpOutline } from '@mui/icons-material' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme, _, refs) => ({ icon: {}, @@ -57,8 +57,6 @@ export function EthereumERC20TokenApprovedBoundary(props: EthereumERC20TokenAppr callback, tooltip, } = props - - const t = useSharedTrans() const { classes } = useStyles(undefined, { props }) const { account, chainId } = useChainContext({ chainId: token?.chainId }) const { data: tokenBalance } = useFungibleTokenBalance(NetworkPluginID.PLUGIN_EVM, token?.address, { @@ -120,7 +118,9 @@ export function EthereumERC20TokenApprovedBoundary(props: EthereumERC20TokenAppr variant="contained" onClick={() => refetch()} {...props.ActionButtonProps}> - {failedContent ?? t.wallet_load_retry({ symbol: token.symbol ?? token.name ?? 'Token' })} + {failedContent ?? ( + Failed to load {token.symbol ?? token.name ?? 'Token'}. Click to retry. + )} ) if (loading || !approved) @@ -143,11 +143,12 @@ export function EthereumERC20TokenApprovedBoundary(props: EthereumERC20TokenAppr showHelperToken ? + You must give the {contractName ?? ''} smart contract permission to use your{' '} + {token.symbol}. You only have to do this once per token. + + ) } placement="top" arrow @@ -161,7 +162,7 @@ export function EthereumERC20TokenApprovedBoundary(props: EthereumERC20TokenAppr } onClick={onApprove} {...props.ActionButtonProps}> - {infiniteUnlockContent ?? t.plugin_wallet_token_infinite_unlock({ symbol: token.symbol })} + {infiniteUnlockContent ?? Unlock {token.symbol}} ) if (approved) return <>{typeof children === 'function' ? children(allowance) : children} diff --git a/packages/shared/src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx b/packages/shared/src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx index 8694ddb297d9..b966aba29723 100644 --- a/packages/shared/src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx +++ b/packages/shared/src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx @@ -4,7 +4,7 @@ import { makeStyles, type ActionButtonProps, ActionButton } from '@masknet/theme import { useWeb3Utils } from '@masknet/web3-hooks-base' import type { NonFungibleCollection } from '@masknet/web3-shared-base' import { useERC721ContractIsApproveForAll, useERC721ContractSetApproveForAllCallback } from '@masknet/web3-hooks-evm' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()(() => ({})) @@ -20,7 +20,6 @@ export interface EthereumERC712TokenApprovedBoundaryProps extends withClasses<'a export function EthereumERC721TokenApprovedBoundary(props: EthereumERC712TokenApprovedBoundaryProps) { const { owner, collection, operator, children, validationMessage: _validationMessage, chainId } = props - const t = useSharedTrans() const Utils = useWeb3Utils() const { classes } = useStyles(undefined, { props }) const { @@ -41,9 +40,9 @@ export function EthereumERC721TokenApprovedBoundary(props: EthereumERC712TokenAp }, [approveState.loading]) const validationMessage = useMemo(() => { if (!collection?.address || !Utils.isValidAddress(collection.address)) - return t.plugin_wallet_select_a_nft_contract() - if (!owner || !Utils.isValidAddress(owner)) return t.plugin_wallet_select_a_nft_owner() - if (!operator || !Utils.isValidAddress(operator)) return t.plugin_wallet_select_a_nft_operator() + return Select an NFT Contract + if (!owner || !Utils.isValidAddress(owner)) return Select an NFT Contract Owner + if (!operator || !Utils.isValidAddress(operator)) return Select an NFT Contract Operator if (_validationMessage) return _validationMessage return '' }, [collection, owner, operator, _validationMessage]) @@ -57,14 +56,15 @@ export function EthereumERC721TokenApprovedBoundary(props: EthereumERC712TokenAp loading disabled {...props.ActionButtonProps}> - {t.plugin_wallet_nft_approving_all({ - symbol: - collection?.symbol ? - collection.symbol.toLowerCase() === 'unknown' ? - 'All' - : collection.symbol - : 'All', - })} + + Unlocking{' '} + {collection?.symbol ? + collection.symbol.toLowerCase() === 'unknown' ? + 'All' + : collection.symbol + : 'All'} + ... + ) } else if (validationMessage) { @@ -97,14 +97,14 @@ export function EthereumERC721TokenApprovedBoundary(props: EthereumERC712TokenAp fullWidth onClick={approveCallback} {...props.ActionButtonProps}> - {t.plugin_wallet_approve_all_nft({ - symbol: - collection?.symbol ? - collection.symbol.toLowerCase() === 'unknown' ? - 'All' - : collection.symbol - : 'All', - })} + + Unlock{' '} + {collection?.symbol ? + collection.symbol.toLowerCase() === 'unknown' ? + 'All' + : collection.symbol + : 'All'} + ) } else if (isApproveForAll === undefined) { @@ -115,7 +115,7 @@ export function EthereumERC721TokenApprovedBoundary(props: EthereumERC712TokenAp fullWidth onClick={retry} {...props.ActionButtonProps}> - {t.plugin_wallet_fail_to_load_nft_contract()} + Click to retry ) } diff --git a/packages/shared/src/UI/components/FungibleCoinMarketTable/index.tsx b/packages/shared/src/UI/components/FungibleCoinMarketTable/index.tsx index 209f459f8f0a..75bbcc9191f9 100644 --- a/packages/shared/src/UI/components/FungibleCoinMarketTable/index.tsx +++ b/packages/shared/src/UI/components/FungibleCoinMarketTable/index.tsx @@ -14,9 +14,9 @@ import { Typography, } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../locales/index.js' import { FormattedCurrency } from '../../wallet/FormattedCurrency.js' import { ProgressiveText } from '../ProgressiveText/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()({ container: { @@ -49,7 +49,6 @@ interface CoinMarketTableProps { sign?: CurrencyType } export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ trending, sign }: CoinMarketTableProps) { - const t = useSharedTrans() const { classes } = useStyles() const { isPending } = useFiatCurrencyRate() @@ -59,7 +58,7 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t - {t.usdc_price_statistic()} + Price Statistic @@ -68,7 +67,7 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t - {t.market_cap()} + Market Cap @@ -87,7 +86,7 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t - {t.circulating_supply()} + Circulating Supply @@ -98,7 +97,7 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t - {t.volume_24()} + 24 Hour Trading Vol @@ -116,7 +115,7 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t - {t.total_supply()} + Total Supply {formatSupply(market?.total_supply, '--')} @@ -130,13 +129,12 @@ export const FungibleCoinMarketTable = memo(function FungibleCoinMarketTable({ t export const FungibleCoinMarketTableSkeleton = memo(function FungibleCoinMarketTableSkeleton() { const { classes } = useStyles() - const t = useSharedTrans() return ( - {t.usdc_price_statistic()} + Price Statistic @@ -145,7 +143,7 @@ export const FungibleCoinMarketTableSkeleton = memo(function FungibleCoinMarketT - {t.market_cap()} + Market Cap @@ -156,7 +154,7 @@ export const FungibleCoinMarketTableSkeleton = memo(function FungibleCoinMarketT - {t.circulating_supply()} + Circulating Supply @@ -167,7 +165,7 @@ export const FungibleCoinMarketTableSkeleton = memo(function FungibleCoinMarketT - {t.volume_24()} + 24 Hour Trading Vol @@ -177,7 +175,7 @@ export const FungibleCoinMarketTableSkeleton = memo(function FungibleCoinMarketT - {t.total_supply()} + Total Supply diff --git a/packages/shared/src/UI/components/FungibleTokenInput/UI.tsx b/packages/shared/src/UI/components/FungibleTokenInput/UI.tsx index acdb767738d8..1a3dceb250a3 100644 --- a/packages/shared/src/UI/components/FungibleTokenInput/UI.tsx +++ b/packages/shared/src/UI/components/FungibleTokenInput/UI.tsx @@ -14,8 +14,9 @@ import { makeStyles } from '@masknet/theme' import type { Web3Helper } from '@masknet/web3-helpers' import { formatBalance } from '@masknet/web3-shared-base' import { Icons } from '@masknet/icons' -import { FormattedBalance, NetworkIcon, TokenIcon, useSharedTrans } from '../../../index.js' +import { FormattedBalance, NetworkIcon, TokenIcon } from '../../../index.js' import { useNetworkContext, useNetworks } from '@masknet/web3-hooks-base' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -154,7 +155,6 @@ export const FungibleTokenInputUI = memo( ...props }) => { const { classes, cx } = useStyles() - const t = useSharedTrans() const { pluginID } = useNetworkContext() const networks = useNetworks(pluginID) const network = networks.find((x) => x.chainId === token?.chainId) @@ -167,7 +167,10 @@ export const FungibleTokenInputUI = memo( {!disableBalance ? <> - {isNative ? t.available_balance() : t.balance()}: + {isNative ? + Available Balance + : Balance} + : {token && !loadingBalance ? ( label={token.symbol} /> : - {t.select_a_token()} + Select a token } diff --git a/packages/shared/src/UI/components/FungibleTokenList/FungibleTokenItem.tsx b/packages/shared/src/UI/components/FungibleTokenList/FungibleTokenItem.tsx index e6771e11128e..7c95aa3d9b26 100644 --- a/packages/shared/src/UI/components/FungibleTokenList/FungibleTokenItem.tsx +++ b/packages/shared/src/UI/components/FungibleTokenList/FungibleTokenItem.tsx @@ -7,13 +7,13 @@ import { Icons } from '@masknet/icons' import { useFungibleTokenBalance, useNetwork, useNetworkContext, useWeb3Utils } from '@masknet/web3-hooks-base' import type { Web3Helper } from '@masknet/web3-helpers' import { makeStyles, LoadingBase, ActionButton } from '@masknet/theme' -import { useSharedTrans } from '../../../locales/index.js' import { TokenListMode } from './type.js' import { SettingSwitch } from '../SettingSwitch/index.js' import { useTokenBlocked, useTokenTrusted } from './useTokenBlocked.js' import { FormattedBalance } from '../../wallet/index.js' import { DotLoading, NetworkIcon } from '../index.js' import { useAsyncFn } from 'react-use' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ icon: { @@ -109,7 +109,6 @@ export const getFungibleTokenItem = ( isCustomToken?: boolean, ) => { return memo(({ data, index, style }: any) => { - const t = useSharedTrans() const { classes } = useStyles() const Utils = useWeb3Utils() @@ -160,7 +159,7 @@ export const getFungibleTokenItem = ( loading={onAddOrRemoveTokenToLocalLoading} className={classes.importButton} onClick={(e) => onAddOrRemoveTokenToLocal(e, 'add')}> - {t.import()} + Import : ( {token.isCustomToken ? - {t.added_by_user()} + + Added by user + : null} } diff --git a/packages/shared/src/UI/components/FungibleTokenList/ManageTokenListBar.tsx b/packages/shared/src/UI/components/FungibleTokenList/ManageTokenListBar.tsx index 089237859c32..29d3c524bbd0 100644 --- a/packages/shared/src/UI/components/FungibleTokenList/ManageTokenListBar.tsx +++ b/packages/shared/src/UI/components/FungibleTokenList/ManageTokenListBar.tsx @@ -2,7 +2,7 @@ import { Icons } from '@masknet/icons' import { makeStyles } from '@masknet/theme' import { Stack, Typography, type StackProps } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -23,13 +23,14 @@ interface ManageTokenListBarProps extends StackProps { } export const ManageTokenListBar = memo(function ManageTokenListBar({ onEdit, ...rest }) { - const t = useSharedTrans() const { classes, cx } = useStyles() return ( - {t.erc20_manage_token_list()} + + Manage Token Lists + ) diff --git a/packages/shared/src/UI/components/FungibleTokenList/index.tsx b/packages/shared/src/UI/components/FungibleTokenList/index.tsx index 681628748aef..8469b50fcd69 100644 --- a/packages/shared/src/UI/components/FungibleTokenList/index.tsx +++ b/packages/shared/src/UI/components/FungibleTokenList/index.tsx @@ -29,10 +29,11 @@ import { type FungibleToken, } from '@masknet/web3-shared-base' import { Box, Stack } from '@mui/material' -import { useSharedTrans } from '../../../locales/index.js' import { getFungibleTokenItem } from './FungibleTokenItem.js' import { ManageTokenListBar } from './ManageTokenListBar.js' import { TokenListMode } from './type.js' +import { msg, Trans } from '@lingui/macro' +import { useLingui } from '@lingui/react' export * from './type.js' @@ -77,6 +78,7 @@ const useStyles = makeStyles()({ }) export function FungibleTokenList(props: FungibleTokenListProps) { + const { _ } = useLingui() const { tokens = EMPTY_LIST, extendTokens = true, @@ -92,8 +94,6 @@ export function FungibleTokenList(props: FungibleToke setMode, mode = TokenListMode.List, } = props - - const t = useSharedTrans() const { classes } = useStyles() const { pluginID } = useNetworkContext(props.pluginID) @@ -267,7 +267,8 @@ export function FungibleTokenList(props: FungibleToke keyword : '' }, [keyword, sortedFungibleTokensForList]) - const searchError = keyword.match(/^0x.+/i) && !Utils.isValidAddress(keyword) ? t.erc20_search_wrong_address() : '' + const searchError = + keyword.match(/^0x.+/i) && !Utils.isValidAddress(keyword) ? Incorrect contract address. : '' useEffect(() => { onSearchError?.(!!searchError) }, [searchError, !searchError]) @@ -337,7 +338,7 @@ export function FungibleTokenList(props: FungibleToke ]) const SearchFieldProps = useMemo( () => ({ - placeholder: t.erc20_token_list_placeholder(), + placeholder: _(msg`Name or Contract address e.g. USDC or 0x234...`), helperText: searchError, error: !!searchError, ...props.SearchTextFieldProps, diff --git a/packages/shared/src/UI/components/GrantPermission/index.tsx b/packages/shared/src/UI/components/GrantPermission/index.tsx index 0ccaf8378066..04e5181df58e 100644 --- a/packages/shared/src/UI/components/GrantPermission/index.tsx +++ b/packages/shared/src/UI/components/GrantPermission/index.tsx @@ -2,7 +2,7 @@ import { Icons } from '@masknet/icons' import { ActionButton, makeStyles } from '@masknet/theme' import { Typography } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../locales/i18n_generated.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ description: { @@ -21,11 +21,10 @@ export interface GrantPermissionsProps extends withClasses<'description' | 'acti } export const GrantPermissions = memo(({ permissions, onGrant, ...props }) => { const { classes } = useStyles(undefined, { props }) - const t = useSharedTrans() return ( <> - {t.authorization_descriptions()} + Mask Network requires you to authorize the following websites before using it. {permissions.join(',')} (({ permissions, onGr variant="roundedDark" onClick={onGrant} className={classes.action}> - {t.approve()} + Approve ) diff --git a/packages/shared/src/UI/components/LoadRetry/index.tsx b/packages/shared/src/UI/components/LoadRetry/index.tsx index a134bde255e7..3a0dd54603a5 100644 --- a/packages/shared/src/UI/components/LoadRetry/index.tsx +++ b/packages/shared/src/UI/components/LoadRetry/index.tsx @@ -1,6 +1,6 @@ import { memo } from 'react' import { Button, type ButtonProps, Stack, Typography } from '@mui/material' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' interface RetryHintProps { hint?: boolean @@ -12,17 +12,16 @@ interface RetryHintProps { * @deprecated use ReloadStatus instead */ export const RetryHint = memo(({ retry, hint = true, ButtonProps }) => { - const t = useSharedTrans() return ( {hint ? - {t.load_failed()} + Load failed : null} diff --git a/packages/shared/src/UI/components/LoadingStatus/index.tsx b/packages/shared/src/UI/components/LoadingStatus/index.tsx index 1778a61c57ec..4102b5addbe6 100644 --- a/packages/shared/src/UI/components/LoadingStatus/index.tsx +++ b/packages/shared/src/UI/components/LoadingStatus/index.tsx @@ -1,7 +1,7 @@ import { LoadingBase, makeStyles } from '@masknet/theme' import { Box, Typography, type BoxProps } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ statusBox: { @@ -34,11 +34,10 @@ export const LoadingStatus = memo(function LoadingStatus({ ...rest }: Props) { const { classes, cx } = useStyles() - const t = useSharedTrans() return ( - {omitText ? null : {children ?? t.loading()}} + {omitText ? null : {children ?? Loading}} ) }) diff --git a/packages/shared/src/UI/components/MaskPluginWrapper/index.tsx b/packages/shared/src/UI/components/MaskPluginWrapper/index.tsx index a681ad4c4b9a..1a55d0824255 100644 --- a/packages/shared/src/UI/components/MaskPluginWrapper/index.tsx +++ b/packages/shared/src/UI/components/MaskPluginWrapper/index.tsx @@ -10,7 +10,7 @@ import { type PluginWrapperComponentProps, } from '@masknet/plugin-infra/content-script' import { Icons } from '@masknet/icons' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' interface PluginWrapperProps extends React.PropsWithChildren { open?: boolean @@ -90,7 +90,6 @@ export function MaskPostExtraInfoWrapper(props: PluginWrapperProps) { borderRadius: wrapperProps?.borderRadius, margin: wrapperProps?.margin, }) - const t = useSharedTrans() const publisherInfo = useMemo(() => { if (!publisher) return @@ -107,7 +106,7 @@ export function MaskPostExtraInfoWrapper(props: PluginWrapperProps) { return ( - {t.powered_by()} + Powered by {main} {publisherLink ? @@ -139,7 +138,7 @@ export function MaskPostExtraInfoWrapper(props: PluginWrapperProps) { fontWeight={700} component="div" color={MaskColorVar.textPluginColor}> - {wrapperProps?.title ?? title ?? t.plugin_default_title()} + {wrapperProps?.title ?? title ?? Default}
{publisherInfo}
diff --git a/packages/shared/src/UI/components/PersonaSelectPanel/index.tsx b/packages/shared/src/UI/components/PersonaSelectPanel/index.tsx index ebcdacd24b02..006641d4eed9 100644 --- a/packages/shared/src/UI/components/PersonaSelectPanel/index.tsx +++ b/packages/shared/src/UI/components/PersonaSelectPanel/index.tsx @@ -16,7 +16,7 @@ import { makeStyles } from '@masknet/theme' import { Telemetry } from '@masknet/web3-telemetry' import { EventID, EventType } from '@masknet/web3-telemetry/types' import { Button, Stack, Typography } from '@mui/material' -import { memo, useLayoutEffect, useMemo, useState } from 'react' +import { memo, useLayoutEffect, useMemo, useState, type ReactNode } from 'react' import { useAsyncFn } from 'react-use' import { useConnectedPersonas } from '../../../hooks/useConnectedPersonas.js' import { useCurrentPersona } from '../../../hooks/useCurrentPersona.js' @@ -25,9 +25,9 @@ import { ReloadStatus } from '../ReloadStatus/index.js' import { LoadingStatus } from '../LoadingStatus/index.js' import type { PersonaNextIDMixture } from './PersonaItemUI.js' import { PersonaItemUI } from './PersonaItemUI.js' -import { useSharedTrans } from '../../../locales/index.js' import { ApplicationBoardModal, LeavePageConfirmModal } from '../../modals/index.js' import { useRenderPhraseCallbackOnDepsChange } from '@masknet/shared-base-ui' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -65,8 +65,6 @@ interface PersonaSelectPanelProps extends withClasses<'checked' | 'unchecked' | export const PersonaSelectPanel = memo(function PersonaSelectPanel(props) { const { finishTarget, enableVerify = true, onClose } = props - const t = useSharedTrans() - const currentPersonaIdentifier = useCurrentPersona() const { classes } = useStyles(undefined, { props }) @@ -107,9 +105,9 @@ export const PersonaSelectPanel = memo(function Persona info: { target: 'dashboard', url: DashboardRoutes.SignUpPersona, - text: t.applications_create_persona_hint(), - title: t.applications_create_persona_title(), - actionHint: t.applications_create_persona_action(), + text: Please create a Persona and verify your account to use this function., + title: Persona, + actionHint: Create persona, }, }) }, [!personas.length, isPending, !error]) @@ -175,33 +173,27 @@ export const PersonaSelectPanel = memo(function Persona const { persona } = selectedPersona if (!isConnected && !isVerified && enableVerify) return { - buttonText: t.applications_persona_verify_connect({ - nickname: persona.nickname ?? '', - }), - hint: t.applications_persona_verify_connect_hint({ - nickname: persona.nickname ?? '', - }), + buttonText: Connect and Verify {persona.nickname ?? ''}, + hint: ( + + Please connect {persona.nickname ?? ''} and send proof post before using dApps. + + ), } if (!isConnected) return { - buttonText: t.applications_persona_connect({ - nickname: persona.nickname ?? '', - }), - hint: t.applications_persona_connect_hint({ - nickname: persona.nickname ?? '', - }), + buttonText: Connect {persona.nickname ?? ''}, + hint: Please connect {persona.nickname ?? ''} before using dApps., } if (!isVerified) return { - buttonText: t.applications_persona_verify({ - nickname: persona.nickname ?? '', - }), - hint: t.applications_persona_verify_hint(), + buttonText: Verify {persona.nickname ?? ''}, + hint: ( + Please verify current persona with social media account before using dApps. + ), } return { - buttonText: t.applications_persona_connect({ - nickname: persona.nickname ?? '', - }), + buttonText: Connect {persona.nickname ?? ''}, } })(), onClick: handleClick, @@ -258,8 +250,8 @@ export const PersonaSelectPanel = memo(function Persona }) interface ActionContentProps extends withClasses<'button'> { - buttonText?: string - hint?: string + buttonText?: ReactNode + hint?: ReactNode onClick(): Promise } diff --git a/packages/shared/src/UI/components/PhoneNumberField/index.tsx b/packages/shared/src/UI/components/PhoneNumberField/index.tsx index 47283402de75..42371ef48afc 100644 --- a/packages/shared/src/UI/components/PhoneNumberField/index.tsx +++ b/packages/shared/src/UI/components/PhoneNumberField/index.tsx @@ -1,9 +1,11 @@ import { useMemo, useState } from 'react' import { Button, TextField, type FilledTextFieldProps, Typography } from '@mui/material' import { COUNTRIES } from '@masknet/shared-base-ui' -import { getCountryFlag, useSharedTrans } from '../../../index.js' +import { getCountryFlag } from '../../../index.js' import { Icons } from '@masknet/icons' import { CountryCodePicker } from '../CountryCodePicker/index.js' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' export interface PhoneNumberFieldProps extends Omit { code: string @@ -11,7 +13,7 @@ export interface PhoneNumberFieldProps extends Omit(null) const countryIcon = useMemo(() => { @@ -24,7 +26,7 @@ export function PhoneNumberField({ code, onCodeChange, ...rest }: PhoneNumberFie return ( <> ({ title: { @@ -47,14 +47,13 @@ export interface PluginCardFrameMiniProps { } export function PluginCardFrameMini({ icon, title, provider, providerLink, children }: PluginCardFrameMiniProps) { - const t = useSharedTrans() const { classes, theme } = useStyles() const PluginName = ( {icon ?? } - {title ?? t.plugin_card_frame_default_title()} + {title ?? Web3 Profile} ) @@ -64,10 +63,10 @@ export function PluginCardFrameMini({ icon, title, provider, providerLink, child {PluginName} - {t.plugin_card_frame_default_provided_by()} - - {provider ?? t.plugin_card_frame_default_provided_by_value()} + + Powered by + {provider ?? Mask Network} {children ?? ( - {t.plugin_card_frame_loading()} + Loading.... )} diff --git a/packages/shared/src/UI/components/PluginEnableBoundary/index.tsx b/packages/shared/src/UI/components/PluginEnableBoundary/index.tsx index 2f1e16c22edc..275571cac544 100644 --- a/packages/shared/src/UI/components/PluginEnableBoundary/index.tsx +++ b/packages/shared/src/UI/components/PluginEnableBoundary/index.tsx @@ -5,8 +5,8 @@ import type { PluginID } from '@masknet/shared-base' import { useIsMinimalMode } from '@masknet/plugin-infra/content-script' import { Stack, Typography } from '@mui/material' import { makeStyles, ActionButton } from '@masknet/theme' -import { useSharedTrans } from '../../../locales/index.js' import { setPluginMinimalModeEnabled } from '@masknet/plugin-infra/dom/context' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -23,7 +23,6 @@ interface PluginEnableBoundaryProps extends withClasses<'root'>, PropsWithChildr } export const PluginEnableBoundary = memo((props) => { - const t = useSharedTrans() const { children, pluginID } = props const { classes } = useStyles(undefined, { props }) const disabled = useIsMinimalMode(pluginID) @@ -37,7 +36,9 @@ export const PluginEnableBoundary = memo((props) => { - {t.enable_plugin_boundary_description()} + + This function has been turned off in the App settings. Enable plug-ins to fully access. + ((props) => { color="primary" onClick={onEnablePlugin} sx={{ mt: 6 }}> - {t.enable_plugin_boundary()} + Enable plugin ) diff --git a/packages/shared/src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx b/packages/shared/src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx index fce7f0c62708..90260c77e78e 100644 --- a/packages/shared/src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx +++ b/packages/shared/src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx @@ -3,7 +3,7 @@ import { CrossIsolationMessages } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' import { Button, Stack, Typography } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ button: { @@ -21,20 +21,19 @@ function openWeb3ProfileSettingDialog() { }) } export const WalletSettingsEntry = memo(function WalletSettingsEntry() { - const t = useSharedTrans() const { classes, theme } = useStyles() return ( <> - {t.show_wallet_setting_intro()} + Please select the wallet to activate the function after saving the settings. diff --git a/packages/shared/src/UI/components/ReloadStatus/index.tsx b/packages/shared/src/UI/components/ReloadStatus/index.tsx index 93ea468cf399..21c1e1f32757 100644 --- a/packages/shared/src/UI/components/ReloadStatus/index.tsx +++ b/packages/shared/src/UI/components/ReloadStatus/index.tsx @@ -1,8 +1,8 @@ import { makeStyles } from '@masknet/theme' import { Box, Typography, type BoxProps, Button } from '@mui/material' import { memo } from 'react' -import { useSharedTrans } from '../../../index.js' import type { ReactNode } from 'react' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ statusBox: { @@ -41,12 +41,11 @@ export const ReloadStatus = memo(function ReloadStatus({ ...rest }: Props) { const { classes, cx } = useStyles() - const t = useSharedTrans() return ( - {message ?? t.load_failed()} + {message ?? Load failed} ) diff --git a/packages/shared/src/UI/components/SelectGasSettingsToolbar/index.tsx b/packages/shared/src/UI/components/SelectGasSettingsToolbar/index.tsx index d7ff1d0200dc..a0c53c21d1c4 100644 --- a/packages/shared/src/UI/components/SelectGasSettingsToolbar/index.tsx +++ b/packages/shared/src/UI/components/SelectGasSettingsToolbar/index.tsx @@ -1,13 +1,7 @@ import { useEffect, useState, useMemo, useCallback, memo } from 'react' import { useAsync } from 'react-use' import { BigNumber } from 'bignumber.js' -import { - useMenuConfig, - FormattedBalance, - useSharedTrans, - ApproveMaskDialog, - SelectGasSettingsModal, -} from '@masknet/shared' +import { useMenuConfig, FormattedBalance, ApproveMaskDialog, SelectGasSettingsModal } from '@masknet/shared' import { makeStyles } from '@masknet/theme' import { GasOptionType, @@ -40,6 +34,7 @@ import { Icons } from '@masknet/icons' import { DepositPaymaster, SmartPayBundler } from '@masknet/web3-providers' import { SettingsContext } from '../SettingsBoard/Context.js' import { useGasCurrencyMenu } from '../../../hooks/useGasCurrencyMenu.js' +import { Trans } from '@lingui/macro' export interface SelectGasSettingsToolbarProps extends withClasses<'label'> { @@ -160,7 +155,6 @@ export function SelectGasSettingsToolbarUI({ onOpenCustomSetting, MenuProps, }: SelectGasSettingsToolbarProps) { - const t = useSharedTrans() const { classes, cx, theme } = useStyles(undefined, { props: { classes: externalClasses } }) const { gasOptions, GAS_OPTION_NAMES } = SettingsContext.useContainer() @@ -258,7 +252,9 @@ export function SelectGasSettingsToolbarUI({ }) .concat( - {t.gas_settings_custom()} + + Custom + , ), { @@ -338,13 +334,13 @@ export function SelectGasSettingsToolbarUI({ <> - {t.gas_settings_label_transaction_cost()} + Transaction cost - {t.edit()} + Edit - {t.gas_settings_label_gas_fee()} + + Gas Fee + - {t.gas_usd_price({ usd: gasFeeUSD })} + + ≈ {gasFeeUSD} +
- {isCustomGas ? t.gas_settings_custom() : GAS_OPTION_NAMES[currentGasOptionType]} + {isCustomGas ? + Custom + : GAS_OPTION_NAMES[currentGasOptionType]}
diff --git a/packages/shared/src/UI/components/SelectTokenChip/index.tsx b/packages/shared/src/UI/components/SelectTokenChip/index.tsx index 91ccea661d16..e4c9e0a6cb2a 100644 --- a/packages/shared/src/UI/components/SelectTokenChip/index.tsx +++ b/packages/shared/src/UI/components/SelectTokenChip/index.tsx @@ -2,9 +2,9 @@ import { noop } from 'lodash-es' import { Chip, type ChipProps } from '@mui/material' import { LoadingBase, makeStyles } from '@masknet/theme' import { ExpandMore as ExpandMoreIcon, Error as ErrorIcon } from '@mui/icons-material' -import { useSharedTrans } from '../../../locales/index.js' import { TokenIcon } from '../TokenIcon/index.js' import type { Web3Helper } from '@masknet/web3-helpers' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -41,7 +41,6 @@ export interface SelectTokenChipProps extends withClasses<'chip' | 'tokenIcon' | // todo: merge into one with SelectTokenChip export function SelectTokenChip(props: SelectTokenChipProps) { - const t = useSharedTrans() const { token, error, loading = false, readonly = false, ChipProps, chainId } = props const { classes, cx } = useStyles(undefined, { props }) if (loading) @@ -58,7 +57,7 @@ export function SelectTokenChip(props: SelectTokenChipProps) { return ( Select} size="small" clickable={!readonly} {...ChipProps} diff --git a/packages/shared/src/UI/components/SettingsBoard/Context.tsx b/packages/shared/src/UI/components/SettingsBoard/Context.tsx index 251a91448160..1883c16d8346 100644 --- a/packages/shared/src/UI/components/SettingsBoard/Context.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/Context.tsx @@ -1,11 +1,12 @@ import { useCallback, useEffect, useState } from 'react' import { createContainer } from '@masknet/shared-base-ui' -import { useSharedTrans } from '@masknet/shared' import { useGasOptions, useNetworkContext, useChainContext, useWeb3Utils } from '@masknet/web3-hooks-base' import type { Web3Helper } from '@masknet/web3-helpers' import { GasOptionType } from '@masknet/web3-shared-base' import type { NetworkPluginID } from '@masknet/shared-base' import { GasSettingsType } from './types/index.js' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const DEFAULT_SLIPPAGE_TOLERANCE = 0.5 const DEFAULT_SLIPPAGE_TOLERANCES = [0.5, 1, 2, 5] @@ -29,7 +30,7 @@ function useSettingsContext(initial?: { disableGasLimit?: boolean disableSlippageTolerance?: boolean }) { - const t = useSharedTrans() + const { _ } = useLingui() const { pluginID } = useNetworkContext(initial?.pluginID) const { chainId } = useChainContext({ chainId: initial?.chainId, @@ -91,9 +92,9 @@ function useSettingsContext(initial?: { DEFAULT_SLIPPAGE_TOLERANCE, DEFAULT_SLIPPAGE_TOLERANCES, GAS_OPTION_NAMES: { - [GasOptionType.FAST]: t.gas_settings_gas_option_type_fast(), - [GasOptionType.NORMAL]: t.gas_settings_gas_option_type_normal(), - [GasOptionType.SLOW]: t.gas_settings_gas_option_type_slow(), + [GasOptionType.FAST]: _(msg`Instant`), + [GasOptionType.NORMAL]: _(msg`High`), + [GasOptionType.SLOW]: _(msg`Medium`), [GasOptionType.CUSTOM]: '', }, diff --git a/packages/shared/src/UI/components/SettingsBoard/GasForm.tsx b/packages/shared/src/UI/components/SettingsBoard/GasForm.tsx index 34d65b21cc8b..c8ae99abeb80 100644 --- a/packages/shared/src/UI/components/SettingsBoard/GasForm.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/GasForm.tsx @@ -7,7 +7,6 @@ import { Grid, Typography } from '@mui/material' import { makeStyles, MaskAlert, MaskTextField } from '@masknet/theme' import { zodResolver } from '@hookform/resolvers/zod' import { Icons } from '@masknet/icons' -import { useSharedTrans } from '@masknet/shared' import { NUMERIC_INPUT_REGEXP_PATTERN } from '@masknet/shared-base' import { type ChainId, @@ -19,6 +18,7 @@ import { import { formatCurrency, GasOptionType, isPositive, isZero } from '@masknet/web3-shared-base' import { EVMUtils } from '@masknet/web3-providers' import { useGasSchema } from './hooks/index.js' +import { Trans } from '@lingui/macro' function getDefaultValues(transaction: Transaction, gasOptions: Record) { return { @@ -82,7 +82,6 @@ export function GasForm(props: GasFormProps) { maxPriorityFeePerGasByUser, setMaxPriorityFeePerGasByUser, } = props - const t = useSharedTrans() const { classes } = useStyles() const isEIP1559 = EVMUtils.chainResolver.isFeatureSupported(chainId, 'EIP1559') @@ -174,9 +173,7 @@ export function GasForm(props: GasFormProps) { standardSuccess: classes.alertStandardSuccess, }} icon={}> - {t.gas_settings_info_gas_fee({ - fee: formatCurrency(formatWeiToGwei(baseFeePerGas), ''), - })} + Current base fee is {formatCurrency(formatWeiToGwei(baseFeePerGas), '')} Gwei : null} @@ -191,12 +188,16 @@ export function GasForm(props: GasFormProps) { pattern: NUMERIC_INPUT_REGEXP_PATTERN, }, type: 'number', - endAdornment: {t.gwei()}, + endAdornment: ( + + Gwei + + ), }} value={isZero(gasPriceByUser ?? 0) ? gasPrice : gasPriceByUser} label={ - {t.gas_settings_label_gas_price()} + Gas Price } error={!!errors.gasPrice?.message} @@ -227,7 +228,7 @@ export function GasForm(props: GasFormProps) { value={isZero(gasLimit) ? defaultGasLimit : new BigNumber(gasLimit).toString()} label={ - {t.gas_settings_label_gas_limit()} + Gas Limit } fullWidth @@ -255,7 +256,11 @@ export function GasForm(props: GasFormProps) { pattern: NUMERIC_INPUT_REGEXP_PATTERN, }, type: 'number', - endAdornment: {t.gwei()}, + endAdornment: ( + + Gwei + + ), }} value={ isZero(maxPriorityFeePerGasByUser ?? 0) ? maxPriorityFeePerGas : ( @@ -264,7 +269,7 @@ export function GasForm(props: GasFormProps) { } label={ - {t.gas_settings_label_max_priority_fee()} + Max Priority Fee } error={!!errors.maxPriorityFeePerGas?.message} @@ -289,12 +294,16 @@ export function GasForm(props: GasFormProps) { pattern: NUMERIC_INPUT_REGEXP_PATTERN, }, type: 'number', - endAdornment: {t.gwei()}, + endAdornment: ( + + Gwei + + ), }} value={isZero(maxFeePerGasByUser ?? 0) ? maxFeePerGas : maxFeePerGasByUser} label={ - {t.gas_settings_label_max_fee()} + Max Fee } error={!!errors.maxFeePerGas?.message} diff --git a/packages/shared/src/UI/components/SettingsBoard/GasOption.tsx b/packages/shared/src/UI/components/SettingsBoard/GasOption.tsx index 00f9c42822ba..dd5d2ba6bc2d 100644 --- a/packages/shared/src/UI/components/SettingsBoard/GasOption.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/GasOption.tsx @@ -2,13 +2,13 @@ import { useMemo } from 'react' import { formatDistanceStrict, addSeconds } from 'date-fns' import { makeStyles } from '@masknet/theme' import { type GasOptionType, getLocale, formatCurrency } from '@masknet/web3-shared-base' -import { useSharedTrans } from '@masknet/shared' import { Typography, useTheme } from '@mui/material' import { CheckCircle, RadioButtonUnchecked } from '@mui/icons-material' import type { Web3Helper } from '@masknet/web3-helpers' import { formatWeiToGwei } from '@masknet/web3-shared-evm' import type { SupportedLanguages } from '@masknet/public-api' import { SettingsContext } from './Context.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -52,7 +52,6 @@ export function GasOption(props: GasOptionProps) { const { type, option, lang, checked = false, onClick } = props const { classes } = useStyles() const theme = useTheme() - const t = useSharedTrans() const { GAS_OPTION_NAMES } = SettingsContext.useContainer() const now = useMemo(() => { @@ -69,17 +68,16 @@ export function GasOption(props: GasOptionProps) { : } {GAS_OPTION_NAMES[type]} - {t.gas_settings_gas_option_estimate_distance({ - distance: formatDistanceStrict(addSeconds(now, option.estimatedSeconds), now, { + + ~{' '} + {formatDistanceStrict(addSeconds(now, option.estimatedSeconds), now, { addSuffix: true, locale: getLocale(lang), - }), - })} + })} + - {t.gas_settings_gas_option_amount_in_gwei({ - amount: formatCurrency(formatWeiToGwei(option.suggestedMaxFeePerGas), ''), - })} + up to {formatCurrency(formatWeiToGwei(option.suggestedMaxFeePerGas), '')} Gwei ) diff --git a/packages/shared/src/UI/components/SettingsBoard/GasSection.tsx b/packages/shared/src/UI/components/SettingsBoard/GasSection.tsx index 12e45c36c67f..a380098fca04 100644 --- a/packages/shared/src/UI/components/SettingsBoard/GasSection.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/GasSection.tsx @@ -1,6 +1,5 @@ import { useState } from 'react' import { makeStyles, MaskTabList } from '@masknet/theme' -import { useSharedTrans } from '@masknet/shared' import { TabContext } from '@mui/lab' import { Tab, Typography } from '@mui/material' import { NetworkPluginID } from '@masknet/shared-base' @@ -12,6 +11,7 @@ import { SettingsContext } from './Context.js' import { Section } from './Section.js' import { GasForm } from './GasForm.js' import { GasSettingsType } from './types/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -47,8 +47,6 @@ interface GasSectionProps { export function GasSection(props: GasSectionProps) { const { activeTab, setActiveTab, disableGasLimit } = props - - const t = useSharedTrans() const { classes } = useStyles() const { pluginID, @@ -91,14 +89,14 @@ export function GasSection(props: GasSectionProps) { return (
Gas Price} additions={ gasOptionType ? {activeTab === GasSettingsType.Basic ? GAS_OPTION_NAMES[gasOptionType] - : t.gas_settings_custom()} + : Custom} {` ${customPrice} Gwei`} @@ -110,12 +108,8 @@ export function GasSection(props: GasSectionProps) { variant="round" aria-label="Gas Tabs" onChange={(event, tab) => setActiveTab(tab as GasSettingsType)}> - - + Basic} value={GasSettingsType.Basic} /> + Advanced} value={GasSettingsType.Advanced} /> {activeTab === GasSettingsType.Basic ? diff --git a/packages/shared/src/UI/components/SettingsBoard/Section.tsx b/packages/shared/src/UI/components/SettingsBoard/Section.tsx index c66277f6b898..a8a7bd7991a0 100644 --- a/packages/shared/src/UI/components/SettingsBoard/Section.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/Section.tsx @@ -13,7 +13,7 @@ const useStyles = makeStyles()((theme) => { }) interface SectionProps extends PropsWithChildren { - title: string + title: React.ReactNode additions?: React.ReactNode } diff --git a/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceForm.tsx b/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceForm.tsx index 289050797770..17748daec77b 100644 --- a/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceForm.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceForm.tsx @@ -2,7 +2,6 @@ import { useState, useMemo, useEffect } from 'react' import { Controller, FormProvider, useForm } from 'react-hook-form' import { makeStyles, MaskTextField, MaskAlert } from '@masknet/theme' import { Icons } from '@masknet/icons' -import { useSharedTrans } from '@masknet/shared' import { Box, Paper } from '@mui/material' import { isZero } from '@masknet/web3-shared-base' import { NUMERIC_INPUT_REGEXP_PATTERN } from '@masknet/shared-base' @@ -10,6 +9,8 @@ import type { z as zod } from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { RadioChip } from './RadioChip.js' import { useSlippageToleranceSchema } from './hooks/index.js' +import { msg, Trans } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => { return { @@ -36,8 +37,8 @@ interface SlippageToleranceFormProps { } export function SlippageToleranceForm(props: SlippageToleranceFormProps) { + const { _ } = useLingui() const { slippageTolerance, slippageTolerances, onChange } = props - const t = useSharedTrans() const { classes } = useStyles() const schema = useSlippageToleranceSchema() @@ -87,7 +88,7 @@ export function SlippageToleranceForm(props: SlippageToleranceFormProps) { render={({ field }) => ( : tolerance < slippageTolerances[0] ? } severity="warning"> - {t.gas_settings_alert_low_slippage_tolerance()} + + Transaction with extremely low slippage tolerance might be reverted because of very small market + movement. + : tolerance > slippageTolerances.at(-1)! ? } severity="error"> - {t.gas_settings_alert_high_slippage_tolerance({ - percentage: tolerance.toString(), - })} + + You may have {tolerance.toString()}% less received with this level of slippage tolerance. + : null} diff --git a/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceSection.tsx b/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceSection.tsx index 7ef7a22fd35d..5fa7200d858a 100644 --- a/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceSection.tsx +++ b/packages/shared/src/UI/components/SettingsBoard/SlippageToleranceSection.tsx @@ -1,10 +1,10 @@ import { makeStyles } from '@masknet/theme' -import { useSharedTrans } from '@masknet/shared' import { Typography } from '@mui/material' import { formatBalance, multipliedBy } from '@masknet/web3-shared-base' import { Section } from './Section.js' import { SlippageToleranceForm } from './SlippageToleranceForm.js' import { SettingsContext } from './Context.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => { return { @@ -17,14 +17,13 @@ const useStyles = makeStyles()((theme) => { }) export function SlippageToleranceSection() { - const t = useSharedTrans() const { classes } = useStyles() const { DEFAULT_SLIPPAGE_TOLERANCES, slippageTolerance, setSlippageTolerance } = SettingsContext.useContainer() return (
Slippage Tolerance} additions={ diff --git a/packages/shared/src/UI/components/SettingsBoard/hooks/useGasSchema.ts b/packages/shared/src/UI/components/SettingsBoard/hooks/useGasSchema.ts index 2b9638f609b5..f5baf54a56a3 100644 --- a/packages/shared/src/UI/components/SettingsBoard/hooks/useGasSchema.ts +++ b/packages/shared/src/UI/components/SettingsBoard/hooks/useGasSchema.ts @@ -10,6 +10,8 @@ import { isPositive, multipliedBy, } from '@masknet/web3-shared-base' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const HIGH_FEE_WARNING_MULTIPLIER = 1.5 @@ -18,6 +20,7 @@ export function useGasSchema( transaction: Transaction | undefined, gasOptions: Record | undefined, ) { + const { _ } = useLingui() const t = useSharedTrans() return useMemo(() => { @@ -25,22 +28,22 @@ export function useGasSchema( .object({ gasLimit: zod .string() - .min(1, t.gas_settings_error_gas_limit_absence()) + .min(1, _(msg`Enter a gas limit`)) .refine( (gasLimit) => isGreaterThanOrEqualTo(gasLimit, transaction?.gas ?? 21000), - t.gas_settings_error_gas_limit_too_low(), + _(msg`Gas limit too low will cause the transaction to fail.`), ), gasPrice: zod .string() - .min(1, t.gas_settings_error_gas_price_absence()) - .refine(isPositive, t.gas_settings_error_gas_price_positive()) + .min(1, _(msg`Enter a gas price`)) + .refine(isPositive, _(msg`Gas price must be greater than 0 Gwei.`)) .refine( (value) => isGreaterThanOrEqualTo( formatGweiToWei(value), gasOptions?.slow?.suggestedMaxFeePerGas ?? 0, ), - t.gas_settings_error_gas_price_too_low(), + _(msg`Gas price is too low for network conditions.`), ) .refine( (value) => @@ -48,19 +51,19 @@ export function useGasSchema( formatGweiToWei(value), multipliedBy(gasOptions?.fast?.suggestedMaxFeePerGas ?? 0, HIGH_FEE_WARNING_MULTIPLIER), ), - t.gas_settings_error_gas_price_too_high(), + _(msg`Gas price is higher than necessary. You may pay more than needed.`), ), maxPriorityFeePerGas: zod .string() - .min(1, t.gas_settings_error_max_priority_fee_absence()) - .refine(isPositive, t.gas_settings_error_max_priority_gas_fee_positive()) + .min(1, _(msg`Enter a max priority fee`)) + .refine(isPositive, _(msg`Max priority fee must be greater than 0 Gwei.`)) .refine( (value) => isGreaterThanOrEqualTo( formatGweiToWei(value), gasOptions?.slow?.suggestedMaxPriorityFeePerGas ?? 0, ), - t.gas_settings_error_max_priority_gas_fee_too_low(), + _(msg`Max priority fee is too low for network conditions.`), ) .refine( (value) => @@ -71,18 +74,18 @@ export function useGasSchema( HIGH_FEE_WARNING_MULTIPLIER, ), ), - t.gas_settings_error_max_priority_gas_fee_too_high(), + _(msg`Max priority fee is higher than necessary. You may pay more than needed.`), ), maxFeePerGas: zod .string() - .min(1, t.gas_settings_error_max_fee_absence()) + .min(1, _(msg`Enter a max fee`)) .refine( (value) => isGreaterThanOrEqualTo( formatGweiToWei(value), gasOptions?.slow?.suggestedMaxFeePerGas ?? 0, ), - t.gas_settings_error_max_fee_too_low(), + _(msg`Max fee is too low for network conditions.`), ) .refine( (value) => @@ -90,11 +93,11 @@ export function useGasSchema( formatGweiToWei(value), multipliedBy(gasOptions?.fast?.suggestedMaxFeePerGas ?? 0, HIGH_FEE_WARNING_MULTIPLIER), ), - t.gas_settings_error_max_fee_too_high(), + _(msg`Max fee is higher than necessary.`), ), }) .refine((data) => isLessThanOrEqualTo(data.maxPriorityFeePerGas, data.maxFeePerGas), { - message: t.gas_settings_error_max_priority_gas_fee_imbalance(), + message: _(msg`Max fee cannot be lower than max priority fee.`), path: ['maxFeePerGas'], }) }, [t, transaction?.gas, gasOptions]) diff --git a/packages/shared/src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts b/packages/shared/src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts index 45d49e84c1d1..69de57799dac 100644 --- a/packages/shared/src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts +++ b/packages/shared/src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts @@ -2,15 +2,21 @@ import { useMemo } from 'react' import { useSharedTrans } from '@masknet/shared' import { isGreaterThan, isLessThanOrEqualTo } from '@masknet/web3-shared-base' import { z as zod } from 'zod' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' export function useSlippageToleranceSchema() { + const { _ } = useLingui() const t = useSharedTrans() return useMemo(() => { return zod.object({ - customSlippageTolerance: zod.string().refine((value) => { - return isGreaterThan(value, 0) && isLessThanOrEqualTo(value, 50) - }, t.gas_settings_error_custom_slippage_tolerance_invalid()), + customSlippageTolerance: zod.string().refine( + (value) => { + return isGreaterThan(value, 0) && isLessThanOrEqualTo(value, 50) + }, + _(msg`Invalid slippage tolerance.`), + ), }) }, [t]) } diff --git a/packages/shared/src/UI/components/SocialAccountList/SocialListItem.tsx b/packages/shared/src/UI/components/SocialAccountList/SocialListItem.tsx index 5a94de364166..843b0fc2b167 100644 --- a/packages/shared/src/UI/components/SocialAccountList/SocialListItem.tsx +++ b/packages/shared/src/UI/components/SocialAccountList/SocialListItem.tsx @@ -1,5 +1,5 @@ import { Icons } from '@masknet/icons' -import { CopyButton, Image, useSharedTrans } from '@masknet/shared' +import { CopyButton, Image } from '@masknet/shared' import { CrossIsolationMessages, NextIDPlatform, type BindingProof, PersistentStorages } from '@masknet/shared-base' import { openWindow } from '@masknet/shared-base-ui' import { ActionButton, MaskColors, makeStyles } from '@masknet/theme' @@ -12,6 +12,7 @@ import { useAsync } from 'react-use' import { SocialTooltip } from './SocialTooltip.js' import { resolveNextIDPlatformIcon } from './utils.js' import { first } from 'lodash-es' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ listItem: { @@ -150,7 +151,6 @@ export function SocialAccountListItem({ relatedList, profileUrl, }: SocialAccountListItemProps) { - const t = useSharedTrans() const { account } = useChainContext() const { classes, cx } = useStyles() const Utils = useWeb3Utils() @@ -230,10 +230,10 @@ export function SocialAccountListItem({ }) }}> {isSameAddress(account, value?.ownedBy.address) ? - t.view() + View : value?.isFollowing ? - t.lens_following() - : t.lens_follow()} + Following + : Follow} :
diff --git a/packages/shared/src/UI/components/SocialAccountList/SocialTooltip.tsx b/packages/shared/src/UI/components/SocialAccountList/SocialTooltip.tsx index b3afb3d43ff1..e1a0acef9038 100644 --- a/packages/shared/src/UI/components/SocialAccountList/SocialTooltip.tsx +++ b/packages/shared/src/UI/components/SocialAccountList/SocialTooltip.tsx @@ -1,9 +1,9 @@ -import { useSharedTrans } from '@masknet/shared' import { type NextIDPlatform } from '@masknet/shared-base' import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import { resolveNextIDPlatformName } from '@masknet/web3-shared-base' import { Typography } from '@mui/material' import { useRef, cloneElement, useEffect, useState, type ReactElement, type RefObject } from 'react' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()({ title: { @@ -20,13 +20,11 @@ interface SocialTooltipProps { export function SocialTooltip({ children, platform }: SocialTooltipProps) { const { classes } = useStyles() const [inView, setInView] = useState(false) - - const t = useSharedTrans() const ref = useRef(null) const title = platform ? - {t.account_icon_tooltips({ source: resolveNextIDPlatformName(platform) || platform })} + Data source is retrieved from {resolveNextIDPlatformName(platform) || platform}. : null diff --git a/packages/shared/src/UI/components/TokenAmountPanel/index.tsx b/packages/shared/src/UI/components/TokenAmountPanel/index.tsx index cfd3b7d0c20e..a99c582f8cda 100644 --- a/packages/shared/src/UI/components/TokenAmountPanel/index.tsx +++ b/packages/shared/src/UI/components/TokenAmountPanel/index.tsx @@ -6,8 +6,8 @@ import { NUMERIC_INPUT_REGEXP_PATTERN } from '@masknet/shared-base' import { type FungibleToken, formatBalance } from '@masknet/web3-shared-base' import type { ChainId, SchemaType } from '@masknet/web3-shared-evm' import { SelectTokenChip, type SelectTokenChipProps } from '../SelectTokenChip/index.js' -import { useSharedTrans } from '../../../locales/index.js' import { FormattedBalance } from '../../wallet/index.js' +import { Trans } from '@lingui/macro' const MIN_AMOUNT_LENGTH = 1 const MAX_AMOUNT_LENGTH = 79 @@ -80,7 +80,6 @@ export function TokenAmountPanel(props: TokenAmountPanelProps) { disableBalance = false, MaxChipProps, } = props - const t = useSharedTrans() const { classes, cx } = useStyles(undefined, { props }) // #region update amount by self @@ -141,7 +140,7 @@ export function TokenAmountPanel(props: TokenAmountPanelProps) { color="textSecondary" variant="body2" component="span"> - {t.balance()}: + Balance: (({ tokenSecurity }) => { - const t = useSharedTrans() - const { warn_item_quantity: attentionFactors = 0, risk_item_quantity: riskyFactors = 0 } = tokenSecurity const handleOpenDialog = () => { @@ -39,9 +37,7 @@ export const TokenSecurityBar = memo(({ tokenSecurity }) => { component="span" fontSize="12px" color={DefineMapping[SecurityMessageLevel.High].titleColor}> - {riskyFactors > 1 ? - t.risky_items({ quantity: riskyFactors.toString() }) - : t.risky_item({ quantity: riskyFactors.toString() })} + )} @@ -58,9 +54,7 @@ export const TokenSecurityBar = memo(({ tokenSecurity }) => { component="span" fontSize="12px" color={DefineMapping[SecurityMessageLevel.Medium].titleColor}> - {attentionFactors > 1 ? - t.attention_items({ quantity: attentionFactors.toString() }) - : t.attention_item({ quantity: attentionFactors.toString() })} + )} @@ -75,7 +69,7 @@ export const TokenSecurityBar = memo(({ tokenSecurity }) => { onClick={handleOpenDialog} spacing={0.5}> - {t.more()} + More @@ -85,8 +79,6 @@ export const TokenSecurityBar = memo(({ tokenSecurity }) => { }) export const NFTSpamBadge = memo(function NFTSpamBadge(props: StackProps) { - const t = useSharedTrans() - return ( {DefineMapping[SecurityMessageLevel.High].icon(14)} - {t.spam()} + Spam ) diff --git a/packages/shared/src/UI/components/TokenTransactionConfirmModal/index.tsx b/packages/shared/src/UI/components/TokenTransactionConfirmModal/index.tsx index d1a65bcd6f2a..4fc4fc76130f 100644 --- a/packages/shared/src/UI/components/TokenTransactionConfirmModal/index.tsx +++ b/packages/shared/src/UI/components/TokenTransactionConfirmModal/index.tsx @@ -6,7 +6,8 @@ import { useNonFungibleAsset } from '@masknet/web3-hooks-base' import { TokenType } from '@masknet/web3-shared-base' import { Box, Button, DialogActions, DialogContent, Typography } from '@mui/material' import type { PropsWithChildren } from 'react' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' +import type React from 'react' const useStyles = makeStyles()((theme) => ({ confirmDialog: { @@ -75,13 +76,13 @@ export interface TokenTransactionConfirmModalProps extends PropsWithChildren - {t.congratulations()} + Congratulations! {messageTextForFT} @@ -150,7 +149,7 @@ export function TokenTransactionConfirmModal({ : null} - {t.congratulations()} + Congratulations! {messageTextForNFT} diff --git a/packages/shared/src/UI/components/TokenWithSocialGroupMenu/index.tsx b/packages/shared/src/UI/components/TokenWithSocialGroupMenu/index.tsx index 8f9d156fe700..0f688a13a624 100644 --- a/packages/shared/src/UI/components/TokenWithSocialGroupMenu/index.tsx +++ b/packages/shared/src/UI/components/TokenWithSocialGroupMenu/index.tsx @@ -7,10 +7,9 @@ import { isSameAddress, type SearchResultType } from '@masknet/web3-shared-base' import { Divider, Menu, MenuItem, Typography, type MenuProps } from '@mui/material' import { groupBy, toPairs } from 'lodash-es' import { memo, useCallback, type PropsWithChildren } from 'react' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const MENU_ITEM_HEIGHT = 40 -const MENU_LIST_PADDING = 8 const useStyles = makeStyles()((theme) => ({ groupName: { @@ -107,7 +106,6 @@ export const TokenWithSocialGroupMenu = memo(function TokenWithSocialGroupMenu({ ...rest }: TokenWithSocialGroupProps) { const { classes } = useStyles() - const t = useSharedTrans() const onSelect = useCallback( (value: Web3Helper.TokenResultAll, index: number) => { @@ -157,7 +155,9 @@ export const TokenWithSocialGroupMenu = memo(function TokenWithSocialGroupMenu({
{collectionList.length > 0 && socialAccounts?.length ? <> - {t.address_viewer_address_name_address()} + + Address + : null} diff --git a/packages/shared/src/UI/components/UploadDropArea/index.tsx b/packages/shared/src/UI/components/UploadDropArea/index.tsx index c962c67541e1..d84a71ac7fa1 100644 --- a/packages/shared/src/UI/components/UploadDropArea/index.tsx +++ b/packages/shared/src/UI/components/UploadDropArea/index.tsx @@ -4,6 +4,7 @@ import { alpha, Button, Typography } from '@mui/material' import { type HTMLProps, memo, useCallback, useRef } from 'react' import { useDropArea } from 'react-use' import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ dropArea: { @@ -119,11 +120,19 @@ export const UploadDropArea = memo(
- {t.upload_drag_n_drop()} - {omitSizeLimit ? null : {t.upload_size_limit()}} - {t.upload_or()} + + Drag & Drop your file here + + {omitSizeLimit ? null : ( + + Size limit: 10 MB + + )} + + or +
) diff --git a/packages/shared/src/UI/components/VerifyNextIDDialog/index.tsx b/packages/shared/src/UI/components/VerifyNextIDDialog/index.tsx index e464eb01d404..23692e559694 100644 --- a/packages/shared/src/UI/components/VerifyNextIDDialog/index.tsx +++ b/packages/shared/src/UI/components/VerifyNextIDDialog/index.tsx @@ -16,10 +16,10 @@ import { useMemo } from 'react' import { Trans as Trans2 } from 'react-i18next' import { useAsyncFn } from 'react-use' import { useVerifyContent } from '../../../hooks/index.js' -import { useSharedTrans } from '../../../locales/i18n_generated.js' import { useBaseUIRuntime } from '../../contexts/index.js' import { BindingDialog, type BindingDialogProps } from '../BindingDialog/index.js' import { EmojiAvatar } from '../EmojiAvatar/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ dialog: { @@ -157,7 +157,6 @@ export interface VerifyNextIDDialogProps extends BindingDialogProps { } export function VerifyNextIDDialog({ onSentPost, onClose, personaInfo }: VerifyNextIDDialogProps) { - const t = useSharedTrans() const { classes, cx } = useStyles() const queryClient = useQueryClient() @@ -243,7 +242,7 @@ export function VerifyNextIDDialog({ onSentPost, onClose, personaInfo }: VerifyN : creatingVerifyContent ? <> - {t.verify_next_id_post_content()} + Post content: @@ -254,17 +253,23 @@ export function VerifyNextIDDialog({ onSentPost, onClose, personaInfo }: VerifyN - {t.verify_next_id_tips()} + + We will need to verify your Twitter account and record it on the NextID. Please post + it for validation. + : content?.post ? <> - {t.verify_next_id_post_content()} + Post content: {content.post} - {t.verify_next_id_tips()} + + We will need to verify your Twitter account and record it on the NextID. Please post + it for validation. + : null} @@ -279,7 +284,7 @@ export function VerifyNextIDDialog({ onSentPost, onClose, personaInfo }: VerifyN loading={verifying} onClick={onVerify}> - {t.send()} + Send
diff --git a/packages/shared/src/UI/components/WalletConnectedBoundary/index.tsx b/packages/shared/src/UI/components/WalletConnectedBoundary/index.tsx index acab30bbbd18..88e71a3561a5 100644 --- a/packages/shared/src/UI/components/WalletConnectedBoundary/index.tsx +++ b/packages/shared/src/UI/components/WalletConnectedBoundary/index.tsx @@ -1,5 +1,4 @@ import { makeStyles, ActionButton, type ActionButtonProps } from '@masknet/theme' -import { useSharedTrans } from '../../../locales/index.js' import { isZero } from '@masknet/web3-shared-base' import { useChainContext, @@ -13,6 +12,7 @@ import { useAsync } from 'react-use' import { SmartPayBundler } from '@masknet/web3-providers' import { NetworkPluginID } from '@masknet/shared-base' import { SelectProviderModal, WalletRiskWarningModal } from '../../modals/modals.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()({ button: { @@ -32,8 +32,6 @@ export interface WalletConnectedBoundaryProps extends withClasses<'connectWallet export function WalletConnectedBoundary(props: WalletConnectedBoundaryProps) { const { children = null, offChain = false, hideRiskWarningConfirmed = false, expectedChainId, noGasText } = props - - const t = useSharedTrans() const { classes, cx } = useStyles(undefined, { props }) const { pluginID } = useNetworkContext() @@ -56,7 +54,7 @@ export function WalletConnectedBoundary(props: WalletConnectedBoundaryProps) { fullWidth onClick={() => SelectProviderModal.open()} {...props.ActionButtonProps}> - {t.plugin_wallet_connect_a_wallet()} + Connect Wallet ) @@ -73,7 +71,7 @@ export function WalletConnectedBoundary(props: WalletConnectedBoundaryProps) { }) }} {...props.ActionButtonProps}> - {t.plugin_wallet_confirm_risk_warning()} + Confirm Risk Warning ) @@ -87,15 +85,15 @@ export function WalletConnectedBoundary(props: WalletConnectedBoundaryProps) { onClick={nativeTokenBalance.retry} {...props.ActionButtonProps}> {nativeTokenBalance.loading ? - t.plugin_wallet_update_gas_fee() - : noGasText ?? t.plugin_wallet_no_gas_fee()} + Updating Gas Fee… + : noGasText ?? No Enough Gas Fee} ) if (!chainIdValid && !offChain) return ( - {t.plugin_wallet_invalid_network()} + Invalid Network ) diff --git a/packages/shared/src/UI/components/WalletStatusBar/Action.tsx b/packages/shared/src/UI/components/WalletStatusBar/Action.tsx index ee66e2a8a9a4..2018ce745838 100644 --- a/packages/shared/src/UI/components/WalletStatusBar/Action.tsx +++ b/packages/shared/src/UI/components/WalletStatusBar/Action.tsx @@ -1,7 +1,7 @@ import { memo, type PropsWithChildren, useRef } from 'react' import { Box, Button } from '@mui/material' -import { useSharedTrans } from '../../../locales/index.js' import { Sniffings } from '@masknet/shared-base' +import { Trans } from '@lingui/macro' interface ActionProps extends PropsWithChildren { openSelectWalletDialog: () => void @@ -9,13 +9,12 @@ interface ActionProps extends PropsWithChildren { export const Action = memo(function Action({ children, openSelectWalletDialog }) { const ref = useRef(undefined) - const t = useSharedTrans() return ( {children ?? ( )} diff --git a/packages/shared/src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx b/packages/shared/src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx index 657b9336f78a..a3a4017d17f8 100644 --- a/packages/shared/src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx +++ b/packages/shared/src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx @@ -20,13 +20,13 @@ import { useChainId, useWeb3Utils, } from '@masknet/web3-hooks-base' -import { useSharedTrans } from '../../../locales/index.js' import { Action } from './Action.js' import type { WalletDescriptionProps } from './WalletDescription.js' import { useWalletName } from './hooks/useWalletName.js' import { WalletDescription } from './WalletDescription.js' import { WalletMenuItem } from './WalletMenuItem.js' import { SelectProviderModal, WalletStatusModal, useMenuConfig } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -72,7 +72,6 @@ interface PluginVerifiedWalletStatusBarProps extends PropsWithChildren { export const PluginVerifiedWalletStatusBar = memo( ({ className, children, verifiedWallets, onChange, expectedAddress, openPopupWindow, onChangeWallet }) => { - const t = useSharedTrans() const { classes, cx } = useStyles() const account = useAccount() @@ -176,7 +175,7 @@ export const PluginVerifiedWalletStatusBar = memo SelectProviderModal.open()} sx={{ minWidth: 311 }}> - {t.connect_your_wallet()} + Connect your wallet , wallets.length ? : null, @@ -195,7 +194,7 @@ export const PluginVerifiedWalletStatusBar = memo - {t.connected_wallet_settings()} + Connected wallets settings @@ -214,7 +213,7 @@ export const PluginVerifiedWalletStatusBar = memo ) diff --git a/packages/shared/src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx b/packages/shared/src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx index 87f0fce45111..b807f855698a 100644 --- a/packages/shared/src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx +++ b/packages/shared/src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx @@ -18,10 +18,10 @@ import type { Web3Helper } from '@masknet/web3-helpers' import { type NetworkPluginID, Sniffings } from '@masknet/shared-base' import { TransactionStatusType } from '@masknet/web3-shared-base' import { ProviderType } from '@masknet/web3-shared-evm' -import { useSharedTrans } from '../../../locales/index.js' import { WalletDescription } from './WalletDescription.js' import { Action } from './Action.js' import { SelectProviderModal, WalletStatusModal } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -72,7 +72,6 @@ const PluginWalletStatusBarWithoutContext = memo { - const t = useSharedTrans() const { classes, cx } = useStyles() const { pluginID } = useNetworkContext() @@ -103,7 +102,7 @@ const PluginWalletStatusBarWithoutContext = memo ) diff --git a/packages/shared/src/UI/components/WalletStatusBar/WalletDescription.tsx b/packages/shared/src/UI/components/WalletStatusBar/WalletDescription.tsx index 3306909e09fc..0936c6d7ede8 100644 --- a/packages/shared/src/UI/components/WalletStatusBar/WalletDescription.tsx +++ b/packages/shared/src/UI/components/WalletStatusBar/WalletDescription.tsx @@ -3,7 +3,7 @@ import { memo } from 'react' import { alpha, Box, Link, Typography } from '@mui/material' import { CopyButton, WalletIcon } from '@masknet/shared' import { Icons } from '@masknet/icons' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ root: { @@ -79,7 +79,6 @@ export const WalletDescription = memo( verified, }) => { const { classes } = useStyles() - const t = useSharedTrans() return ( @@ -123,7 +122,7 @@ export const WalletDescription = memo( e.stopPropagation() onPendingClick?.() }}> - {t.recent_transaction_pending()} + Pending
: null} diff --git a/packages/shared/src/UI/components/WalletStatusBar/WalletMenuItem.tsx b/packages/shared/src/UI/components/WalletStatusBar/WalletMenuItem.tsx index 03eb99579a72..8acd8f9bf606 100644 --- a/packages/shared/src/UI/components/WalletStatusBar/WalletMenuItem.tsx +++ b/packages/shared/src/UI/components/WalletStatusBar/WalletMenuItem.tsx @@ -15,7 +15,7 @@ import { import type { Web3Helper } from '@masknet/web3-helpers' import { makeStyles } from '@masknet/theme' import { WalletDescription, type WalletDescriptionProps } from './WalletDescription.js' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ icon: { @@ -35,7 +35,6 @@ interface WalletMenuItemProps { export const WalletMenuItem = memo( ({ address, selected, onChangeWallet, platform, onSelect, verified, expectedChainId }) => { - const t = useSharedTrans() const { classes } = useStyles() const { pluginID } = useNetworkContext(platform ? resolveNextID_NetworkPluginID(platform) : undefined) @@ -77,7 +76,7 @@ export const WalletMenuItem = memo( {onChangeWallet ? : null} diff --git a/packages/shared/src/UI/components/WalletStatusBox/TransactionList.tsx b/packages/shared/src/UI/components/WalletStatusBox/TransactionList.tsx index 178d7390ec24..58700f35dd46 100644 --- a/packages/shared/src/UI/components/WalletStatusBox/TransactionList.tsx +++ b/packages/shared/src/UI/components/WalletStatusBox/TransactionList.tsx @@ -14,7 +14,7 @@ import { } from '@masknet/web3-shared-base' import { getContractOwnerDomain } from '@masknet/web3-shared-evm' import { Grid, type GridProps, Link, List, ListItem, type ListProps, Stack, Typography } from '@mui/material' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ list: { @@ -84,13 +84,12 @@ interface TransactionProps extends GridProps { } function Transaction({ chainId, transaction: tx, onClear = noop, ...rest }: TransactionProps) { - const t = useSharedTrans() const { classes, theme } = useStyles() - const statusTextMap: Record = { - [TransactionStatusType.NOT_DEPEND]: t.recent_transaction_pending(), - [TransactionStatusType.SUCCEED]: t.recent_transaction_success(), - [TransactionStatusType.FAILED]: t.recent_transaction_failed(), + const statusTextMap = { + [TransactionStatusType.NOT_DEPEND]: Pending, + [TransactionStatusType.SUCCEED]: Success, + [TransactionStatusType.FAILED]: Failed, } const Utils = useWeb3Utils() @@ -159,7 +158,7 @@ function Transaction({ chainId, transaction: tx, onClear = noop, ...rest }: Tran {txStatus === TransactionStatusType.NOT_DEPEND ? - {t.wallet_status_pending_clear()} + Clear : null} diff --git a/packages/shared/src/UI/components/WalletStatusBox/index.tsx b/packages/shared/src/UI/components/WalletStatusBox/index.tsx index 9dd9c3ba54da..252c3d502737 100644 --- a/packages/shared/src/UI/components/WalletStatusBox/index.tsx +++ b/packages/shared/src/UI/components/WalletStatusBox/index.tsx @@ -13,19 +13,14 @@ import { useChainIdValid, useWeb3Utils, } from '@masknet/web3-hooks-base' -import { - FormattedAddress, - WalletIcon, - SelectProviderModal, - useSharedTrans, - WalletStatusModal, - CopyButton, -} from '@masknet/shared' +import { FormattedAddress, WalletIcon, SelectProviderModal, WalletStatusModal, CopyButton } from '@masknet/shared' import { ProviderType } from '@masknet/web3-shared-evm' import { formatBalance } from '@masknet/web3-shared-base' import { delay } from '@masknet/kit' import { Icons } from '@masknet/icons' import { usePendingTransactions } from './usePendingTransactions.js' +import { Trans, msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles<{ contentBackground?: string @@ -112,7 +107,7 @@ export interface WalletStatusBox { } export function WalletStatusBox(props: WalletStatusBox) { - const t = useSharedTrans() + const { _ } = useLingui() const providerDescriptor = useProviderDescriptor<'all'>() const theme = useTheme() const { classes, cx } = useStyles({ @@ -146,7 +141,7 @@ export function WalletStatusBox(props: WalletStatusBox) { variant="contained" size="small" onClick={() => SelectProviderModal.open()}> - {t.plugin_wallet_on_connect()} + Connect Wallet
) @@ -189,7 +184,7 @@ export function WalletStatusBox(props: WalletStatusBox) { className={classes.link} href={Utils.explorerResolver.addressLink(chainId, account) ?? ''} target="_blank" - title={t.plugin_wallet_view_on_explorer()} + title={_(msg`View on Explorer`)} rel="noopener noreferrer"> @@ -223,7 +218,7 @@ export function WalletStatusBox(props: WalletStatusBox) { WalletStatusModal.close() await Web3.disconnect() }}> - {t.plugin_wallet_disconnect()} + Disconnect
)} diff --git a/packages/shared/src/UI/components/WalletStatusBox/usePendingTransactions.tsx b/packages/shared/src/UI/components/WalletStatusBox/usePendingTransactions.tsx index b57d269acf28..6cb62d13c34d 100644 --- a/packages/shared/src/UI/components/WalletStatusBox/usePendingTransactions.tsx +++ b/packages/shared/src/UI/components/WalletStatusBox/usePendingTransactions.tsx @@ -9,6 +9,7 @@ import { Typography } from '@mui/material' import { useState } from 'react' import { TransactionList } from './TransactionList.js' import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ summaryWrapper: { @@ -57,7 +58,7 @@ export function usePendingTransactions() {
{pendingTransactions.length ? - {t.wallet_status_pending_clear_all()} + Clear All : null} diff --git a/packages/shared/src/UI/contexts/components/ApproveMaskDialog.tsx b/packages/shared/src/UI/contexts/components/ApproveMaskDialog.tsx index 7f2fad0f4fb0..2368bf169d70 100644 --- a/packages/shared/src/UI/contexts/components/ApproveMaskDialog.tsx +++ b/packages/shared/src/UI/contexts/components/ApproveMaskDialog.tsx @@ -10,6 +10,7 @@ import { toFixed } from '@masknet/web3-shared-base' import { useSmartPayConstants } from '@masknet/web3-shared-evm' import { Button, Dialog, DialogActions, DialogContent, DialogTitle, InputBase, Typography } from '@mui/material' import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ paper: { @@ -71,14 +72,14 @@ export const ApproveMaskDialog = memo(({ open, handleClo if (approveStateType === ApproveStateType.UNKNOWN) { return ( - {sharedI18N.wallet_transfer_error_amount_absence()} + Enter an amount ) } if (approveStateType === ApproveStateType.FAILED) { return ( - {sharedI18N.wallet_load_retry({ symbol: 'MASK' })} + Failed to load {'MASK'}. Click to retry. ) } @@ -93,13 +94,13 @@ export const ApproveMaskDialog = memo(({ open, handleClo fullWidth variant="roundedContained" onClick={onApprove}> - {sharedI18N.dialog_confirm()} + Confirm ) } return ( - {sharedI18N.dialog_confirm()} + Confirm ) }, [approveStateType, approveCallback, sharedI18N, transactionState, onApprove]) @@ -107,12 +108,19 @@ export const ApproveMaskDialog = memo(({ open, handleClo return usePortalShadowRoot((container) => ( - {sharedI18N.approve_mask()} + + Approve MASK? + - {sharedI18N.approve_mask_description()} + + + To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow + users to pay gas fee on Polygon network with MASK token. + + - {sharedI18N.approve_mask_question()} + Do you want to set MASK token as gas fee? (({ open, handleClo {action} diff --git a/packages/shared/src/UI/contexts/components/InjectedDialog.tsx b/packages/shared/src/UI/contexts/components/InjectedDialog.tsx index 3f7db2d0b992..1e4772d8b668 100644 --- a/packages/shared/src/UI/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/UI/contexts/components/InjectedDialog.tsx @@ -18,9 +18,10 @@ import { useMediaQuery, useTheme, } from '@mui/material' -import { useSharedTrans } from '../../../locales/index.js' import { sharedUIComponentOverwrite, sharedUINetworkIdentifier } from '../base/index.js' import { DialogDismissIcon } from './DialogDismissIcon.js' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' interface StyleProps { clean: boolean @@ -137,6 +138,7 @@ export interface InjectedDialogProps extends Omit ({ content: { @@ -26,11 +26,10 @@ export const AddCollectiblesDialog = memo(function AddCollectiblesDialog({ account, onAdd, }: AddCollectiblesDialogProps) { - const t = useSharedTrans() const { classes } = useStyles() return ( - onAdd()} title={t.add_collectibles()}> + onAdd()} title={Add NFTs}> - {t.application_display_tab_plug_app_unlisted_placeholder()} + Click the setting icon to list it on the App board. } @@ -222,7 +221,6 @@ function ApplicationBoardPluginsList(props: ApplicationBoardPluginsListProps) { function RenderEntryComponent({ application }: { application: Application }) { const Entry = application.entry.RenderEntryComponent! - const t = useSharedTrans() const ApplicationEntryStatus = useContext(ApplicationEntryStatusContext) @@ -260,13 +258,14 @@ function RenderEntryComponent({ application }: { application: Application }) { // #region tooltip hint const tooltipHint = (() => { if (ApplicationEntryStatus.isLoading) return - if (application.isWalletConnectedRequired) return t.application_tooltip_hint_connect_wallet() + if (application.isWalletConnectedRequired) return Please connect your wallet if (!application.entry.nextIdRequired) return if (ApplicationEntryStatus.isPersonaCreated === false && !disabled) - return t.application_tooltip_hint_persona_accessing_dapp() + return Please create a persona for accessing Dapps. if (ApplicationEntryStatus.isPersonaConnected === false && !disabled) - return t.application_tooltip_hint_connect_persona() - if (ApplicationEntryStatus.shouldVerifyNextId && !disabled) return t.application_tooltip_hint_verify() + return Please connect your persona + if (ApplicationEntryStatus.shouldVerifyNextId && !disabled) + return Please verify your social account return })() // #endregion diff --git a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx index 32ec09ead9e5..af050e7a4244 100644 --- a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx +++ b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx @@ -2,12 +2,7 @@ import { useState, useCallback, useEffect } from 'react' import { DialogContent, IconButton, Tab } from '@mui/material' import { TabContext, TabPanel } from '@mui/lab' import { makeStyles, MaskTabList, useTabs } from '@masknet/theme' -import { - InjectedDialog, - LeavePageConfirmModal, - useSharedTrans, - type PersonaPerSiteConnectStatus, -} from '@masknet/shared' +import { InjectedDialog, LeavePageConfirmModal, type PersonaPerSiteConnectStatus } from '@masknet/shared' import { Icons } from '@masknet/icons' import type { IdentityResolved } from '@masknet/plugin-infra' import { @@ -20,6 +15,7 @@ import { import { ApplicationBoardContent } from './ApplicationBoard.js' import { ApplicationSettingPluginSwitch } from './ApplicationSettingPluginSwitch.js' import { ApplicationSettingPluginList } from './ApplicationSettingPluginList.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles<{ openSettings: boolean @@ -76,7 +72,6 @@ export function ApplicationBoard({ }: ApplicationBoardProps) { const [openSettings, setOpenSettings] = useState(false) const { classes } = useStyles({ openSettings }) - const t = useSharedTrans() const [currentTab, onChange, tabs, setTab] = useTabs( ApplicationSettingTabs.pluginList, ApplicationSettingTabs.pluginSwitch, @@ -112,14 +107,14 @@ export function ApplicationBoard({ titleTabs={ openSettings ? - - + APP list} value={tabs.pluginList} /> + Plug-in switch} value={tabs.pluginSwitch} /> : null } titleBarIconStyle={openSettings && !quickMode ? 'back' : 'close'} independent={LeavePageConfirmModal.peek()} - title={openSettings ? t.application_settings() : t.applications()} + title={openSettings ? APP Settings : Applications} titleTail={ openSettings ? null : ( setOpenSettings(true)}> diff --git a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx index c2657f8e89bd..054acae8ee7e 100644 --- a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx +++ b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx @@ -8,7 +8,7 @@ import { import { PersistentStorages, type PluginID } from '@masknet/shared-base' import { Boundary, ShadowRootTooltip, getMaskColor, makeStyles, useBoundedPopperProps } from '@masknet/theme' import { List, ListItemButton, Typography } from '@mui/material' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' export interface Application { entry: Plugin.SiteAdaptor.ApplicationEntry @@ -87,7 +87,6 @@ const useStyles = makeStyles<{ export function ApplicationSettingPluginList() { const { classes } = useStyles({ iconFilterColor: undefined }) - const t = useSharedTrans() const plugins = useActivatedPluginsSiteAdaptor('any') const applicationList = useMemo(() => { @@ -113,9 +112,13 @@ export function ApplicationSettingPluginList() { return (
- {t.application_settings_tab_plug_app_list_listed()} + + Listed + - {t.application_settings_tab_plug_app_list_unlisted()} + + Unlisted +
) @@ -128,7 +131,6 @@ interface AppListProps { function AppList({ appList, isListing }: AppListProps) { const { classes } = useStyles({ iconFilterColor: undefined }) - const t = useSharedTrans() return appList.length > 0 ? @@ -146,8 +148,8 @@ function AppList({ appList, isListing }: AppListProps) { :
{isListing ? - t.application_settings_tab_plug_app_unlisted_placeholder() - : t.application_settings_tab_plug_app_listed_placeholder()} + Click the application icon to list it on the App board. + : Click the application icon to hide in the APP list.}
} diff --git a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx index ba0ffcac8ce6..ee00e9afa176 100644 --- a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx +++ b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx @@ -5,7 +5,7 @@ import { CrossIsolationMessages, PluginID } from '@masknet/shared-base' import { openWindow } from '@masknet/shared-base-ui' import { makeStyles, MaskColorVar } from '@masknet/theme' import { Avatar, Box, List, ListItem, ListItemAvatar, Stack, Switch, Typography } from '@mui/material' -import { useSharedTrans } from '../../../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ listItem: { @@ -190,7 +190,6 @@ interface DSearchSettingsProps { } function DSearchSettings({ checked, onSwitch, setRef }: DSearchSettingsProps) { - const t = useSharedTrans() const { classes } = useStyles() return ( @@ -205,9 +204,16 @@ function DSearchSettings({ checked, onSwitch, setRef }: DSearchSettingsProps) {
- {t.decentralized_search_name()} + + DSearch +
- {t.decentralized_search_description()} + + + Optimize search results with token names, NFT collections, ENS domains or wallet + addresses. + +
@@ -219,26 +225,28 @@ function DSearchSettings({ checked, onSwitch, setRef }: DSearchSettingsProps) { - {t.decentralized_search_feature_token_name()} + Token - {t.decentralized_search_feature_token_description()} + Get optimized search results when you look for a token. - {t.decentralized_search_feature_nft_name()} + NFTs - {t.decentralized_search_feature_nft_description()} + + Search with the name of an NFT collection or its symbol to get optimized results. + - {t.decentralized_search_feature_wallet_name()} + ENS or Wallet Address - {t.decentralized_search_feature_wallet_description()} + Search with an ENS domain or wallet address to get optimized results. diff --git a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx index 98b9404ae3c7..54da43c72b0c 100644 --- a/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx +++ b/packages/shared/src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx @@ -6,8 +6,8 @@ import type { PluginID } from '@masknet/shared-base' import { ApplicationSettingPluginList } from './ApplicationSettingPluginList.js' import { ApplicationSettingPluginSwitch } from './ApplicationSettingPluginSwitch.js' import { ApplicationSettingTabs } from './ApplicationBoardDialog.js' -import { useSharedTrans } from '../../../locales/index.js' import { InjectedDialog } from '../../../index.js' +import { Trans } from '@lingui/macro' interface ApplicationBoardSettingsProps { open: boolean @@ -33,7 +33,6 @@ const useStyles = makeStyles()((theme) => { export const ApplicationBoardSettingsDialog = memo( ({ focusPluginID, setPluginMinimalModeEnabled, open, onClose, tab = ApplicationSettingTabs.pluginSwitch }) => { - const t = useSharedTrans() const { classes } = useStyles() const [currentTab, onChange, tabs, setTab] = useTabs( ApplicationSettingTabs.pluginList, @@ -49,11 +48,11 @@ export const ApplicationBoardSettingsDialog = memo - - + APP list} value={tabs.pluginList} /> + Plug-in switch} value={tabs.pluginSwitch} /> } - title={t.application_settings()}> + title={APP Settings}> diff --git a/packages/shared/src/UI/modals/ConfirmModal/Dialog.tsx b/packages/shared/src/UI/modals/ConfirmModal/Dialog.tsx index a706e7914eee..ae1c295adb87 100644 --- a/packages/shared/src/UI/modals/ConfirmModal/Dialog.tsx +++ b/packages/shared/src/UI/modals/ConfirmModal/Dialog.tsx @@ -1,7 +1,7 @@ import { makeStyles } from '@masknet/theme' import { Button, DialogActions, DialogContent, dialogClasses } from '@mui/material' -import { useSharedTrans } from '../../../locales/index.js' import { InjectedDialog, type InjectedDialogProps } from '../../contexts/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme, maxWidth) => ({ dialog: { @@ -25,23 +25,22 @@ const useStyles = makeStyles()((theme, maxWidth) => ({ interface ConfirmProps extends Omit { open: boolean - title?: string - confirmLabel?: React.ReactNode | string - content: React.ReactNode | string + title?: React.ReactNode + confirmLabel?: React.ReactNode + content: React.ReactNode maxWidthOfContent?: number onSubmit(): void } export function Confirm({ title, confirmLabel, content, onSubmit, maxWidthOfContent, ...rest }: ConfirmProps) { - const t = useSharedTrans() const { classes } = useStyles(maxWidthOfContent) return ( - + Confirm} className={classes.dialog} {...rest}> {content} diff --git a/packages/shared/src/UI/modals/ConfirmModal/index.tsx b/packages/shared/src/UI/modals/ConfirmModal/index.tsx index 0817fba35e3d..6cad03549764 100644 --- a/packages/shared/src/UI/modals/ConfirmModal/index.tsx +++ b/packages/shared/src/UI/modals/ConfirmModal/index.tsx @@ -4,8 +4,7 @@ import { useSingletonModal } from '@masknet/shared-base-ui' import { Confirm } from './Dialog.js' import type { InjectedDialogProps } from '../../contexts/index.js' -export interface ConfirmModalOpenProps extends Omit { - title?: string +export interface ConfirmModalOpenProps extends Omit { confirmLabel?: React.ReactNode | string content: React.ReactNode | string maxWidthOfContent?: number diff --git a/packages/shared/src/UI/modals/ConnectWalletModal/index.tsx b/packages/shared/src/UI/modals/ConnectWalletModal/index.tsx index 460399ad7736..f4bc1bc450ad 100644 --- a/packages/shared/src/UI/modals/ConnectWalletModal/index.tsx +++ b/packages/shared/src/UI/modals/ConnectWalletModal/index.tsx @@ -9,10 +9,10 @@ import { ProviderType } from '@masknet/web3-shared-evm' import { Box, DialogContent, Typography, dialogClasses } from '@mui/material' import { useRef, useState } from 'react' import { useAsyncFn } from 'react-use' -import { useSharedTrans } from '../../../locales/i18n_generated.js' import { Spinner } from '../../components/Spinner.js' import { WalletIcon } from '../../components/WalletIcon/index.js' import { InjectedDialog } from '../../contexts/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ dialog: { @@ -65,8 +65,6 @@ export type ConnectWalletModalCloseProps = boolean export function ConnectWalletModal({ ref, }: SingletonModalProps) { - const t = useSharedTrans() - const connectionRef = useRef<{ pluginID: NetworkPluginID networkType: Web3Helper.NetworkTypeAll @@ -142,7 +140,7 @@ export function ConnectWalletModal({ return ( Connect with {providerName}} open={open} onClose={() => dispatch?.close(false)} maxWidth="sm" @@ -173,12 +171,12 @@ export function ConnectWalletModal({ fontSize={16} mt={1.5} color={error && !loading ? maskColor.danger : undefined}> - {t.requesting_connection()} + Requesting Connection
{isCanceled && !loading ? - t.you_canceled_the_request() - : t.check_to_confirm_connect({ wallet: providerName })} + You canceled the request. + : Check {providerName} to confirm connect.} {error ? - {t.retry()} + Retry : null} diff --git a/packages/shared/src/UI/modals/GasSettingModal/GasSetting1559.tsx b/packages/shared/src/UI/modals/GasSettingModal/GasSetting1559.tsx index d4bef494d301..1e5662e7dda0 100644 --- a/packages/shared/src/UI/modals/GasSettingModal/GasSetting1559.tsx +++ b/packages/shared/src/UI/modals/GasSettingModal/GasSetting1559.tsx @@ -19,7 +19,8 @@ import { isPositive, } from '@masknet/web3-shared-base' import { useChainContext, useFungibleTokenPrice, useGasOptions } from '@masknet/web3-hooks-base' -import { useSharedTrans } from '../../../index.js' +import { Trans, msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => ({ options: { @@ -87,7 +88,7 @@ const useStyles = makeStyles()((theme) => ({ const emptyRender = () => <> export const GasSetting1559 = memo( ({ gasLimit, minGasLimit = 0, gasOptionType = GasOptionType.NORMAL, onConfirm = noop }: GasSettingProps) => { - const t = useSharedTrans() + const { _ } = useLingui() const { classes } = useStyles() const { chainId } = useChainContext() const { NATIVE_TOKEN_ADDRESS } = useTokenConstants(chainId) @@ -105,17 +106,17 @@ export const GasSetting1559 = memo( const options = useMemo( () => [ { - title: t.popups_wallet_gas_fee_settings_low(), + title: _(msg`Low`), gasOption: GasOptionType.SLOW, content: gasOptions?.[GasOptionType.SLOW], }, { - title: t.popups_wallet_gas_fee_settings_medium(), + title: _(msg`Medium`), gasOption: GasOptionType.NORMAL, content: gasOptions?.[GasOptionType.NORMAL], }, { - title: t.popups_wallet_gas_fee_settings_high(), + title: _(msg`High`), gasOption: GasOptionType.FAST, content: gasOptions?.[GasOptionType.FAST], }, @@ -131,19 +132,19 @@ export const GasSetting1559 = memo( .object({ gasLimit: zod .string() - .min(1, t.wallet_transfer_error_gas_limit_absence()) + .min(1, _(msg`Enter a gas limit`)) .refine( (gasLimit) => isGreaterThanOrEqualTo(gasLimit, minGasLimit), - t.popups_wallet_gas_fee_settings_min_gas_limit_tips({ limit: minGasLimit.toFixed() }), + _(msg`Gas limit must be at least ${minGasLimit.toFixed()}`), ), maxPriorityFeePerGas: zod .string() - .min(1, t.wallet_transfer_error_max_priority_fee_absence()) - .refine(isPositive, t.wallet_transfer_error_max_priority_gas_fee_positive()), - maxFeePerGas: zod.string().min(1, t.wallet_transfer_error_max_fee_absence()), + .min(1, _(msg`Enter a max priority fee`)) + .refine(isPositive, _(msg`Max priority fee must be greater than 0 GWEI`)), + maxFeePerGas: zod.string().min(1, _(msg`Enter a max fee`)), }) .refine((data) => isLessThanOrEqualTo(data.maxPriorityFeePerGas, data.maxFeePerGas), { - message: t.wallet_transfer_error_max_priority_gas_fee_imbalance(), + message: _(msg`Max fee cannot be lower than max priority fee`), path: ['maxFeePerGas'], }) }, [minGasLimit, gasOptions]) @@ -245,16 +246,16 @@ export const GasSetting1559 = memo(
- {t.popups_wallet_gas_fee_settings_gas_limit()} + Gas Limit {gasLimit?.toString()} - {t.popups_wallet_gas_fee_settings_max_priority_fee()} + Max priority fee - ({t.wallet_transfer_gwei()}) + (GWEI) - {t.popups_wallet_gas_fee_settings_max_fee()} + Max fee - ({t.wallet_transfer_gwei()}) + (GWEI) - {t.confirm()} + Confirm ) diff --git a/packages/shared/src/UI/modals/GasSettingModal/GasSettingModal.tsx b/packages/shared/src/UI/modals/GasSettingModal/GasSettingModal.tsx index e3250702ba33..36ee8afa2666 100644 --- a/packages/shared/src/UI/modals/GasSettingModal/GasSettingModal.tsx +++ b/packages/shared/src/UI/modals/GasSettingModal/GasSettingModal.tsx @@ -1,9 +1,10 @@ import { DialogContent } from '@mui/material' import { makeStyles } from '@masknet/theme' import { GasOptionType } from '@masknet/web3-shared-base' -import { GasSettingModal, InjectedDialog, useSharedTrans } from '@masknet/shared' +import { GasSettingModal, InjectedDialog } from '@masknet/shared' import { GasSettingSupported } from './GasSettingSupported.js' import type { BigNumber } from 'bignumber.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ content: { @@ -25,7 +26,6 @@ interface GasSettingProps { } export function GasSetting(props: GasSettingProps) { - const t = useSharedTrans() const { classes } = useStyles() const { open, @@ -38,7 +38,7 @@ export function GasSetting(props: GasSettingProps) { } = props return ( - + Gas fee settings} open={open} onClose={onClose}> = { [ChainId.BSC]: pow10(9).multipliedBy(5), @@ -87,8 +89,8 @@ const useStyles = makeStyles()((theme) => ({ const emptyRender = () => <> export const Prior1559GasSetting = memo( ({ gasLimit, minGasLimit = 0, gasOptionType = GasOptionType.NORMAL, onConfirm = noop }: GasSettingProps) => { + const { _ } = useLingui() const { classes } = useStyles() - const t = useSharedTrans() const { chainId } = useChainContext() const [selectedGasOption, setGasOptionType] = useState(gasOptionType) @@ -103,17 +105,17 @@ export const Prior1559GasSetting = memo( gasOptions ? [ { - title: t.popups_wallet_gas_fee_settings_low(), + title: _(msg`Low`), gasOption: GasOptionType.SLOW, gasPrice: gasOptions[GasOptionType.SLOW].suggestedMaxFeePerGas || '0', }, { - title: t.popups_wallet_gas_fee_settings_medium(), + title: _(msg`Medium`), gasOption: GasOptionType.NORMAL, gasPrice: gasOptions[GasOptionType.NORMAL].suggestedMaxFeePerGas || '0', }, { - title: t.popups_wallet_gas_fee_settings_high(), + title: _(msg`High`), gasOption: GasOptionType.FAST, gasPrice: gasOptions[GasOptionType.FAST].suggestedMaxFeePerGas || 0, }, @@ -127,12 +129,12 @@ export const Prior1559GasSetting = memo( return zod.object({ gasLimit: zod .string() - .min(1, t.wallet_transfer_error_gas_limit_absence()) + .min(1, _(msg`Enter a gas limit`)) .refine( (gasLimit) => new BigNumber(gasLimit).gte(minGasLimit), - t.popups_wallet_gas_fee_settings_min_gas_limit_tips({ limit: minGasLimit.toFixed() }), + _(msg`Gas limit must be at least ${minGasLimit.toFixed()}`), ), - gasPrice: zod.string().min(1, t.wallet_transfer_error_gas_price_absence()), + gasPrice: zod.string().min(1, _(msg`Enter a gas price`)), }) }, [minGasLimit]) @@ -210,14 +212,14 @@ export const Prior1559GasSetting = memo( : null} - {t.popups_wallet_gas_fee_settings_gas_limit()} + Gas Limit {gasLimit?.toString()} - {t.popups_wallet_gas_price()} + Gas Price {/* eslint-disable-next-line react/naming-convention/component-name */} - {t.confirm()} + Confirm ) diff --git a/packages/shared/src/UI/modals/LeavePageConfirmModal/LeavePageConfirm.tsx b/packages/shared/src/UI/modals/LeavePageConfirmModal/LeavePageConfirm.tsx index 4c84994cc2be..cbbd2c95cb2f 100644 --- a/packages/shared/src/UI/modals/LeavePageConfirmModal/LeavePageConfirm.tsx +++ b/packages/shared/src/UI/modals/LeavePageConfirmModal/LeavePageConfirm.tsx @@ -1,4 +1,4 @@ -import { useCallback } from 'react' +import { useCallback, type ReactNode } from 'react' import { first } from 'lodash-es' import { Button, DialogActions, DialogContent, Stack, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' @@ -53,9 +53,9 @@ const positionStyleMap: Record = { export interface OpenPageConfirm { target: 'dashboard' | 'other' url: string - title: string - text: string - actionHint: string + title: ReactNode + text: ReactNode + actionHint: ReactNode position?: 'center' | 'top-right' } diff --git a/packages/shared/src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx b/packages/shared/src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx index 38d3ff69970d..886fa229328e 100644 --- a/packages/shared/src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx +++ b/packages/shared/src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx @@ -1,8 +1,8 @@ import { DialogContent } from '@mui/material' import { makeStyles } from '@masknet/theme' import { PersonaSelectPanel, type PositionOption } from '../../components/PersonaSelectPanel/index.js' -import { useSharedTrans } from '../../../locales/index.js' import { InjectedDialog } from '../../contexts/components/InjectedDialog.js' +import { Trans } from '@lingui/macro' type PositionStyle = { top?: number @@ -59,8 +59,6 @@ export function PersonaSelectPanelDialog({ finishTarget, onClose, }: PersonaSelectPanelDialogProps) { - const t = useSharedTrans() - const { classes } = useStyles({ positionStyle: positionStyleMap[position] }) return open ? @@ -73,7 +71,7 @@ export function PersonaSelectPanelDialog({ }} maxWidth="sm" onClose={onClose} - title={t.applications_persona_title()} + title={Persona} titleBarIconStyle="close"> diff --git a/packages/shared/src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx b/packages/shared/src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx index 961ead6d08ef..c8d3209b4cd0 100644 --- a/packages/shared/src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx +++ b/packages/shared/src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx @@ -7,7 +7,7 @@ import { DialogContent } from '@mui/material' import { SettingsBoard } from '../../components/SettingsBoard/index.js' import { SettingsContext } from '../../components/SettingsBoard/Context.js' import { InjectedDialog } from '../../contexts/index.js' -import { useSharedTrans } from '../../../locales/index.js' +import { Trans } from '@lingui/macro' interface StyleProps { compact: boolean @@ -54,7 +54,6 @@ export function SelectGasSettingsDialog({ onClose, title, }: SelectGasSettingsDialogProps) { - const t = useSharedTrans() const { classes } = useStyles({ compact: disableSlippageTolerance ?? true }) const { pluginID: pluginID_ } = useNetworkContext(pluginID) const { chainId: chainId_ } = useChainContext({ chainId }) @@ -80,7 +79,7 @@ export function SelectGasSettingsDialog({ open={open} titleBarIconStyle={Sniffings.is_dashboard_page ? 'close' : 'back'} onClose={() => onClose(settings)} - title={title ?? t.gas_settings_title()}> + title={title ?? Advanced Settings}> Manage Token List + : Select }>
diff --git a/packages/shared/src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx b/packages/shared/src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx index f3d983e3ab43..a6b8de9a3658 100644 --- a/packages/shared/src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx +++ b/packages/shared/src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx @@ -12,11 +12,12 @@ import { useAccount, useNonFungibleCollections, useWeb3State } from '@masknet/we import { type NonFungibleCollection } from '@masknet/web3-shared-base' import { SchemaType, isLensCollect, isLensFollower, isLensProfileAddress } from '@masknet/web3-shared-evm' import { ContractItem } from './ContractItem.js' -import { useSharedTrans } from '../../../locales/index.js' import { InjectedDialog } from '../../contexts/components/InjectedDialog.js' import { ReloadStatus } from '../../components/ReloadStatus/index.js' import { EmptyStatus, LoadingStatus } from '../../components/index.js' import { AddCollectiblesModal } from '../modals.js' +import { Trans, msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const useStyles = makeStyles()((theme) => ({ content: { @@ -83,7 +84,7 @@ export const SelectNonFungibleContractDialog = memo( schemaType, initialCollections, }: SelectNonFungibleContractDialogProps) => { - const t = useSharedTrans() + const { _ } = useLingui() const { classes } = useStyles() const [keyword, setKeyword] = useState('') @@ -181,13 +182,13 @@ export const SelectNonFungibleContractDialog = memo( titleBarIconStyle={Sniffings.is_dashboard_page ? 'close' : 'back'} open={open} onClose={onClose} - title={t.select_collection()}> + title={Select Collection}> setKeyword(evt.target.value)} - placeholder={t.collectible_search_placeholder()} + placeholder={_(msg`Name or Contract address eg.PUNK or 0x234...`)} autoFocus fullWidth InputProps={{ @@ -203,7 +204,9 @@ export const SelectNonFungibleContractDialog = memo( : isPending && !collections.length ? : !searchResults.length ? - {t.no_results()} + + No results + : {searchResults.map((collection) => ( - {t.add_collectibles()} + Add NFTs diff --git a/packages/shared/src/UI/modals/SelectProviderModal/GuideDialog.tsx b/packages/shared/src/UI/modals/SelectProviderModal/GuideDialog.tsx index 02b456b72176..12889e394c4b 100644 --- a/packages/shared/src/UI/modals/SelectProviderModal/GuideDialog.tsx +++ b/packages/shared/src/UI/modals/SelectProviderModal/GuideDialog.tsx @@ -1,9 +1,9 @@ import { memo } from 'react' -import { useSharedTrans } from '../../../locales/i18n_generated.js' import { InjectedDialog, type InjectedDialogProps } from '../../contexts/index.js' import type { Web3Helper } from '@masknet/web3-helpers' import { DialogContent, Link, Stack, Switch, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ content: { @@ -49,19 +49,18 @@ interface Props extends InjectedDialogProps { } export const GuideDialog = memo(function GuideDialog({ provider, ...rest }: Props) { - const t = useSharedTrans() const { classes, cx } = useStyles() const name = provider.name return ( - + How to use {provider.name} Wallet?}>
- {t.if_not_installed({ name })} + 1. If you haven't installed {name} Wallet - {t.download_here({ name })} + Download {name} Wallet here - {t.check_out_website()} + Check out the official website
- {t.if_installed({ name })} + 2. If you have installed {name} Wallet - {t.enable_wallet_and_disable_others({ name })} + Enable {name} Wallet extension and disable other browser extension wallets @@ -89,8 +88,12 @@ export const GuideDialog = memo(function GuideDialog({ provider, ...rest }: Prop -
{t.details()}
-
{t.remove()}
+
+ Details +
+
+ Remove +
diff --git a/packages/shared/src/UI/modals/SelectProviderModal/PluginProviderRender.tsx b/packages/shared/src/UI/modals/SelectProviderModal/PluginProviderRender.tsx index 942a8bb8cad4..c659ad6f0b57 100644 --- a/packages/shared/src/UI/modals/SelectProviderModal/PluginProviderRender.tsx +++ b/packages/shared/src/UI/modals/SelectProviderModal/PluginProviderRender.tsx @@ -26,8 +26,9 @@ import { NETWORK_DESCRIPTORS as FLOW_NETWORK_DESCRIPTORS, ProviderType as FlowProviderType, } from '@masknet/web3-shared-flow' -import { DialogDismissIconUI, ImageIcon, useSharedTrans } from '@masknet/shared' +import { DialogDismissIconUI, ImageIcon } from '@masknet/shared' import { ProviderItem } from './ProviderItem.js' +import { Trans } from '@lingui/macro' const descriptors: Record< NetworkPluginID, @@ -149,7 +150,6 @@ export const PluginProviderRender = memo(function PluginProviderRender({ requiredSupportPluginID, }: PluginProviderRenderProps) { const { classes, theme, cx } = useStyles() - const t = useSharedTrans() const [selectChainDialogOpen, setSelectChainDialogOpen] = useState(false) const fortmaticProviderDescriptor = providers.find((x) => x.type === ProviderType.Fortmatic) @@ -186,14 +186,14 @@ export const PluginProviderRender = memo(function PluginProviderRender({ const getTips = useCallback((provider: Web3Helper.ProviderTypeAll) => { if (provider === SolProviderType.Phantom) { - return t.plugin_wallet_solana_tips() + return Phantom only supports the Solana chain. } else if (provider === FlowProviderType.Blocto) { - return t.plugin_wallet_blocto_tips() + return Blocto only supports the Flow chain. } else if (provider === ProviderType.Fortmatic) { - return t.plugin_wallet_fortmatic_tips() + return Fortmatic only supports the ETH and BNB chain. } - return t.plugin_wallet_support_chains_tips() + return Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc. }, []) const getDisabled = useCallback( @@ -273,7 +273,7 @@ export const PluginProviderRender = memo(function PluginProviderRender({ {unavailableProviders.length ? <> - {t.not_installed_or_conflict()} + The following wallets are not installed or in conflict with others
@@ -329,7 +329,9 @@ export const PluginProviderRender = memo(function PluginProviderRender({ onClick={() => setSelectChainDialogOpen(false)}> - {t.plugin_wallet_choose_network()} + + Choose Network + diff --git a/packages/shared/src/UI/modals/SelectProviderModal/SelectProvider.tsx b/packages/shared/src/UI/modals/SelectProviderModal/SelectProvider.tsx index dc2b1cc99d0d..2df67d4592bb 100644 --- a/packages/shared/src/UI/modals/SelectProviderModal/SelectProvider.tsx +++ b/packages/shared/src/UI/modals/SelectProviderModal/SelectProvider.tsx @@ -1,6 +1,6 @@ import { delay, getEnumAsArray } from '@masknet/kit' import { getRegisteredWeb3Providers, MaskWalletProvider } from '@masknet/web3-providers' -import { ConnectWalletModal, InjectedDialog, useSharedTrans } from '@masknet/shared' +import { ConnectWalletModal, InjectedDialog } from '@masknet/shared' import { NetworkPluginID, Sniffings } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' import type { Web3Helper } from '@masknet/web3-helpers' @@ -9,6 +9,7 @@ import { DialogContent } from '@mui/material' import { memo, useCallback, useMemo, useState } from 'react' import { PluginProviderRender } from './PluginProviderRender.js' import { GuideDialog } from './GuideDialog.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ dialog: { @@ -35,7 +36,6 @@ interface SelectProviderProps { } export const SelectProvider = memo(function SelectProvider(props: SelectProviderProps) { const { open, requiredSupportPluginID, requiredSupportChainIds, onConnect, onClose, createWallet } = props - const t = useSharedTrans() const { classes } = useStyles() // Guiding provider const [provider, setProvider] = useState() @@ -93,7 +93,7 @@ export const SelectProvider = memo(function SelectProvider(props: SelectProvider return ( Connect Wallet} open={open} onClose={onClose}> diff --git a/packages/shared/src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx b/packages/shared/src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx index d82754cb4cef..7ec8d109c5ee 100644 --- a/packages/shared/src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx +++ b/packages/shared/src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx @@ -1,5 +1,6 @@ import { useCallback } from 'react' -import { TokenTransactionConfirmModal, useSharedTrans, type TokenTransactionConfirmModalProps } from '../../../index.js' +import { TokenTransactionConfirmModal, type TokenTransactionConfirmModalProps } from '../../../index.js' +import { Trans } from '@lingui/macro' export interface TransactionConfirmProps extends TokenTransactionConfirmModalProps { shareText: string @@ -12,7 +13,6 @@ export interface TransactionConfirmProps extends TokenTransactionConfirmModalPro onClose: () => void } export function TransactionConfirm({ onSubmit, shareText, share, ...rest }: TransactionConfirmProps) { - const t = useSharedTrans() const handleConfirm = useCallback(() => { share?.(shareText) onSubmit?.() @@ -23,7 +23,7 @@ export function TransactionConfirm({ onSubmit, shareText, share, ...rest }: Tran messageTextForNFT={rest.messageTextForNFT} messageTextForFT={rest.messageTextForFT} title={rest.title} - confirmText={share ? t.share() : t.ok()} + confirmText={share ? Share : OK} onConfirm={handleConfirm} /> ) diff --git a/packages/shared/src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx b/packages/shared/src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx index 6003f73e1cf7..677b529d0585 100644 --- a/packages/shared/src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx +++ b/packages/shared/src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx @@ -15,8 +15,8 @@ import { type NetworkPluginID, createLookupTableResolver, Sniffings } from '@mas import { TransactionStatusType, type RecognizableError } from '@masknet/web3-shared-base' import { useWeb3State, useChainContext, useWeb3Utils } from '@masknet/web3-hooks-base' import type { Web3Helper } from '@masknet/web3-helpers' -import { useSharedTrans } from '../../../index.js' import { useRenderPhraseCallbackOnDepsChange } from '@masknet/shared-base-ui' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()({ link: { @@ -28,7 +28,6 @@ const useStyles = makeStyles()({ export function useTransactionSnackbar(pluginID: NetworkPluginID) { const { classes } = useStyles() - const t = useSharedTrans() const { showSnackbar, closeSnackbar } = useCustomSnackbar() const { showSnackbar: showPopupSnackbar, closeSnackbar: closePopupSnackbar } = usePopupCustomSnackbar() const snackbarKeyRef = useRef(undefined) @@ -88,17 +87,17 @@ export function useTransactionSnackbar(pluginID: NetworkPluginID) { [TransactionStatusType.NOT_DEPEND]: { processing: true, variant: 'default', - message: t.plugin_wallet_snackbar_wait_for_confirming(), + message: Confirm this transaction in your wallet, }, [TransactionStatusType.SUCCEED]: { processing: false, variant: 'success', - message: t.plugin_wallet_snackbar_confirmed(), + message: Transaction Confirmed, }, [TransactionStatusType.FAILED]: { processing: false, variant: 'error', - message: t.plugin_wallet_snackbar_failed(), + message: Transaction Failed, }, }, {}, diff --git a/packages/shared/src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx b/packages/shared/src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx index 544050e19e7e..4438b1a41626 100644 --- a/packages/shared/src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx +++ b/packages/shared/src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx @@ -1,7 +1,8 @@ import { DialogContent, dialogClasses, Grid, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import { QRCode } from 'react-qrcode-logo' -import { InjectedDialog, useSharedTrans } from '@masknet/shared' +import { InjectedDialog } from '@masknet/shared' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ dialog: { @@ -71,14 +72,9 @@ interface QRCodeDialogProps { } export function QRCodeDialog({ uri, open, onClose }: QRCodeDialogProps) { - const t = useSharedTrans() const { classes } = useStyles() return ( - + WalletConnect}>
@@ -86,7 +82,7 @@ export function QRCodeDialog({ uri, open, onClose }: QRCodeDialogProps) {
- {t.wallet_connect_qr_code_dialog_content()} + Scan QR code with a WalletConnect-compatible wallet
diff --git a/packages/shared/src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx b/packages/shared/src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx index 9c24250e4a69..47233fa8c4d4 100644 --- a/packages/shared/src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx +++ b/packages/shared/src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx @@ -2,10 +2,11 @@ import { useCallback } from 'react' import { Icons } from '@masknet/icons' import { DialogActions, DialogContent, Typography } from '@mui/material' import { getMaskColor, makeStyles, useCustomSnackbar, ActionButton } from '@masknet/theme' -import { InjectedDialog, ActionButtonPromise, WalletStatusBox, useSharedTrans, SharedTrans } from '@masknet/shared' +import { InjectedDialog, ActionButtonPromise, WalletStatusBox, SharedTrans } from '@masknet/shared' import { type NetworkPluginID, Sniffings } from '@masknet/shared-base' import { useMatchXS } from '@masknet/shared-base-ui' import { useWeb3State } from '@masknet/web3-hooks-base' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ paper: { @@ -65,7 +66,6 @@ interface WalletRiskWarningProps { } export function WalletRiskWarning({ account, open, pluginID, onClose }: WalletRiskWarningProps) { - const t = useSharedTrans() const { classes, cx } = useStyles() const { showSnackbar } = useCustomSnackbar() const isMobile = useMatchXS() @@ -75,7 +75,7 @@ export function WalletRiskWarning({ account, open, pluginID, onClose }: WalletRi const onConfirm = useCallback(async () => { try { if (!account) { - showSnackbar(t.wallet_risk_warning_no_select_wallet(), { + showSnackbar(Not select wallet yet., { variant: 'error', preventDuplicate: true, }) @@ -89,10 +89,7 @@ export function WalletRiskWarning({ account, open, pluginID, onClose }: WalletRi }, [showSnackbar, account, onClose]) return ( - + Risk Warning} open={open} onClose={onClose}>
@@ -101,7 +98,7 @@ export function WalletRiskWarning({ account, open, pluginID, onClose }: WalletRi className={classes.title} align="center" variant="h4" - children={t.wallet_risk_warning_dialog_title()} + children={Risk Warning} /> } /> - {t.wallet_risk_warning_confirm_tips()} + + Clicking the confirm button means that you agree to bear the above possible risks. + @@ -125,20 +124,20 @@ export function WalletRiskWarning({ account, open, pluginID, onClose }: WalletRi variant="outlined" color="secondary" onClick={onClose}> - {t.cancel()} + Cancel Confirm} + waiting={Confirming} + failed={Confirm Failed} executor={onConfirm} completeIcon={null} failIcon={null} failedOnClick="use executor" - complete={t.done()} + complete={Done} /> diff --git a/packages/shared/src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx b/packages/shared/src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx index 63ae2fa642cb..aebce314ced3 100644 --- a/packages/shared/src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx +++ b/packages/shared/src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx @@ -1,8 +1,9 @@ import { useCallback } from 'react' import { DialogContent, dialogClasses } from '@mui/material' import { makeStyles } from '@masknet/theme' -import { InjectedDialog, WalletStatusBox, useSharedTrans } from '@masknet/shared' +import { InjectedDialog, WalletStatusBox } from '@masknet/shared' import { CrossIsolationMessages } from '@masknet/shared-base' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ content: { @@ -27,7 +28,6 @@ interface WalletStatusDialogProps { } export function WalletStatusDialog({ open, onClose, isHidden = false, setHidden }: WalletStatusDialogProps) { - const t = useSharedTrans() const { classes } = useStyles() // #region remote controlled dialog logic @@ -42,7 +42,7 @@ export function WalletStatusDialog({ open, onClose, isHidden = false, setHidden return ( Wallet Account} open={open} onClose={closeDialog} maxWidth="sm" diff --git a/packages/shared/src/UI/wallet/DeriveWalletTable.tsx b/packages/shared/src/UI/wallet/DeriveWalletTable.tsx index d6f04d38f9eb..fd1ce49faf69 100644 --- a/packages/shared/src/UI/wallet/DeriveWalletTable.tsx +++ b/packages/shared/src/UI/wallet/DeriveWalletTable.tsx @@ -22,7 +22,7 @@ import { formatBalance } from '@masknet/web3-shared-base' import { openWindow } from '@masknet/shared-base-ui' import { useBalance } from '@masknet/web3-hooks-base' import { NetworkPluginID } from '@masknet/shared-base' -import { useSharedTrans } from '../../locales/index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ header: { @@ -114,20 +114,25 @@ export const DeriveWalletTable = memo(function DeriveWal hiddenHeader, }) { const { classes } = useStyles() - const t = useSharedTrans() return ( {hiddenHeader ? null : ( - {t.address_viewer_address_name_address()} + + Address + - {t.wallet_balance_eth({ symbol })} + + Balance({symbol}) + - {t.operation()} + + Operation + diff --git a/packages/shared/src/hooks/useCurrentPersonaConnectStatus.ts b/packages/shared/src/hooks/useCurrentPersonaConnectStatus.ts index 240df2583e1a..6acccc01570c 100644 --- a/packages/shared/src/hooks/useCurrentPersonaConnectStatus.ts +++ b/packages/shared/src/hooks/useCurrentPersonaConnectStatus.ts @@ -12,8 +12,9 @@ import { } from '@masknet/shared-base' import { NextIDProof } from '@masknet/web3-providers' import { LeavePageConfirmModal, PersonaSelectPanelModal } from '../UI/modals/index.js' -import { useSharedTrans } from '../locales/index.js' import type { PersonaConnectStatus } from '../types.js' +import { msg } from '@lingui/macro' +import { useLingui } from '@lingui/react' const DEFAULT_PERSONA_CONNECT_STATUS: PersonaConnectStatus = { action: undefined, @@ -30,9 +31,8 @@ export function useCurrentPersonaConnectStatus( openDashboard?: (route: DashboardRoutes, search?: string) => void, identity?: IdentityResolved, ) { - const t = useSharedTrans() - - const create = useCallback((target?: string, position?: 'center' | 'top-right', _?: boolean, direct = false) => { + const { _ } = useLingui() + const create = useCallback((target?: string, position?: 'center' | 'top-right', _2?: boolean, direct = false) => { if (direct) { openDashboard?.(DashboardRoutes.SignUpPersona) } else { @@ -41,9 +41,9 @@ export function useCurrentPersonaConnectStatus( info: { target: 'dashboard', url: target ?? DashboardRoutes.SignUpPersona, - text: t.applications_create_persona_hint(), - title: t.applications_create_persona_title(), - actionHint: t.applications_create_persona_action(), + text: _(msg`Please create a Persona and verify your account to use this function.`), + title: _(msg`Persona`), + actionHint: _(msg`Create persona`), position, }, }) diff --git a/packages/shared/src/hooks/useGasCurrencyMenu.tsx b/packages/shared/src/hooks/useGasCurrencyMenu.tsx index c6e2979573af..27a6f4cfc8a5 100644 --- a/packages/shared/src/hooks/useGasCurrencyMenu.tsx +++ b/packages/shared/src/hooks/useGasCurrencyMenu.tsx @@ -8,7 +8,8 @@ import { useChainContext, useFungibleToken, useMaskTokenAddress, useNativeToken import { useERC20TokenAllowance } from '@masknet/web3-hooks-evm' import { useSmartPayConstants } from '@masknet/web3-shared-evm' import { useMenuConfig } from './useMenu.js' -import { TokenIcon, useSharedTrans } from '../index.js' +import { TokenIcon } from '../index.js' +import { Trans } from '@lingui/macro' const useStyles = makeStyles()((theme) => ({ paper: { @@ -45,7 +46,6 @@ export function useGasCurrencyMenu( selectedAddress?: string, handleUnlock?: () => void, ) { - const sharedI18N = useSharedTrans() const { classes } = useStyles() const { chainId } = useChainContext() const [current, setCurrent] = useState('') @@ -93,7 +93,7 @@ export function useGasCurrencyMenu( {availableBalanceTooLow ? : ({ content: { @@ -33,7 +34,7 @@ const useStyles = makeStyles()((theme) => ({ interface ShareTransactionOptions { title?: string - message?: string + message?: ReactNode content?: string hash: string buttonLabel?: string @@ -45,7 +46,6 @@ type ShareTransactionProps = Omit const ShareTransaction = memo(({ message, content, hash }: ShareTransactionProps) => { const { classes } = useStyles() - const t = useSharedTrans() const { chainId } = useChainContext() const link = EVMExplorerResolver.transactionLink(chainId, hash) return ( @@ -64,7 +64,7 @@ const ShareTransaction = memo(({ message, content, hash }: ShareTransactionProps {link ? - {t.share_dialog_view_on_explorer()} + View on Explorer : null} @@ -78,15 +78,15 @@ export function useOpenShareTxDialog() { return useCallback( async ({ title, message, content, hash, buttonLabel, onShare }: ShareTransactionOptions) => { const confirmed = await ConfirmModal.openAndWaitForClose({ - title: title ?? t.share_dialog_transaction(), + title: title ?? Transaction, content: ( Your transaction was confirmed!} content={content} hash={hash} /> ), - confirmLabel: onShare ? buttonLabel ?? t.dialog_share() : t.dialog_dismiss(), + confirmLabel: onShare ? buttonLabel ?? Share : Dismiss, }) if (confirmed) onShare?.() }, diff --git a/packages/shared/src/hooks/useReportSpam.tsx b/packages/shared/src/hooks/useReportSpam.tsx index d097180867b6..1c81980d0ac6 100644 --- a/packages/shared/src/hooks/useReportSpam.tsx +++ b/packages/shared/src/hooks/useReportSpam.tsx @@ -5,7 +5,7 @@ import { useQuery } from '@tanstack/react-query' import { useCallback } from 'react' import { useAsyncFn } from 'react-use' import { ConfirmDialog } from '../UI/modals/modals.js' -import { useSharedTrans } from '../locales/i18n_generated.js' +import { Trans } from '@lingui/macro' interface Options { address?: string @@ -18,7 +18,6 @@ interface Options { * collectionId is more accurate */ export function useReportSpam({ pluginID, chainId, address, collectionId }: Options) { - const t = useSharedTrans() const isSolana = pluginID === NetworkPluginID.PLUGIN_SOLANA const { data: collectionByAddress } = useQuery({ enabled: !collectionId && !isSolana, @@ -61,15 +60,20 @@ export function useReportSpam({ pluginID, chainId, address, collectionId }: Opti const { showSnackbar } = useCustomSnackbar() const promptReport = useCallback(async () => { const confirmed = await ConfirmDialog.openAndWaitForClose({ - title: t.report_nft(), - message: t.confirm_to_report_nft({ name: collection?.name || 'this NFT' }), + title: Report NFT Scam Contract?, + message: ( + + Are you sure to report {collection?.name || 'this NFT'}? After approving, this NFT will be marked as + spam. + + ), confirmVariant: 'warning', }) if (!confirmed || !colId) return const result = await reportSpam() - showSnackbar(t.report_spam(), { + showSnackbar(Report Spam, { variant: result ? 'success' : 'error', - message: result ? t.report_spam_success() : t.report_spam_fail(), + message: result ? Successfully reported. : Failed to report spam., }) }, [colId, reportSpam, collection?.name]) const isSpam = !!collection && collection.spam_score !== null && collection.spam_score > SPAM_SCORE diff --git a/packages/shared/src/hooks/useSnackbarCallback.tsx b/packages/shared/src/hooks/useSnackbarCallback.tsx index b4a9e8030a95..376c03e7664a 100644 --- a/packages/shared/src/hooks/useSnackbarCallback.tsx +++ b/packages/shared/src/hooks/useSnackbarCallback.tsx @@ -1,6 +1,6 @@ import { useCallback } from 'react' import { useCustomSnackbar, usePopupCustomSnackbar } from '@masknet/theme' -import { useSharedTrans } from '../locales/index.js' +import { Trans } from '@lingui/macro' export function useSnackbarCallback

Promise, T>(options: SnackbarCallback): P /** Prefer the first overload. */ @@ -22,7 +22,6 @@ export function useSnackbarCallback

Promise, T> successText?: string | React.ReactNode, errorText?: string | React.ReactNode, ) { - const t = useSharedTrans() const { showSnackbar } = useCustomSnackbar() const executor = typeof opts === 'function' ? opts : opts.executor if (typeof opts === 'object') { @@ -38,7 +37,7 @@ export function useSnackbarCallback

Promise, T> (...args: any[]) => executor(...args).then( (res) => { - showSnackbar(successText ?? t.snackbar_done(), { + showSnackbar(successText ?? Done, { key, variant: 'success', preventDuplicate: true, @@ -72,7 +71,6 @@ export function usePopupSnackbarCallback

Promise Promise executor(...args).then( (res) => { - showSnackbar(successText ?? t.snackbar_done(), { + showSnackbar(successText ?? Done, { key, variant: 'success', preventDuplicate: true, diff --git a/packages/shared/src/locale/en-US.json b/packages/shared/src/locale/en-US.json index c02cb2bcf79b..d48166adaecb 100644 --- a/packages/shared/src/locale/en-US.json +++ b/packages/shared/src/locale/en-US.json @@ -1 +1,246 @@ -{ "messages": {} } +{ + "messages": { + "yHppI0": [["0"], " network is not added in the wallet. Please add and try it again."], + "OAZ+tI": [ + ["attentionFactors", "plural", { "one": ["#", " Attention item"], "other": ["#", " Attention items"] }] + ], + "QyZU8V": [["riskyFactors", "plural", { "one": ["#", " Risky item"], "other": ["#", " Risky items"] }]], + "F9r8sg": ["~ ", ["0"]], + "5PCwvT": ["≈ ", ["gasFeeUSD"]], + "OH977a": ["1. If you haven't installed ", ["name"], " Wallet"], + "OCGzyl": ["2. If you have installed ", ["name"], " Wallet"], + "Axp2cZ": "24 Hour Trading Vol", + "XA8JXM": "Add NFTs", + "uv94aG": "Added by user", + "Du6bPw": "Address", + "sxkWRg": "Advanced", + "JiIKww": "Advanced Settings", + "hRtIgr": "APP list", + "EBrWIo": "APP Settings", + "fL7WXr": "Applications", + "Z7ZXbT": "Approve", + "7yTBmm": "Approve MASK?", + "jquqYv": ["Are you sure to report ", ["0"], "? After approving, this NFT will be marked as spam."], + "c19z3W": "Available Balance", + "fsBGk0": "Balance", + "foOw00": ["Balance(", ["symbol"], ")"], + "0wJVK+": "Basic", + "29b5Sq": "Blocto only supports the Flow chain.", + "H+bGaz": "Browse File", + "dEgA5A": "Cancel", + "o+XJ9D": "Change", + "3A/mG4": "Change Wallet", + "O2XHf2": ["Check ", ["providerName"], " to confirm connect."], + "E6HGuD": "Check out the official website", + "tFAx+m": "Choose Network", + "Pd3dlq": "Circulating Supply", + "xCJdfg": "Clear", + "RUYsn0": "Clear All", + "Dt21Rq": "Click the application icon to hide in the APP list.", + "aVI2qx": "Click the application icon to list it on the App board.", + "ZY63zZ": "Click the setting icon to list it on the App board.", + "ylUhBz": "Click to retry", + "MGP1v/": "Clicking the confirm button means that you agree to bear the above possible risks.", + "chL5IG": "Community", + "7VpPHA": "Confirm", + "B1QIGY": "Confirm Failed", + "VcLnc7": "Confirm Risk Warning", + "oG26Rt": "Confirm this transaction in your wallet", + "P+K/3O": "Confirming", + "ryWxhG": "Congratulations!", + "5ZzgbQ": ["Connect ", ["0"]], + "PlE+Fs": ["Connect and Verify ", ["0"]], + "Wqoa0p": "Connect Persona", + "CtByM7": "Connect Wallet", + "2/N/mr": ["Connect with ", ["providerName"]], + "iH8itU": "Connect your wallet", + "Tg003Y": "Connected wallets settings", + "ks5OGD": "Contract", + "PiH3UR": "Copied!", + "he3ygx": "Copy", + "ZhrWG1": "Create persona", + "5o2pdQ": "Create Persona", + "Jg5pf7": ["Current base fee is ", ["0"], " Gwei"], + "8Tg/JR": "Custom", + "Cf/0to": ["Data source is retrieved from ", ["0"], "."], + "ovBPCi": "Default", + "URmyfc": "Details", + "+K0AvT": "Disconnect", + "1QfxQT": "Dismiss", + "QO2XIN": "Do you want to set MASK token as gas fee?", + "rR6iwH": "Domain Request", + "DPfwMq": "Done", + "uyCILk": ["Download ", ["name"], " Wallet here"], + "F8Wc3I": "Drag & Drop your file here", + "Lho4Qd": "DSearch", + "ePK91l": "Edit", + "uBAxNB": "Editor", + "ZYUqCx": ["Enable ", ["name"], " Wallet extension and disable other browser extension wallets"], + "vutynE": "Enable plugin", + "Dz56Ua": "Encrypt", + "gmOW42": "ENS or Wallet Address", + "mPxxVq": "Enter a gas limit", + "Xprzee": "Enter a gas price", + "n42fmQ": "Enter a max fee", + "MOHcKb": "Enter a max priority fee", + "iPMIoT": "Enter an amount", + "7Bj3x9": "Failed", + "E6Sqiu": ["Failed to load ", ["0"], ". Click to retry."], + "OPsV2g": "Failed to load MASK. Click to retry.", + "a9X8Om": "Failed to report spam.", + "MKEPCY": "Follow", + "y6sq5j": "Following", + "K7Osiu": "Fortmatic only supports the ETH and BNB chain.", + "PRkIUI": "Gas Fee", + "yZhedI": "Gas fee settings", + "3kbpgO": "Gas Limit", + "w0e0yw": ["Gas limit must be at least ", ["0"]], + "+95jK3": "Gas limit too low will cause the transaction to fail.", + "OLY2Jk": "Gas Price", + "mhNIiJ": "Gas price is higher than necessary. You may pay more than needed.", + "jfJkBQ": "Gas price is too low for network conditions.", + "DKBbsW": "Gas price must be greater than 0 Gwei.", + "1AM6tG": "Get optimized search results when you look for a token.", + "mT57+Q": "Go to Settings", + "HqiAyF": "Gwei", + "pu3rTn": "GWEI", + "yx/fMc": "High", + "1on6yK": ["How to use ", ["0"], " Wallet?"], + "l3s5ri": "Import", + "iNIdDX": "Incorrect contract address.", + "CE+M2e": "Info", + "Z33XCd": "Input contract address", + "D79cZK": "Instant", + "6YASel": "Invalid Network", + "UfJmJU": "Invalid slippage tolerance.", + "Ap948/": "Listed", + "0Lp4o6": "Load failed", + "yQE2r9": "Loading", + "1DwbcE": "Loading....", + "nTWWCZ": "Low", + "rCsoea": "Manage Token List", + "At846K": "Manage Token Lists", + "5N3b5J": "Market Cap", + "siroPf": "Mask Network", + "lWOC+h": "Mask Network requires you to authorize the following websites before using it.", + "aYT9SD": "Max fee", + "3qe4O9": "Max Fee", + "m2OZMI": "Max fee cannot be lower than max priority fee", + "qI8U4x": "Max fee cannot be lower than max priority fee.", + "rBLzKv": "Max fee is higher than necessary.", + "ZSgQgC": "Max fee is too low for network conditions.", + "VSx1eg": "Max priority fee", + "qYuscr": "Max Priority Fee", + "rQQGN1": "Max priority fee is higher than necessary. You may pay more than needed.", + "sQJ3RN": "Max priority fee is too low for network conditions.", + "ITBQO3": "Max priority fee must be greater than 0 GWEI", + "P7S/hC": "Max priority fee must be greater than 0 Gwei.", + "agPptk": "Medium", + "ncmqYK": "Mobile Number", + "2FYpfJ": "More", + "0D4bav": "Name or Contract address e.g. USDC or 0x234...", + "me/C4W": "Name or Contract address eg.PUNK or 0x234...", + "kG0n0M": "Network error or user cancels the process.", + "8Dh77Z": "NFTs", + "ZQbnxO": "No collectible found.", + "B6C0XJ": "No Data", + "ouAjo6": "No Enough Gas Fee", + "Appw6V": "No NFTs found.", + "Ev2r9A": "No results", + "VErtTR": "Not select wallet yet.", + "zga9sT": "OK", + "wLGJSF": "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc.", + "9jba96": "Only TypedMessageText is supported currently.", + "FZg3wM": "Operation", + "A0VzMm": "Optimize search results with token names, NFT collections, ENS domains or wallet addresses.", + "BzEFor": "or", + "UbRKMZ": "Pending", + "gC2WI+": "Persona", + "frOW4Q": "Phantom only supports the Solana chain.", + "ZWVdC5": ["Please connect ", ["0"], " and send proof post before using dApps."], + "tHoyBc": ["Please connect ", ["0"], " before using dApps."], + "ygW4tI": "Please connect your persona", + "ujpEaI": "Please connect your wallet", + "tezo1U": "Please create a Persona and verify your account to use this function.", + "d0aemb": "Please create a persona for accessing Dapps.", + "+hwfjv": "Please select the wallet to activate the function after saving the settings.", + "RiLzWA": "Please switch to this network in the mobile application wallet you are connected to.", + "ysttaZ": "Please verify current persona with social media account before using dApps.", + "9tG0uf": "Please verify your social account", + "kQ4fG/": "Plug-in switch", + "ohUJJM": "Plugins", + "04MqGo": "Post content:", + "g2UNkE": "Powered by", + "GAZNIW": "Price Statistic", + "8C8O9E": ["Provided by plugin \"", ["0"], "\""], + "HpK/8d": "Reload", + "t/YqKh": "Remove", + "SREKz9": "Report NFT Scam Contract?", + "/I3RSJ": "Report Spam", + "b+scYY": "Requesting Connection", + "OfhWJH": "Reset", + "6gRgw8": "Retry", + "ByAMF+": "Risk Warning", + "o672x5": "Scan QR code with a WalletConnect-compatible wallet", + "q+O14e": "Search Area", + "h0qYUk": "Search with an ENS domain or wallet address to get optimized results.", + "ja6Tyz": "Search with the name of an NFT collection or its symbol to get optimized results.", + "rG3WVm": "Select", + "T0Y2+3": "Select a token", + "OIIXl+": "Select an NFT", + "44bNbA": "Select an NFT Contract", + "hzTib5": "Select an NFT Contract Operator", + "bLJivk": "Select an NFT Contract Owner", + "Xftpm5": "Select Collection", + "JlFcis": "Send", + "Z8lGw6": "Share", + "ZIsLZh": "Size limit: 10 MB", + "lqTDfd": "Slippage Tolerance", + "t8dIOP": "Spam", + "zzDlyQ": "Success", + "41J422": "Successfully reported.", + "6s8L6f": "Switch Network", + "1+P9RR": ["Switch to ", ["0"]], + "iReGax": "Tell selective friends what's happening...", + "FY2gWe": "The contract address is incorrect or the collection does not belong to you.", + "i4umqX": "The following wallets are not installed or in conflict with others", + "VMTGSu": "This function has been turned off in the App settings. Enable plug-ins to fully access.", + "gKSsH7": "This network is not supported yet.", + "2ci98N": "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token.", + "TP9/K5": "Token", + "2CMLgZ": "Token ID separated by comma, e.g. 1223,1224,", + "pzO3Xa": "Total Supply", + "ayxkVX": "Transaction", + "QRsMow": "Transaction Confirmed", + "vLXevL": "Transaction cost", + "iT0Qmd": "Transaction Failed", + "1M8xFP": "Transaction with extremely low slippage tolerance might be reverted because of very small market movement.", + "WDcQq9": "Unlisted", + "VAOn4r": "Unlock", + "qCMUPH": ["Unlock ", ["0"]], + "o1nVEi": ["Unlocking ", ["0"], "..."], + "qWMpAl": ["up to ", ["0"], " Gwei"], + "pHfBGz": "Updating Gas Fee…", + "B8B8TU": ["Verified by ", ["0"]], + "/OPmPQ": ["Verify ", ["0"]], + "0N2d5H": "Verify your Twitter ID", + "jpctdh": "View", + "Sjplg3": "View on Explorer", + "VECuJk": "Wallet Account", + "GEL05h": "WalletConnect", + "KCeSRZ": "We will need to verify your Twitter account and record it on the NextID. Please post it for validation.", + "2GHENQ": "Web3 Profile", + "On0aF2": "Website", + "KojyJ4": "Wrong Network", + "RNfEI8": "You canceled the request.", + "X3X0nY": ["You may have ", ["0"], "% less received with this level of slippage tolerance."], + "0hFUd/": [ + "You must give the ", + ["0"], + " smart contract permission to use your ", + ["1"], + ". You only have to do this once per token." + ], + "pPWn5m": "Your transaction was confirmed!" + } +} diff --git a/packages/shared/src/locale/en-US.po b/packages/shared/src/locale/en-US.po index d6676ae2901f..aa7ebeca4440 100644 --- a/packages/shared/src/locale/en-US.po +++ b/packages/shared/src/locale/en-US.po @@ -12,3 +12,1023 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" "Plural-Forms: \n" + +#: src/UI/components/ChainBoundary/index.tsx:113 +msgid "{0} network is not added in the wallet. Please add and try it again." +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:57 +msgid "{attentionFactors, plural, one {# Attention item} other {# Attention items}}" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:40 +msgid "{riskyFactors, plural, one {# Risky item} other {# Risky items}}" +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:71 +msgid "~ {0}" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:372 +msgid "≈ {gasFeeUSD}" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:60 +msgid "1. If you haven't installed {name} Wallet" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:78 +msgid "2. If you have installed {name} Wallet" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:100 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:168 +msgid "24 Hour Trading Vol" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:348 +#: src/UI/modals/AddCollectiblesModal/AddCollectiblesDialog.tsx:32 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:230 +msgid "Add NFTs" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:263 +msgid "Added by user" +msgstr "" + +#: src/UI/components/TokenWithSocialGroupMenu/index.tsx:159 +#: src/UI/wallet/DeriveWalletTable.tsx:124 +msgid "Address" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:112 +msgid "Advanced" +msgstr "" + +#: src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx:82 +msgid "Advanced Settings" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:110 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:51 +msgid "APP list" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:55 +msgid "APP Settings" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +msgid "Applications" +msgstr "" + +#: src/UI/components/GrantPermission/index.tsx:35 +msgid "Approve" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:112 +msgid "Approve MASK?" +msgstr "" + +#: src/hooks/useReportSpam.tsx:65 +msgid "Are you sure to report {0}? After approving, this NFT will be marked as spam." +msgstr "" + +#: src/UI/components/FungibleTokenInput/UI.tsx:171 +msgid "Available Balance" +msgstr "" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:105 +#: src/UI/components/FungibleTokenInput/UI.tsx:172 +#: src/UI/components/TokenAmountPanel/index.tsx:143 +msgid "Balance" +msgstr "" + +#: src/UI/wallet/DeriveWalletTable.tsx:129 +msgid "Balance({symbol})" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:111 +msgid "Basic" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:191 +msgid "Blocto only supports the Flow chain." +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:135 +msgid "Browse File" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:140 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:127 +msgid "Cancel" +msgstr "" + +#: src/UI/components/WalletStatusBar/Action.tsx:17 +#: src/UI/components/WalletStatusBar/WalletMenuItem.tsx:79 +#: src/UI/components/WalletStatusBox/index.tsx:231 +msgid "Change" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:186 +msgid "Change Wallet" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:179 +msgid "Check {providerName} to confirm connect." +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:72 +msgid "Check out the official website" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:333 +msgid "Choose Network" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:89 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:157 +msgid "Circulating Supply" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:161 +msgid "Clear" +msgstr "" + +#: src/UI/components/WalletStatusBox/usePendingTransactions.tsx:61 +msgid "Clear All" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:152 +msgid "Click the application icon to hide in the APP list." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:151 +msgid "Click the application icon to list it on the App board." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:214 +msgid "Click the setting icon to list it on the App board." +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:118 +msgid "Click to retry" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:116 +msgid "Clicking the confirm button means that you agree to bear the above possible risks." +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:213 +#: src/UI/components/CoinMetadataTable/index.tsx:284 +msgid "Community" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:97 +#: src/UI/contexts/components/ApproveMaskDialog.tsx:103 +#: src/UI/modals/ConfirmModal/Dialog.tsx:39 +#: src/UI/modals/ConfirmModal/Dialog.tsx:43 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:302 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:245 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:133 +msgid "Confirm" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:135 +msgid "Confirm Failed" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:74 +msgid "Confirm Risk Warning" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:90 +msgid "Confirm this transaction in your wallet" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:134 +msgid "Confirming" +msgstr "" + +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:127 +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:152 +msgid "Congratulations!" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:185 +#: src/UI/components/PersonaSelectPanel/index.tsx:196 +msgid "Connect {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:176 +msgid "Connect and Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:95 +msgid "Connect Persona" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:170 +#: src/UI/components/WalletConnectedBoundary/index.tsx:57 +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:216 +#: src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx:105 +#: src/UI/components/WalletStatusBox/index.tsx:144 +#: src/UI/modals/SelectProviderModal/SelectProvider.tsx:96 +msgid "Connect Wallet" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:143 +msgid "Connect with {providerName}" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:178 +msgid "Connect your wallet" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:197 +msgid "Connected wallets settings" +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:158 +#: src/UI/components/CoinMetadataTable/index.tsx:264 +msgid "Contract" +msgstr "" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copied!" +msgstr "" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copy" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:46 +#: src/UI/components/PersonaSelectPanel/index.tsx:110 +msgid "Create persona" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:87 +msgid "Create Persona" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:176 +msgid "Current base fee is {0} Gwei" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:256 +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:377 +#: src/UI/components/SettingsBoard/GasSection.tsx:99 +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:91 +msgid "Custom" +msgstr "" + +#: src/UI/components/AccountIcons/index.tsx:78 +#: src/UI/components/SocialAccountList/SocialTooltip.tsx:27 +msgid "Data source is retrieved from {0}." +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:141 +msgid "Default" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:92 +msgid "Details" +msgstr "" + +#: src/UI/components/WalletStatusBox/index.tsx:221 +msgid "Disconnect" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/contexts/components/InjectedDialog.tsx:240 +msgid "Dismiss" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:123 +msgid "Do you want to set MASK token as gas fee?" +msgstr "" + +#: src/UI/components/CompositionDialog/PluginEntryRender.tsx:108 +msgid "Domain Request" +msgstr "" + +#: src/hooks/useSnackbarCallback.tsx:40 +#: src/hooks/useSnackbarCallback.tsx:89 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:140 +msgid "Done" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:63 +msgid "Download {name} Wallet here" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:124 +msgid "Drag & Drop your file here" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:208 +msgid "DSearch" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:343 +msgid "Edit" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Editor" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:81 +msgid "Enable {name} Wallet extension and disable other browser extension wallets" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:51 +msgid "Enable plugin" +msgstr "" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:163 +msgid "Encrypt" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:246 +msgid "ENS or Wallet Address" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:31 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:135 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:132 +msgid "Enter a gas limit" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:38 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:137 +msgid "Enter a gas price" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:81 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:144 +msgid "Enter a max fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:58 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:142 +msgid "Enter a max priority fee" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:75 +msgid "Enter an amount" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:92 +msgid "Failed" +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:122 +msgid "Failed to load {0}. Click to retry." +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:82 +msgid "Failed to load MASK. Click to retry." +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Failed to report spam." +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:236 +msgid "Follow" +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:235 +msgid "Following" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:193 +msgid "Fortmatic only supports the ETH and BNB chain." +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:361 +msgid "Gas Fee" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSettingModal.tsx:41 +msgid "Gas fee settings" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:231 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:249 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:215 +msgid "Gas Limit" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:138 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:135 +msgid "Gas limit must be at least {0}" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:34 +msgid "Gas limit too low will cause the transaction to fail." +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:200 +#: src/UI/components/SettingsBoard/GasSection.tsx:92 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:222 +msgid "Gas Price" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:54 +msgid "Gas price is higher than necessary. You may pay more than needed." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:46 +msgid "Gas price is too low for network conditions." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:39 +msgid "Gas price must be greater than 0 Gwei." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:231 +msgid "Get optimized search results when you look for a token." +msgstr "" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:36 +msgid "Go to Settings" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:193 +#: src/UI/components/SettingsBoard/GasForm.tsx:261 +#: src/UI/components/SettingsBoard/GasForm.tsx:299 +msgid "Gwei" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:258 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:278 +msgid "GWEI" +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:96 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:119 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:118 +msgid "High" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:56 +msgid "How to use {0} Wallet?" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:162 +msgid "Import" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:164 +#: src/UI/components/FungibleTokenList/index.tsx:271 +msgid "Incorrect contract address." +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:148 +#: src/UI/components/CoinMetadataTable/index.tsx:255 +msgid "Info" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:246 +msgid "Input contract address" +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:95 +msgid "Instant" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:96 +msgid "Invalid Network" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts:18 +msgid "Invalid slippage tolerance." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:116 +msgid "Listed" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:20 +#: src/UI/components/ReloadStatus/index.tsx:46 +msgid "Load failed" +msgstr "" + +#: src/UI/components/LoadingStatus/index.tsx:40 +msgid "Loading" +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:86 +msgid "Loading...." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:109 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:108 +msgid "Low" +msgstr "" + +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:127 +msgid "Manage Token List" +msgstr "" + +#: src/UI/components/FungibleTokenList/ManageTokenListBar.tsx:32 +msgid "Manage Token Lists" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:70 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:146 +msgid "Market Cap" +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:69 +msgid "Mask Network" +msgstr "" + +#: src/UI/components/GrantPermission/index.tsx:27 +msgid "Mask Network requires you to authorize the following websites before using it." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:276 +msgid "Max fee" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:306 +msgid "Max Fee" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:147 +msgid "Max fee cannot be lower than max priority fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:100 +msgid "Max fee cannot be lower than max priority fee." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:96 +msgid "Max fee is higher than necessary." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:88 +msgid "Max fee is too low for network conditions." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:256 +msgid "Max priority fee" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:272 +msgid "Max Priority Fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:77 +msgid "Max priority fee is higher than necessary. You may pay more than needed." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:66 +msgid "Max priority fee is too low for network conditions." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:143 +msgid "Max priority fee must be greater than 0 GWEI" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:59 +msgid "Max priority fee must be greater than 0 Gwei." +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:97 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:114 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:113 +msgid "Medium" +msgstr "" + +#: src/UI/components/PhoneNumberField/index.tsx:29 +msgid "Mobile Number" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:72 +msgid "More" +msgstr "" + +#: src/UI/components/FungibleTokenList/index.tsx:341 +msgid "Name or Contract address e.g. USDC or 0x234..." +msgstr "" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:191 +msgid "Name or Contract address eg.PUNK or 0x234..." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:124 +msgid "Network error or user cancels the process." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:236 +msgid "NFTs" +msgstr "" + +#: src/UI/components/CollectibleList/CollectibleList.tsx:112 +msgid "No collectible found." +msgstr "" + +#: src/UI/components/EmptyStatus/index.tsx:32 +msgid "No Data" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:89 +msgid "No Enough Gas Fee" +msgstr "" + +#: src/UI/components/AssetsManagement/CollectionList.tsx:241 +#: src/UI/components/AssetsManagement/CollectionList.tsx:342 +msgid "No NFTs found." +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:319 +#: src/UI/components/CountryCodePicker/index.tsx:145 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:208 +msgid "No results" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:78 +msgid "Not select wallet yet." +msgstr "" + +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "OK" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:196 +msgid "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc." +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:155 +msgid "Only TypedMessageText is supported currently." +msgstr "" + +#: src/UI/wallet/DeriveWalletTable.tsx:134 +msgid "Operation" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:212 +msgid "Optimize search results with token names, NFT collections, ENS domains or wallet addresses." +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:132 +msgid "or" +msgstr "" + +#: src/UI/components/WalletStatusBar/WalletDescription.tsx:125 +#: src/UI/components/WalletStatusBox/TransactionList.tsx:90 +msgid "Pending" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:45 +#: src/UI/components/PersonaSelectPanel/index.tsx:109 +#: src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx:74 +msgid "Persona" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:189 +msgid "Phantom only supports the Solana chain." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:178 +msgid "Please connect {0} and send proof post before using dApps." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:186 +msgid "Please connect {0} before using dApps." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:266 +msgid "Please connect your persona" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:261 +msgid "Please connect your wallet" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:44 +#: src/UI/components/PersonaSelectPanel/index.tsx:108 +msgid "Please create a Persona and verify your account to use this function." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:264 +msgid "Please create a persona for accessing Dapps." +msgstr "" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:30 +msgid "Please select the wallet to activate the function after saving the settings." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:189 +#: src/UI/components/ChainBoundary/index.tsx:206 +msgid "Please switch to this network in the mobile application wallet you are connected to." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:192 +msgid "Please verify current persona with social media account before using dApps." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:268 +msgid "Please verify your social account" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:111 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:52 +msgid "Plug-in switch" +msgstr "" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:145 +msgid "Plugins" +msgstr "" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:245 +#: src/UI/components/VerifyNextIDDialog/index.tsx:265 +msgid "Post content:" +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:109 +#: src/UI/components/PluginCardFrame/index.tsx:67 +msgid "Powered by" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:61 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:137 +msgid "Price Statistic" +msgstr "" + +#: src/UI/components/CompositionDialog/BadgeRenderer.tsx:49 +msgid "Provided by plugin \"{0}\"" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:24 +#: src/UI/components/ReloadStatus/index.tsx:48 +msgid "Reload" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:95 +msgid "Remove" +msgstr "" + +#: src/hooks/useReportSpam.tsx:63 +msgid "Report NFT Scam Contract?" +msgstr "" + +#: src/hooks/useReportSpam.tsx:74 +msgid "Report Spam" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:174 +msgid "Requesting Connection" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Reset" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:189 +msgid "Retry" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:92 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:101 +msgid "Risk Warning" +msgstr "" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:85 +msgid "Scan QR code with a WalletConnect-compatible wallet" +msgstr "" + +#: src/UI/components/CountryCodePicker/index.tsx:112 +msgid "Search Area" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:249 +msgid "Search with an ENS domain or wallet address to get optimized results." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:239 +msgid "Search with the name of an NFT collection or its symbol to get optimized results." +msgstr "" + +#: src/UI/components/SelectTokenChip/index.tsx:60 +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:128 +msgid "Select" +msgstr "" + +#: src/UI/components/FungibleTokenInput/UI.tsx:221 +msgid "Select a token" +msgstr "" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:96 +msgid "Select an NFT" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:43 +msgid "Select an NFT Contract" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:45 +msgid "Select an NFT Contract Operator" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:44 +msgid "Select an NFT Contract Owner" +msgstr "" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:185 +msgid "Select Collection" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:335 +#: src/UI/components/AssetsManagement/Collection.tsx:147 +#: src/UI/components/AssetsManagement/CollectionList.tsx:286 +#: src/UI/components/VerifyNextIDDialog/index.tsx:287 +msgid "Send" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "Share" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:128 +msgid "Size limit: 10 MB" +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceSection.tsx:26 +msgid "Slippage Tolerance" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:93 +msgid "Spam" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:91 +msgid "Success" +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Successfully reported." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:109 +#: src/UI/components/ChainBoundary/index.tsx:121 +msgid "Switch Network" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:204 +msgid "Switch to {0}" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:179 +msgid "Tell selective friends what's happening..." +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:307 +msgid "The contract address is incorrect or the collection does not belong to you." +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:276 +msgid "The following wallets are not installed or in conflict with others" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:39 +msgid "This function has been turned off in the App settings. Enable plug-ins to fully access." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:190 +msgid "This network is not supported yet." +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:117 +msgid "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:228 +msgid "Token" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:280 +msgid "Token ID separated by comma, e.g. 1223,1224," +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:118 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:178 +msgid "Total Supply" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:81 +msgid "Transaction" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:95 +msgid "Transaction Confirmed" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:337 +msgid "Transaction cost" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:100 +msgid "Transaction Failed" +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:124 +msgid "Transaction with extremely low slippage tolerance might be reverted because of very small market movement." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:120 +msgid "Unlisted" +msgstr "" + +#: src/hooks/useGasCurrencyMenu.tsx:96 +msgid "Unlock" +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:165 +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:100 +msgid "Unlock {0}" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:59 +msgid "Unlocking {0}..." +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:80 +msgid "up to {0} Gwei" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:88 +msgid "Updating Gas Fee…" +msgstr "" + +#: src/UI/components/AssetsManagement/CollectibleItem.tsx:186 +#: src/UI/components/AssetsManagement/Collection.tsx:197 +#: src/UI/components/AssetsManagement/CollectionHeader.tsx:67 +msgid "Verified by {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:190 +msgid "Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:102 +msgid "Verify your Twitter ID" +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:233 +msgid "View" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:67 +#: src/UI/components/WalletStatusBox/index.tsx:187 +msgid "View on Explorer" +msgstr "" + +#: src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx:45 +msgid "Wallet Account" +msgstr "" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:77 +msgid "WalletConnect" +msgstr "" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:256 +#: src/UI/components/VerifyNextIDDialog/index.tsx:269 +msgid "We will need to verify your Twitter account and record it on the NextID. Please post it for validation." +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:56 +msgid "Web3 Profile" +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:104 +#: src/UI/components/CoinMetadataTable/index.tsx:274 +msgid "Website" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:155 +msgid "Wrong Network" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:178 +msgid "You canceled the request." +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:131 +msgid "You may have {0}% less received with this level of slippage tolerance." +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:147 +msgid "You must give the {0} smart contract permission to use your {1}. You only have to do this once per token." +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:84 +msgid "Your transaction was confirmed!" +msgstr "" diff --git a/packages/shared/src/locale/ja-JP.json b/packages/shared/src/locale/ja-JP.json index c02cb2bcf79b..1b21f5ec9221 100644 --- a/packages/shared/src/locale/ja-JP.json +++ b/packages/shared/src/locale/ja-JP.json @@ -1 +1,245 @@ -{ "messages": {} } +{ + "messages": { + "yHppI0": [["0"], " network is not added in the wallet. Please add and try it again."], + "OAZ+tI": [ + ["attentionFactors", "plural", { "one": ["#", " Attention item"], "other": ["#", " Attention items"] }] + ], + "QyZU8V": [["riskyFactors", "plural", { "one": ["#", " Risky item"], "other": ["#", " Risky items"] }]], + "F9r8sg": ["~ ", ["0"]], + "5PCwvT": ["≈ ", ["gasFeeUSD"]], + "OH977a": ["1. If you haven't installed ", ["name"], " Wallet"], + "OCGzyl": ["2. If you have installed ", ["name"], " Wallet"], + "Axp2cZ": "24時間取引Vol", + "XA8JXM": "コレクティブルを追加", + "uv94aG": "ユーザーによって追加", + "Du6bPw": "アドレス", + "sxkWRg": "詳細", + "JiIKww": "詳細設定", + "hRtIgr": "アプリ一覧", + "EBrWIo": "アプリ設定", + "fL7WXr": "アプリケーション", + "Z7ZXbT": "承認します", + "7yTBmm": "MASKを承認しますか?", + "jquqYv": [["0"], "を報告してもよろしいですか?承認すると、このNFTはスパムとしてマークされます。"], + "c19z3W": "利用可能な残高", + "fsBGk0": "残高", + "foOw00": ["Balance(", ["symbol"], ")"], + "0wJVK+": "基本", + "29b5Sq": "Blocto は Flow チェーンのみを対応します。", + "H+bGaz": "ファイルを開く", + "dEgA5A": "キャンセル", + "o+XJ9D": "変更", + "3A/mG4": "ウォレットを変更", + "O2XHf2": ["Check ", ["providerName"], " to confirm connect."], + "E6HGuD": "公式サイトをチェックする", + "tFAx+m": "ネットワークを選択", + "Pd3dlq": "流通供給量", + "xCJdfg": "クリア", + "RUYsn0": "すべて消去", + "Dt21Rq": "アプリアイコンをクリックして、アプリ一覧で非表示にします。", + "aVI2qx": "アプリのアイコンをクリックして、アプリボードに表示します。", + "ZY63zZ": "設定アイコンをクリックしてアプリボードに表示します。", + "ylUhBz": "クリックして再試行", + "MGP1v/": "確認ボタンをクリックすると、上記のリスクを負うことに同意することになります。", + "chL5IG": "コミュニティー", + "7VpPHA": "確認", + "B1QIGY": "確認に失敗しました", + "VcLnc7": "リスク警告の確認", + "oG26Rt": "ウォレットで取引を確認する", + "P+K/3O": "確認中", + "ryWxhG": "おめでとうございます!", + "5ZzgbQ": ["Connect ", ["0"]], + "PlE+Fs": ["Connect and Verify ", ["0"]], + "Wqoa0p": "ペルソナを接続", + "CtByM7": "ウォレットを接続", + "2/N/mr": ["Connect with ", ["providerName"]], + "iH8itU": "ウォレットを接続します", + "Tg003Y": "接続されたウォレットの設定", + "ks5OGD": "コントラクト", + "PiH3UR": "コピーしました", + "he3ygx": "コピー", + "ZhrWG1": "ペルソナを作成", + "5o2pdQ": "ペルソナを作成", + "Jg5pf7": ["現在の基本手数料は ", ["0"], " Gweiです"], + "8Tg/JR": "カスタム", + "Cf/0to": ["データソースは ", ["0"], " から取得されます。"], + "ovBPCi": "デフォルト", + "URmyfc": "詳細", + "+K0AvT": "接続解除", + "1QfxQT": "解除", + "QO2XIN": "MASKトークンをガス料金を支払いに設定しますか?", + "rR6iwH": "ドメインリクエスト", + "DPfwMq": "完了", + "uyCILk": ["Download ", ["name"], " Wallet here"], + "F8Wc3I": "ここにファイルをドラッグ&ドロップしてください", + "Lho4Qd": "DSearch", + "ePK91l": "編集", + "uBAxNB": "編集者", + "ZYUqCx": ["Enable ", ["name"], " Wallet extension and disable other browser extension wallets"], + "vutynE": "プラグインを有効化する", + "Dz56Ua": "暗号化", + "gmOW42": "ENSまたはウォレットアドレス", + "mPxxVq": "ガスの制限を入力してください", + "Xprzee": "ガス価格を入力", + "n42fmQ": "最大手数料を入力してください", + "MOHcKb": "最大優先料金を入力してください", + "iPMIoT": "金額を入力します", + "7Bj3x9": "失敗しました", + "E6Sqiu": [["0"], "の読み込みに失敗しました。クリックして再試行してください。"], + "OPsV2g": "Failed to load MASK. Click to retry.", + "a9X8Om": "スパムを報告できませんでした。", + "MKEPCY": "フォロー", + "y6sq5j": "フォロー中", + "K7Osiu": "FortmaticはETHとBNBチェーンのみを対応しています。", + "PRkIUI": "ガス料金", + "yZhedI": "ガス料金の設定", + "3kbpgO": "ガス制限", + "w0e0yw": ["Gas limit must be at least ", ["0"]], + "+95jK3": "ガス制限が低すぎると、トランザクションが失敗する原因になります", + "OLY2Jk": "ガス価格", + "mhNIiJ": "ガスの価格は必要以上に高いです。必要以上に支払うになります。", + "jfJkBQ": "ガス価格がネットワーク状況に対して低すぎます。", + "DKBbsW": "ガス価格は0Gwei以上でなければなりません。", + "1AM6tG": "トークンを探すときに最適化された検索結果を取得します。", + "mT57+Q": "設定に進む", + "HqiAyF": "Gwei(グワイ)", + "pu3rTn": "GWEI", + "yx/fMc": "高", + "1on6yK": [["0"], " ウォレットの使用方法は?"], + "l3s5ri": "インポート", + "iNIdDX": "有効なトークンアドレスを入力してください", + "CE+M2e": "情報", + "Z33XCd": "コントラクトアドレスを入力", + "D79cZK": "インスタント", + "6YASel": "無効のネットワーク", + "UfJmJU": "無効なスリッページの許容範囲です。", + "Ap948/": "リストされました", + "0Lp4o6": "読み込みに失敗しました", + "yQE2r9": "読み込み中", + "1DwbcE": "読み込み中...", + "nTWWCZ": "低い", + "rCsoea": "トークンリストを管理", + "At846K": "トークンリストを管理", + "5N3b5J": "時価総額", + "siroPf": "Mask Network", + "lWOC+h": "Mask Networkは、利用する前に次のウェブサイトを承認する必要があります。", + "aYT9SD": "最大料金", + "3qe4O9": "最大料金", + "m2OZMI": "最大手数料は最大優先手数料より低くすることはできません", + "qI8U4x": "最大手数料は、最大優先手数料よりも低くすることはできません。", + "rBLzKv": "最大手数料は必要以上に高いです。", + "ZSgQgC": "最大手数料がネットワーク状況に対して低すぎます。", + "VSx1eg": "最大優先手数料", + "qYuscr": "最大優先料金", + "rQQGN1": "最大優先料金は必要以上に高いです。必要以上に支払うになります。", + "sQJ3RN": "最大優先料金がネットワーク状況に対して低すぎます。", + "ITBQO3": "最大優先手数料は0GWEIより大きくなければなりません", + "P7S/hC": "最大優先料金は0Gweiより大きくなければなりません。", + "agPptk": "中", + "ncmqYK": "携帯番号", + "2FYpfJ": "その他", + "0D4bav": "名前またはコントラクトアドレス (USDC または 0x234...", + "me/C4W": "名前またはコントラクトアドレス。例:PUNK or 0x234...", + "kG0n0M": "ネットワークエラーまたはユーザーがプロセスをキャンセルします。", + "8Dh77Z": "NFTs", + "ZQbnxO": "コレクションが見つかりません.", + "B6C0XJ": "データなし", + "ouAjo6": "ガス代なし", + "Appw6V": "NFTが見つかりません。", + "Ev2r9A": "該当なし", + "VErtTR": "ウォレットを選択していません", + "zga9sT": "OK", + "wLGJSF": "EVMチェーン、ETH、BNBチェーン、Polygon、Arb、Opなどに対応しています。", + "9jba96": "現在、TypedMessageTextのみ対応しています。", + "FZg3wM": "操作", + "A0VzMm": "トークン名、NFTコレクション、ENSドメイン、またはウォレットアドレスで検索結果を最適化します。", + "BzEFor": "または", + "UbRKMZ": "保留中", + "gC2WI+": "ペルソナ", + "frOW4Q": "Phantom は Solana チェーンのみを対応します。", + "ZWVdC5": ["dAppsを利用する前に", ["0"], "を接続し、プルーフポストを送信してください。"], + "tHoyBc": ["dAppsを使用する前に、 ", ["0"], " に接続してください。"], + "ygW4tI": "あなたのペルソナに接続してください", + "ujpEaI": "ウォレットに接続してください", + "tezo1U": "本機能を利用するには、ペルソナを作成し、アカウントを認証してください。", + "d0aemb": "Dappsにアクセスするペルソナを作成してください。", + "+hwfjv": "設定を保存した後、ウォレットを選択して機能を有効にしてください。", + "RiLzWA": "Please switch to this network in the mobile application wallet you are connected to.", + "ysttaZ": "dAppsを使用する前に、ソーシャルメディアアカウントで現在のペルソナを確認してください。", + "9tG0uf": "ソーシャルアカウントを確認してください", + "kQ4fG/": "プラグイン・スイッチ", + "ohUJJM": "プラグイン", + "04MqGo": "投稿内容", + "g2UNkE": "以下により提供されています", + "GAZNIW": "価格統計", + "8C8O9E": ["Provided by plugin \"", ["0"], "\""], + "HpK/8d": "再読み込み", + "t/YqKh": "消去", + "SREKz9": "NFT 詐欺契約を報告しますか?", + "/I3RSJ": "スパムを報告", + "b+scYY": "接続をリクエスト中", + "OfhWJH": "リセット", + "6gRgw8": "再試行", + "ByAMF+": "リスク警告", + "o672x5": "WalletConnect対応ウォレットでQRコードスキャン", + "q+O14e": "捜索エリア", + "h0qYUk": "ENSドメインまたはウォレットアドレスで検索すると、最適化された結果が得られます。", + "ja6Tyz": "NFT コレクションまたはそのシンボルの名前で検索し、最適化された結果を得ます。", + "rG3WVm": "選択", + "T0Y2+3": "トークンを選択します", + "OIIXl+": "NFT を選択します", + "44bNbA": "NFT コントラクトを選択", + "hzTib5": "NFT コントラクトのオペレーターを選択", + "bLJivk": "NFT コントラクト所有者を選択", + "Xftpm5": "コレクションを選択", + "JlFcis": "送信", + "Z8lGw6": "シェア", + "ZIsLZh": "サイズ制限:10 MB", + "lqTDfd": "スリッページの許容範囲", + "t8dIOP": "スパム", + "zzDlyQ": "完了", + "41J422": "報告に成功しました。", + "6s8L6f": "ネットワークを切り替え", + "1+P9RR": ["Switch to ", ["0"]], + "iReGax": "選択的な友達に何が起きているのか伝えてください...", + "FY2gWe": "コントラクトアドレスが正しくないか、コレクションはあなたに属していません。", + "i4umqX": "以下のウォレットがインストールされていないか、他のウォレットと競合しています", + "VMTGSu": "この機能はアプリ設定でオフになっています。プラグインに完全にアクセスできるようにしてください。", + "gKSsH7": [["network"], " はまだサポートされていません."], + "2ci98N": "Polygonのネットワークを利用するには、MATICトークンがガス料金として支払う必要があります。SmartPayを使用すると、MASKトークンを使ってPolygonネットワーク上でガス料金を支払うことができます。", + "TP9/K5": "トークン", + "2CMLgZ": "Token ID separated by comma, e.g. 1223,1224,", + "pzO3Xa": "総供給量", + "ayxkVX": "トランザクション", + "QRsMow": "取引が確認されました", + "vLXevL": "取引費用", + "iT0Qmd": "取引が失敗しました", + "1M8xFP": "スリッページの許容範囲が極端に小さい取引は、ごくわずかな相場の動きで元に戻ってしまうことがあります。", + "WDcQq9": "未掲載", + "VAOn4r": "ロック解除", + "qCMUPH": ["Unlock ", ["0"]], + "o1nVEi": [["0"], " のロックを解除中..."], + "qWMpAl": ["最大 ", ["0"], " Gweiまで"], + "pHfBGz": "ガス代を更新中…", + "B8B8TU": ["Verified by ", ["0"]], + "/OPmPQ": ["Verify ", ["0"]], + "0N2d5H": "Twitter IDの認証", + "jpctdh": "表示", + "Sjplg3": "エクスプローラーで表示", + "VECuJk": "ウォレットアカウント", + "GEL05h": "ウォレット接続", + "KCeSRZ": "Twitterアカウントを認証し、NextIDに記録する必要があります。認証のために投稿してください。", + "2GHENQ": "Web3 プロフィール", + "On0aF2": "ウェブサイト", + "KojyJ4": "ネットワークが間違っています", + "RNfEI8": "リクエストを取り消しました。", + "X3X0nY": ["このスリッページ許容範囲で受領率が ", ["0"], "% 低くなる可能性があります。"], + "0hFUd/": [ + ["0"], + " スマートコントラクトに自分の", + ["1"], + "を使用する許可を与える必要があります。これは1つのトークンにつき1回だけ行う必要があります。" + ], + "pPWn5m": "トランザクションが確認されました!" + } +} diff --git a/packages/shared/src/locale/ja-JP.po b/packages/shared/src/locale/ja-JP.po index 5c6580233452..f639f148f700 100644 --- a/packages/shared/src/locale/ja-JP.po +++ b/packages/shared/src/locale/ja-JP.po @@ -17,3 +17,1023 @@ msgstr "" "X-Crowdin-Language: ja\n" "X-Crowdin-File: /[DimensionDev.Maskbook] develop/packages/shared/src/locale/en-US.po\n" "X-Crowdin-File-ID: 1012\n" + +#: src/UI/components/ChainBoundary/index.tsx:113 +msgid "{0} network is not added in the wallet. Please add and try it again." +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:57 +msgid "{attentionFactors, plural, one {# Attention item} other {# Attention items}}" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:40 +msgid "{riskyFactors, plural, one {# Risky item} other {# Risky items}}" +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:71 +msgid "~ {0}" +msgstr "~ {0}" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:372 +msgid "≈ {gasFeeUSD}" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:60 +msgid "1. If you haven't installed {name} Wallet" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:78 +msgid "2. If you have installed {name} Wallet" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:100 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:168 +msgid "24 Hour Trading Vol" +msgstr "24時間取引Vol" + +#: src/UI/components/AddCollectibles/index.tsx:348 +#: src/UI/modals/AddCollectiblesModal/AddCollectiblesDialog.tsx:32 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:230 +msgid "Add NFTs" +msgstr "コレクティブルを追加" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:263 +msgid "Added by user" +msgstr "ユーザーによって追加" + +#: src/UI/components/TokenWithSocialGroupMenu/index.tsx:159 +#: src/UI/wallet/DeriveWalletTable.tsx:124 +msgid "Address" +msgstr "アドレス" + +#: src/UI/components/SettingsBoard/GasSection.tsx:112 +msgid "Advanced" +msgstr "詳細" + +#: src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx:82 +msgid "Advanced Settings" +msgstr "詳細設定" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:110 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:51 +msgid "APP list" +msgstr "アプリ一覧" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:55 +msgid "APP Settings" +msgstr "アプリ設定" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +msgid "Applications" +msgstr "アプリケーション" + +#: src/UI/components/GrantPermission/index.tsx:35 +msgid "Approve" +msgstr "承認します" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:112 +msgid "Approve MASK?" +msgstr "MASKを承認しますか?" + +#: src/hooks/useReportSpam.tsx:65 +msgid "Are you sure to report {0}? After approving, this NFT will be marked as spam." +msgstr "{0}を報告してもよろしいですか?承認すると、このNFTはスパムとしてマークされます。" + +#: src/UI/components/FungibleTokenInput/UI.tsx:171 +msgid "Available Balance" +msgstr "利用可能な残高" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:105 +#: src/UI/components/FungibleTokenInput/UI.tsx:172 +#: src/UI/components/TokenAmountPanel/index.tsx:143 +msgid "Balance" +msgstr "残高" + +#: src/UI/wallet/DeriveWalletTable.tsx:129 +msgid "Balance({symbol})" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:111 +msgid "Basic" +msgstr "基本" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:191 +msgid "Blocto only supports the Flow chain." +msgstr "Blocto は Flow チェーンのみを対応します。" + +#: src/UI/components/UploadDropArea/index.tsx:135 +msgid "Browse File" +msgstr "ファイルを開く" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:140 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:127 +msgid "Cancel" +msgstr "キャンセル" + +#: src/UI/components/WalletStatusBar/Action.tsx:17 +#: src/UI/components/WalletStatusBar/WalletMenuItem.tsx:79 +#: src/UI/components/WalletStatusBox/index.tsx:231 +msgid "Change" +msgstr "変更" + +#: src/UI/components/ChainBoundary/index.tsx:186 +msgid "Change Wallet" +msgstr "ウォレットを変更" + +#: src/UI/modals/ConnectWalletModal/index.tsx:179 +msgid "Check {providerName} to confirm connect." +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:72 +msgid "Check out the official website" +msgstr "公式サイトをチェックする" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:333 +msgid "Choose Network" +msgstr "ネットワークを選択" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:89 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:157 +msgid "Circulating Supply" +msgstr "流通供給量" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:161 +msgid "Clear" +msgstr "クリア" + +#: src/UI/components/WalletStatusBox/usePendingTransactions.tsx:61 +msgid "Clear All" +msgstr "すべて消去" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:152 +msgid "Click the application icon to hide in the APP list." +msgstr "アプリアイコンをクリックして、アプリ一覧で非表示にします。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:151 +msgid "Click the application icon to list it on the App board." +msgstr "アプリのアイコンをクリックして、アプリボードに表示します。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:214 +msgid "Click the setting icon to list it on the App board." +msgstr "設定アイコンをクリックしてアプリボードに表示します。" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:118 +msgid "Click to retry" +msgstr "クリックして再試行" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:116 +msgid "Clicking the confirm button means that you agree to bear the above possible risks." +msgstr "確認ボタンをクリックすると、上記のリスクを負うことに同意することになります。" + +#: src/UI/components/CoinMetadataTable/index.tsx:213 +#: src/UI/components/CoinMetadataTable/index.tsx:284 +msgid "Community" +msgstr "コミュニティー" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:97 +#: src/UI/contexts/components/ApproveMaskDialog.tsx:103 +#: src/UI/modals/ConfirmModal/Dialog.tsx:39 +#: src/UI/modals/ConfirmModal/Dialog.tsx:43 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:302 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:245 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:133 +msgid "Confirm" +msgstr "確認" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:135 +msgid "Confirm Failed" +msgstr "確認に失敗しました" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:74 +msgid "Confirm Risk Warning" +msgstr "リスク警告の確認" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:90 +msgid "Confirm this transaction in your wallet" +msgstr "ウォレットで取引を確認する" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:134 +msgid "Confirming" +msgstr "確認中" + +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:127 +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:152 +msgid "Congratulations!" +msgstr "おめでとうございます!" + +#: src/UI/components/PersonaSelectPanel/index.tsx:185 +#: src/UI/components/PersonaSelectPanel/index.tsx:196 +msgid "Connect {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:176 +msgid "Connect and Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:95 +msgid "Connect Persona" +msgstr "ペルソナを接続" + +#: src/UI/components/ChainBoundary/index.tsx:170 +#: src/UI/components/WalletConnectedBoundary/index.tsx:57 +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:216 +#: src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx:105 +#: src/UI/components/WalletStatusBox/index.tsx:144 +#: src/UI/modals/SelectProviderModal/SelectProvider.tsx:96 +msgid "Connect Wallet" +msgstr "ウォレットを接続" + +#: src/UI/modals/ConnectWalletModal/index.tsx:143 +msgid "Connect with {providerName}" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:178 +msgid "Connect your wallet" +msgstr "ウォレットを接続します" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:197 +msgid "Connected wallets settings" +msgstr "接続されたウォレットの設定" + +#: src/UI/components/CoinMetadataTable/index.tsx:158 +#: src/UI/components/CoinMetadataTable/index.tsx:264 +msgid "Contract" +msgstr "コントラクト" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copied!" +msgstr "コピーしました" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copy" +msgstr "コピー" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:46 +#: src/UI/components/PersonaSelectPanel/index.tsx:110 +msgid "Create persona" +msgstr "ペルソナを作成" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:87 +msgid "Create Persona" +msgstr "ペルソナを作成" + +#: src/UI/components/SettingsBoard/GasForm.tsx:176 +msgid "Current base fee is {0} Gwei" +msgstr "現在の基本手数料は {0} Gweiです" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:256 +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:377 +#: src/UI/components/SettingsBoard/GasSection.tsx:99 +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:91 +msgid "Custom" +msgstr "カスタム" + +#: src/UI/components/AccountIcons/index.tsx:78 +#: src/UI/components/SocialAccountList/SocialTooltip.tsx:27 +msgid "Data source is retrieved from {0}." +msgstr "データソースは {0} から取得されます。" + +#: src/UI/components/MaskPluginWrapper/index.tsx:141 +msgid "Default" +msgstr "デフォルト" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:92 +msgid "Details" +msgstr "詳細" + +#: src/UI/components/WalletStatusBox/index.tsx:221 +msgid "Disconnect" +msgstr "接続解除" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/contexts/components/InjectedDialog.tsx:240 +msgid "Dismiss" +msgstr "解除" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:123 +msgid "Do you want to set MASK token as gas fee?" +msgstr "MASKトークンをガス料金を支払いに設定しますか?" + +#: src/UI/components/CompositionDialog/PluginEntryRender.tsx:108 +msgid "Domain Request" +msgstr "ドメインリクエスト" + +#: src/hooks/useSnackbarCallback.tsx:40 +#: src/hooks/useSnackbarCallback.tsx:89 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:140 +msgid "Done" +msgstr "完了" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:63 +msgid "Download {name} Wallet here" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:124 +msgid "Drag & Drop your file here" +msgstr "ここにファイルをドラッグ&ドロップしてください" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:208 +msgid "DSearch" +msgstr "DSearch" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:343 +msgid "Edit" +msgstr "編集" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Editor" +msgstr "編集者" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:81 +msgid "Enable {name} Wallet extension and disable other browser extension wallets" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:51 +msgid "Enable plugin" +msgstr "プラグインを有効化する" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:163 +msgid "Encrypt" +msgstr "暗号化" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:246 +msgid "ENS or Wallet Address" +msgstr "ENSまたはウォレットアドレス" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:31 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:135 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:132 +msgid "Enter a gas limit" +msgstr "ガスの制限を入力してください" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:38 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:137 +msgid "Enter a gas price" +msgstr "ガス価格を入力" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:81 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:144 +msgid "Enter a max fee" +msgstr "最大手数料を入力してください" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:58 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:142 +msgid "Enter a max priority fee" +msgstr "最大優先料金を入力してください" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:75 +msgid "Enter an amount" +msgstr "金額を入力します" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:92 +msgid "Failed" +msgstr "失敗しました" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:122 +msgid "Failed to load {0}. Click to retry." +msgstr "{0}の読み込みに失敗しました。クリックして再試行してください。" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:82 +msgid "Failed to load MASK. Click to retry." +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Failed to report spam." +msgstr "スパムを報告できませんでした。" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:236 +msgid "Follow" +msgstr "フォロー" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:235 +msgid "Following" +msgstr "フォロー中" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:193 +msgid "Fortmatic only supports the ETH and BNB chain." +msgstr "FortmaticはETHとBNBチェーンのみを対応しています。" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:361 +msgid "Gas Fee" +msgstr "ガス料金" + +#: src/UI/modals/GasSettingModal/GasSettingModal.tsx:41 +msgid "Gas fee settings" +msgstr "ガス料金の設定" + +#: src/UI/components/SettingsBoard/GasForm.tsx:231 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:249 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:215 +msgid "Gas Limit" +msgstr "ガス制限" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:138 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:135 +msgid "Gas limit must be at least {0}" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:34 +msgid "Gas limit too low will cause the transaction to fail." +msgstr "ガス制限が低すぎると、トランザクションが失敗する原因になります" + +#: src/UI/components/SettingsBoard/GasForm.tsx:200 +#: src/UI/components/SettingsBoard/GasSection.tsx:92 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:222 +msgid "Gas Price" +msgstr "ガス価格" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:54 +msgid "Gas price is higher than necessary. You may pay more than needed." +msgstr "ガスの価格は必要以上に高いです。必要以上に支払うになります。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:46 +msgid "Gas price is too low for network conditions." +msgstr "ガス価格がネットワーク状況に対して低すぎます。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:39 +msgid "Gas price must be greater than 0 Gwei." +msgstr "ガス価格は0Gwei以上でなければなりません。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:231 +msgid "Get optimized search results when you look for a token." +msgstr "トークンを探すときに最適化された検索結果を取得します。" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:36 +msgid "Go to Settings" +msgstr "設定に進む" + +#: src/UI/components/SettingsBoard/GasForm.tsx:193 +#: src/UI/components/SettingsBoard/GasForm.tsx:261 +#: src/UI/components/SettingsBoard/GasForm.tsx:299 +msgid "Gwei" +msgstr "Gwei(グワイ)" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:258 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:278 +msgid "GWEI" +msgstr "GWEI" + +#: src/UI/components/SettingsBoard/Context.tsx:96 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:119 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:118 +msgid "High" +msgstr "高" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:56 +msgid "How to use {0} Wallet?" +msgstr "{0} ウォレットの使用方法は?" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:162 +msgid "Import" +msgstr "インポート" + +#: src/UI/components/AddCollectibles/index.tsx:164 +#: src/UI/components/FungibleTokenList/index.tsx:271 +msgid "Incorrect contract address." +msgstr "有効なトークンアドレスを入力してください" + +#: src/UI/components/CoinMetadataTable/index.tsx:148 +#: src/UI/components/CoinMetadataTable/index.tsx:255 +msgid "Info" +msgstr "情報" + +#: src/UI/components/AddCollectibles/index.tsx:246 +msgid "Input contract address" +msgstr "コントラクトアドレスを入力" + +#: src/UI/components/SettingsBoard/Context.tsx:95 +msgid "Instant" +msgstr "インスタント" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:96 +msgid "Invalid Network" +msgstr "無効のネットワーク" + +#: src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts:18 +msgid "Invalid slippage tolerance." +msgstr "無効なスリッページの許容範囲です。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:116 +msgid "Listed" +msgstr "リストされました" + +#: src/UI/components/LoadRetry/index.tsx:20 +#: src/UI/components/ReloadStatus/index.tsx:46 +msgid "Load failed" +msgstr "読み込みに失敗しました" + +#: src/UI/components/LoadingStatus/index.tsx:40 +msgid "Loading" +msgstr "読み込み中" + +#: src/UI/components/PluginCardFrame/index.tsx:86 +msgid "Loading...." +msgstr "読み込み中..." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:109 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:108 +msgid "Low" +msgstr "低い" + +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:127 +msgid "Manage Token List" +msgstr "トークンリストを管理" + +#: src/UI/components/FungibleTokenList/ManageTokenListBar.tsx:32 +msgid "Manage Token Lists" +msgstr "トークンリストを管理" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:70 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:146 +msgid "Market Cap" +msgstr "時価総額" + +#: src/UI/components/PluginCardFrame/index.tsx:69 +msgid "Mask Network" +msgstr "Mask Network" + +#: src/UI/components/GrantPermission/index.tsx:27 +msgid "Mask Network requires you to authorize the following websites before using it." +msgstr "Mask Networkは、利用する前に次のウェブサイトを承認する必要があります。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:276 +msgid "Max fee" +msgstr "最大料金" + +#: src/UI/components/SettingsBoard/GasForm.tsx:306 +msgid "Max Fee" +msgstr "最大料金" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:147 +msgid "Max fee cannot be lower than max priority fee" +msgstr "最大手数料は最大優先手数料より低くすることはできません" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:100 +msgid "Max fee cannot be lower than max priority fee." +msgstr "最大手数料は、最大優先手数料よりも低くすることはできません。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:96 +msgid "Max fee is higher than necessary." +msgstr "最大手数料は必要以上に高いです。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:88 +msgid "Max fee is too low for network conditions." +msgstr "最大手数料がネットワーク状況に対して低すぎます。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:256 +msgid "Max priority fee" +msgstr "最大優先手数料" + +#: src/UI/components/SettingsBoard/GasForm.tsx:272 +msgid "Max Priority Fee" +msgstr "最大優先料金" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:77 +msgid "Max priority fee is higher than necessary. You may pay more than needed." +msgstr "最大優先料金は必要以上に高いです。必要以上に支払うになります。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:66 +msgid "Max priority fee is too low for network conditions." +msgstr "最大優先料金がネットワーク状況に対して低すぎます。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:143 +msgid "Max priority fee must be greater than 0 GWEI" +msgstr "最大優先手数料は0GWEIより大きくなければなりません" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:59 +msgid "Max priority fee must be greater than 0 Gwei." +msgstr "最大優先料金は0Gweiより大きくなければなりません。" + +#: src/UI/components/SettingsBoard/Context.tsx:97 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:114 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:113 +msgid "Medium" +msgstr "中" + +#: src/UI/components/PhoneNumberField/index.tsx:29 +msgid "Mobile Number" +msgstr "携帯番号" + +#: src/UI/components/TokenSecurity/index.tsx:72 +msgid "More" +msgstr "その他" + +#: src/UI/components/FungibleTokenList/index.tsx:341 +msgid "Name or Contract address e.g. USDC or 0x234..." +msgstr "名前またはコントラクトアドレス (USDC または 0x234..." + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:191 +msgid "Name or Contract address eg.PUNK or 0x234..." +msgstr "名前またはコントラクトアドレス。例:PUNK or 0x234..." + +#: src/UI/components/ChainBoundary/index.tsx:124 +msgid "Network error or user cancels the process." +msgstr "ネットワークエラーまたはユーザーがプロセスをキャンセルします。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:236 +msgid "NFTs" +msgstr "NFTs" + +#: src/UI/components/CollectibleList/CollectibleList.tsx:112 +msgid "No collectible found." +msgstr "コレクションが見つかりません." + +#: src/UI/components/EmptyStatus/index.tsx:32 +msgid "No Data" +msgstr "データなし" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:89 +msgid "No Enough Gas Fee" +msgstr "ガス代なし" + +#: src/UI/components/AssetsManagement/CollectionList.tsx:241 +#: src/UI/components/AssetsManagement/CollectionList.tsx:342 +msgid "No NFTs found." +msgstr "NFTが見つかりません。" + +#: src/UI/components/AddCollectibles/index.tsx:319 +#: src/UI/components/CountryCodePicker/index.tsx:145 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:208 +msgid "No results" +msgstr "該当なし" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:78 +msgid "Not select wallet yet." +msgstr "ウォレットを選択していません" + +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "OK" +msgstr "OK" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:196 +msgid "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc." +msgstr "EVMチェーン、ETH、BNBチェーン、Polygon、Arb、Opなどに対応しています。" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:155 +msgid "Only TypedMessageText is supported currently." +msgstr "現在、TypedMessageTextのみ対応しています。" + +#: src/UI/wallet/DeriveWalletTable.tsx:134 +msgid "Operation" +msgstr "操作" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:212 +msgid "Optimize search results with token names, NFT collections, ENS domains or wallet addresses." +msgstr "トークン名、NFTコレクション、ENSドメイン、またはウォレットアドレスで検索結果を最適化します。" + +#: src/UI/components/UploadDropArea/index.tsx:132 +msgid "or" +msgstr "または" + +#: src/UI/components/WalletStatusBar/WalletDescription.tsx:125 +#: src/UI/components/WalletStatusBox/TransactionList.tsx:90 +msgid "Pending" +msgstr "保留中" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:45 +#: src/UI/components/PersonaSelectPanel/index.tsx:109 +#: src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx:74 +msgid "Persona" +msgstr "ペルソナ" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:189 +msgid "Phantom only supports the Solana chain." +msgstr "Phantom は Solana チェーンのみを対応します。" + +#: src/UI/components/PersonaSelectPanel/index.tsx:178 +msgid "Please connect {0} and send proof post before using dApps." +msgstr "dAppsを利用する前に{0}を接続し、プルーフポストを送信してください。" + +#: src/UI/components/PersonaSelectPanel/index.tsx:186 +msgid "Please connect {0} before using dApps." +msgstr "dAppsを使用する前に、 {0} に接続してください。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:266 +msgid "Please connect your persona" +msgstr "あなたのペルソナに接続してください" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:261 +msgid "Please connect your wallet" +msgstr "ウォレットに接続してください" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:44 +#: src/UI/components/PersonaSelectPanel/index.tsx:108 +msgid "Please create a Persona and verify your account to use this function." +msgstr "本機能を利用するには、ペルソナを作成し、アカウントを認証してください。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:264 +msgid "Please create a persona for accessing Dapps." +msgstr "Dappsにアクセスするペルソナを作成してください。" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:30 +msgid "Please select the wallet to activate the function after saving the settings." +msgstr "設定を保存した後、ウォレットを選択して機能を有効にしてください。" + +#: src/UI/components/ChainBoundary/index.tsx:189 +#: src/UI/components/ChainBoundary/index.tsx:206 +msgid "Please switch to this network in the mobile application wallet you are connected to." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:192 +msgid "Please verify current persona with social media account before using dApps." +msgstr "dAppsを使用する前に、ソーシャルメディアアカウントで現在のペルソナを確認してください。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:268 +msgid "Please verify your social account" +msgstr "ソーシャルアカウントを確認してください" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:111 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:52 +msgid "Plug-in switch" +msgstr "プラグイン・スイッチ" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:145 +msgid "Plugins" +msgstr "プラグイン" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:245 +#: src/UI/components/VerifyNextIDDialog/index.tsx:265 +msgid "Post content:" +msgstr "投稿内容" + +#: src/UI/components/MaskPluginWrapper/index.tsx:109 +#: src/UI/components/PluginCardFrame/index.tsx:67 +msgid "Powered by" +msgstr "以下により提供されています" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:61 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:137 +msgid "Price Statistic" +msgstr "価格統計" + +#: src/UI/components/CompositionDialog/BadgeRenderer.tsx:49 +msgid "Provided by plugin \"{0}\"" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:24 +#: src/UI/components/ReloadStatus/index.tsx:48 +msgid "Reload" +msgstr "再読み込み" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:95 +msgid "Remove" +msgstr "消去" + +#: src/hooks/useReportSpam.tsx:63 +msgid "Report NFT Scam Contract?" +msgstr "NFT 詐欺契約を報告しますか?" + +#: src/hooks/useReportSpam.tsx:74 +msgid "Report Spam" +msgstr "スパムを報告" + +#: src/UI/modals/ConnectWalletModal/index.tsx:174 +msgid "Requesting Connection" +msgstr "接続をリクエスト中" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Reset" +msgstr "リセット" + +#: src/UI/modals/ConnectWalletModal/index.tsx:189 +msgid "Retry" +msgstr "再試行" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:92 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:101 +msgid "Risk Warning" +msgstr "リスク警告" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:85 +msgid "Scan QR code with a WalletConnect-compatible wallet" +msgstr "WalletConnect対応ウォレットでQRコードスキャン" + +#: src/UI/components/CountryCodePicker/index.tsx:112 +msgid "Search Area" +msgstr "捜索エリア" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:249 +msgid "Search with an ENS domain or wallet address to get optimized results." +msgstr "ENSドメインまたはウォレットアドレスで検索すると、最適化された結果が得られます。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:239 +msgid "Search with the name of an NFT collection or its symbol to get optimized results." +msgstr "NFT コレクションまたはそのシンボルの名前で検索し、最適化された結果を得ます。" + +#: src/UI/components/SelectTokenChip/index.tsx:60 +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:128 +msgid "Select" +msgstr "選択" + +#: src/UI/components/FungibleTokenInput/UI.tsx:221 +msgid "Select a token" +msgstr "トークンを選択します" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:96 +msgid "Select an NFT" +msgstr "NFT を選択します" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:43 +msgid "Select an NFT Contract" +msgstr "NFT コントラクトを選択" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:45 +msgid "Select an NFT Contract Operator" +msgstr "NFT コントラクトのオペレーターを選択" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:44 +msgid "Select an NFT Contract Owner" +msgstr "NFT コントラクト所有者を選択" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:185 +msgid "Select Collection" +msgstr "コレクションを選択" + +#: src/UI/components/AddCollectibles/index.tsx:335 +#: src/UI/components/AssetsManagement/Collection.tsx:147 +#: src/UI/components/AssetsManagement/CollectionList.tsx:286 +#: src/UI/components/VerifyNextIDDialog/index.tsx:287 +msgid "Send" +msgstr "送信" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "Share" +msgstr "シェア" + +#: src/UI/components/UploadDropArea/index.tsx:128 +msgid "Size limit: 10 MB" +msgstr "サイズ制限:10 MB" + +#: src/UI/components/SettingsBoard/SlippageToleranceSection.tsx:26 +msgid "Slippage Tolerance" +msgstr "スリッページの許容範囲" + +#: src/UI/components/TokenSecurity/index.tsx:93 +msgid "Spam" +msgstr "スパム" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:91 +msgid "Success" +msgstr "完了" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Successfully reported." +msgstr "報告に成功しました。" + +#: src/UI/components/ChainBoundary/index.tsx:109 +#: src/UI/components/ChainBoundary/index.tsx:121 +msgid "Switch Network" +msgstr "ネットワークを切り替え" + +#: src/UI/components/ChainBoundary/index.tsx:204 +msgid "Switch to {0}" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:179 +msgid "Tell selective friends what's happening..." +msgstr "選択的な友達に何が起きているのか伝えてください..." + +#: src/UI/components/AddCollectibles/index.tsx:307 +msgid "The contract address is incorrect or the collection does not belong to you." +msgstr "コントラクトアドレスが正しくないか、コレクションはあなたに属していません。" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:276 +msgid "The following wallets are not installed or in conflict with others" +msgstr "以下のウォレットがインストールされていないか、他のウォレットと競合しています" + +#: src/UI/components/PluginEnableBoundary/index.tsx:39 +msgid "This function has been turned off in the App settings. Enable plug-ins to fully access." +msgstr "この機能はアプリ設定でオフになっています。プラグインに完全にアクセスできるようにしてください。" + +#: src/UI/components/ChainBoundary/index.tsx:190 +msgid "This network is not supported yet." +msgstr "{network} はまだサポートされていません." + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:117 +msgid "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token." +msgstr "Polygonのネットワークを利用するには、MATICトークンがガス料金として支払う必要があります。SmartPayを使用すると、MASKトークンを使ってPolygonネットワーク上でガス料金を支払うことができます。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:228 +msgid "Token" +msgstr "トークン" + +#: src/UI/components/AddCollectibles/index.tsx:280 +msgid "Token ID separated by comma, e.g. 1223,1224," +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:118 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:178 +msgid "Total Supply" +msgstr "総供給量" + +#: src/hooks/useOpenShareTxDialog.tsx:81 +msgid "Transaction" +msgstr "トランザクション" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:95 +msgid "Transaction Confirmed" +msgstr "取引が確認されました" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:337 +msgid "Transaction cost" +msgstr "取引費用" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:100 +msgid "Transaction Failed" +msgstr "取引が失敗しました" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:124 +msgid "Transaction with extremely low slippage tolerance might be reverted because of very small market movement." +msgstr "スリッページの許容範囲が極端に小さい取引は、ごくわずかな相場の動きで元に戻ってしまうことがあります。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:120 +msgid "Unlisted" +msgstr "未掲載" + +#: src/hooks/useGasCurrencyMenu.tsx:96 +msgid "Unlock" +msgstr "ロック解除" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:165 +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:100 +msgid "Unlock {0}" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:59 +msgid "Unlocking {0}..." +msgstr "{0} のロックを解除中..." + +#: src/UI/components/SettingsBoard/GasOption.tsx:80 +msgid "up to {0} Gwei" +msgstr "最大 {0} Gweiまで" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:88 +msgid "Updating Gas Fee…" +msgstr "ガス代を更新中…" + +#: src/UI/components/AssetsManagement/CollectibleItem.tsx:186 +#: src/UI/components/AssetsManagement/Collection.tsx:197 +#: src/UI/components/AssetsManagement/CollectionHeader.tsx:67 +msgid "Verified by {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:190 +msgid "Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:102 +msgid "Verify your Twitter ID" +msgstr "Twitter IDの認証" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:233 +msgid "View" +msgstr "表示" + +#: src/hooks/useOpenShareTxDialog.tsx:67 +#: src/UI/components/WalletStatusBox/index.tsx:187 +msgid "View on Explorer" +msgstr "エクスプローラーで表示" + +#: src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx:45 +msgid "Wallet Account" +msgstr "ウォレットアカウント" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:77 +msgid "WalletConnect" +msgstr "ウォレット接続" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:256 +#: src/UI/components/VerifyNextIDDialog/index.tsx:269 +msgid "We will need to verify your Twitter account and record it on the NextID. Please post it for validation." +msgstr "Twitterアカウントを認証し、NextIDに記録する必要があります。認証のために投稿してください。" + +#: src/UI/components/PluginCardFrame/index.tsx:56 +msgid "Web3 Profile" +msgstr "Web3 プロフィール" + +#: src/UI/components/CoinMetadataTable/index.tsx:104 +#: src/UI/components/CoinMetadataTable/index.tsx:274 +msgid "Website" +msgstr "ウェブサイト" + +#: src/UI/components/ChainBoundary/index.tsx:155 +msgid "Wrong Network" +msgstr "ネットワークが間違っています" + +#: src/UI/modals/ConnectWalletModal/index.tsx:178 +msgid "You canceled the request." +msgstr "リクエストを取り消しました。" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:131 +msgid "You may have {0}% less received with this level of slippage tolerance." +msgstr "このスリッページ許容範囲で受領率が {0}% 低くなる可能性があります。" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:147 +msgid "You must give the {0} smart contract permission to use your {1}. You only have to do this once per token." +msgstr "{0} スマートコントラクトに自分の{1}を使用する許可を与える必要があります。これは1つのトークンにつき1回だけ行う必要があります。" + +#: src/hooks/useOpenShareTxDialog.tsx:84 +msgid "Your transaction was confirmed!" +msgstr "トランザクションが確認されました!" diff --git a/packages/shared/src/locale/ko-KR.json b/packages/shared/src/locale/ko-KR.json index c02cb2bcf79b..42c3c095c697 100644 --- a/packages/shared/src/locale/ko-KR.json +++ b/packages/shared/src/locale/ko-KR.json @@ -1 +1,245 @@ -{ "messages": {} } +{ + "messages": { + "yHppI0": [["0"], " 네트워크 월렛에 추가되지 않습니다. 추가하고 다시 시도하세요."], + "OAZ+tI": [ + ["attentionFactors", "plural", { "one": ["#", " Attention item"], "other": ["#", " Attention items"] }] + ], + "QyZU8V": [["riskyFactors", "plural", { "one": ["#", " Risky item"], "other": ["#", " Risky items"] }]], + "F9r8sg": ["~ ", ["0"]], + "5PCwvT": ["≈ ", ["gasFeeUSD"]], + "OH977a": ["1. If you haven't installed ", ["name"], " Wallet"], + "OCGzyl": ["2. If you have installed ", ["name"], " Wallet"], + "Axp2cZ": "24 시간 거래량", + "XA8JXM": "NFT 추가", + "uv94aG": "사용자별 추가", + "Du6bPw": "주소", + "sxkWRg": "고급", + "JiIKww": "고급 설정", + "hRtIgr": "앱 리스트", + "EBrWIo": "앱 설정", + "fL7WXr": "어플리케이션", + "Z7ZXbT": "승인", + "7yTBmm": "MASK 승인", + "jquqYv": [["0"], " 신고하시겠습니까? 승인 후 이 NFT는 스팸으로 표시됩니다."], + "c19z3W": "사용 가능한 잔액", + "fsBGk0": "잔액", + "foOw00": ["Balance(", ["symbol"], ")"], + "0wJVK+": "기본", + "29b5Sq": "Blocto는 Flow에만 지원합니다.", + "H+bGaz": "파일 찾아보기", + "dEgA5A": "취소", + "o+XJ9D": "변경", + "3A/mG4": "월렛 변경", + "O2XHf2": ["Check ", ["providerName"], " to confirm connect."], + "E6HGuD": "Check out the official website", + "tFAx+m": "네트워크 선택", + "Pd3dlq": "유통량", + "xCJdfg": "지우기", + "RUYsn0": "모두 지우기", + "Dt21Rq": "애프리케이션 아이콘을 클릭하여 앱 리스트에 숨깁니다.", + "aVI2qx": "애프리케이션 아이콘을 클릭하여 앱 보드에 리스트됩니다.", + "ZY63zZ": "설정 아이콘을 클릭하여 앱 보드에 리스트됩니다.", + "ylUhBz": "클릭하여 재시도하기", + "MGP1v/": "확인 버튼을 클릭하면 위와 같이 발생할 수 있는 위험을 부담하는 것에 동의한다는 의미합니다.", + "chL5IG": "커뮤니티", + "7VpPHA": "확인", + "B1QIGY": "확인 실패", + "VcLnc7": "리스크 경고 확인", + "oG26Rt": "이 거래를 월렛에서 확인하세요", + "P+K/3O": "확인 중", + "ryWxhG": "축하합니다!", + "5ZzgbQ": ["Connect ", ["0"]], + "PlE+Fs": ["Connect and Verify ", ["0"]], + "Wqoa0p": "페로소나 연결하기", + "CtByM7": "월렛 연결", + "2/N/mr": ["Connect with ", ["providerName"]], + "iH8itU": "월렛 연결", + "Tg003Y": "웰렛 연결 설정", + "ks5OGD": "컨트랙트", + "PiH3UR": "복사됨", + "he3ygx": "복사", + "ZhrWG1": "페르소나 만들기", + "5o2pdQ": "페르소나 만들기", + "Jg5pf7": ["현재 기초 기스비는 ", ["0"], " Gwei"], + "8Tg/JR": "커스텀", + "Cf/0to": ["데이터 소스가 ", ["0"], "에서 검색됩니다."], + "ovBPCi": "디폴트", + "URmyfc": "디테일", + "+K0AvT": "연결 해제", + "1QfxQT": "확인", + "QO2XIN": "MASK 토큰을 가스비로 설정하시겠습니까?", + "rR6iwH": "도메인 요청", + "DPfwMq": "완료", + "uyCILk": ["Download ", ["name"], " Wallet here"], + "F8Wc3I": "파일을 끌어서 여기에 놓으세요", + "Lho4Qd": "DSearch", + "ePK91l": "편집", + "uBAxNB": "에디터", + "ZYUqCx": ["Enable ", ["name"], " Wallet extension and disable other browser extension wallets"], + "vutynE": "플러그인 활성화", + "Dz56Ua": "암호화", + "gmOW42": "ENS나 월렛 주소", + "mPxxVq": "기스비 한도 입력", + "Xprzee": "가스비 입력", + "n42fmQ": "최대 가스비 입력", + "MOHcKb": "최대 우선 가스비 입력", + "iPMIoT": "금액 입력", + "7Bj3x9": "실패", + "E6Sqiu": [["0"], " 로드 실패. 다시 시도하세요."], + "OPsV2g": "Failed to load MASK. Click to retry.", + "a9X8Om": "신고 실패", + "MKEPCY": "팔로우", + "y6sq5j": "팔로잉", + "K7Osiu": "Fortmatic는 ETH 및 BNB에만 지원합니다.", + "PRkIUI": "가스비", + "yZhedI": "기스비 설정", + "3kbpgO": "가스 한도", + "w0e0yw": ["Gas limit must be at least ", ["0"]], + "+95jK3": "가스 한도가 너무 낮으면 거래가 실패할 수 있습니다.", + "OLY2Jk": "가스 가격", + "mhNIiJ": "가스비가 필요한 것보다 높아서 필요 이상으로 지불할 수 있습니다.", + "jfJkBQ": "네트워크 컨디션에 대한 가스비가 매우 낮습니다.", + "DKBbsW": "가스 가격은 0Gwei보다 높어야합니다.", + "1AM6tG": "토큰을 찾을 때 최적화된 검색 결과를 가져옵니다.", + "mT57+Q": "설정으로 가기", + "HqiAyF": "Gwei", + "pu3rTn": "GWEI", + "yx/fMc": "높음", + "1on6yK": ["How to use ", ["0"], " Wallet?"], + "l3s5ri": "불러오기", + "iNIdDX": "잘못된 컨트렉트 주소", + "CE+M2e": "정보", + "Z33XCd": "컨트랙트 주소 입력", + "D79cZK": "즉시", + "6YASel": "무효한 네트워크", + "UfJmJU": "무효한 슬리피지 톨러런스", + "Ap948/": "Listed", + "0Lp4o6": "로딩 실패", + "yQE2r9": "로딩 중", + "1DwbcE": "로딩 중....", + "nTWWCZ": "낮음", + "rCsoea": "토큰 목록 관리", + "At846K": "토큰 목록 관리", + "5N3b5J": "시가 총액", + "siroPf": "Mask Network", + "lWOC+h": "Mask Network를 사용하기 전에 다음 웹 사이트를 승인해야 합니다.", + "aYT9SD": "최대 가스비", + "3qe4O9": "최대 수수료", + "m2OZMI": "최대 기스비는 최대 우선 가스비보다 낮을 수 없습니다", + "qI8U4x": "최대 기스비는 최대 우선 가스비보다 낮을 수 없습니다.", + "rBLzKv": "최대 가스비가 필요한 것보다 높습니다.", + "ZSgQgC": "네트워크 컨디션에 대한 최대 가스비가 매우 낮습니다.", + "VSx1eg": "최대 우선 가스비", + "qYuscr": "최대 우선 가스비", + "rQQGN1": "최대 우선 가스비가 필요한 것보다 높아서 필요 이상으로 지불할 수 있습니다.", + "sQJ3RN": "네트워크 컨디션에 대한 최대 우선 가스비는 매우 낮습니다.", + "ITBQO3": "최대 우선 가스비는 0 GWEI보다 높아야 합니다", + "P7S/hC": "최대 우선 가스비는 0 Gwei보다 높아야 합니다.", + "agPptk": "보통", + "ncmqYK": "휴대폰 번호", + "2FYpfJ": "더 보기", + "0D4bav": "토큰 이름이나 컨트렉트 주소", + "me/C4W": "이름이나 컨트랙트 주소. 예: PUNK 나 0x234", + "kG0n0M": "네트워크 오류 또는 사용자가 프로세스를 취소합니다.", + "8Dh77Z": "NFTs", + "ZQbnxO": "수집품이 없습니다.", + "B6C0XJ": "데이터 없음", + "ouAjo6": "가스비가 없습니다", + "Appw6V": "NFT가 없습니다.", + "Ev2r9A": "결과 없음", + "VErtTR": "월렛 아직 선택하지 않습니다.", + "zga9sT": "확인", + "wLGJSF": "EVM 체인만 지원합니다. ETH, BNB chain, Polygon, Arb, Op 등.", + "9jba96": "현재 TypedMessageText만 지원합니다.", + "FZg3wM": "진행", + "A0VzMm": "토큰 이름, NFT 컬렉션, ENS 도메인 또는 월렛 주소를 사용하여 검색 결과를 최적화합니다.", + "BzEFor": "또는", + "UbRKMZ": "대기중", + "gC2WI+": "페르소나", + "frOW4Q": "Phantom은 Solana에만 지원합니다.", + "ZWVdC5": ["디앱을 이용하기 전에 ", ["0"], " 연결하고 증명 게시글 보내세요."], + "tHoyBc": ["디엡을 이용하기 전에 ", ["0"], " 연결하세요."], + "ygW4tI": "페르소나를 연결하세요.", + "ujpEaI": "월렛을 연결하세요", + "tezo1U": "이 기능을 사용하려면 페르소나를 만들고 계정을 확인하세요.", + "d0aemb": "디앱을 연결하기 위해 페르소나를 맏드세요.", + "+hwfjv": "설정 저장 후 이 기능을 활성화하는 데 사용할 월렛을 선택하세요.", + "RiLzWA": "Please switch to this network in the mobile application wallet you are connected to.", + "ysttaZ": "디앱 이용하기 전에 소셜 미디어 계정으로 이용 중인 페르소나를 검증하세요.", + "9tG0uf": "소셜 계정을 검증하세요.", + "kQ4fG/": "플러그인 전환", + "ohUJJM": "플러그인", + "04MqGo": "Post content:", + "g2UNkE": "Powered by", + "GAZNIW": "가격 통계", + "8C8O9E": ["Provided by plugin \"", ["0"], "\""], + "HpK/8d": "다시 로드", + "t/YqKh": "Remove", + "SREKz9": "NFT 사기 컨트랙트 신고", + "/I3RSJ": "스팸 신고", + "b+scYY": "Requesting Connection", + "OfhWJH": "초기화", + "6gRgw8": "다시 시도", + "ByAMF+": "리스크 경고", + "o672x5": "WalletConnect와 호환성이 있는 월렛으로 QR 코드를 스칸하세요.", + "q+O14e": "지역 찾기", + "h0qYUk": "최적화된 결과를 얻으려면 ENS 도메인 또는 월렛 주소로 검색하세요.", + "ja6Tyz": "최적화된 결과를 얻으려면 NFT 컬렉션 이름 또는 해당 심벌을 사용하여 검색하세요.", + "rG3WVm": "토큰 선택", + "T0Y2+3": "토큰 선택", + "OIIXl+": "NFT 선택", + "44bNbA": "NFT 컨트렉트를 선택하세요.", + "hzTib5": "NFT 컨트렉트 오퍼레이터", + "bLJivk": "NFT 컨트렉트 소유자를 선택하세요.", + "Xftpm5": "Select Collection", + "JlFcis": "발송", + "Z8lGw6": "공유", + "ZIsLZh": "사이즈 한계: 10 MB", + "lqTDfd": "슬리피지 톨러런스", + "t8dIOP": "스팸", + "zzDlyQ": "성공", + "41J422": "신고 성공", + "6s8L6f": "네트워크 변경", + "1+P9RR": ["Switch to ", ["0"]], + "iReGax": "지정된 친구들에게 무슨 일이 일어나고 있는지 말해요...", + "FY2gWe": "컨트랙트 조소가 잘못되거나 월렛에 해당 수집품이 없습니다.", + "i4umqX": "The following wallets are not installed or in conflict with others", + "VMTGSu": "앱 설정에서 이 기능이 해제되었습니다. 플러그인이 완전히 액세스할 수 있도록 설정합니다.", + "gKSsH7": "해당 네트워크가 아직 지원하지 않습니다.", + "2ci98N": "Polygon 네트워크와 상호작용하기 위해서는 MATIC 토큰을 사용하여 가스비로 결제해야 하며, SmartPay를 통해 Polygon 네트워크에서 MASK 토큰으로 가스 요금을 결제할 수 있습니다.", + "TP9/K5": "토큰", + "2CMLgZ": "Token ID separated by comma, e.g. 1223,1224,", + "pzO3Xa": "총 공급량", + "ayxkVX": "거래", + "QRsMow": "거래 확인 완료", + "vLXevL": "거래 수수료", + "iT0Qmd": "거래 실패", + "1M8xFP": "슬리피지 허용 범위 나무 낮으면 거래가 실패할 수 있습니다.", + "WDcQq9": "Unlisted", + "VAOn4r": "언락", + "qCMUPH": ["Unlock ", ["0"]], + "o1nVEi": [["0"], " 언락 중..."], + "qWMpAl": ["최대 ", ["0"], " Gwei"], + "pHfBGz": "가스비 업데이트 중...", + "B8B8TU": ["Verified by ", ["0"]], + "/OPmPQ": ["Verify ", ["0"]], + "0N2d5H": "X ID 인증", + "jpctdh": "살펴보기", + "Sjplg3": "Explorer에서 보기", + "VECuJk": "월렛 계정", + "GEL05h": "WalletConnect", + "KCeSRZ": "We will need to verify your Twitter account and record it on the NextID. Please post it for validation.", + "2GHENQ": "웹3 프로필", + "On0aF2": "웹사이트", + "KojyJ4": "잘못된 네트워크", + "RNfEI8": "You canceled the request.", + "X3X0nY": ["현재 슬리피지 허용 범위 안에 ", ["0"], "% 적게 받을 수 있습니다."], + "0hFUd/": [ + ["0"], + " 에게 ", + ["1"], + " 이용할 수 있는 스마트 컨트랙트 권한을 줘야 합니다. 다른 토큰을 이용할 때 이 작업을 다시 해야 합니다." + ], + "pPWn5m": "해당 거래는 이미 확인되었습니다." + } +} diff --git a/packages/shared/src/locale/ko-KR.po b/packages/shared/src/locale/ko-KR.po index 6a3e6d3a94be..b414f26f4a18 100644 --- a/packages/shared/src/locale/ko-KR.po +++ b/packages/shared/src/locale/ko-KR.po @@ -17,3 +17,1023 @@ msgstr "" "X-Crowdin-Language: ko\n" "X-Crowdin-File: /[DimensionDev.Maskbook] develop/packages/shared/src/locale/en-US.po\n" "X-Crowdin-File-ID: 1012\n" + +#: src/UI/components/ChainBoundary/index.tsx:113 +msgid "{0} network is not added in the wallet. Please add and try it again." +msgstr "{0} 네트워크 월렛에 추가되지 않습니다. 추가하고 다시 시도하세요." + +#: src/UI/components/TokenSecurity/index.tsx:57 +msgid "{attentionFactors, plural, one {# Attention item} other {# Attention items}}" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:40 +msgid "{riskyFactors, plural, one {# Risky item} other {# Risky items}}" +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:71 +msgid "~ {0}" +msgstr "~ {0}" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:372 +msgid "≈ {gasFeeUSD}" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:60 +msgid "1. If you haven't installed {name} Wallet" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:78 +msgid "2. If you have installed {name} Wallet" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:100 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:168 +msgid "24 Hour Trading Vol" +msgstr "24 시간 거래량" + +#: src/UI/components/AddCollectibles/index.tsx:348 +#: src/UI/modals/AddCollectiblesModal/AddCollectiblesDialog.tsx:32 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:230 +msgid "Add NFTs" +msgstr "NFT 추가" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:263 +msgid "Added by user" +msgstr "사용자별 추가" + +#: src/UI/components/TokenWithSocialGroupMenu/index.tsx:159 +#: src/UI/wallet/DeriveWalletTable.tsx:124 +msgid "Address" +msgstr "주소" + +#: src/UI/components/SettingsBoard/GasSection.tsx:112 +msgid "Advanced" +msgstr "고급" + +#: src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx:82 +msgid "Advanced Settings" +msgstr "고급 설정" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:110 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:51 +msgid "APP list" +msgstr "앱 리스트" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:55 +msgid "APP Settings" +msgstr "앱 설정" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +msgid "Applications" +msgstr "어플리케이션" + +#: src/UI/components/GrantPermission/index.tsx:35 +msgid "Approve" +msgstr "승인" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:112 +msgid "Approve MASK?" +msgstr "MASK 승인" + +#: src/hooks/useReportSpam.tsx:65 +msgid "Are you sure to report {0}? After approving, this NFT will be marked as spam." +msgstr "{0} 신고하시겠습니까? 승인 후 이 NFT는 스팸으로 표시됩니다." + +#: src/UI/components/FungibleTokenInput/UI.tsx:171 +msgid "Available Balance" +msgstr "사용 가능한 잔액" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:105 +#: src/UI/components/FungibleTokenInput/UI.tsx:172 +#: src/UI/components/TokenAmountPanel/index.tsx:143 +msgid "Balance" +msgstr "잔액" + +#: src/UI/wallet/DeriveWalletTable.tsx:129 +msgid "Balance({symbol})" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:111 +msgid "Basic" +msgstr "기본" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:191 +msgid "Blocto only supports the Flow chain." +msgstr "Blocto는 Flow에만 지원합니다." + +#: src/UI/components/UploadDropArea/index.tsx:135 +msgid "Browse File" +msgstr "파일 찾아보기" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:140 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:127 +msgid "Cancel" +msgstr "취소" + +#: src/UI/components/WalletStatusBar/Action.tsx:17 +#: src/UI/components/WalletStatusBar/WalletMenuItem.tsx:79 +#: src/UI/components/WalletStatusBox/index.tsx:231 +msgid "Change" +msgstr "변경" + +#: src/UI/components/ChainBoundary/index.tsx:186 +msgid "Change Wallet" +msgstr "월렛 변경" + +#: src/UI/modals/ConnectWalletModal/index.tsx:179 +msgid "Check {providerName} to confirm connect." +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:72 +msgid "Check out the official website" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:333 +msgid "Choose Network" +msgstr "네트워크 선택" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:89 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:157 +msgid "Circulating Supply" +msgstr "유통량" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:161 +msgid "Clear" +msgstr "지우기" + +#: src/UI/components/WalletStatusBox/usePendingTransactions.tsx:61 +msgid "Clear All" +msgstr "모두 지우기" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:152 +msgid "Click the application icon to hide in the APP list." +msgstr "애프리케이션 아이콘을 클릭하여 앱 리스트에 숨깁니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:151 +msgid "Click the application icon to list it on the App board." +msgstr "애프리케이션 아이콘을 클릭하여 앱 보드에 리스트됩니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:214 +msgid "Click the setting icon to list it on the App board." +msgstr "설정 아이콘을 클릭하여 앱 보드에 리스트됩니다." + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:118 +msgid "Click to retry" +msgstr "클릭하여 재시도하기" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:116 +msgid "Clicking the confirm button means that you agree to bear the above possible risks." +msgstr "확인 버튼을 클릭하면 위와 같이 발생할 수 있는 위험을 부담하는 것에 동의한다는 의미합니다." + +#: src/UI/components/CoinMetadataTable/index.tsx:213 +#: src/UI/components/CoinMetadataTable/index.tsx:284 +msgid "Community" +msgstr "커뮤니티" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:97 +#: src/UI/contexts/components/ApproveMaskDialog.tsx:103 +#: src/UI/modals/ConfirmModal/Dialog.tsx:39 +#: src/UI/modals/ConfirmModal/Dialog.tsx:43 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:302 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:245 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:133 +msgid "Confirm" +msgstr "확인" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:135 +msgid "Confirm Failed" +msgstr "확인 실패" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:74 +msgid "Confirm Risk Warning" +msgstr "리스크 경고 확인" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:90 +msgid "Confirm this transaction in your wallet" +msgstr "이 거래를 월렛에서 확인하세요" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:134 +msgid "Confirming" +msgstr "확인 중" + +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:127 +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:152 +msgid "Congratulations!" +msgstr "축하합니다!" + +#: src/UI/components/PersonaSelectPanel/index.tsx:185 +#: src/UI/components/PersonaSelectPanel/index.tsx:196 +msgid "Connect {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:176 +msgid "Connect and Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:95 +msgid "Connect Persona" +msgstr "페로소나 연결하기" + +#: src/UI/components/ChainBoundary/index.tsx:170 +#: src/UI/components/WalletConnectedBoundary/index.tsx:57 +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:216 +#: src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx:105 +#: src/UI/components/WalletStatusBox/index.tsx:144 +#: src/UI/modals/SelectProviderModal/SelectProvider.tsx:96 +msgid "Connect Wallet" +msgstr "월렛 연결" + +#: src/UI/modals/ConnectWalletModal/index.tsx:143 +msgid "Connect with {providerName}" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:178 +msgid "Connect your wallet" +msgstr "월렛 연결" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:197 +msgid "Connected wallets settings" +msgstr "웰렛 연결 설정" + +#: src/UI/components/CoinMetadataTable/index.tsx:158 +#: src/UI/components/CoinMetadataTable/index.tsx:264 +msgid "Contract" +msgstr "컨트랙트" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copied!" +msgstr "복사됨" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copy" +msgstr "복사" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:46 +#: src/UI/components/PersonaSelectPanel/index.tsx:110 +msgid "Create persona" +msgstr "페르소나 만들기" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:87 +msgid "Create Persona" +msgstr "페르소나 만들기" + +#: src/UI/components/SettingsBoard/GasForm.tsx:176 +msgid "Current base fee is {0} Gwei" +msgstr "현재 기초 기스비는 {0} Gwei" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:256 +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:377 +#: src/UI/components/SettingsBoard/GasSection.tsx:99 +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:91 +msgid "Custom" +msgstr "커스텀" + +#: src/UI/components/AccountIcons/index.tsx:78 +#: src/UI/components/SocialAccountList/SocialTooltip.tsx:27 +msgid "Data source is retrieved from {0}." +msgstr "데이터 소스가 {0}에서 검색됩니다." + +#: src/UI/components/MaskPluginWrapper/index.tsx:141 +msgid "Default" +msgstr "디폴트" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:92 +msgid "Details" +msgstr "디테일" + +#: src/UI/components/WalletStatusBox/index.tsx:221 +msgid "Disconnect" +msgstr "연결 해제" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/contexts/components/InjectedDialog.tsx:240 +msgid "Dismiss" +msgstr "확인" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:123 +msgid "Do you want to set MASK token as gas fee?" +msgstr "MASK 토큰을 가스비로 설정하시겠습니까?" + +#: src/UI/components/CompositionDialog/PluginEntryRender.tsx:108 +msgid "Domain Request" +msgstr "도메인 요청" + +#: src/hooks/useSnackbarCallback.tsx:40 +#: src/hooks/useSnackbarCallback.tsx:89 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:140 +msgid "Done" +msgstr "완료" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:63 +msgid "Download {name} Wallet here" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:124 +msgid "Drag & Drop your file here" +msgstr "파일을 끌어서 여기에 놓으세요" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:208 +msgid "DSearch" +msgstr "DSearch" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:343 +msgid "Edit" +msgstr "편집" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Editor" +msgstr "에디터" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:81 +msgid "Enable {name} Wallet extension and disable other browser extension wallets" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:51 +msgid "Enable plugin" +msgstr "플러그인 활성화" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:163 +msgid "Encrypt" +msgstr "암호화" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:246 +msgid "ENS or Wallet Address" +msgstr "ENS나 월렛 주소" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:31 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:135 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:132 +msgid "Enter a gas limit" +msgstr "기스비 한도 입력" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:38 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:137 +msgid "Enter a gas price" +msgstr "가스비 입력" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:81 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:144 +msgid "Enter a max fee" +msgstr "최대 가스비 입력" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:58 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:142 +msgid "Enter a max priority fee" +msgstr "최대 우선 가스비 입력" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:75 +msgid "Enter an amount" +msgstr "금액 입력" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:92 +msgid "Failed" +msgstr "실패" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:122 +msgid "Failed to load {0}. Click to retry." +msgstr "{0} 로드 실패. 다시 시도하세요." + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:82 +msgid "Failed to load MASK. Click to retry." +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Failed to report spam." +msgstr "신고 실패" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:236 +msgid "Follow" +msgstr "팔로우" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:235 +msgid "Following" +msgstr "팔로잉" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:193 +msgid "Fortmatic only supports the ETH and BNB chain." +msgstr "Fortmatic는 ETH 및 BNB에만 지원합니다." + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:361 +msgid "Gas Fee" +msgstr "가스비" + +#: src/UI/modals/GasSettingModal/GasSettingModal.tsx:41 +msgid "Gas fee settings" +msgstr "기스비 설정" + +#: src/UI/components/SettingsBoard/GasForm.tsx:231 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:249 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:215 +msgid "Gas Limit" +msgstr "가스 한도" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:138 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:135 +msgid "Gas limit must be at least {0}" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:34 +msgid "Gas limit too low will cause the transaction to fail." +msgstr "가스 한도가 너무 낮으면 거래가 실패할 수 있습니다." + +#: src/UI/components/SettingsBoard/GasForm.tsx:200 +#: src/UI/components/SettingsBoard/GasSection.tsx:92 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:222 +msgid "Gas Price" +msgstr "가스 가격" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:54 +msgid "Gas price is higher than necessary. You may pay more than needed." +msgstr "가스비가 필요한 것보다 높아서 필요 이상으로 지불할 수 있습니다." + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:46 +msgid "Gas price is too low for network conditions." +msgstr "네트워크 컨디션에 대한 가스비가 매우 낮습니다." + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:39 +msgid "Gas price must be greater than 0 Gwei." +msgstr "가스 가격은 0Gwei보다 높어야합니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:231 +msgid "Get optimized search results when you look for a token." +msgstr "토큰을 찾을 때 최적화된 검색 결과를 가져옵니다." + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:36 +msgid "Go to Settings" +msgstr "설정으로 가기" + +#: src/UI/components/SettingsBoard/GasForm.tsx:193 +#: src/UI/components/SettingsBoard/GasForm.tsx:261 +#: src/UI/components/SettingsBoard/GasForm.tsx:299 +msgid "Gwei" +msgstr "Gwei" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:258 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:278 +msgid "GWEI" +msgstr "GWEI" + +#: src/UI/components/SettingsBoard/Context.tsx:96 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:119 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:118 +msgid "High" +msgstr "높음" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:56 +msgid "How to use {0} Wallet?" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:162 +msgid "Import" +msgstr "불러오기" + +#: src/UI/components/AddCollectibles/index.tsx:164 +#: src/UI/components/FungibleTokenList/index.tsx:271 +msgid "Incorrect contract address." +msgstr "잘못된 컨트렉트 주소" + +#: src/UI/components/CoinMetadataTable/index.tsx:148 +#: src/UI/components/CoinMetadataTable/index.tsx:255 +msgid "Info" +msgstr "정보" + +#: src/UI/components/AddCollectibles/index.tsx:246 +msgid "Input contract address" +msgstr "컨트랙트 주소 입력" + +#: src/UI/components/SettingsBoard/Context.tsx:95 +msgid "Instant" +msgstr "즉시" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:96 +msgid "Invalid Network" +msgstr "무효한 네트워크" + +#: src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts:18 +msgid "Invalid slippage tolerance." +msgstr "무효한 슬리피지 톨러런스" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:116 +msgid "Listed" +msgstr "Listed" + +#: src/UI/components/LoadRetry/index.tsx:20 +#: src/UI/components/ReloadStatus/index.tsx:46 +msgid "Load failed" +msgstr "로딩 실패" + +#: src/UI/components/LoadingStatus/index.tsx:40 +msgid "Loading" +msgstr "로딩 중" + +#: src/UI/components/PluginCardFrame/index.tsx:86 +msgid "Loading...." +msgstr "로딩 중...." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:109 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:108 +msgid "Low" +msgstr "낮음" + +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:127 +msgid "Manage Token List" +msgstr "토큰 목록 관리" + +#: src/UI/components/FungibleTokenList/ManageTokenListBar.tsx:32 +msgid "Manage Token Lists" +msgstr "토큰 목록 관리" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:70 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:146 +msgid "Market Cap" +msgstr "시가 총액" + +#: src/UI/components/PluginCardFrame/index.tsx:69 +msgid "Mask Network" +msgstr "Mask Network" + +#: src/UI/components/GrantPermission/index.tsx:27 +msgid "Mask Network requires you to authorize the following websites before using it." +msgstr "Mask Network를 사용하기 전에 다음 웹 사이트를 승인해야 합니다." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:276 +msgid "Max fee" +msgstr "최대 가스비" + +#: src/UI/components/SettingsBoard/GasForm.tsx:306 +msgid "Max Fee" +msgstr "최대 수수료" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:147 +msgid "Max fee cannot be lower than max priority fee" +msgstr "최대 기스비는 최대 우선 가스비보다 낮을 수 없습니다" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:100 +msgid "Max fee cannot be lower than max priority fee." +msgstr "최대 기스비는 최대 우선 가스비보다 낮을 수 없습니다." + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:96 +msgid "Max fee is higher than necessary." +msgstr "최대 가스비가 필요한 것보다 높습니다." + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:88 +msgid "Max fee is too low for network conditions." +msgstr "네트워크 컨디션에 대한 최대 가스비가 매우 낮습니다." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:256 +msgid "Max priority fee" +msgstr "최대 우선 가스비" + +#: src/UI/components/SettingsBoard/GasForm.tsx:272 +msgid "Max Priority Fee" +msgstr "최대 우선 가스비" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:77 +msgid "Max priority fee is higher than necessary. You may pay more than needed." +msgstr "최대 우선 가스비가 필요한 것보다 높아서 필요 이상으로 지불할 수 있습니다." + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:66 +msgid "Max priority fee is too low for network conditions." +msgstr "네트워크 컨디션에 대한 최대 우선 가스비는 매우 낮습니다." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:143 +msgid "Max priority fee must be greater than 0 GWEI" +msgstr "최대 우선 가스비는 0 GWEI보다 높아야 합니다" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:59 +msgid "Max priority fee must be greater than 0 Gwei." +msgstr "최대 우선 가스비는 0 Gwei보다 높아야 합니다." + +#: src/UI/components/SettingsBoard/Context.tsx:97 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:114 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:113 +msgid "Medium" +msgstr "보통" + +#: src/UI/components/PhoneNumberField/index.tsx:29 +msgid "Mobile Number" +msgstr "휴대폰 번호" + +#: src/UI/components/TokenSecurity/index.tsx:72 +msgid "More" +msgstr "더 보기" + +#: src/UI/components/FungibleTokenList/index.tsx:341 +msgid "Name or Contract address e.g. USDC or 0x234..." +msgstr "토큰 이름이나 컨트렉트 주소" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:191 +msgid "Name or Contract address eg.PUNK or 0x234..." +msgstr "이름이나 컨트랙트 주소. 예: PUNK 나 0x234" + +#: src/UI/components/ChainBoundary/index.tsx:124 +msgid "Network error or user cancels the process." +msgstr "네트워크 오류 또는 사용자가 프로세스를 취소합니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:236 +msgid "NFTs" +msgstr "NFTs" + +#: src/UI/components/CollectibleList/CollectibleList.tsx:112 +msgid "No collectible found." +msgstr "수집품이 없습니다." + +#: src/UI/components/EmptyStatus/index.tsx:32 +msgid "No Data" +msgstr "데이터 없음" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:89 +msgid "No Enough Gas Fee" +msgstr "가스비가 없습니다" + +#: src/UI/components/AssetsManagement/CollectionList.tsx:241 +#: src/UI/components/AssetsManagement/CollectionList.tsx:342 +msgid "No NFTs found." +msgstr "NFT가 없습니다." + +#: src/UI/components/AddCollectibles/index.tsx:319 +#: src/UI/components/CountryCodePicker/index.tsx:145 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:208 +msgid "No results" +msgstr "결과 없음" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:78 +msgid "Not select wallet yet." +msgstr "월렛 아직 선택하지 않습니다." + +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "OK" +msgstr "확인" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:196 +msgid "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc." +msgstr "EVM 체인만 지원합니다. ETH, BNB chain, Polygon, Arb, Op 등." + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:155 +msgid "Only TypedMessageText is supported currently." +msgstr "현재 TypedMessageText만 지원합니다." + +#: src/UI/wallet/DeriveWalletTable.tsx:134 +msgid "Operation" +msgstr "진행" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:212 +msgid "Optimize search results with token names, NFT collections, ENS domains or wallet addresses." +msgstr "토큰 이름, NFT 컬렉션, ENS 도메인 또는 월렛 주소를 사용하여 검색 결과를 최적화합니다." + +#: src/UI/components/UploadDropArea/index.tsx:132 +msgid "or" +msgstr "또는" + +#: src/UI/components/WalletStatusBar/WalletDescription.tsx:125 +#: src/UI/components/WalletStatusBox/TransactionList.tsx:90 +msgid "Pending" +msgstr "대기중" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:45 +#: src/UI/components/PersonaSelectPanel/index.tsx:109 +#: src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx:74 +msgid "Persona" +msgstr "페르소나" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:189 +msgid "Phantom only supports the Solana chain." +msgstr "Phantom은 Solana에만 지원합니다." + +#: src/UI/components/PersonaSelectPanel/index.tsx:178 +msgid "Please connect {0} and send proof post before using dApps." +msgstr "디앱을 이용하기 전에 {0} 연결하고 증명 게시글 보내세요." + +#: src/UI/components/PersonaSelectPanel/index.tsx:186 +msgid "Please connect {0} before using dApps." +msgstr "디엡을 이용하기 전에 {0} 연결하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:266 +msgid "Please connect your persona" +msgstr "페르소나를 연결하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:261 +msgid "Please connect your wallet" +msgstr "월렛을 연결하세요" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:44 +#: src/UI/components/PersonaSelectPanel/index.tsx:108 +msgid "Please create a Persona and verify your account to use this function." +msgstr "이 기능을 사용하려면 페르소나를 만들고 계정을 확인하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:264 +msgid "Please create a persona for accessing Dapps." +msgstr "디앱을 연결하기 위해 페르소나를 맏드세요." + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:30 +msgid "Please select the wallet to activate the function after saving the settings." +msgstr "설정 저장 후 이 기능을 활성화하는 데 사용할 월렛을 선택하세요." + +#: src/UI/components/ChainBoundary/index.tsx:189 +#: src/UI/components/ChainBoundary/index.tsx:206 +msgid "Please switch to this network in the mobile application wallet you are connected to." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:192 +msgid "Please verify current persona with social media account before using dApps." +msgstr "디앱 이용하기 전에 소셜 미디어 계정으로 이용 중인 페르소나를 검증하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:268 +msgid "Please verify your social account" +msgstr "소셜 계정을 검증하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:111 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:52 +msgid "Plug-in switch" +msgstr "플러그인 전환" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:145 +msgid "Plugins" +msgstr "플러그인" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:245 +#: src/UI/components/VerifyNextIDDialog/index.tsx:265 +msgid "Post content:" +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:109 +#: src/UI/components/PluginCardFrame/index.tsx:67 +msgid "Powered by" +msgstr "Powered by" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:61 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:137 +msgid "Price Statistic" +msgstr "가격 통계" + +#: src/UI/components/CompositionDialog/BadgeRenderer.tsx:49 +msgid "Provided by plugin \"{0}\"" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:24 +#: src/UI/components/ReloadStatus/index.tsx:48 +msgid "Reload" +msgstr "다시 로드" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:95 +msgid "Remove" +msgstr "" + +#: src/hooks/useReportSpam.tsx:63 +msgid "Report NFT Scam Contract?" +msgstr "NFT 사기 컨트랙트 신고" + +#: src/hooks/useReportSpam.tsx:74 +msgid "Report Spam" +msgstr "스팸 신고" + +#: src/UI/modals/ConnectWalletModal/index.tsx:174 +msgid "Requesting Connection" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Reset" +msgstr "초기화" + +#: src/UI/modals/ConnectWalletModal/index.tsx:189 +msgid "Retry" +msgstr "다시 시도" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:92 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:101 +msgid "Risk Warning" +msgstr "리스크 경고" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:85 +msgid "Scan QR code with a WalletConnect-compatible wallet" +msgstr "WalletConnect와 호환성이 있는 월렛으로 QR 코드를 스칸하세요." + +#: src/UI/components/CountryCodePicker/index.tsx:112 +msgid "Search Area" +msgstr "지역 찾기" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:249 +msgid "Search with an ENS domain or wallet address to get optimized results." +msgstr "최적화된 결과를 얻으려면 ENS 도메인 또는 월렛 주소로 검색하세요." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:239 +msgid "Search with the name of an NFT collection or its symbol to get optimized results." +msgstr "최적화된 결과를 얻으려면 NFT 컬렉션 이름 또는 해당 심벌을 사용하여 검색하세요." + +#: src/UI/components/SelectTokenChip/index.tsx:60 +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:128 +msgid "Select" +msgstr "토큰 선택" + +#: src/UI/components/FungibleTokenInput/UI.tsx:221 +msgid "Select a token" +msgstr "토큰 선택" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:96 +msgid "Select an NFT" +msgstr "NFT 선택" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:43 +msgid "Select an NFT Contract" +msgstr "NFT 컨트렉트를 선택하세요." + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:45 +msgid "Select an NFT Contract Operator" +msgstr "NFT 컨트렉트 오퍼레이터" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:44 +msgid "Select an NFT Contract Owner" +msgstr "NFT 컨트렉트 소유자를 선택하세요." + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:185 +msgid "Select Collection" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:335 +#: src/UI/components/AssetsManagement/Collection.tsx:147 +#: src/UI/components/AssetsManagement/CollectionList.tsx:286 +#: src/UI/components/VerifyNextIDDialog/index.tsx:287 +msgid "Send" +msgstr "발송" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "Share" +msgstr "공유" + +#: src/UI/components/UploadDropArea/index.tsx:128 +msgid "Size limit: 10 MB" +msgstr "사이즈 한계: 10 MB" + +#: src/UI/components/SettingsBoard/SlippageToleranceSection.tsx:26 +msgid "Slippage Tolerance" +msgstr "슬리피지 톨러런스" + +#: src/UI/components/TokenSecurity/index.tsx:93 +msgid "Spam" +msgstr "스팸" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:91 +msgid "Success" +msgstr "성공" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Successfully reported." +msgstr "신고 성공" + +#: src/UI/components/ChainBoundary/index.tsx:109 +#: src/UI/components/ChainBoundary/index.tsx:121 +msgid "Switch Network" +msgstr "네트워크 변경" + +#: src/UI/components/ChainBoundary/index.tsx:204 +msgid "Switch to {0}" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:179 +msgid "Tell selective friends what's happening..." +msgstr "지정된 친구들에게 무슨 일이 일어나고 있는지 말해요..." + +#: src/UI/components/AddCollectibles/index.tsx:307 +msgid "The contract address is incorrect or the collection does not belong to you." +msgstr "컨트랙트 조소가 잘못되거나 월렛에 해당 수집품이 없습니다." + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:276 +msgid "The following wallets are not installed or in conflict with others" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:39 +msgid "This function has been turned off in the App settings. Enable plug-ins to fully access." +msgstr "앱 설정에서 이 기능이 해제되었습니다. 플러그인이 완전히 액세스할 수 있도록 설정합니다." + +#: src/UI/components/ChainBoundary/index.tsx:190 +msgid "This network is not supported yet." +msgstr "해당 네트워크가 아직 지원하지 않습니다." + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:117 +msgid "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token." +msgstr "Polygon 네트워크와 상호작용하기 위해서는 MATIC 토큰을 사용하여 가스비로 결제해야 하며, SmartPay를 통해 Polygon 네트워크에서 MASK 토큰으로 가스 요금을 결제할 수 있습니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:228 +msgid "Token" +msgstr "토큰" + +#: src/UI/components/AddCollectibles/index.tsx:280 +msgid "Token ID separated by comma, e.g. 1223,1224," +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:118 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:178 +msgid "Total Supply" +msgstr "총 공급량" + +#: src/hooks/useOpenShareTxDialog.tsx:81 +msgid "Transaction" +msgstr "거래" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:95 +msgid "Transaction Confirmed" +msgstr "거래 확인 완료" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:337 +msgid "Transaction cost" +msgstr "거래 수수료" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:100 +msgid "Transaction Failed" +msgstr "거래 실패" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:124 +msgid "Transaction with extremely low slippage tolerance might be reverted because of very small market movement." +msgstr "슬리피지 허용 범위 나무 낮으면 거래가 실패할 수 있습니다." + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:120 +msgid "Unlisted" +msgstr "Unlisted" + +#: src/hooks/useGasCurrencyMenu.tsx:96 +msgid "Unlock" +msgstr "언락" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:165 +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:100 +msgid "Unlock {0}" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:59 +msgid "Unlocking {0}..." +msgstr "{0} 언락 중..." + +#: src/UI/components/SettingsBoard/GasOption.tsx:80 +msgid "up to {0} Gwei" +msgstr "최대 {0} Gwei" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:88 +msgid "Updating Gas Fee…" +msgstr "가스비 업데이트 중..." + +#: src/UI/components/AssetsManagement/CollectibleItem.tsx:186 +#: src/UI/components/AssetsManagement/Collection.tsx:197 +#: src/UI/components/AssetsManagement/CollectionHeader.tsx:67 +msgid "Verified by {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:190 +msgid "Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:102 +msgid "Verify your Twitter ID" +msgstr "X ID 인증" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:233 +msgid "View" +msgstr "살펴보기" + +#: src/hooks/useOpenShareTxDialog.tsx:67 +#: src/UI/components/WalletStatusBox/index.tsx:187 +msgid "View on Explorer" +msgstr "Explorer에서 보기" + +#: src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx:45 +msgid "Wallet Account" +msgstr "월렛 계정" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:77 +msgid "WalletConnect" +msgstr "WalletConnect" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:256 +#: src/UI/components/VerifyNextIDDialog/index.tsx:269 +msgid "We will need to verify your Twitter account and record it on the NextID. Please post it for validation." +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:56 +msgid "Web3 Profile" +msgstr "웹3 프로필" + +#: src/UI/components/CoinMetadataTable/index.tsx:104 +#: src/UI/components/CoinMetadataTable/index.tsx:274 +msgid "Website" +msgstr "웹사이트" + +#: src/UI/components/ChainBoundary/index.tsx:155 +msgid "Wrong Network" +msgstr "잘못된 네트워크" + +#: src/UI/modals/ConnectWalletModal/index.tsx:178 +msgid "You canceled the request." +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:131 +msgid "You may have {0}% less received with this level of slippage tolerance." +msgstr "현재 슬리피지 허용 범위 안에 {0}% 적게 받을 수 있습니다." + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:147 +msgid "You must give the {0} smart contract permission to use your {1}. You only have to do this once per token." +msgstr "{0} 에게 {1} 이용할 수 있는 스마트 컨트랙트 권한을 줘야 합니다. 다른 토큰을 이용할 때 이 작업을 다시 해야 합니다." + +#: src/hooks/useOpenShareTxDialog.tsx:84 +msgid "Your transaction was confirmed!" +msgstr "해당 거래는 이미 확인되었습니다." diff --git a/packages/shared/src/locale/zh-CN.json b/packages/shared/src/locale/zh-CN.json index c02cb2bcf79b..968666318fb8 100644 --- a/packages/shared/src/locale/zh-CN.json +++ b/packages/shared/src/locale/zh-CN.json @@ -1 +1,240 @@ -{ "messages": {} } +{ + "messages": { + "yHppI0": [["0"], " network is not added in the wallet. Please add and try it again."], + "OAZ+tI": [ + ["attentionFactors", "plural", { "one": ["#", " Attention item"], "other": ["#", " Attention items"] }] + ], + "QyZU8V": [["riskyFactors", "plural", { "one": ["#", " Risky item"], "other": ["#", " Risky items"] }]], + "F9r8sg": ["~ ", ["0"]], + "5PCwvT": ["≈ ", ["gasFeeUSD"]], + "OH977a": ["1. If you haven't installed ", ["name"], " Wallet"], + "OCGzyl": ["2. If you have installed ", ["name"], " Wallet"], + "Axp2cZ": "24h 交易总额", + "XA8JXM": "添加 NFT", + "uv94aG": "由用户添加", + "Du6bPw": "地址", + "sxkWRg": "高阶", + "JiIKww": "高阶设置", + "hRtIgr": "应用列表", + "EBrWIo": "应用设置", + "fL7WXr": "应用程序", + "Z7ZXbT": "授权", + "7yTBmm": "授权MASK?", + "jquqYv": ["您确认举报", ["0"], "? 批准后,这个 NFT 会被标记为垃圾。"], + "c19z3W": "可用余额", + "fsBGk0": "余额", + "foOw00": ["Balance(", ["symbol"], ")"], + "0wJVK+": "基础", + "29b5Sq": "Blocto 只支持 Flow 链。", + "H+bGaz": "浏览文件", + "dEgA5A": "取消", + "o+XJ9D": "切换", + "3A/mG4": "更换钱包", + "O2XHf2": ["Check ", ["providerName"], " to confirm connect."], + "E6HGuD": "Check out the official website", + "tFAx+m": "选择网络", + "Pd3dlq": "流通总量", + "xCJdfg": "清除", + "RUYsn0": "全部清除", + "Dt21Rq": "点击应用图标将会在应用列表中隐藏。", + "aVI2qx": "点击应用图标将会在应用列表中显示。", + "ZY63zZ": "单击设置图标以在应用板上列出它。", + "ylUhBz": "点击重试", + "MGP1v/": "点击确认按钮意味着您同意承担上述风险。", + "chL5IG": "社区", + "7VpPHA": "确定", + "B1QIGY": "确认失败", + "VcLnc7": "确认风险提示", + "oG26Rt": "请在您的钱包中确认这笔交易", + "P+K/3O": "确认中", + "ryWxhG": "恭喜!", + "5ZzgbQ": ["连接到 ", ["0"]], + "PlE+Fs": ["Connect and Verify ", ["0"]], + "Wqoa0p": "连接身份", + "CtByM7": "连接钱包", + "2/N/mr": ["Connect with ", ["providerName"]], + "iH8itU": "连接您的钱包", + "Tg003Y": "已连接的钱包设置", + "ks5OGD": "合约", + "PiH3UR": "已复制", + "he3ygx": "复制", + "ZhrWG1": "创建身份", + "5o2pdQ": "创建身份", + "Jg5pf7": ["当前基础手续费是 ", ["0"], " Gwei"], + "8Tg/JR": "自定义", + "Cf/0to": ["数据来源于", ["0"], " 。"], + "ovBPCi": "默认", + "URmyfc": "详情", + "+K0AvT": "断开连接", + "1QfxQT": "关闭", + "QO2XIN": "您想设置 MASK 代币用于支付网络费吗?", + "rR6iwH": "域名请求", + "DPfwMq": "完成", + "uyCILk": ["Download ", ["name"], " Wallet here"], + "F8Wc3I": "将您的文件拖放到此处", + "Lho4Qd": "DSearch", + "ePK91l": "编辑", + "uBAxNB": "编辑器", + "ZYUqCx": ["Enable ", ["name"], " Wallet extension and disable other browser extension wallets"], + "vutynE": "开启插件", + "Dz56Ua": "加密", + "gmOW42": "ENS 或钱包地址", + "mPxxVq": "输入Gas Limit", + "Xprzee": "请输入Gas Price", + "n42fmQ": "输入最大手续费", + "MOHcKb": "请输入最大优先级费用", + "iPMIoT": "输入金额", + "7Bj3x9": "失败", + "E6Sqiu": ["加载 ", ["0"], " 失败,请点击重试。"], + "OPsV2g": "Failed to load MASK. Click to retry.", + "a9X8Om": "举报失败。", + "MKEPCY": "关注", + "y6sq5j": "已关注", + "K7Osiu": "Formatic 仅支持 ETH 和 BNB 链。", + "PRkIUI": "Gas 费", + "yZhedI": "Gas 费用设置", + "3kbpgO": "Gas 限制", + "w0e0yw": ["Gas 限制至少 ", ["0"]], + "+95jK3": "Gas Limit过低有几率会导致交易失败。", + "OLY2Jk": "Gas 价格", + "mhNIiJ": "Gas price过高。您或许支付了超过需要的费用。", + "jfJkBQ": "Gas price 在当前网络环境下过低。", + "DKBbsW": "Gas Price 必须大于 0 Gwei。", + "1AM6tG": "当您查询代币时,获取优化后的搜索结果。", + "mT57+Q": "前往设置", + "HqiAyF": "Gwei", + "pu3rTn": "GWEI", + "yx/fMc": "高速", + "1on6yK": ["How to use ", ["0"], " Wallet?"], + "l3s5ri": "导入", + "iNIdDX": "请输入有效的代币合约地址", + "CE+M2e": "信息资料", + "Z33XCd": "输入合约地址", + "D79cZK": "即时", + "6YASel": "网络无效", + "UfJmJU": "无效的滑点容许值", + "Ap948/": "显示", + "0Lp4o6": "加载失败", + "yQE2r9": "加载中", + "1DwbcE": "加载中....", + "nTWWCZ": "低", + "rCsoea": "编辑代币列表", + "At846K": "编辑代币列表", + "5N3b5J": "市值", + "siroPf": "Mask Network", + "lWOC+h": "Mask Network 需要您在使用前授权以下网站。", + "aYT9SD": "最大费用", + "3qe4O9": "最大手续费", + "m2OZMI": "最大手续费不能低于最大优先级费用。", + "qI8U4x": "最大手续费不能低于最大优先级费用。", + "rBLzKv": "最大手续费高于必要值。", + "ZSgQgC": "最大手续费在当前网络环境下过低。", + "VSx1eg": "最大优先费", + "qYuscr": "最大优先费", + "rQQGN1": "最大优先费用过高。您或许支付了超过需要的费用。", + "sQJ3RN": "最大优先费用在当前网络环境下过低。", + "ITBQO3": "最大优先费用必须大于 0 Gwei。", + "P7S/hC": "最大优先费用必须大于 0 Gwei。", + "agPptk": "中等", + "ncmqYK": "手机号码", + "2FYpfJ": "更多", + "0D4bav": "代币代号名称或合约地址", + "me/C4W": "名称或合同地址 eg.PUNK 或 0x234...", + "kG0n0M": "网络错误或用户取消进程。", + "8Dh77Z": "NFTs", + "ZQbnxO": "未找到任何 NFT。", + "B6C0XJ": "暂无数据", + "ouAjo6": "Gas费用不足", + "Appw6V": "没有找到任何NFT。", + "Ev2r9A": "没有任何结果。", + "VErtTR": "尚未选择钱包。", + "zga9sT": "确定", + "wLGJSF": "仅支持 EVM 链、ETH、BNB 、Polygon、Arb、Op等。", + "9jba96": "当前只支持输入消息文本。", + "FZg3wM": "操作", + "A0VzMm": "使用 Token 名称、 NFT 收藏品、 ENS 域名或钱包地址优化搜索结果。", + "BzEFor": "或者", + "UbRKMZ": "确认中", + "gC2WI+": "身份", + "frOW4Q": "Phantom 只支持Solana 链。", + "ZWVdC5": ["请在使用 dApp之前连接到 ", ["0"], " 并发送验证推文。"], + "tHoyBc": ["请在使用 dApp之前连接到 ", ["0"], " 。"], + "ygW4tI": "请连接您的身份", + "ujpEaI": "请连接您的钱包", + "tezo1U": "使用此功能需要先创建一个身份并验证您的社交媒体账号。", + "d0aemb": "请创建一个身份访问 Dapps。", + "+hwfjv": "请选择钱包以在保存设置后激活功能。", + "RiLzWA": "Please switch to this network in the mobile application wallet you are connected to.", + "ysttaZ": "请在使用 dApp之前验证当前使用社交媒体账号的身份。", + "9tG0uf": "请验证您的社交账户", + "kQ4fG/": "插件开关", + "ohUJJM": "插件", + "04MqGo": "Post content:", + "g2UNkE": "Powered by", + "GAZNIW": "价格统计数据", + "8C8O9E": ["Provided by plugin \"", ["0"], "\""], + "HpK/8d": "重新加载", + "t/YqKh": "Remove", + "SREKz9": "报告 NFT Scam 合约吗?", + "/I3RSJ": "举报垃圾", + "b+scYY": "Requesting Connection", + "OfhWJH": "重置", + "6gRgw8": "重试", + "ByAMF+": "风险提示", + "o672x5": "使用WalletConnect兼容的钱包扫描二维码", + "q+O14e": "探索范围", + "h0qYUk": "使用ENS域名或钱包地址搜索以获得最优结果。", + "ja6Tyz": "使用 NFT 集合的名称或符号搜索以获得最佳结果。", + "rG3WVm": "选择代币", + "T0Y2+3": "选择代币", + "OIIXl+": "请选择一个 NFT", + "44bNbA": "选择 NFT 合约", + "hzTib5": "选择 NFT 合约持有者", + "bLJivk": "选择 NFT 合约持有者", + "Xftpm5": "Select Collection", + "JlFcis": "发送", + "Z8lGw6": "分享", + "ZIsLZh": "大小限制:10 MB", + "lqTDfd": "滑点容许值", + "t8dIOP": "垃圾", + "zzDlyQ": "成功", + "41J422": "举报成功。", + "6s8L6f": "切换网络", + "1+P9RR": ["切换到 ", ["0"]], + "iReGax": "告诉朋友发生了什么...", + "FY2gWe": "合约地址不正确或此 NFT 不属于您。", + "i4umqX": "The following wallets are not installed or in conflict with others", + "VMTGSu": "此功能已在应用设置中被关闭。启用插件以完全访问。", + "gKSsH7": "此网络尚未支持。", + "2ci98N": "MATIC 代币用于支付与 Polygon Network 交互时支付的网络费用。 SmartPay 钱包允许用户在与 Polygon Network 网络交互时使用 MASK 代币。", + "TP9/K5": "Token", + "2CMLgZ": "Token ID separated by comma, e.g. 1223,1224,", + "pzO3Xa": "总供应量", + "ayxkVX": "交易记录", + "QRsMow": "交易已确认", + "vLXevL": "交易费用", + "iT0Qmd": "交易失败", + "1M8xFP": "若设置的滑点过低,在流动性极低的情况下交易可能会被退回。", + "WDcQq9": "隐藏", + "VAOn4r": "解锁", + "qCMUPH": ["解锁 ", ["0"]], + "o1nVEi": ["正在解锁 ", ["0"], "..."], + "qWMpAl": ["最多 ", ["0"], " Gwei"], + "pHfBGz": "Gas费用更新中…", + "B8B8TU": ["Verified by ", ["0"]], + "/OPmPQ": ["验证 ", ["0"]], + "0N2d5H": "验证您的Twitter ID", + "jpctdh": "查看", + "Sjplg3": "在区块链浏览器查看", + "VECuJk": "钱包账户", + "GEL05h": "WalletConnect", + "KCeSRZ": "We will need to verify your Twitter account and record it on the NextID. Please post it for validation.", + "2GHENQ": "Web3 名片", + "On0aF2": "网站", + "KojyJ4": "网络错误", + "RNfEI8": "You canceled the request.", + "X3X0nY": ["在当前滑点设置下,您可能会少接收 ", ["0"], " %的期待数额。"], + "0hFUd/": ["您必须授予 ", ["0"], " 智能合约权限才能使用您的 ", ["1"], " 。每个代币只需要授权一次。"], + "pPWn5m": "您的交易已确认!" + } +} diff --git a/packages/shared/src/locale/zh-CN.po b/packages/shared/src/locale/zh-CN.po index 5db36121445c..cb6fc454a331 100644 --- a/packages/shared/src/locale/zh-CN.po +++ b/packages/shared/src/locale/zh-CN.po @@ -17,3 +17,1023 @@ msgstr "" "X-Crowdin-Language: zh-CN\n" "X-Crowdin-File: /[DimensionDev.Maskbook] develop/packages/shared/src/locale/en-US.po\n" "X-Crowdin-File-ID: 1012\n" + +#: src/UI/components/ChainBoundary/index.tsx:113 +msgid "{0} network is not added in the wallet. Please add and try it again." +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:57 +msgid "{attentionFactors, plural, one {# Attention item} other {# Attention items}}" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:40 +msgid "{riskyFactors, plural, one {# Risky item} other {# Risky items}}" +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:71 +msgid "~ {0}" +msgstr "~ {0}" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:372 +msgid "≈ {gasFeeUSD}" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:60 +msgid "1. If you haven't installed {name} Wallet" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:78 +msgid "2. If you have installed {name} Wallet" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:100 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:168 +msgid "24 Hour Trading Vol" +msgstr "24h 交易总额" + +#: src/UI/components/AddCollectibles/index.tsx:348 +#: src/UI/modals/AddCollectiblesModal/AddCollectiblesDialog.tsx:32 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:230 +msgid "Add NFTs" +msgstr "添加 NFT" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:263 +msgid "Added by user" +msgstr "由用户添加" + +#: src/UI/components/TokenWithSocialGroupMenu/index.tsx:159 +#: src/UI/wallet/DeriveWalletTable.tsx:124 +msgid "Address" +msgstr "地址" + +#: src/UI/components/SettingsBoard/GasSection.tsx:112 +msgid "Advanced" +msgstr "高阶" + +#: src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx:82 +msgid "Advanced Settings" +msgstr "高阶设置" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:110 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:51 +msgid "APP list" +msgstr "应用列表" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:55 +msgid "APP Settings" +msgstr "应用设置" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +msgid "Applications" +msgstr "应用程序" + +#: src/UI/components/GrantPermission/index.tsx:35 +msgid "Approve" +msgstr "授权" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:112 +msgid "Approve MASK?" +msgstr "授权MASK?" + +#: src/hooks/useReportSpam.tsx:65 +msgid "Are you sure to report {0}? After approving, this NFT will be marked as spam." +msgstr "您确认举报{0}? 批准后,这个 NFT 会被标记为垃圾。" + +#: src/UI/components/FungibleTokenInput/UI.tsx:171 +msgid "Available Balance" +msgstr "可用余额" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:105 +#: src/UI/components/FungibleTokenInput/UI.tsx:172 +#: src/UI/components/TokenAmountPanel/index.tsx:143 +msgid "Balance" +msgstr "余额" + +#: src/UI/wallet/DeriveWalletTable.tsx:129 +msgid "Balance({symbol})" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:111 +msgid "Basic" +msgstr "基础" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:191 +msgid "Blocto only supports the Flow chain." +msgstr "Blocto 只支持 Flow 链。" + +#: src/UI/components/UploadDropArea/index.tsx:135 +msgid "Browse File" +msgstr "浏览文件" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:140 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:127 +msgid "Cancel" +msgstr "取消" + +#: src/UI/components/WalletStatusBar/Action.tsx:17 +#: src/UI/components/WalletStatusBar/WalletMenuItem.tsx:79 +#: src/UI/components/WalletStatusBox/index.tsx:231 +msgid "Change" +msgstr "切换" + +#: src/UI/components/ChainBoundary/index.tsx:186 +msgid "Change Wallet" +msgstr "更换钱包" + +#: src/UI/modals/ConnectWalletModal/index.tsx:179 +msgid "Check {providerName} to confirm connect." +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:72 +msgid "Check out the official website" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:333 +msgid "Choose Network" +msgstr "选择网络" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:89 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:157 +msgid "Circulating Supply" +msgstr "流通总量" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:161 +msgid "Clear" +msgstr "清除" + +#: src/UI/components/WalletStatusBox/usePendingTransactions.tsx:61 +msgid "Clear All" +msgstr "全部清除" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:152 +msgid "Click the application icon to hide in the APP list." +msgstr "点击应用图标将会在应用列表中隐藏。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:151 +msgid "Click the application icon to list it on the App board." +msgstr "点击应用图标将会在应用列表中显示。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:214 +msgid "Click the setting icon to list it on the App board." +msgstr "单击设置图标以在应用板上列出它。" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:118 +msgid "Click to retry" +msgstr "点击重试" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:116 +msgid "Clicking the confirm button means that you agree to bear the above possible risks." +msgstr "点击确认按钮意味着您同意承担上述风险。" + +#: src/UI/components/CoinMetadataTable/index.tsx:213 +#: src/UI/components/CoinMetadataTable/index.tsx:284 +msgid "Community" +msgstr "社区" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:97 +#: src/UI/contexts/components/ApproveMaskDialog.tsx:103 +#: src/UI/modals/ConfirmModal/Dialog.tsx:39 +#: src/UI/modals/ConfirmModal/Dialog.tsx:43 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:302 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:245 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:133 +msgid "Confirm" +msgstr "确定" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:135 +msgid "Confirm Failed" +msgstr "确认失败" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:74 +msgid "Confirm Risk Warning" +msgstr "确认风险提示" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:90 +msgid "Confirm this transaction in your wallet" +msgstr "请在您的钱包中确认这笔交易" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:134 +msgid "Confirming" +msgstr "确认中" + +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:127 +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:152 +msgid "Congratulations!" +msgstr "恭喜!" + +#: src/UI/components/PersonaSelectPanel/index.tsx:185 +#: src/UI/components/PersonaSelectPanel/index.tsx:196 +msgid "Connect {0}" +msgstr "连接到 {0}" + +#: src/UI/components/PersonaSelectPanel/index.tsx:176 +msgid "Connect and Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:95 +msgid "Connect Persona" +msgstr "连接身份" + +#: src/UI/components/ChainBoundary/index.tsx:170 +#: src/UI/components/WalletConnectedBoundary/index.tsx:57 +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:216 +#: src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx:105 +#: src/UI/components/WalletStatusBox/index.tsx:144 +#: src/UI/modals/SelectProviderModal/SelectProvider.tsx:96 +msgid "Connect Wallet" +msgstr "连接钱包" + +#: src/UI/modals/ConnectWalletModal/index.tsx:143 +msgid "Connect with {providerName}" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:178 +msgid "Connect your wallet" +msgstr "连接您的钱包" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:197 +msgid "Connected wallets settings" +msgstr "已连接的钱包设置" + +#: src/UI/components/CoinMetadataTable/index.tsx:158 +#: src/UI/components/CoinMetadataTable/index.tsx:264 +msgid "Contract" +msgstr "合约" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copied!" +msgstr "已复制" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copy" +msgstr "复制" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:46 +#: src/UI/components/PersonaSelectPanel/index.tsx:110 +msgid "Create persona" +msgstr "创建身份" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:87 +msgid "Create Persona" +msgstr "创建身份" + +#: src/UI/components/SettingsBoard/GasForm.tsx:176 +msgid "Current base fee is {0} Gwei" +msgstr "当前基础手续费是 {0} Gwei" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:256 +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:377 +#: src/UI/components/SettingsBoard/GasSection.tsx:99 +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:91 +msgid "Custom" +msgstr "自定义" + +#: src/UI/components/AccountIcons/index.tsx:78 +#: src/UI/components/SocialAccountList/SocialTooltip.tsx:27 +msgid "Data source is retrieved from {0}." +msgstr "数据来源于{0} 。" + +#: src/UI/components/MaskPluginWrapper/index.tsx:141 +msgid "Default" +msgstr "默认" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:92 +msgid "Details" +msgstr "详情" + +#: src/UI/components/WalletStatusBox/index.tsx:221 +msgid "Disconnect" +msgstr "断开连接" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/contexts/components/InjectedDialog.tsx:240 +msgid "Dismiss" +msgstr "关闭" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:123 +msgid "Do you want to set MASK token as gas fee?" +msgstr "您想设置 MASK 代币用于支付网络费吗?" + +#: src/UI/components/CompositionDialog/PluginEntryRender.tsx:108 +msgid "Domain Request" +msgstr "域名请求" + +#: src/hooks/useSnackbarCallback.tsx:40 +#: src/hooks/useSnackbarCallback.tsx:89 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:140 +msgid "Done" +msgstr "完成" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:63 +msgid "Download {name} Wallet here" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:124 +msgid "Drag & Drop your file here" +msgstr "将您的文件拖放到此处" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:208 +msgid "DSearch" +msgstr "DSearch" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:343 +msgid "Edit" +msgstr "编辑" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Editor" +msgstr "编辑器" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:81 +msgid "Enable {name} Wallet extension and disable other browser extension wallets" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:51 +msgid "Enable plugin" +msgstr "开启插件" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:163 +msgid "Encrypt" +msgstr "加密" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:246 +msgid "ENS or Wallet Address" +msgstr "ENS 或钱包地址" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:31 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:135 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:132 +msgid "Enter a gas limit" +msgstr "输入Gas Limit" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:38 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:137 +msgid "Enter a gas price" +msgstr "请输入Gas Price" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:81 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:144 +msgid "Enter a max fee" +msgstr "输入最大手续费" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:58 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:142 +msgid "Enter a max priority fee" +msgstr "请输入最大优先级费用" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:75 +msgid "Enter an amount" +msgstr "输入金额" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:92 +msgid "Failed" +msgstr "失败" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:122 +msgid "Failed to load {0}. Click to retry." +msgstr "加载 {0} 失败,请点击重试。" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:82 +msgid "Failed to load MASK. Click to retry." +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Failed to report spam." +msgstr "举报失败。" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:236 +msgid "Follow" +msgstr "关注" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:235 +msgid "Following" +msgstr "已关注" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:193 +msgid "Fortmatic only supports the ETH and BNB chain." +msgstr "Formatic 仅支持 ETH 和 BNB 链。" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:361 +msgid "Gas Fee" +msgstr "Gas 费" + +#: src/UI/modals/GasSettingModal/GasSettingModal.tsx:41 +msgid "Gas fee settings" +msgstr "Gas 费用设置" + +#: src/UI/components/SettingsBoard/GasForm.tsx:231 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:249 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:215 +msgid "Gas Limit" +msgstr "Gas 限制" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:138 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:135 +msgid "Gas limit must be at least {0}" +msgstr "Gas 限制至少 {0}" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:34 +msgid "Gas limit too low will cause the transaction to fail." +msgstr "Gas Limit过低有几率会导致交易失败。" + +#: src/UI/components/SettingsBoard/GasForm.tsx:200 +#: src/UI/components/SettingsBoard/GasSection.tsx:92 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:222 +msgid "Gas Price" +msgstr "Gas 价格" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:54 +msgid "Gas price is higher than necessary. You may pay more than needed." +msgstr "Gas price过高。您或许支付了超过需要的费用。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:46 +msgid "Gas price is too low for network conditions." +msgstr "Gas price 在当前网络环境下过低。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:39 +msgid "Gas price must be greater than 0 Gwei." +msgstr "Gas Price 必须大于 0 Gwei。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:231 +msgid "Get optimized search results when you look for a token." +msgstr "当您查询代币时,获取优化后的搜索结果。" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:36 +msgid "Go to Settings" +msgstr "前往设置" + +#: src/UI/components/SettingsBoard/GasForm.tsx:193 +#: src/UI/components/SettingsBoard/GasForm.tsx:261 +#: src/UI/components/SettingsBoard/GasForm.tsx:299 +msgid "Gwei" +msgstr "Gwei" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:258 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:278 +msgid "GWEI" +msgstr "GWEI" + +#: src/UI/components/SettingsBoard/Context.tsx:96 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:119 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:118 +msgid "High" +msgstr "高速" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:56 +msgid "How to use {0} Wallet?" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:162 +msgid "Import" +msgstr "导入" + +#: src/UI/components/AddCollectibles/index.tsx:164 +#: src/UI/components/FungibleTokenList/index.tsx:271 +msgid "Incorrect contract address." +msgstr "请输入有效的代币合约地址" + +#: src/UI/components/CoinMetadataTable/index.tsx:148 +#: src/UI/components/CoinMetadataTable/index.tsx:255 +msgid "Info" +msgstr "信息资料" + +#: src/UI/components/AddCollectibles/index.tsx:246 +msgid "Input contract address" +msgstr "输入合约地址" + +#: src/UI/components/SettingsBoard/Context.tsx:95 +msgid "Instant" +msgstr "即时" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:96 +msgid "Invalid Network" +msgstr "网络无效" + +#: src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts:18 +msgid "Invalid slippage tolerance." +msgstr "无效的滑点容许值" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:116 +msgid "Listed" +msgstr "显示" + +#: src/UI/components/LoadRetry/index.tsx:20 +#: src/UI/components/ReloadStatus/index.tsx:46 +msgid "Load failed" +msgstr "加载失败" + +#: src/UI/components/LoadingStatus/index.tsx:40 +msgid "Loading" +msgstr "加载中" + +#: src/UI/components/PluginCardFrame/index.tsx:86 +msgid "Loading...." +msgstr "加载中...." + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:109 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:108 +msgid "Low" +msgstr "低" + +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:127 +msgid "Manage Token List" +msgstr "编辑代币列表" + +#: src/UI/components/FungibleTokenList/ManageTokenListBar.tsx:32 +msgid "Manage Token Lists" +msgstr "编辑代币列表" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:70 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:146 +msgid "Market Cap" +msgstr "市值" + +#: src/UI/components/PluginCardFrame/index.tsx:69 +msgid "Mask Network" +msgstr "Mask Network" + +#: src/UI/components/GrantPermission/index.tsx:27 +msgid "Mask Network requires you to authorize the following websites before using it." +msgstr "Mask Network 需要您在使用前授权以下网站。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:276 +msgid "Max fee" +msgstr "最大费用" + +#: src/UI/components/SettingsBoard/GasForm.tsx:306 +msgid "Max Fee" +msgstr "最大手续费" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:147 +msgid "Max fee cannot be lower than max priority fee" +msgstr "最大手续费不能低于最大优先级费用。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:100 +msgid "Max fee cannot be lower than max priority fee." +msgstr "最大手续费不能低于最大优先级费用。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:96 +msgid "Max fee is higher than necessary." +msgstr "最大手续费高于必要值。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:88 +msgid "Max fee is too low for network conditions." +msgstr "最大手续费在当前网络环境下过低。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:256 +msgid "Max priority fee" +msgstr "最大优先费" + +#: src/UI/components/SettingsBoard/GasForm.tsx:272 +msgid "Max Priority Fee" +msgstr "最大优先费" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:77 +msgid "Max priority fee is higher than necessary. You may pay more than needed." +msgstr "最大优先费用过高。您或许支付了超过需要的费用。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:66 +msgid "Max priority fee is too low for network conditions." +msgstr "最大优先费用在当前网络环境下过低。" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:143 +msgid "Max priority fee must be greater than 0 GWEI" +msgstr "最大优先费用必须大于 0 Gwei。" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:59 +msgid "Max priority fee must be greater than 0 Gwei." +msgstr "最大优先费用必须大于 0 Gwei。" + +#: src/UI/components/SettingsBoard/Context.tsx:97 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:114 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:113 +msgid "Medium" +msgstr "中等" + +#: src/UI/components/PhoneNumberField/index.tsx:29 +msgid "Mobile Number" +msgstr "手机号码" + +#: src/UI/components/TokenSecurity/index.tsx:72 +msgid "More" +msgstr "更多" + +#: src/UI/components/FungibleTokenList/index.tsx:341 +msgid "Name or Contract address e.g. USDC or 0x234..." +msgstr "代币代号名称或合约地址" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:191 +msgid "Name or Contract address eg.PUNK or 0x234..." +msgstr "名称或合同地址 eg.PUNK 或 0x234..." + +#: src/UI/components/ChainBoundary/index.tsx:124 +msgid "Network error or user cancels the process." +msgstr "网络错误或用户取消进程。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:236 +msgid "NFTs" +msgstr "NFTs" + +#: src/UI/components/CollectibleList/CollectibleList.tsx:112 +msgid "No collectible found." +msgstr "未找到任何 NFT。" + +#: src/UI/components/EmptyStatus/index.tsx:32 +msgid "No Data" +msgstr "暂无数据" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:89 +msgid "No Enough Gas Fee" +msgstr "Gas费用不足" + +#: src/UI/components/AssetsManagement/CollectionList.tsx:241 +#: src/UI/components/AssetsManagement/CollectionList.tsx:342 +msgid "No NFTs found." +msgstr "没有找到任何NFT。" + +#: src/UI/components/AddCollectibles/index.tsx:319 +#: src/UI/components/CountryCodePicker/index.tsx:145 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:208 +msgid "No results" +msgstr "没有任何结果。" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:78 +msgid "Not select wallet yet." +msgstr "尚未选择钱包。" + +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "OK" +msgstr "确定" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:196 +msgid "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc." +msgstr "仅支持 EVM 链、ETH、BNB 、Polygon、Arb、Op等。" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:155 +msgid "Only TypedMessageText is supported currently." +msgstr "当前只支持输入消息文本。" + +#: src/UI/wallet/DeriveWalletTable.tsx:134 +msgid "Operation" +msgstr "操作" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:212 +msgid "Optimize search results with token names, NFT collections, ENS domains or wallet addresses." +msgstr "使用 Token 名称、 NFT 收藏品、 ENS 域名或钱包地址优化搜索结果。" + +#: src/UI/components/UploadDropArea/index.tsx:132 +msgid "or" +msgstr "或者" + +#: src/UI/components/WalletStatusBar/WalletDescription.tsx:125 +#: src/UI/components/WalletStatusBox/TransactionList.tsx:90 +msgid "Pending" +msgstr "确认中" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:45 +#: src/UI/components/PersonaSelectPanel/index.tsx:109 +#: src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx:74 +msgid "Persona" +msgstr "身份" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:189 +msgid "Phantom only supports the Solana chain." +msgstr "Phantom 只支持Solana 链。" + +#: src/UI/components/PersonaSelectPanel/index.tsx:178 +msgid "Please connect {0} and send proof post before using dApps." +msgstr "请在使用 dApp之前连接到 {0} 并发送验证推文。" + +#: src/UI/components/PersonaSelectPanel/index.tsx:186 +msgid "Please connect {0} before using dApps." +msgstr "请在使用 dApp之前连接到 {0} 。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:266 +msgid "Please connect your persona" +msgstr "请连接您的身份" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:261 +msgid "Please connect your wallet" +msgstr "请连接您的钱包" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:44 +#: src/UI/components/PersonaSelectPanel/index.tsx:108 +msgid "Please create a Persona and verify your account to use this function." +msgstr "使用此功能需要先创建一个身份并验证您的社交媒体账号。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:264 +msgid "Please create a persona for accessing Dapps." +msgstr "请创建一个身份访问 Dapps。" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:30 +msgid "Please select the wallet to activate the function after saving the settings." +msgstr "请选择钱包以在保存设置后激活功能。" + +#: src/UI/components/ChainBoundary/index.tsx:189 +#: src/UI/components/ChainBoundary/index.tsx:206 +msgid "Please switch to this network in the mobile application wallet you are connected to." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:192 +msgid "Please verify current persona with social media account before using dApps." +msgstr "请在使用 dApp之前验证当前使用社交媒体账号的身份。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:268 +msgid "Please verify your social account" +msgstr "请验证您的社交账户" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:111 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:52 +msgid "Plug-in switch" +msgstr "插件开关" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:145 +msgid "Plugins" +msgstr "插件" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:245 +#: src/UI/components/VerifyNextIDDialog/index.tsx:265 +msgid "Post content:" +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:109 +#: src/UI/components/PluginCardFrame/index.tsx:67 +msgid "Powered by" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:61 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:137 +msgid "Price Statistic" +msgstr "价格统计数据" + +#: src/UI/components/CompositionDialog/BadgeRenderer.tsx:49 +msgid "Provided by plugin \"{0}\"" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:24 +#: src/UI/components/ReloadStatus/index.tsx:48 +msgid "Reload" +msgstr "重新加载" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:95 +msgid "Remove" +msgstr "" + +#: src/hooks/useReportSpam.tsx:63 +msgid "Report NFT Scam Contract?" +msgstr "报告 NFT Scam 合约吗?" + +#: src/hooks/useReportSpam.tsx:74 +msgid "Report Spam" +msgstr "举报垃圾" + +#: src/UI/modals/ConnectWalletModal/index.tsx:174 +msgid "Requesting Connection" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Reset" +msgstr "重置" + +#: src/UI/modals/ConnectWalletModal/index.tsx:189 +msgid "Retry" +msgstr "重试" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:92 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:101 +msgid "Risk Warning" +msgstr "风险提示" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:85 +msgid "Scan QR code with a WalletConnect-compatible wallet" +msgstr "使用WalletConnect兼容的钱包扫描二维码" + +#: src/UI/components/CountryCodePicker/index.tsx:112 +msgid "Search Area" +msgstr "探索范围" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:249 +msgid "Search with an ENS domain or wallet address to get optimized results." +msgstr "使用ENS域名或钱包地址搜索以获得最优结果。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:239 +msgid "Search with the name of an NFT collection or its symbol to get optimized results." +msgstr "使用 NFT 集合的名称或符号搜索以获得最佳结果。" + +#: src/UI/components/SelectTokenChip/index.tsx:60 +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:128 +msgid "Select" +msgstr "选择代币" + +#: src/UI/components/FungibleTokenInput/UI.tsx:221 +msgid "Select a token" +msgstr "选择代币" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:96 +msgid "Select an NFT" +msgstr "请选择一个 NFT" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:43 +msgid "Select an NFT Contract" +msgstr "选择 NFT 合约" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:45 +msgid "Select an NFT Contract Operator" +msgstr "选择 NFT 合约持有者" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:44 +msgid "Select an NFT Contract Owner" +msgstr "选择 NFT 合约持有者" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:185 +msgid "Select Collection" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:335 +#: src/UI/components/AssetsManagement/Collection.tsx:147 +#: src/UI/components/AssetsManagement/CollectionList.tsx:286 +#: src/UI/components/VerifyNextIDDialog/index.tsx:287 +msgid "Send" +msgstr "发送" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "Share" +msgstr "分享" + +#: src/UI/components/UploadDropArea/index.tsx:128 +msgid "Size limit: 10 MB" +msgstr "大小限制:10 MB" + +#: src/UI/components/SettingsBoard/SlippageToleranceSection.tsx:26 +msgid "Slippage Tolerance" +msgstr "滑点容许值" + +#: src/UI/components/TokenSecurity/index.tsx:93 +msgid "Spam" +msgstr "垃圾" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:91 +msgid "Success" +msgstr "成功" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Successfully reported." +msgstr "举报成功。" + +#: src/UI/components/ChainBoundary/index.tsx:109 +#: src/UI/components/ChainBoundary/index.tsx:121 +msgid "Switch Network" +msgstr "切换网络" + +#: src/UI/components/ChainBoundary/index.tsx:204 +msgid "Switch to {0}" +msgstr "切换到 {0}" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:179 +msgid "Tell selective friends what's happening..." +msgstr "告诉朋友发生了什么..." + +#: src/UI/components/AddCollectibles/index.tsx:307 +msgid "The contract address is incorrect or the collection does not belong to you." +msgstr "合约地址不正确或此 NFT 不属于您。" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:276 +msgid "The following wallets are not installed or in conflict with others" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:39 +msgid "This function has been turned off in the App settings. Enable plug-ins to fully access." +msgstr "此功能已在应用设置中被关闭。启用插件以完全访问。" + +#: src/UI/components/ChainBoundary/index.tsx:190 +msgid "This network is not supported yet." +msgstr "此网络尚未支持。" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:117 +msgid "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token." +msgstr "MATIC 代币用于支付与 Polygon Network 交互时支付的网络费用。 SmartPay 钱包允许用户在与 Polygon Network 网络交互时使用 MASK 代币。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:228 +msgid "Token" +msgstr "Token" + +#: src/UI/components/AddCollectibles/index.tsx:280 +msgid "Token ID separated by comma, e.g. 1223,1224," +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:118 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:178 +msgid "Total Supply" +msgstr "总供应量" + +#: src/hooks/useOpenShareTxDialog.tsx:81 +msgid "Transaction" +msgstr "交易记录" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:95 +msgid "Transaction Confirmed" +msgstr "交易已确认" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:337 +msgid "Transaction cost" +msgstr "交易费用" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:100 +msgid "Transaction Failed" +msgstr "交易失败" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:124 +msgid "Transaction with extremely low slippage tolerance might be reverted because of very small market movement." +msgstr "若设置的滑点过低,在流动性极低的情况下交易可能会被退回。" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:120 +msgid "Unlisted" +msgstr "隐藏" + +#: src/hooks/useGasCurrencyMenu.tsx:96 +msgid "Unlock" +msgstr "解锁" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:165 +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:100 +msgid "Unlock {0}" +msgstr "解锁 {0}" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:59 +msgid "Unlocking {0}..." +msgstr "正在解锁 {0}..." + +#: src/UI/components/SettingsBoard/GasOption.tsx:80 +msgid "up to {0} Gwei" +msgstr "最多 {0} Gwei" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:88 +msgid "Updating Gas Fee…" +msgstr "Gas费用更新中…" + +#: src/UI/components/AssetsManagement/CollectibleItem.tsx:186 +#: src/UI/components/AssetsManagement/Collection.tsx:197 +#: src/UI/components/AssetsManagement/CollectionHeader.tsx:67 +msgid "Verified by {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:190 +msgid "Verify {0}" +msgstr "验证 {0}" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:102 +msgid "Verify your Twitter ID" +msgstr "验证您的Twitter ID" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:233 +msgid "View" +msgstr "查看" + +#: src/hooks/useOpenShareTxDialog.tsx:67 +#: src/UI/components/WalletStatusBox/index.tsx:187 +msgid "View on Explorer" +msgstr "在区块链浏览器查看" + +#: src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx:45 +msgid "Wallet Account" +msgstr "钱包账户" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:77 +msgid "WalletConnect" +msgstr "WalletConnect" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:256 +#: src/UI/components/VerifyNextIDDialog/index.tsx:269 +msgid "We will need to verify your Twitter account and record it on the NextID. Please post it for validation." +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:56 +msgid "Web3 Profile" +msgstr "Web3 名片" + +#: src/UI/components/CoinMetadataTable/index.tsx:104 +#: src/UI/components/CoinMetadataTable/index.tsx:274 +msgid "Website" +msgstr "网站" + +#: src/UI/components/ChainBoundary/index.tsx:155 +msgid "Wrong Network" +msgstr "网络错误" + +#: src/UI/modals/ConnectWalletModal/index.tsx:178 +msgid "You canceled the request." +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:131 +msgid "You may have {0}% less received with this level of slippage tolerance." +msgstr "在当前滑点设置下,您可能会少接收 {0} %的期待数额。" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:147 +msgid "You must give the {0} smart contract permission to use your {1}. You only have to do this once per token." +msgstr "您必须授予 {0} 智能合约权限才能使用您的 {1} 。每个代币只需要授权一次。" + +#: src/hooks/useOpenShareTxDialog.tsx:84 +msgid "Your transaction was confirmed!" +msgstr "您的交易已确认!" diff --git a/packages/shared/src/locale/zh-TW.json b/packages/shared/src/locale/zh-TW.json index c02cb2bcf79b..08d444eab2d1 100644 --- a/packages/shared/src/locale/zh-TW.json +++ b/packages/shared/src/locale/zh-TW.json @@ -1 +1,240 @@ -{ "messages": {} } +{ + "messages": { + "yHppI0": [["0"], " network is not added in the wallet. Please add and try it again."], + "OAZ+tI": [ + ["attentionFactors", "plural", { "one": ["#", " Attention item"], "other": ["#", " Attention items"] }] + ], + "QyZU8V": [["riskyFactors", "plural", { "one": ["#", " Risky item"], "other": ["#", " Risky items"] }]], + "F9r8sg": ["~ ", ["0"]], + "5PCwvT": ["≈ ", ["gasFeeUSD"]], + "OH977a": ["1. If you haven't installed ", ["name"], " Wallet"], + "OCGzyl": ["2. If you have installed ", ["name"], " Wallet"], + "Axp2cZ": "24h 交易总额", + "XA8JXM": "添加 NFT", + "uv94aG": "由用户添加", + "Du6bPw": "地址", + "sxkWRg": "高阶", + "JiIKww": "高阶设置", + "hRtIgr": "应用列表", + "EBrWIo": "应用设置", + "fL7WXr": "应用程序", + "Z7ZXbT": "授权", + "7yTBmm": "授权MASK?", + "jquqYv": ["您确认举报", ["0"], "? 批准后,这个 NFT 会被标记为垃圾。"], + "c19z3W": "可用余额", + "fsBGk0": "余额", + "foOw00": ["Balance(", ["symbol"], ")"], + "0wJVK+": "基础", + "29b5Sq": "Blocto 只支持 Flow 链。", + "H+bGaz": "浏览文件", + "dEgA5A": "取消", + "o+XJ9D": "切换", + "3A/mG4": "更换钱包", + "O2XHf2": ["Check ", ["providerName"], " to confirm connect."], + "E6HGuD": "Check out the official website", + "tFAx+m": "选择网络", + "Pd3dlq": "流通总量", + "xCJdfg": "清除", + "RUYsn0": "全部清除", + "Dt21Rq": "点击应用图标将会在应用列表中隐藏。", + "aVI2qx": "点击应用图标将会在应用列表中显示。", + "ZY63zZ": "单击设置图标以在应用板上列出它。", + "ylUhBz": "点击重试", + "MGP1v/": "点击确认按钮意味着您同意承担上述风险。", + "chL5IG": "社区", + "7VpPHA": "确定", + "B1QIGY": "确认失败", + "VcLnc7": "确认风险提示", + "oG26Rt": "请在您的钱包中确认这笔交易", + "P+K/3O": "确认中", + "ryWxhG": "恭喜!", + "5ZzgbQ": ["连接到 ", ["0"]], + "PlE+Fs": ["Connect and Verify ", ["0"]], + "Wqoa0p": "连接身份", + "CtByM7": "连接钱包", + "2/N/mr": ["Connect with ", ["providerName"]], + "iH8itU": "连接您的钱包", + "Tg003Y": "已连接的钱包设置", + "ks5OGD": "合约", + "PiH3UR": "已复制", + "he3ygx": "复制", + "ZhrWG1": "创建身份", + "5o2pdQ": "创建身份", + "Jg5pf7": ["当前基础手续费是 ", ["0"], " Gwei"], + "8Tg/JR": "自定义", + "Cf/0to": ["数据来源于", ["0"], " 。"], + "ovBPCi": "默认", + "URmyfc": "详情", + "+K0AvT": "断开连接", + "1QfxQT": "关闭", + "QO2XIN": "您想设置 MASK 代币用于支付网络费吗?", + "rR6iwH": "域名请求", + "DPfwMq": "完成", + "uyCILk": ["Download ", ["name"], " Wallet here"], + "F8Wc3I": "将您的文件拖放到此处", + "Lho4Qd": "DSearch", + "ePK91l": "编辑", + "uBAxNB": "编辑器", + "ZYUqCx": ["Enable ", ["name"], " Wallet extension and disable other browser extension wallets"], + "vutynE": "开启插件", + "Dz56Ua": "加密", + "gmOW42": "ENS 或钱包地址", + "mPxxVq": "输入Gas Limit", + "Xprzee": "请输入Gas Price", + "n42fmQ": "输入最大手续费", + "MOHcKb": "请输入最大优先级费用", + "iPMIoT": "输入金额", + "7Bj3x9": "失败", + "E6Sqiu": ["加载 ", ["0"], " 失败,请点击重试。"], + "OPsV2g": "Failed to load MASK. Click to retry.", + "a9X8Om": "举报失败。", + "MKEPCY": "关注", + "y6sq5j": "已关注", + "K7Osiu": "Formatic 仅支持 ETH 和 BNB 链。", + "PRkIUI": "Gas 费", + "yZhedI": "Gas 费用设置", + "3kbpgO": "Gas 限制", + "w0e0yw": ["Gas 限制至少 ", ["0"]], + "+95jK3": "Gas Limit过低有几率会导致交易失败。", + "OLY2Jk": "Gas 价格", + "mhNIiJ": "Gas price过高。您或许支付了超过需要的费用。", + "jfJkBQ": "Gas price 在当前网络环境下过低。", + "DKBbsW": "Gas Price 必须大于 0 Gwei。", + "1AM6tG": "当您查询代币时,获取优化后的搜索结果。", + "mT57+Q": "前往设置", + "HqiAyF": "Gwei", + "pu3rTn": "GWEI", + "yx/fMc": "高速", + "1on6yK": ["How to use ", ["0"], " Wallet?"], + "l3s5ri": "導入", + "iNIdDX": "请输入有效的代币合约地址", + "CE+M2e": "信息资料", + "Z33XCd": "输入合约地址", + "D79cZK": "即时", + "6YASel": "网络无效", + "UfJmJU": "无效的滑点容许值", + "Ap948/": "显示", + "0Lp4o6": "加载失败", + "yQE2r9": "加载中", + "1DwbcE": "加载中....", + "nTWWCZ": "低", + "rCsoea": "编辑代币列表", + "At846K": "编辑代币列表", + "5N3b5J": "市值", + "siroPf": "Mask Network", + "lWOC+h": "Mask Network 需要您在使用前授权以下网站。", + "aYT9SD": "最大费用", + "3qe4O9": "最大手续费", + "m2OZMI": "最大手续费不能低于最大优先级费用。", + "qI8U4x": "最大手续费不能低于最大优先级费用。", + "rBLzKv": "最大手续费高于必要值。", + "ZSgQgC": "最大手续费在当前网络环境下过低。", + "VSx1eg": "最大优先费", + "qYuscr": "最大优先费", + "rQQGN1": "最大优先费用过高。您或许支付了超过需要的费用。", + "sQJ3RN": "最大优先费用在当前网络环境下过低。", + "ITBQO3": "最大优先费用必须大于 0 Gwei。", + "P7S/hC": "最大优先费用必须大于 0 Gwei。", + "agPptk": "中等", + "ncmqYK": "手机号码", + "2FYpfJ": "更多", + "0D4bav": "代幣名稱或合約地址", + "me/C4W": "名称或合同地址 eg.PUNK 或 0x234...", + "kG0n0M": "网络错误或用户取消进程。", + "8Dh77Z": "NFTs", + "ZQbnxO": "未找到任何 NFT。", + "B6C0XJ": "暂无数据", + "ouAjo6": "Gas费用不足", + "Appw6V": "没有找到任何NFT。", + "Ev2r9A": "没有任何结果。", + "VErtTR": "尚未选择钱包。", + "zga9sT": "确定", + "wLGJSF": "仅支持 EVM 链、ETH、BNB 、Polygon、Arb、Op等。", + "9jba96": "当前只支持输入消息文本。", + "FZg3wM": "操作", + "A0VzMm": "使用 Token 名称、 NFT 收藏品、 ENS 域名或钱包地址优化搜索结果。", + "BzEFor": "或者", + "UbRKMZ": "确认中", + "gC2WI+": "身份", + "frOW4Q": "Phantom 只支持Solana 链。", + "ZWVdC5": ["请在使用 dApp之前连接到 ", ["0"], " 并发送验证推文。"], + "tHoyBc": ["请在使用 dApp之前连接到 ", ["0"], " 。"], + "ygW4tI": "请连接您的身份", + "ujpEaI": "请连接您的钱包", + "tezo1U": "使用此功能需要先创建一个身份并验证您的社交媒体账号。", + "d0aemb": "请创建一个身份访问 Dapps。", + "+hwfjv": "请选择钱包以在保存设置后激活功能。", + "RiLzWA": "Please switch to this network in the mobile application wallet you are connected to.", + "ysttaZ": "请在使用 dApp之前验证当前使用社交媒体账号的身份。", + "9tG0uf": "请验证您的社交账户", + "kQ4fG/": "插件开关", + "ohUJJM": "插件", + "04MqGo": "Post content:", + "g2UNkE": "Powered by", + "GAZNIW": "价格统计数据", + "8C8O9E": ["Provided by plugin \"", ["0"], "\""], + "HpK/8d": "重新加载", + "t/YqKh": "Remove", + "SREKz9": "报告 NFT Scam 合约吗?", + "/I3RSJ": "举报垃圾", + "b+scYY": "Requesting Connection", + "OfhWJH": "重置", + "6gRgw8": "重试", + "ByAMF+": "风险提示", + "o672x5": "使用WalletConnect兼容的钱包扫描二维码", + "q+O14e": "探索范围", + "h0qYUk": "使用ENS域名或钱包地址搜索以获得最优结果。", + "ja6Tyz": "使用 NFT 集合的名称或符号搜索以获得最佳结果。", + "rG3WVm": "選擇一種代幣", + "T0Y2+3": "选择代币", + "OIIXl+": "请选择一个 NFT", + "44bNbA": "选择 NFT 合约", + "hzTib5": "选择 NFT 合约持有者", + "bLJivk": "选择 NFT 合约持有者", + "Xftpm5": "Select Collection", + "JlFcis": "发送", + "Z8lGw6": "分享", + "ZIsLZh": "大小限制:10 MB", + "lqTDfd": "滑点容许值", + "t8dIOP": "垃圾", + "zzDlyQ": "成功", + "41J422": "举报成功。", + "6s8L6f": "切换网络", + "1+P9RR": ["切换到 ", ["0"]], + "iReGax": "告诉朋友发生了什么...", + "FY2gWe": "合约地址不正确或此 NFT 不属于您。", + "i4umqX": "The following wallets are not installed or in conflict with others", + "VMTGSu": "此功能已在应用设置中被关闭。启用插件以完全访问。", + "gKSsH7": "此网络尚未支持。", + "2ci98N": "MATIC 代币用于支付与 Polygon Network 交互时支付的网络费用。 SmartPay 钱包允许用户在与 Polygon Network 网络交互时使用 MASK 代币。", + "TP9/K5": "Token", + "2CMLgZ": "Token ID separated by comma, e.g. 1223,1224,", + "pzO3Xa": "总供应量", + "ayxkVX": "交易记录", + "QRsMow": "交易已确认", + "vLXevL": "交易费用", + "iT0Qmd": "交易失败", + "1M8xFP": "若设置的滑点过低,在流动性极低的情况下交易可能会被退回。", + "WDcQq9": "隐藏", + "VAOn4r": "解锁", + "qCMUPH": ["解锁 ", ["0"]], + "o1nVEi": ["正在解锁 ", ["0"], "..."], + "qWMpAl": ["最多 ", ["0"], " Gwei"], + "pHfBGz": "Gas费用更新中…", + "B8B8TU": ["Verified by ", ["0"]], + "/OPmPQ": ["验证 ", ["0"]], + "0N2d5H": "验证您的Twitter ID", + "jpctdh": "查看", + "Sjplg3": "在区块链浏览器查看", + "VECuJk": "钱包账户", + "GEL05h": "WalletConnect", + "KCeSRZ": "We will need to verify your Twitter account and record it on the NextID. Please post it for validation.", + "2GHENQ": "Web3 名片", + "On0aF2": "网站", + "KojyJ4": "网络错误", + "RNfEI8": "You canceled the request.", + "X3X0nY": ["在当前滑点设置下,您可能会少接收 ", ["0"], " %的期待数额。"], + "0hFUd/": ["您必须授予 ", ["0"], " 智能合约权限才能使用您的 ", ["1"], " 。每个代币只需要授权一次。"], + "pPWn5m": "您的交易已确认!" + } +} diff --git a/packages/shared/src/locale/zh-TW.po b/packages/shared/src/locale/zh-TW.po index d29e741a8787..d75d5a00ad7c 100644 --- a/packages/shared/src/locale/zh-TW.po +++ b/packages/shared/src/locale/zh-TW.po @@ -17,3 +17,1023 @@ msgstr "" "X-Crowdin-Language: zh-TW\n" "X-Crowdin-File: /[DimensionDev.Maskbook] develop/packages/shared/src/locale/en-US.po\n" "X-Crowdin-File-ID: 1012\n" + +#: src/UI/components/ChainBoundary/index.tsx:113 +msgid "{0} network is not added in the wallet. Please add and try it again." +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:57 +msgid "{attentionFactors, plural, one {# Attention item} other {# Attention items}}" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:40 +msgid "{riskyFactors, plural, one {# Risky item} other {# Risky items}}" +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:71 +msgid "~ {0}" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:372 +msgid "≈ {gasFeeUSD}" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:60 +msgid "1. If you haven't installed {name} Wallet" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:78 +msgid "2. If you have installed {name} Wallet" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:100 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:168 +msgid "24 Hour Trading Vol" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:348 +#: src/UI/modals/AddCollectiblesModal/AddCollectiblesDialog.tsx:32 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:230 +msgid "Add NFTs" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:263 +msgid "Added by user" +msgstr "" + +#: src/UI/components/TokenWithSocialGroupMenu/index.tsx:159 +#: src/UI/wallet/DeriveWalletTable.tsx:124 +msgid "Address" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:112 +msgid "Advanced" +msgstr "" + +#: src/UI/modals/SelectAdvancedSettingsDialog/SelectGasSettingsDialog.tsx:82 +msgid "Advanced Settings" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:110 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:51 +msgid "APP list" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:55 +msgid "APP Settings" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:117 +msgid "Applications" +msgstr "" + +#: src/UI/components/GrantPermission/index.tsx:35 +msgid "Approve" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:112 +msgid "Approve MASK?" +msgstr "" + +#: src/hooks/useReportSpam.tsx:65 +msgid "Are you sure to report {0}? After approving, this NFT will be marked as spam." +msgstr "" + +#: src/UI/components/FungibleTokenInput/UI.tsx:171 +msgid "Available Balance" +msgstr "" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:105 +#: src/UI/components/FungibleTokenInput/UI.tsx:172 +#: src/UI/components/TokenAmountPanel/index.tsx:143 +msgid "Balance" +msgstr "" + +#: src/UI/wallet/DeriveWalletTable.tsx:129 +msgid "Balance({symbol})" +msgstr "" + +#: src/UI/components/SettingsBoard/GasSection.tsx:111 +msgid "Basic" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:191 +msgid "Blocto only supports the Flow chain." +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:135 +msgid "Browse File" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:140 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:127 +msgid "Cancel" +msgstr "" + +#: src/UI/components/WalletStatusBar/Action.tsx:17 +#: src/UI/components/WalletStatusBar/WalletMenuItem.tsx:79 +#: src/UI/components/WalletStatusBox/index.tsx:231 +msgid "Change" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:186 +msgid "Change Wallet" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:179 +msgid "Check {providerName} to confirm connect." +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:72 +msgid "Check out the official website" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:333 +msgid "Choose Network" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:89 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:157 +msgid "Circulating Supply" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:161 +msgid "Clear" +msgstr "" + +#: src/UI/components/WalletStatusBox/usePendingTransactions.tsx:61 +msgid "Clear All" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:152 +msgid "Click the application icon to hide in the APP list." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:151 +msgid "Click the application icon to list it on the App board." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:214 +msgid "Click the setting icon to list it on the App board." +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:118 +msgid "Click to retry" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:116 +msgid "Clicking the confirm button means that you agree to bear the above possible risks." +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:213 +#: src/UI/components/CoinMetadataTable/index.tsx:284 +msgid "Community" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:97 +#: src/UI/contexts/components/ApproveMaskDialog.tsx:103 +#: src/UI/modals/ConfirmModal/Dialog.tsx:39 +#: src/UI/modals/ConfirmModal/Dialog.tsx:43 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:302 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:245 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:133 +msgid "Confirm" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:135 +msgid "Confirm Failed" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:74 +msgid "Confirm Risk Warning" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:90 +msgid "Confirm this transaction in your wallet" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:134 +msgid "Confirming" +msgstr "" + +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:127 +#: src/UI/components/TokenTransactionConfirmModal/index.tsx:152 +msgid "Congratulations!" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:185 +#: src/UI/components/PersonaSelectPanel/index.tsx:196 +msgid "Connect {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:176 +msgid "Connect and Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:95 +msgid "Connect Persona" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:170 +#: src/UI/components/WalletConnectedBoundary/index.tsx:57 +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:216 +#: src/UI/components/WalletStatusBar/PluginWalletStatusBar.tsx:105 +#: src/UI/components/WalletStatusBox/index.tsx:144 +#: src/UI/modals/SelectProviderModal/SelectProvider.tsx:96 +msgid "Connect Wallet" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:143 +msgid "Connect with {providerName}" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:178 +msgid "Connect your wallet" +msgstr "" + +#: src/UI/components/WalletStatusBar/PluginVerifiedWalletStatusBar.tsx:197 +msgid "Connected wallets settings" +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:158 +#: src/UI/components/CoinMetadataTable/index.tsx:264 +msgid "Contract" +msgstr "" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copied!" +msgstr "" + +#: src/UI/components/CopyButton/index.tsx:74 +msgid "Copy" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:46 +#: src/UI/components/PersonaSelectPanel/index.tsx:110 +msgid "Create persona" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:87 +msgid "Create Persona" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:176 +msgid "Current base fee is {0} Gwei" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:256 +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:377 +#: src/UI/components/SettingsBoard/GasSection.tsx:99 +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:91 +msgid "Custom" +msgstr "" + +#: src/UI/components/AccountIcons/index.tsx:78 +#: src/UI/components/SocialAccountList/SocialTooltip.tsx:27 +msgid "Data source is retrieved from {0}." +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:141 +msgid "Default" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:92 +msgid "Details" +msgstr "" + +#: src/UI/components/WalletStatusBox/index.tsx:221 +msgid "Disconnect" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/contexts/components/InjectedDialog.tsx:240 +msgid "Dismiss" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:123 +msgid "Do you want to set MASK token as gas fee?" +msgstr "" + +#: src/UI/components/CompositionDialog/PluginEntryRender.tsx:108 +msgid "Domain Request" +msgstr "" + +#: src/hooks/useSnackbarCallback.tsx:40 +#: src/hooks/useSnackbarCallback.tsx:89 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:140 +msgid "Done" +msgstr "完成" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:63 +msgid "Download {name} Wallet here" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:124 +msgid "Drag & Drop your file here" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:208 +msgid "DSearch" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:343 +msgid "Edit" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Editor" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:81 +msgid "Enable {name} Wallet extension and disable other browser extension wallets" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:51 +msgid "Enable plugin" +msgstr "" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:163 +msgid "Encrypt" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:246 +msgid "ENS or Wallet Address" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:31 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:135 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:132 +msgid "Enter a gas limit" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:38 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:137 +msgid "Enter a gas price" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:81 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:144 +msgid "Enter a max fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:58 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:142 +msgid "Enter a max priority fee" +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:75 +msgid "Enter an amount" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:92 +msgid "Failed" +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:122 +msgid "Failed to load {0}. Click to retry." +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:82 +msgid "Failed to load MASK. Click to retry." +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Failed to report spam." +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:236 +msgid "Follow" +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:235 +msgid "Following" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:193 +msgid "Fortmatic only supports the ETH and BNB chain." +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:361 +msgid "Gas Fee" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSettingModal.tsx:41 +msgid "Gas fee settings" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:231 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:249 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:215 +msgid "Gas Limit" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:138 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:135 +msgid "Gas limit must be at least {0}" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:34 +msgid "Gas limit too low will cause the transaction to fail." +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:200 +#: src/UI/components/SettingsBoard/GasSection.tsx:92 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:222 +msgid "Gas Price" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:54 +msgid "Gas price is higher than necessary. You may pay more than needed." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:46 +msgid "Gas price is too low for network conditions." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:39 +msgid "Gas price must be greater than 0 Gwei." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:231 +msgid "Get optimized search results when you look for a token." +msgstr "" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:36 +msgid "Go to Settings" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:193 +#: src/UI/components/SettingsBoard/GasForm.tsx:261 +#: src/UI/components/SettingsBoard/GasForm.tsx:299 +msgid "Gwei" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:258 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:278 +msgid "GWEI" +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:96 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:119 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:118 +msgid "High" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:56 +msgid "How to use {0} Wallet?" +msgstr "" + +#: src/UI/components/FungibleTokenList/FungibleTokenItem.tsx:162 +msgid "Import" +msgstr "導入" + +#: src/UI/components/AddCollectibles/index.tsx:164 +#: src/UI/components/FungibleTokenList/index.tsx:271 +msgid "Incorrect contract address." +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:148 +#: src/UI/components/CoinMetadataTable/index.tsx:255 +msgid "Info" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:246 +msgid "Input contract address" +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:95 +msgid "Instant" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:96 +msgid "Invalid Network" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useSlippageToleranceSchema.ts:18 +msgid "Invalid slippage tolerance." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:116 +msgid "Listed" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:20 +#: src/UI/components/ReloadStatus/index.tsx:46 +msgid "Load failed" +msgstr "" + +#: src/UI/components/LoadingStatus/index.tsx:40 +msgid "Loading" +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:86 +msgid "Loading...." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:109 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:108 +msgid "Low" +msgstr "" + +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:127 +msgid "Manage Token List" +msgstr "" + +#: src/UI/components/FungibleTokenList/ManageTokenListBar.tsx:32 +msgid "Manage Token Lists" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:70 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:146 +msgid "Market Cap" +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:69 +msgid "Mask Network" +msgstr "" + +#: src/UI/components/GrantPermission/index.tsx:27 +msgid "Mask Network requires you to authorize the following websites before using it." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:276 +msgid "Max fee" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:306 +msgid "Max Fee" +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:147 +msgid "Max fee cannot be lower than max priority fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:100 +msgid "Max fee cannot be lower than max priority fee." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:96 +msgid "Max fee is higher than necessary." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:88 +msgid "Max fee is too low for network conditions." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:256 +msgid "Max priority fee" +msgstr "" + +#: src/UI/components/SettingsBoard/GasForm.tsx:272 +msgid "Max Priority Fee" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:77 +msgid "Max priority fee is higher than necessary. You may pay more than needed." +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:66 +msgid "Max priority fee is too low for network conditions." +msgstr "" + +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:143 +msgid "Max priority fee must be greater than 0 GWEI" +msgstr "" + +#: src/UI/components/SettingsBoard/hooks/useGasSchema.ts:59 +msgid "Max priority fee must be greater than 0 Gwei." +msgstr "" + +#: src/UI/components/SettingsBoard/Context.tsx:97 +#: src/UI/modals/GasSettingModal/GasSetting1559.tsx:114 +#: src/UI/modals/GasSettingModal/Prior1559GasSetting.tsx:113 +msgid "Medium" +msgstr "" + +#: src/UI/components/PhoneNumberField/index.tsx:29 +msgid "Mobile Number" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:72 +msgid "More" +msgstr "" + +#: src/UI/components/FungibleTokenList/index.tsx:341 +msgid "Name or Contract address e.g. USDC or 0x234..." +msgstr "代幣名稱或合約地址" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:191 +msgid "Name or Contract address eg.PUNK or 0x234..." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:124 +msgid "Network error or user cancels the process." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:236 +msgid "NFTs" +msgstr "" + +#: src/UI/components/CollectibleList/CollectibleList.tsx:112 +msgid "No collectible found." +msgstr "" + +#: src/UI/components/EmptyStatus/index.tsx:32 +msgid "No Data" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:89 +msgid "No Enough Gas Fee" +msgstr "" + +#: src/UI/components/AssetsManagement/CollectionList.tsx:241 +#: src/UI/components/AssetsManagement/CollectionList.tsx:342 +msgid "No NFTs found." +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:319 +#: src/UI/components/CountryCodePicker/index.tsx:145 +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:208 +msgid "No results" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:78 +msgid "Not select wallet yet." +msgstr "" + +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "OK" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:196 +msgid "Only supports EVM chains, ETH, BNB chain, Polygon, Arb, Op, etc." +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:155 +msgid "Only TypedMessageText is supported currently." +msgstr "" + +#: src/UI/wallet/DeriveWalletTable.tsx:134 +msgid "Operation" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:212 +msgid "Optimize search results with token names, NFT collections, ENS domains or wallet addresses." +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:132 +msgid "or" +msgstr "" + +#: src/UI/components/WalletStatusBar/WalletDescription.tsx:125 +#: src/UI/components/WalletStatusBox/TransactionList.tsx:90 +msgid "Pending" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:45 +#: src/UI/components/PersonaSelectPanel/index.tsx:109 +#: src/UI/modals/PersonaSelectPanelModal/PersonaSelectPanelDialog.tsx:74 +msgid "Persona" +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:189 +msgid "Phantom only supports the Solana chain." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:178 +msgid "Please connect {0} and send proof post before using dApps." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:186 +msgid "Please connect {0} before using dApps." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:266 +msgid "Please connect your persona" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:261 +msgid "Please connect your wallet" +msgstr "" + +#: src/hooks/useCurrentPersonaConnectStatus.ts:44 +#: src/UI/components/PersonaSelectPanel/index.tsx:108 +msgid "Please create a Persona and verify your account to use this function." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:264 +msgid "Please create a persona for accessing Dapps." +msgstr "" + +#: src/UI/components/ProfileTabContent/WalletSettingsEntry.tsx:30 +msgid "Please select the wallet to activate the function after saving the settings." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:189 +#: src/UI/components/ChainBoundary/index.tsx:206 +msgid "Please switch to this network in the mobile application wallet you are connected to." +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:192 +msgid "Please verify current persona with social media account before using dApps." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoard.tsx:268 +msgid "Please verify your social account" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationBoardDialog.tsx:111 +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingsDialog.tsx:52 +msgid "Plug-in switch" +msgstr "" + +#: src/UI/components/CompositionDialog/CompositionUI.tsx:145 +msgid "Plugins" +msgstr "" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:245 +#: src/UI/components/VerifyNextIDDialog/index.tsx:265 +msgid "Post content:" +msgstr "" + +#: src/UI/components/MaskPluginWrapper/index.tsx:109 +#: src/UI/components/PluginCardFrame/index.tsx:67 +msgid "Powered by" +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:61 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:137 +msgid "Price Statistic" +msgstr "" + +#: src/UI/components/CompositionDialog/BadgeRenderer.tsx:49 +msgid "Provided by plugin \"{0}\"" +msgstr "" + +#: src/UI/components/LoadRetry/index.tsx:24 +#: src/UI/components/ReloadStatus/index.tsx:48 +msgid "Reload" +msgstr "" + +#: src/UI/modals/SelectProviderModal/GuideDialog.tsx:95 +msgid "Remove" +msgstr "" + +#: src/hooks/useReportSpam.tsx:63 +msgid "Report NFT Scam Contract?" +msgstr "" + +#: src/hooks/useReportSpam.tsx:74 +msgid "Report Spam" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:174 +msgid "Requesting Connection" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:152 +msgid "Reset" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:189 +msgid "Retry" +msgstr "" + +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:92 +#: src/UI/modals/WalletRiskWarningModal/WalletRiskWarning.tsx:101 +msgid "Risk Warning" +msgstr "" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:85 +msgid "Scan QR code with a WalletConnect-compatible wallet" +msgstr "" + +#: src/UI/components/CountryCodePicker/index.tsx:112 +msgid "Search Area" +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:249 +msgid "Search with an ENS domain or wallet address to get optimized results." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:239 +msgid "Search with the name of an NFT collection or its symbol to get optimized results." +msgstr "" + +#: src/UI/components/SelectTokenChip/index.tsx:60 +#: src/UI/modals/SelectFungibleTokenModal/SelectFungibleTokenDialog.tsx:128 +msgid "Select" +msgstr "選擇一種代幣" + +#: src/UI/components/FungibleTokenInput/UI.tsx:221 +msgid "Select a token" +msgstr "" + +#: src/UI/components/ERC721ContractSelectPanel/index.tsx:96 +msgid "Select an NFT" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:43 +msgid "Select an NFT Contract" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:45 +msgid "Select an NFT Contract Operator" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:44 +msgid "Select an NFT Contract Owner" +msgstr "" + +#: src/UI/modals/SelectNonFungibleContractModal/SelectNonFungibleContractDialog.tsx:185 +msgid "Select Collection" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:335 +#: src/UI/components/AssetsManagement/Collection.tsx:147 +#: src/UI/components/AssetsManagement/CollectionList.tsx:286 +#: src/UI/components/VerifyNextIDDialog/index.tsx:287 +msgid "Send" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:89 +#: src/UI/modals/TokenTransactionConfirmModal/TokenTransactionConfirm.tsx:26 +msgid "Share" +msgstr "" + +#: src/UI/components/UploadDropArea/index.tsx:128 +msgid "Size limit: 10 MB" +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceSection.tsx:26 +msgid "Slippage Tolerance" +msgstr "" + +#: src/UI/components/TokenSecurity/index.tsx:93 +msgid "Spam" +msgstr "" + +#: src/UI/components/WalletStatusBox/TransactionList.tsx:91 +msgid "Success" +msgstr "" + +#: src/hooks/useReportSpam.tsx:76 +msgid "Successfully reported." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:109 +#: src/UI/components/ChainBoundary/index.tsx:121 +msgid "Switch Network" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:204 +msgid "Switch to {0}" +msgstr "" + +#: src/UI/components/CompositionDialog/TypedMessageEditor.tsx:179 +msgid "Tell selective friends what's happening..." +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:307 +msgid "The contract address is incorrect or the collection does not belong to you." +msgstr "" + +#: src/UI/modals/SelectProviderModal/PluginProviderRender.tsx:276 +msgid "The following wallets are not installed or in conflict with others" +msgstr "" + +#: src/UI/components/PluginEnableBoundary/index.tsx:39 +msgid "This function has been turned off in the App settings. Enable plug-ins to fully access." +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:190 +msgid "This network is not supported yet." +msgstr "" + +#: src/UI/contexts/components/ApproveMaskDialog.tsx:117 +msgid "To interact with Polygon network, MATIC tokens are required to pay as gas fees. SmartPay allow users to pay gas fee on Polygon network with MASK token." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginSwitch.tsx:228 +msgid "Token" +msgstr "" + +#: src/UI/components/AddCollectibles/index.tsx:280 +msgid "Token ID separated by comma, e.g. 1223,1224," +msgstr "" + +#: src/UI/components/FungibleCoinMarketTable/index.tsx:118 +#: src/UI/components/FungibleCoinMarketTable/index.tsx:178 +msgid "Total Supply" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:81 +msgid "Transaction" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:95 +msgid "Transaction Confirmed" +msgstr "" + +#: src/UI/components/SelectGasSettingsToolbar/index.tsx:337 +msgid "Transaction cost" +msgstr "" + +#: src/UI/modals/TransactionSnackbar/TransactionSnackbar.tsx:100 +msgid "Transaction Failed" +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:124 +msgid "Transaction with extremely low slippage tolerance might be reverted because of very small market movement." +msgstr "" + +#: src/UI/modals/ApplicationBoardModal/ApplicationSettingPluginList.tsx:120 +msgid "Unlisted" +msgstr "" + +#: src/hooks/useGasCurrencyMenu.tsx:96 +msgid "Unlock" +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:165 +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:100 +msgid "Unlock {0}" +msgstr "" + +#: src/UI/components/EthereumERC721TokenApprovedBoundary/index.tsx:59 +msgid "Unlocking {0}..." +msgstr "" + +#: src/UI/components/SettingsBoard/GasOption.tsx:80 +msgid "up to {0} Gwei" +msgstr "" + +#: src/UI/components/WalletConnectedBoundary/index.tsx:88 +msgid "Updating Gas Fee…" +msgstr "" + +#: src/UI/components/AssetsManagement/CollectibleItem.tsx:186 +#: src/UI/components/AssetsManagement/Collection.tsx:197 +#: src/UI/components/AssetsManagement/CollectionHeader.tsx:67 +msgid "Verified by {0}" +msgstr "" + +#: src/UI/components/PersonaSelectPanel/index.tsx:190 +msgid "Verify {0}" +msgstr "" + +#: src/UI/components/ConnectPersonaBoundary/index.tsx:102 +msgid "Verify your Twitter ID" +msgstr "" + +#: src/UI/components/SocialAccountList/SocialListItem.tsx:233 +msgid "View" +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:67 +#: src/UI/components/WalletStatusBox/index.tsx:187 +msgid "View on Explorer" +msgstr "" + +#: src/UI/modals/WalletStatusModal/WalletStatusDialog.tsx:45 +msgid "Wallet Account" +msgstr "" + +#: src/UI/modals/WalletConnectQRCodeModal/QRCodeDialog.tsx:77 +msgid "WalletConnect" +msgstr "" + +#: src/UI/components/VerifyNextIDDialog/index.tsx:256 +#: src/UI/components/VerifyNextIDDialog/index.tsx:269 +msgid "We will need to verify your Twitter account and record it on the NextID. Please post it for validation." +msgstr "" + +#: src/UI/components/PluginCardFrame/index.tsx:56 +msgid "Web3 Profile" +msgstr "" + +#: src/UI/components/CoinMetadataTable/index.tsx:104 +#: src/UI/components/CoinMetadataTable/index.tsx:274 +msgid "Website" +msgstr "" + +#: src/UI/components/ChainBoundary/index.tsx:155 +msgid "Wrong Network" +msgstr "" + +#: src/UI/modals/ConnectWalletModal/index.tsx:178 +msgid "You canceled the request." +msgstr "" + +#: src/UI/components/SettingsBoard/SlippageToleranceForm.tsx:131 +msgid "You may have {0}% less received with this level of slippage tolerance." +msgstr "" + +#: src/UI/components/EthereumERC20TokenApprovedBoundary/index.tsx:147 +msgid "You must give the {0} smart contract permission to use your {1}. You only have to do this once per token." +msgstr "" + +#: src/hooks/useOpenShareTxDialog.tsx:84 +msgid "Your transaction was confirmed!" +msgstr ""