# Localized images: one design in every language, from one template

> Render the same social card, banner or OG image in every language you sell in, from one template and your translations: text length, dates, fonts, RTL.

Published 2026-11-07 · https://shareglint.com/en/use-cases/localized-images

A product launch in five markets means the same announcement card five times, in five languages; an online shop in four countries needs every sale banner four times. Designing each version by hand multiplies the work by the number of languages — and the versions drift apart. With Shareglint the design is one template and each language is one set of values: the layout stays identical, only the words change, and a new language is a new row, not a new design.

## One template, a row per language

The pattern is the same for any template. Put your translated strings in a table — one row per language — and render them as a batch:

```bash
curl -X POST "https://shareglint.com/v1/batches" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "template": "feature-announcement",
    "sizes": ["og", "square"],
    "rows": [
      { "id": "en", "filename": "launch-en", "eyebrow": "New", "title": "Invoices now sync with your bank", "description": "Connect once, reconcile automatically." },
      { "id": "de", "filename": "launch-de", "eyebrow": "Neu", "title": "Rechnungen werden jetzt mit Ihrer Bank synchronisiert", "description": "Einmal verbinden, automatisch abgleichen." },
      { "id": "pl", "filename": "launch-pl", "eyebrow": "Nowość", "title": "Faktury synchronizują się teraz z bankiem", "description": "Połącz raz, uzgadniaj automatycznie." }
    ]
  }'
```

Each row × size is one image; `GET /v1/batches/{id}` returns every URL with your `id`, and the ZIP holds files named by `filename`. Rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000. The same works one request at a time from your CMS — one call per locale when an article is translated.

## Text gets longer, and the template copes

Translations are rarely the length of the original: German and Polish headlines often run longer than English ones, Chinese and Japanese much shorter. The built-in templates shrink long titles to fit their box instead of letting them run off the image, and short ones keep their size. In your own HTML template, the same `data-autofit` box does it — the [API reference](https://shareglint.com/en/docs/api) shows the markup. Check the longest translation once in the free template preview before rendering a campaign.

Two practical habits:

- **Give translators a character budget** for headlines on images, separate from the web copy. A card headline of 60 characters in English can easily become 75 in German; at 120 it stops being readable at thumbnail size in any language.
- **Keep numbers and names in their own fields** (price, date, product name), so translators only touch the sentences.

## Dates, numbers and labels

Some built-in templates write text themselves — a reading time, a formatted date. The `locale` parameter sets the language for that text: en, pl, de, es, fr. Everything else on the image is the text you send, so format prices and dates the way each market reads them before sending — `€1.299,00` in Germany, `1 299,00 zł` in Poland, `$1,299.00` in the US. Most languages' standard libraries do it (`Intl.NumberFormat` in JavaScript, `NumberFormatter` in PHP, `babel` in Python).

## Fonts and scripts

Text renders with the fonts installed on our renderer (`GET /v1/fonts`): Roboto, Open Sans, Ubuntu and DejaVu cover Latin, Greek and Cyrillic; Noto Sans CJK covers Chinese and Japanese; Noto Color Emoji covers emoji. You cannot upload a font file, so text in a language your chosen family does not cover is drawn in another installed font, and a script none of them covers cannot render — check one card per script before a campaign.

**Right-to-left languages** need a layout that reads right to left, not only text that does. Chrome lays out `dir="rtl"` text correctly, so your own templates can be written for Arabic or Hebrew; the built-in templates are designed left to right. Copy one into your account, add `dir="rtl"` and mirror its layout, and check that the installed fonts cover your script. The W3C's [guide to RTL markup](https://www.w3.org/International/questions/qa-html-dir) explains the details.

## Localised link previews

For a multilingual site, each language version of a page should have its own `og:image` with the translated title. A signed URL in the page template does it without any extra work: it is computed from the page's own title in its language, so every locale gets its card the first time it is shared ([signed image URLs](https://shareglint.com/en/guides/signed-image-urls)). The `og:locale` tag tells networks which language the page is in ([Open Graph protocol](https://ogp.me/)).

## Workflow with a translation system

If your translations live in a translation management system or in JSON files in your repository:

1. Export the strings for the image — a headline key, a subtitle key — per language.
2. Build one batch row per language from them.
3. Render, then attach the image URLs to each language's post or page.

A content change in one language re-renders only that language: the other rows have the same values as before and come back from cache, free.

## Checking a campaign before it goes out

Before a launch in several languages, render one image per language in a single size and look at them side by side: the longest headline, the script that differs most from the others, a language with diacritics. Ten minutes of checking catches the translation that is too long for the card, the missing glyph and the date in the wrong format. Then render the full set of sizes. The check costs one render per language, and the final batch reuses the same values, so the checked size is already done.

## Cost

One render per image, size and language; repeats are free. A launch in five languages and two sizes is 10 renders; a weekly sale banner in four markets and three sizes is about 50 a month. The Free plan's 100 renders carry a watermark; Starter is $9 a month for 2,000 renders ([pricing](https://shareglint.com/en/pricing)).

## What it does not do

- It does not translate. Send translated text from your own process or translator.
- It does not mirror built-in templates for right-to-left languages; your own copy does.
- It does not take font uploads; scripts none of the installed families cover cannot be rendered.

## FAQ

### How do I make the same image in several languages?

Keep one template and send each language's text as its own request or as a row in a batch, with a filename per language. The layout stays identical; only the words change. Set locale for dates and labels the template writes itself.

### Does the API translate the text?

No. You send the translated text, from your translation files, CMS or translator. The template lays it out; long translations shrink to fit their box.

### Which languages and scripts are supported?

Any text you send renders with the installed fonts, which cover Latin, Greek, Cyrillic, Chinese and Japanese, plus colour emoji. Dates and labels the built-in templates write themselves are available in en, pl, de, es, fr.

### Can templates be right-to-left?

Your own templates can: write them with dir set to rtl and the browser lays the text out right to left. The built-in templates are designed left to right, so for Arabic or Hebrew copy one into your account and mirror its layout.
