Home Using globalize.now Translate your blog, docs and other Markdown pages

Translate your blog, docs and other Markdown pages

Last updated on Sep 28, 2026

globalize.now translates Markdown and HTML pages straight from your repository, the same way it keeps locale files translated. A push to a watched branch that changes a page opens a pull request with the translated pages. Code fences, link targets, image paths and tables come back exactly as you wrote them. Only the prose changes.

Set it up

  1. Keep one file per language, for example content/blog/my-post/en.md next to content/blog/my-post/de.md. When you connect the repository, detection proposes a pattern for this layout, with one namespace per page. It works before a second language exists.
  2. To add or change the pattern yourself, open your project's repository settings, add a locale path pattern such as content/blog/{namespace}/{locale}.md, and set its file format to Markdown or HTML.
  3. Run a manual job from the project dashboard, or push a change to a watched branch. The job translates every page the pattern matches.

Choose which front-matter fields get translated

A Markdown pattern translates title and description by default. Open the pattern to change the list:

  • seo.title reaches a field nested inside seo:.
  • keyTakeaways[] claims every item of a list. faqs[].question and faqs[].answer claim every entry, and a question stays paired with its answer in review.
  • tags.*.name claims every key of a map.
  • Lists you don't claim, such as tags, are never translated, so nothing you use for routing or filtering changes.

The pattern also offers the paths your pages were last seen to carry, with how many pages carry each one and a few sample values. Pick one to add it. Adding a field later translates just that field on the next sync. Nothing already translated is paid for again.

Mark fields inside the page itself

A page can adjust the pattern for itself with a globalize: comment on the field's line or the line above it:

---
# globalize: {comment: "Shown in search results; keep it punchy"}
title: Pricing plans
slug: pricing        # globalize: ignore
seo:
  # globalize: translate
  title: Plans and pricing
---

translate claims a field the pattern skips, and ignore holds one back. ignore always wins. comment gives the translator context for that field, and max-length: 60 gives it a length budget that is checked the same way as a limit declared in an XLIFF file. Comments also work on uploaded files and on jobs started through the MCP server or the API. If we can't read a comment, the job's page lists the file and field instead of skipping it silently.

Callouts and embeds

If your site renders directives such as :::note, :note[…] or ::youtube{…}, tick Directive syntax on the pattern. Text inside a :::note block and the label of :note[…] are then translated, while markers, ids and URLs are never touched. To translate an attribute as well, list it below the checkbox with its marker, for example :::note.title or ::youtube.title. No attribute is translated unless you list it.

Leave the box off if your site doesn't use directives. Turning it on translates the affected pages fresh once.

Review translated pages

In a job's units list, each page renders as a document and each front-matter field has its own row. Compare opens a page full screen with the source and the translation side by side, block by block. Click a block to open its review panel. Switch Preview off to read the raw Markdown, which is where a broken link shows up.