Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Multilingual and i18n support plugin for Jekyll blogs
Polyglot is an open-source Jekyll plugin tool that adds full multilingual (i18n) support to Jekyll blogs by building a separate static site for each configured language from a single codebase.
Polyglot is a Ruby gem (jekyll-polyglot) that extends Jekyll 3.0 and 4.0 to generate one site per language. It takes Jekyll posts and pages tagged with a lang frontmatter variable and outputs language-prefixed static sites (e.g. /fr/, /de/) with fallback content from a configured default language. The plugin is maintained by Samuel Volin and distributed under the MIT license.
Polyglot's distinguishing capabilities are its parallel builds, fallback handling, URL rewriting, and SEO automation.
Site.process to spawn a separate build process per language, so all language versions are generated simultaneously.default_lang, and the sitemap of every language site stays aligned with the default site's URLs.{% static_href %} block tag.{% I18n_Headers %} tag generates hreflang and canonical URLs, advertising only languages that actually have a translation._data/:lang/strings.yml and access them in layouts via site.data[site.active_lang].strings.site.projects._redirects rules, with an exclude_from_redirect_localization list.site.languages, site.active_lang, site.default_lang, page.rendered_lang, page.available_languages, page.missing_languages, and page.permalink_lang for menus and fallback detection.The intended users are Jekyll site owners and developers who need multilingual publishing without maintaining separate codebases.
hreflang tags, canonical URLs, and a single root sitemap.xml.These are the concrete publishing workflows Polyglot supports.
lang: sv frontmatter, and Polyglot builds a Swedish site version alongside the default.page.permalink_lang and site.languages to build language switcher links in any layout.page.missing_languages and page.rendered_lang to show "This page isn't translated yet" alerts._data/:lang/strings.yml and render them with site.data[site.active_lang].strings.Polyglot overwrites Jekyll::Site.process to spawn a separate process per language, each running the original Jekyll build with a specific language. Documents are matched to their translations via lang frontmatter and either identical permalinks or a shared page_id. After all languages finish building, Polyglot fires a :polyglot, :post_write hook exactly once.
Polyglot is free and open-source software released under the MIT license. You install it as a Ruby gem (gem install jekyll-polyglot) or via Bundler.
A known alternative in the Jekyll i18n space is jekyll-multiple-languages-plugin — an earlier plugin Polyglot was modeled after; Polyglot's author chose a different execution approach, focusing on parallel builds and automated URL rewriting.
Yes. Polyglot is distributed under the MIT license, so it can be used freely in personal and commercial Jekyll projects.
Polyglot currently supports Jekyll 3.0 and Jekyll 4.0. On Jekyll 4.0, SCSS source maps generate incorrectly, so the workaround is to set sass.sourcemap: never in _config.yml.
Polyglot works on Windows, but you must set parallel_localization: false in _config.yml, because Windows hosts can't run the per-language build processes in parallel.
Add a languages array to _config.yml, e.g. languages: ["en", "sv", "de", "fr"], plus a default_lang and your production url. Files not meant for sublanguage sites go in exclude_from_localization.
Polyglot pairs documents with the same lang frontmatter and identical permalinks. Alternatively, you can set a shared page_id in frontmatter to link translations that have different permalinks, and even generate redirects automatically when used with jekyll-redirect-from.
