From 1bcd8dde5510e9de8993284b222229eac7d551f6 Mon Sep 17 00:00:00 2001 From: Christian Knof Date: Fri, 16 Oct 2026 17:09:42 +0200 Subject: [PATCH] Add PHP extension gettext ILIAS ships the translations of its language modules as gettext files and serves them through native gettext (feature request "PO files", accepted with native gettext). Every request loads the module `common`, so without the extension, or without the `C.utf8` locale of the C library, the whole user interface shows identifiers instead of texts. Require `ext-gettext` in composer.json (composer.lock: platform and content-hash only), name the extension in the PHP setup of the GitHub workflows that run composer install, and list it with the locale among the requirements in docs/configuration/install.md. --- .github/workflows/checks.yml | 2 +- .github/workflows/code-rules.yml | 2 +- .github/workflows/install-check-trunk-8.4.yml | 2 +- .github/workflows/install-check-trunk-8.5.yml | 2 +- .github/workflows/legacy-ui.yml | 2 +- composer.json | 1 + composer.lock | 5 +++-- docs/configuration/install.md | 6 +++++- 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 75561f370f5e..cde8cfb205d3 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -23,7 +23,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, imagick + extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, imagick, gettext tools: composer:v2 coverage: none diff --git a/.github/workflows/code-rules.yml b/.github/workflows/code-rules.yml index b7730c2bf5e2..39c2dc05b99d 100644 --- a/.github/workflows/code-rules.yml +++ b/.github/workflows/code-rules.yml @@ -16,7 +16,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: '8.4' - extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, imagick + extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, imagick, gettext tools: composer:v2 coverage: none diff --git a/.github/workflows/install-check-trunk-8.4.yml b/.github/workflows/install-check-trunk-8.4.yml index 97dde5cff33b..77f8e1872a5e 100644 --- a/.github/workflows/install-check-trunk-8.4.yml +++ b/.github/workflows/install-check-trunk-8.4.yml @@ -34,7 +34,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql + extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql, gettext tools: composer:v2 coverage: none diff --git a/.github/workflows/install-check-trunk-8.5.yml b/.github/workflows/install-check-trunk-8.5.yml index 2d4770e4a0d5..5db6c0afdc4f 100644 --- a/.github/workflows/install-check-trunk-8.5.yml +++ b/.github/workflows/install-check-trunk-8.5.yml @@ -34,7 +34,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql + extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql, gettext tools: composer:v2 coverage: none diff --git a/.github/workflows/legacy-ui.yml b/.github/workflows/legacy-ui.yml index d3aa8b1acfce..491aea3a9d3b 100755 --- a/.github/workflows/legacy-ui.yml +++ b/.github/workflows/legacy-ui.yml @@ -35,7 +35,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: 8.4 - extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql + extensions: dom, curl, libxml, mbstring, zip, gd, json, readline, xsl, xml, mysql, gettext tools: composer:v2 coverage: none diff --git a/composer.json b/composer.json index 5197e1b5ec6f..e999216eb571 100755 --- a/composer.json +++ b/composer.json @@ -50,6 +50,7 @@ "ext-xml": "*", "ext-zip": "*", "ext-imagick": "*", + "ext-gettext": "*", "bacon/bacon-qr-code": "^3.0", "celtic/lti": "^5.4.7", "dflydev/fig-cookies": "^3.1.0", diff --git a/composer.lock b/composer.lock index 0e3d6f57af31..073940172e60 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2b858b71ec8bdfbcbf1a4de417423914", + "content-hash": "91192277b93b05693d4426e61cf0a70e", "packages": [ { "name": "bacon/bacon-qr-code", @@ -11128,7 +11128,8 @@ "ext-libxml": "*", "ext-xml": "*", "ext-zip": "*", - "ext-imagick": "*" + "ext-imagick": "*", + "ext-gettext": "*" }, "platform-dev": {}, "plugin-api-version": "2.9.0" diff --git a/docs/configuration/install.md b/docs/configuration/install.md index 543ed55dba6c..200a49ff11e4 100755 --- a/docs/configuration/install.md +++ b/docs/configuration/install.md @@ -113,9 +113,13 @@ Other web servers capable of processing PHP, such as Nginx or Apache2 with FCGI **Required PHP Extensions:** ``` -gd, dom, xsl, pdo, pdo_mysql, curl, json, simplexml, libxml, xml, zip, imagick, mbstring +gd, dom, xsl, pdo, pdo_mysql, curl, json, simplexml, libxml, xml, zip, imagick, mbstring, gettext ``` +ILIAS serves its translations through native gettext: the PHP extension `gettext` and the C library's +`C.utf8` locale (glibc) MUST be available to the PHP of the web server as well as to the CLI. Without them +the user interface shows identifiers (e.g. `-login-`) instead of texts. + **Optional PHP Extensions:** * `soap` for SOAP user administration