Bilingual sites
One project is one language. Two projects, one theme, a link between them.
A JustJSON project holds one language. The lang setting only writes <html lang> — there is no locale dimension in the schema, no /en/ routing and no language switcher.
Locale variants are on the roadmap, and they are a large change: a translation layer touches the schema, the editor, publishing and every theme. Until that lands, the recipe below covers the common case — a restaurant, clinic or studio that wants a second language for visitors.
The recipe
Run two projects side by side:
my-site/
tr/ # npx @kdrgny/justjson → content/, _schema.json
en/ # npx @kdrgny/justjson → content/, _schema.json
- Build the schema in the first project, then copy its
_schema.jsoninto the second. Both sides stay structurally identical, so the same theme renders both. - Pick the same theme in both, with the same accent. The two sites read as one brand.
- Add a url field to the contact singleton in each project — label it with the language it points at (
English,Türkçe). Every theme carries contact links in its footer, so the link appears without touching a template. Some themes also show the first few in the header; put the language field first in the singleton if you want it up there. - Publish each project to its own site, or to two paths of one domain (
example.comandexample.com/en).
What not to do
Do not translate inside a record — title_en next to title breaks every theme. Themes bind to slots (title, lead, cover, body), not to field names, which is what lets one theme render any schema. A per-language field set takes that away and the theme has to know your language keys.
If you keep both sides in one repository, commit them as two folders. Each has its own content/ and its own build; nothing is shared but the schema and the theme.