Hype StackHypeStack

Search

Search the packs, templates, docs, and pages

Any language, one file each

Speak your users'
language.

Every string in the app and the admin is a typed Paraglide message. A new language is one JSON file, and anything you have not translated yet falls back to English.

HelloHolaこんにちは

messages/es.jsonsame app, one file each

how a language lands

From one file to every screen.

1

Declare it

One line in project.inlang/settings.json tells the whole workspace Spanish exists.

"locales": ["en", "es"]

2

Translate at your pace

Fill messages/es.json, plain JSON a translator can own. Ship at 60% done; the missing keys render in English until they arrive.

es.json82%
3

Even future features speak it

Packs merge their own copy into your catalog on install, so new features across all six apps arrive translatable, never hardcoded.

billing pack ✓teams pack ✓es everywhere
a language is one file

messages/es.json

you add this
Buenos días, Miathe whole product follows
How a language lands

One file per language. The whole product follows.

Nothing to wire. The catalog is already there, and every screen reads from it.

messages/en.jsonone file

"greeting":"Good morning, Mia"

"teams_page_title":"Teams"

"invite_cta":"Invite a member"

  • Dashboard
  • Teams
  • Billing

Good morning, Mia

Teams

Invite a member
1file per languageplain JSON
0frameworks to wiretyped Paraglide messages
enalways the fallbacknothing renders blank
Typed end to end

Strings that fail the build, not the user.

Your copy behaves like code: checked, versioned, impossible to half-ship.

  • A new market is a translation job

    All copy lives in one catalog. Hand over a file, not engineering time.

    TypeScriptone copy catalog
  • Broken copy can't ship

    A missing key stops the build, not the button.

    TypeScriptthe build fails, not the page
  • Half-done still ships

    Untranslated keys fall back to English.

    Falls back toen
  • Packs arrive translated

    Every pack merges its copy into your catalog.

    Merges intomessages/en.json
  • Menus translate too

    Navigation and settings screens stay translatable.

    Coverssidebar · settings
a new market, start to finish
  1. 1
    Register the locale

    "locales": ["en", "es"]

    One line in the project settings.

  2. 2
    Translate at your pace
    messages/es.json82%
    translatedfalls back to en

    Plain JSON a translator can own. Ship at 82%: the rest stays English.

  3. 3
    Every screen speaks it
    esappadminpacks

    The app, the admin and every pack you install later.

  • any

    Language you want, not a picker list

    locales is your array in project.inlang/settings.json. There is no supported-languages table.

    Español
    日本語
    Deutsch
    polski
    Українська
    Português
  • 1 file

    To add a whole language

    messages/<locale>.json beside the English one. Your locale files are never touched by installs.

    messages/pl.json

    app

    admin

    packs

  • 0

    Hardcoded strings in any pack

    Install merges each pack's messages into en.json, and re-running compose produces no diff.

    teams packmerged
    billing packmerged
    notifications packmerged

One JSON file.
The whole product follows.

enesjadepl

Feature packs to grow with

Every pack ships real source code: frontend, backend, and admin surfaces where the feature needs them. Add them when you need them, one command each.

Questions, answered

Yes. Everything lands as plain source in your repository: frontend, backend, admin, database schema. There is no runtime dependency on us and nothing phones home.

Ship in their language.

Start from the free starter, add locale files as your users arrive, and keep every string typed along the way.

any locale / typed messages / english fallback