extensionBase: Use UUID as fallback gettext domain

Nowadays we can set up translations automatically, but only when
the domain is provided with the metadata.

This can be a problem, for example our extension templates use
the automatic translation handling that we recommend, but as a
result the code will throw an error unless `gettext-domain` is
added to the metadata.

Binding a text domain is cheap enough to not care about unnecessary
or duplicated calls, so add a final fallback to the UUID when no
domain was provided as parameter or in the metadata.

There is already a precedent with the `gnome-extensions pack` command
that falls back to the UUID when no explicit gettext domain was
included in the metadata.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2888>
This commit is contained in:
Florian Müllner 2023-08-12 00:03:38 +02:00 committed by Marge Bot
parent 92ccfe7f65
commit a6d8e7ab6f

View File

@ -55,10 +55,7 @@ export class ExtensionBase {
throw new Error(`${this.constructor.name} did not pass metadata to parent`); throw new Error(`${this.constructor.name} did not pass metadata to parent`);
this.metadata = metadata; this.metadata = metadata;
this.initTranslations();
const domain = this.metadata['gettext-domain'];
if (domain)
this.initTranslations(domain);
} }
/** /**
@ -116,14 +113,12 @@ export class ExtensionBase {
/** /**
* Initialize Gettext to load translations from extensionsdir/locale. If * Initialize Gettext to load translations from extensionsdir/locale. If
* domain is not provided, it will be taken from metadata['gettext-domain'] * domain is not provided, it will be taken from metadata['gettext-domain']
* if provided, or use the UUID
* *
* @param {string=} domain - the gettext domain to use * @param {string=} domain - the gettext domain to use
*/ */
initTranslations(domain) { initTranslations(domain) {
domain ||= this.metadata['gettext-domain']; domain ||= this.metadata['gettext-domain'] ?? this.uuid;
if (!domain)
throw new Error('initTranslations() was called without providing a valid domain');
// Expect USER extensions to have a locale/ subfolder, otherwise assume a // Expect USER extensions to have a locale/ subfolder, otherwise assume a
// SYSTEM extension that has been installed in the same prefix as the shell // SYSTEM extension that has been installed in the same prefix as the shell