Skip to content
wyllet
  • Docs
  • Features
  • Playground
  • Blog
  • Docs
  • Features
  • Playground
  • Blog
  • Compare
  • Changelog
GitHub @wylletdevnpm Support
esc
  • IntroductionWhat Wyllet is, what it includes, and how it fits into a wagmi + viem dApp.
  • InstallationInstall Wyllet and its peer dependencies, and enable WalletConnect.
  • Quick startAdd a working connect button to a React dApp in a few minutes.
  • Next.jsUse Wyllet with the Next.js App Router, server components and SSR.
  • Build with AI assistantsGive Cursor, Claude Code, Copilot or ChatGPT the Wyllet docs and the rules for a correct integration.
  • ConfigurationCreate a wagmi config with getDefaultConfig: app info, chains, transports and wallets.
  • WylletProviderEvery WylletProvider prop: theme, appearance, tokens, auth, messages and callbacks.
  • WylletButtonThe Island button, its display options, and building your own trigger with useWylletButton.
Overview

Getting started

  • Introduction
  • Installation
  • Quick start
  • Next.js
  • Build with AI assistants

Core concepts

  • Configuration
  • WylletProvider
  • WylletButton
  • Presentations

Customization

  • Theming
  • Class names
  • Translations

Wallets

  • Wallets
  • All wallets
  • WalletConnect

Chains and tokens

  • Chains
  • Tokens

Features

  • Account panel
  • Activity and transactions
  • Toasts
  • Sign-In With Ethereum
  • ConnectGate

Reference

  • Hooks
  • Components
  • Utilities and types

Guides

  • Security
  • Migrate from RainbowKit
  • FAQ
wyllet

The open-source wallet connector for React dApps. Built on wagmi and viem.

MIT licensed. v1.1.0 on npm with provenance.

Product

  • Features
  • Compare
  • Playground
  • Changelog
  • Blog

Docs

  • Quick start
  • Next.js
  • Build with AI
  • Theming
  • Migrate from RainbowKit

Community

  • GitHub
  • X @wylletdev
  • npm
  • Releases
  • Report an issue

Support

  • support@wyllet.dev
  • FAQ
  • Security
  • Report a vulnerability
  • MIT License

For AI agents

  • llms.txt
  • llms-full.txt
  • RSS feed
  • Sitemap

Wallet, network and token names and logos are trademarks of their respective owners and are used only to identify them.

Docs/Customization

Translations

Rename any string or translate the entire interface.

View .mdReport a problem

Every string in Wyllet's interface comes from a messages object. Pass a partial object to the messages prop to rename a few labels or to translate the whole interface.

Renaming strings

Pass only the keys you want to change. Every other key keeps its English default.

<WylletProvider
  messages={{
    connect: 'Sign in',
    connectTo: 'Sign in to {app}',
    disconnect: 'Log out',
  }}
>

The label prop on <WylletButton> overrides the button's disconnected text for that one button, without changing connect elsewhere.

The en object

The English strings are exported as en, and their type as Messages. Use them as the reference list of keys, or as a base for your own translation.

import { en, type Messages } from 'wyllet'
 
console.log(Object.keys(en)) // every key Wyllet uses

Typing a translation as Partial<Messages> gives you autocomplete and catches misspelled keys. Typing it as Messages makes TypeScript list any key you have not translated yet.

Placeholders

Some strings contain placeholders in curly braces, such as {name}. Wyllet replaces them with the actual value when it renders the string. Keep the placeholder in your translation, in whatever position the sentence needs.

PlaceholderValueKeys
{app}Your app nameconnectTo
{name}A wallet namecontinueWith, requesting, openWallet, scanWith, getWallet, getWalletShort, getWalletDescription, activityConnected
{name}The shortened addressconnectedAs
{name}A chain nameactivitySwitched
{network}The current chain namenoTokens, receiveNote, lookingUpToken, notAToken
{symbol}A token symboltokenExists, importAction, tokenImported
{query}The search textnoWalletsFound, directoryEmpty
{count}Number of wallets in the directorydirectorySearch
{n}Minutes or hoursminutesAgo, hoursAgo
{terms}, {privacy}Links built from the terms and privacy stringstermsNotice

termsNotice is shown only when appInfo.termsUrl and appInfo.privacyUrl are both set. Wyllet turns {terms} and {privacy} into links labeled with your terms and privacy strings.

A placeholder with no value is left in the text as written.

A Spanish example

A partial translation that covers the button, the main connect screens and the account panel:

i18n/es.ts
import type { Messages } from 'wyllet'
 
export const es: Partial<Messages> = {
  // Button
  connect: 'Conectar',
  connecting: 'Conectando',
  verify: 'Verificar',
  wrongNetwork: 'Red incorrecta',
  close: 'Cerrar',
  back: 'Atrás',
 
  // Connect panel
  connectTo: 'Conectar a {app}',
  continueWith: 'Continuar con {name}',
  lastUsed: 'Último usado',
  detected: 'Detectadas',
  allWallets: 'Todas las billeteras',
  searchWallets: 'Buscar billeteras…',
  noWalletsFound: 'Nada coincide con “{query}”',
  scanWithPhone: 'Escanear con el móvil',
  noWallet: 'No tengo una billetera',
 
  // Connecting
  requesting: 'Esperando a {name}',
  confirmInWallet: 'Aprueba la solicitud de conexión en tu billetera para continuar.',
  requestRejected: 'Solicitud rechazada',
  tryAgain: 'Reintentar',
  connected: 'Conectado',
 
  // Account panel
  copyAddress: 'Copiar',
  receive: 'Recibir',
  explorer: 'Explorador',
  disconnect: 'Desconectar',
  tabTokens: 'Tokens',
  tabActivity: 'Actividad',
  tabNetworks: 'Redes',
  noTokens: 'No hay saldos de tokens en {network}.',
  noActivity: 'Tu actividad aparecerá aquí.',
  minutesAgo: 'hace {n} min',
  hoursAgo: 'hace {n} h',
}
providers.tsx
import { es } from './i18n/es'
 
<WylletProvider messages={es}>{children}</WylletProvider>

Keys you leave out fall back to English, so you can translate incrementally.

Switching language at runtime

messages is a regular prop, so switching language is a matter of passing a different object:

import { es } from './i18n/es'
 
const translations = { en: undefined, es }
 
<WylletProvider messages={translations[locale]}>{children}</WylletProvider>

Define translation objects outside your components, as above, so the same object is passed on every render.

Entries in the activity timeline store their text when they are created. Changing the language later does not rewrite entries that already exist.

Related

  • WylletProvider
  • WylletButton
  • Activity
PreviousClass namesNextWallets

On this page

  • Renaming strings
  • The en object
  • Placeholders
  • A Spanish example
  • Switching language at runtime
  • Related