GNOME Shell扩展报错:Expected type string for argument 'domain' but got type undefined
GNOME Shell扩展报错:Expected type string for argument 'domain' but got type undefined
你好呀,看了你的问题和截断的代码片段,我大概能定位到问题所在啦——主要是两个点:代码不完整,还有扩展的国际化配置缺失导致了这个domain参数未定义的错误。
先说说最直观的问题:你贴的extension.js代码最后一行是this._indi...,明显没写完,正确的写法应该是:
Main.panel.addToStatusArea(Me.metadata.uuid, this._indicator);
这行是把你的面板按钮添加到状态栏里,不补全的话扩展肯定跑不起来。
然后是导致你那个报错的核心原因:你的扩展metadata.json文件里大概率没配置gettext-domain字段。gettext是GNOME扩展用来做国际化翻译的工具,它需要一个明确的域名参数,要是没在metadata.json里定义,ExtensionUtils.gettext就会拿到undefined,直接抛出这个类型错误。
解决步骤给你列出来:
- 第一步:补全
extension.js里的代码,把没写完的那行补成上面说的完整代码。 - 第二步:检查你的
metadata.json,确保里面有gettext-domain字段,模板大概是这样的:
{ "uuid": "your-extension-id@your-name", "name": "你的扩展名称", "description": "你的扩展描述", "version": 1, "shell-version": ["42"], "gettext-domain": "your-extension-id@your-name" }
这里的gettext-domain值一般和你的扩展UUID保持一致就好,不用搞复杂。
- 第三步:如果还是有问题,可以在代码里显式初始化
gettext,替代你现在的写法:
const { gettext, gettextDomain } = ExtensionUtils; // 显式设置域名 gettextDomain(Me.metadata['gettext-domain']); const _ = gettext;
这样能确保gettext拿到正确的域名参数。
最后,记得把扩展放在正确的目录下:~/.local/share/gnome-shell/extensions/你的扩展UUID/,然后按Alt+F2输入r重启GNOME Shell,再去扩展管理器里启用试试。
备注:内容来源于stack exchange,提问作者ibse
相关产品推荐
相关产品推荐

