Multilingual site languages
In Settings → General → Site Languages, set your primary language and which locales to publish; under Settings → Integrations → Translation pick DeepL, Gemini, or OpenAI and paste your API key; add a Language Switcher to header or footer; then Generate and Publish extras from Page Settings → Languages—visitors stay on locale URLs while missing translations soft-fall to primary copy.
ArtInStack can publish your public site in more than one language. You choose a primary language (the default, unprefixed URLs) and optional extra locales. Visitors switch with a Language Switcher in your header or footer. Pages and posts get dedicated Languages controls for Generate, Preview, and Publish. Portfolios, products, and photo captions follow the same published locales; if a translation is missing, visitors still see the correct language chrome and soft-fall to primary text.
Publishing extra locales requires a plan with multilingual sites enabled. Primary language alone is available without that gate.
Prerequisites
Dashboard → Settings → General → Site Languages
Plan: multilingual sites enabled if you need more than the primary locale
Dashboard → Settings → Integrations → Translation — required before Generate. You can set locales and the switcher first; you cannot Generate page or post extras without a provider API key.
Implementation steps
1. Choose primary and published locales
- Open Settings → General.
- Under Site Languages, set Primary language (new pages and the default public locale use this).
- Under Published locales, add every language you want in the public switcher. Primary is always included.
- Save settings.
Without extras, the site stays monolingual on unprefixed URLs (for example /about). With extras such as French, visitors can open /fr/about, /fr/blog/…, /fr/portfolio/…, and /fr/photo/….
2. Choose a translation provider
Open Settings → Integrations → Translation. Pick a provider, paste your own API key (ArtInStack stores it encrypted and never shows it again after save), then save settings. Manual only is not enough for Generate—you need DeepL, Gemini, or OpenAI.
| Provider | Best for | How to get a key | Limits & notes |
|---|---|---|---|
| DeepL (recommended when available for your language pair) | Highest quality for many European languages | Create an API account at DeepL API and copy the authentication key | Plans and character quotas change—check DeepL’s current API plans. New Developer allowances are often a one-time character budget (commonly about 1 million characters total, not monthly); paid Growth-style plans add recurring volume. Confirm live limits in your DeepL console before a large site Generate. |
| Google Gemini | Low or no cost to start; fine for drafts you will review | Create an API key in Google AI Studio | Uses a fast, cost-efficient Gemini model in ArtInStack (not the heaviest “pro” models). Quality can trail DeepL on some pairs—always Preview before Publish. Free-tier Google quotas apply; see Google’s current AI Studio / Gemini API limits. |
| OpenAI | Already have an OpenAI account; flexible fallback | Create a key at OpenAI API keys | Uses a lightweight chat model suitable for site copy. Billed to your OpenAI account; set usage limits in their dashboard. |
Practical tip: Prefer DeepL for public-facing page and post Generate when your locales are supported and you have quota. Use Gemini to try multilingual cheaply or when DeepL does not fit. Keep OpenAI as an alternative if you already bill there. After Generate, always Preview—machine draft is a starting point, not a publish guarantee.
Character usage covers page/post Generate and automatic entity fills (portfolio names, product titles, captions, and similar) when extras are published. Large sites burn quota faster—Generate important pages first.
3. Add the Language Switcher
- Open Settings → Header & Footer → Edit on your default header (or footer).
- From Header Elements or Footer Elements, drop Language Switcher.
- Save the template.
The switcher lists your Published locales. It stays hidden when only one locale is published. Details: Header, footer, and navigation.
4. Translate a page (Generate → Preview → Publish)
- Open Pages → Edit the page.
- Keep editing primary copy on the Page Editor canvas (primary Publish still ships that locale).
- Open Page Settings → Languages.
- For each extra locale: Generate a draft (provider + key already set under Integrations → Translation), Preview, then Publish when ready.
- Unpublish an extra if you need to take that locale offline without deleting primary.
Extra page bodies that are not published return 404 on that locale URL (no silent English body under /fr/…). Meta title and description soft-fall to primary when locale SEO fields are empty.
Same pattern on Posts: open the post → Languages panel → Generate / Preview / Publish for extras (/blog/… primary, /{locale}/blog/… for extras).
5. Keep other content in sync (soft-fall)
Author portfolios, products, categories, and photo captions in the primary language. When extras are published and Translation keys are configured, updates can fill translation rows automatically. Until a row exists, public listings and photo pages show primary text with the visitor’s locale chrome (layout, buttons, breadcrumbs).
You do not need a separate “translate everything” checklist before going live with extras—publish the pages and posts that matter first, then fill the rest over time.
What you'll see
- Switcher offers each published locale (endonyms).
- Primary URLs stay unprefixed; extras use
/{locale}/…. - Published page/post extras render translated HTML; unpublished extras 404.
- Galleries, products, and photos keep locale paths; missing captions fall back to primary.
Troubleshooting & common pitfalls
| Issue | What to check |
|---|---|
| Cannot add published locales | Plan must include multilingual sites; primary alone always works |
| No Languages rows on a page | Add extras under Settings → Site Languages, then reopen Page Settings |
| Generate asks for an API key | Settings → Integrations → Translation — pick DeepL, Gemini, or OpenAI (not Manual only) and paste a key |
| Generate fails or stops mid-site | Provider quota exhausted or key invalid—check the provider console; DeepL Developer budgets are often one-time totals |
| Switcher missing on the live site | Template saved with Language Switcher; more than one published locale; republish or hard-refresh |
/fr/… page 404 | That page’s French locale is Missing or Draft—Publish under Languages |
| Title still in primary on a French photo | Expected soft-fall until a caption translation exists; chrome should still be French |
Verifying your setup
- Site Languages shows the intended primary and published locales.
- Integrations → Translation shows a machine provider with a key saved.
- Header or footer includes Language Switcher when extras are on.
- One page has an extra locale Live; its
/{locale}/…URL loads translated body. - Opening the same page without a published extra returns 404 (not primary HTML under the prefixed URL).
Related documentation
- Header, footer, and navigation — Language Switcher block
- Page settings and overrides — Page Settings tab
- Preview and publish — primary publish flow
- Page SEO settings — meta fields (Generate fills locale SEO from primary)
- Publish and update blog posts — posts and extras
