Fora
Stop deferring
international.
The content that isn't feasible to translate manually — product listings, reviews, any user-generated content — localized automatically as it's written to your database. No application code changes.
Images
Translate text inside your images.
Text is replaced in place — preserving font style, color, and background. Works for storefront signs, product banners, menu boards, and any image with visible text.
Original

German

Spanish

French

Italian

Portuguese

Text
Translate any text field as it's written to your database.
Define which fields should be translated — Fora watches for new and updated rows and keeps every locale in sync.
English
Spanish
Configuration
One file. One command.
Point fora.yaml at your tables. The agent handles translation, storage, and view creation. No schema changes. No application code changes.
fora.yaml
name: my-app
connection_string: postgres://app:pass@db:5432/myapp
config:
target_locales: [de, es, fr, it, pt-BR]
create_views: true
tables:
- table: products
id_column: id
fields: [name, description]
image_fields: [hero_image_url]
filter: "status = 'active'"
- table: reviews
id_column: id
fields: [body]
s3:
bucket: my-app-i18n
region: us-east-1Run the agent
docker run ghcr.io/getfora/fora-agent:latest \ -e FORA_API_KEY=$FORA_API_KEY \ -v $(pwd)/fora.yaml:/config.yaml:ro
Query as normal
SET LOCAL fora.locale = 'es'; SELECT * FROM products_localized;
Connectors
Works with your stack.
Use the REST API directly, or deploy the agent to sync your database automatically. More connectors are in development.
POST /v1/translate with text or image URLs. Receive results via webhook or poll for them. No connector needed.
Read the docs →Reads existing tables, creates locale-transparent views. Zero schema changes. Runs in your VPC.
Read the docs →Same view model, same zero-overhead queries.
Per-document locale fields via the change stream.
Why it's different
Translation happens before the request.
Not during it.
When content is written to your database, Fora translates it in the background. By the time a user or crawler asks for it, the translation is already in Postgres — your app just runs a query. Built for volume and coverage — ship to five languages in a day and keep every locale current as content is added.
Works on dynamic content
Localizes live database rows as they're written — posts, listings, reviews, any UGC. Not just static string files that require a deploy to update.
Zero overhead at read time
Translations are pre-computed and stored in your database. Reads are pure SQL — no AI APIs on the hot path, no added latency, no rate limits.
SEO-ready by default
Translated content renders server-side from your database. Crawlers see real localized pages — not a JavaScript overlay, not a translation proxy.
Scope
The right tool for the right content.
Built for
- +Product listings and catalog descriptions
- +Customer reviews and user-generated content
- +Menus, signage, and image text
- +Marketplace content that updates continuously
- +Teams entering new markets without a localization headcount
Not built for
- —Legal agreements and contracts
- —Medical or regulatory content requiring certified accuracy
- —Marketing and brand copy where tone is everything
- —Static UI strings (buttons, navigation, form labels) — pair with i18next or FormatJS for those