Merge branch 'dynamic-languages' into 'main'

Draft: Update panel elements when language is changed

See merge request GNOME/gnome-shell!2965
This commit is contained in:
Ray Strode 2024-06-28 17:56:47 +00:00
commit 9b5d41370c
4 changed files with 48 additions and 0 deletions

View file

@ -30,6 +30,7 @@
<file>misc/introspect.js</file>
<file>misc/jsParse.js</file>
<file>misc/keyboardManager.js</file>
<file>misc/languageManager.js</file>
<file>misc/loginManager.js</file>
<file>misc/modemManager.js</file>
<file>misc/objectManager.js</file>

View file

@ -0,0 +1,34 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
import AccountsService from 'gi://AccountsService';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import * as Signals from './signals.js';
import * as Gettext from 'gettext';
export class LanguageManager extends Signals.EventEmitter {
constructor() {
super();
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._user.connectObject('changed', this._onLanguageUpdated.bind(this));
}
_onLanguageUpdated() {
if (this.language === this._user.language)
return;
this.language = this._user.language;
this.emit('language-changed', this._user.language);
}
get language() {
return Gettext.setlocale(Gettext.LocaleCategory.ALL, null);
}
set language(newLanguage) {
Gettext.setlocale(Gettext.LocaleCategory.ALL, newLanguage)
}
}

View file

@ -18,6 +18,7 @@ import * as ExtensionSystem from './extensionSystem.js';
import * as ExtensionDownloader from './extensionDownloader.js';
import * as InputMethod from '../misc/inputMethod.js';
import * as Introspect from '../misc/introspect.js';
import * as LanguageManager from '../misc/languageManager.js';
import * as Keyboard from './keyboard.js';
import * as MessageTray from './messageTray.js';
import * as ModalDialog from './modalDialog.js';
@ -57,6 +58,7 @@ const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
export let componentManager = null;
export let extensionManager = null;
export let languageManager = null;
export let panel = null;
export let overview = null;
export let runDialog = null;
@ -163,6 +165,8 @@ export async function start() {
if (!currentDesktop || !currentDesktop.split(':').includes('GNOME'))
Gio.DesktopAppInfo.set_desktop_env('GNOME');
languageManager = new LanguageManager.LanguageManager();
sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated);

View file

@ -680,6 +680,8 @@ class Panel extends St.Widget {
_('Top Bar'), 'shell-focus-top-bar-symbolic',
{sortGroup: CtrlAltTab.SortGroup.TOP});
Main.languageManager.connect('language-changed', this._updateLanguage.bind(this));
Main.sessionMode.connect('updated', this._updatePanel.bind(this));
global.display.connect('workareas-changed', () => this.queue_relayout());
@ -854,6 +856,13 @@ class Panel extends St.Widget {
return this._leftBox.opacity;
}
_updateLanguage() {
this._leftBox.destroy_all_children();
this._centerBox.destroy_all_children();
this._rightBox.destroy_all_children();
this._updatePanel();
}
_updatePanel() {
let panel = Main.sessionMode.panel;
this._hideIndicators();