Skip to main content
https://img.shields.io/github/license/inveniosoftware/invenio-i18n.svg https://github.com/inveniosoftware/invenio-i18n/workflows/CI/badge.svg https://img.shields.io/coveralls/inveniosoftware/invenio-i18n.svg https://img.shields.io/pypi/v/invenio-i18n.svg

Invenio-I18N provides the internationalization layer for InvenioRDM and other Invenio/Flask applications. It integrates the Babel/Flask-Babel stack, merges translation catalogs from multiple sources, exposes safe language-switch routes, and includes CLI tools to fetch from Transifex and distribute i18next-ready JSON for front-end use.

Features

  • Load and merge message catalogs from various locations.

  • Robust user-locale detection.

  • Secure views/endpoints for changing the active locale.

  • Jinja2 macros and filters for i18n in templates.

  • Fetch from Transifex, read PO files, and convert to/from i18next JSON for the browser.

  • Further documentation: https://invenio-i18n.readthedocs.io/

What it provides

  • Unified catalogs across locations. Merge translations from your app, entry-point packages, optional bundles, and extra paths. The multi-directory domain (via I18N_TRANSLATIONS_PATHS) keeps translations modular per feature while rendering as a single catalog.

  • Sensible locale selection. Language is chosen in this order: session → user preference → ``Accept-Language`` → default.

  • Language-switch views. A small blueprint persists the choice in the session and redirects back safely.

  • Jinja2 helpers. Macros (e.g., a language selector) and filters such as language_name plus timezone utilities.

  • Lazy strings. lazy_gettext() returns LazyString objects that resolve at render time—ideal for constants and form labels.

  • Front-end compatibility. Convert PO catalogs to i18next-style JSON or consume i18next JSON directly. Bundled Webpack entries ship minimal JS helpers for the selector; wire JSON into i18next with React, Angular, or plain JS.

How it fits together (high level)

  • Babel / Flask-Babel supply gettext, pluralization, and locale-aware formatting.

  • Merged “multidir” domain overlays catalogs from multiple directories; later sources override earlier ones so apps can override package defaults.

  • Jinja renders templates/macros for the language selector and localized UI.

  • i18n blueprint handles /lang (or your configured path) to set the session language and redirect back.

CLI commands

  • Fetch from Transifex → unified JSON

    invenio i18n fetch-from-transifex \
      -t <TRANSIFEX_TOKEN> -l "en,tr,de" -o js_translations/

    Pulls PO resources from Transifex, maps plurals, and writes per-language unified i18next JSON.

  • Distribute JSON back to packages

    invenio i18n distribute-js-translations -i js_translations/

    Splits each unified language file into per-package translations.json under the correct asset paths.

Key configuration (config.py)

  • I18N_LANGUAGES — available languages, e.g. [("en","English"),("tr","Türkçe")].

  • I18N_SET_LANGUAGE_URL — base URL for the language-switch routes (e.g., "/lang").

  • I18N_DEFAULT_REDIRECT_ENDPOINT — fallback endpoint after switching.

  • I18N_SESSION_KEY — session key storing the chosen language (default: "language").

  • I18N_USER_LANG_ATTR — user model attribute for a saved preference (e.g., "preferred_language").

  • I18N_TRANSLATIONS_PATHS — extra filesystem paths to include in the merged domain.

  • I18N_JS_DISTR_EXCEPTIONAL_PACKAGE_MAP — webpack-entry → package name fixes.

  • I18N_TRANSIFEX_JS_RESOURCES_MAP — maps Transifex resources to packages for JS translations.

Typical locale selection order: session → user profile → ``Accept-Language`` → ``BABEL_DEFAULT_LOCALE``.

Minimal setup

from flask import Flask
from invenio_i18n import InvenioI18N
from invenio_i18n.views import create_blueprint_from_app

app = Flask(__name__)
app.config.update(
    SECRET_KEY="dev",
    BABEL_DEFAULT_LOCALE="en",
    BABEL_DEFAULT_TIMEZONE="UTC",
    I18N_LANGUAGES=[("en", "English"), ("tr", "Türkçe")],
    I18N_SET_LANGUAGE_URL="/lang",            # enables the routes
    I18N_USER_LANG_ATTR="preferred_language", # if your User has it
)

InvenioI18N(app)                                    # init extension
app.register_blueprint(create_blueprint_from_app(app))  # language routes

Installation

Available on PyPI:

pip install invenio-i18n

Release files for invenio-i18n 4.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for invenio-i18n 4.0.2
File Size Uploaded
invenio_i18n-4.0.2.tar.gz 34.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for invenio-i18n 4.0.2
File Interpreter ABI Platform
invenio_i18n-4.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 117.7 kB

Release files / invenio_i18n-4.0.2.tar.gz

Download URL invenio_i18n-4.0.2.tar.gz
Size 34.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ffb0d12f58bf8d0b807e68e5c538b1ff9c3d5d4d942e2b310802f29b1b363f93
BLAKE2b-256 checksum
How to use checksums
bb30541dce79ffb7245ef8563fb86b8d66af5898f48c48aa247b2f876e8a842f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / invenio_i18n-4.0.2-py3-none-any.whl

Download URL invenio_i18n-4.0.2-py3-none-any.whl
Size 83.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07714e0d6afbb4a24c534fce3430f7e7d01559e838850809809a0acb18186019
BLAKE2b-256 checksum
How to use checksums
0d5372990285e566299643cf9634ad77e35d916fb139579c843c30c04c548ffa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release history Release notifications | RSS feed

This release

4.0.2 This release

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.6.0

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.3

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page