I think it's a nice solution from what is available to us in gtk. ----- Original Message ----- > Today, the question came up of how we can change the translation of > the > UI when you pick a different language. This is made more complicated > by > the facts that the UI is all instantiated up front, and that you can > change translation from a spoke off the first hub. The latter > problem > means we can't just have a separate "choose your language" program up > front. > > In the old UI, we delete the windows and reload them. I have a > strict > policy against deleting screens in the new UI, so we can't do that. > > I thus present the attached patch, which works well enough in my > testing. It obviously needs further cleanup. All the 'XXXXXXXXX' > stuff > is because there's currently no translations of the new UI so I need > something to prove that it works. > > - Chris > > > diff --git a/pyanaconda/ui/gui/__init__.py > b/pyanaconda/ui/gui/__init__.py > index ca08edc..8dd1e99 100644 > --- a/pyanaconda/ui/gui/__init__.py > +++ b/pyanaconda/ui/gui/__init__.py > @@ -214,6 +214,29 @@ class UIObject(object): > """ > pass > > + def retranslate(self): > + from gi.repository import AnacondaWidgets, Gtk > + > + # Widget class -> (getter, setter) -or- > + # Widget class -> (setter, ) > + widgetMap = { AnacondaWidgets.StandaloneWindow: > ("retranslate", ), > + Gtk.Button: ("get_label", "set_label"), > + Gtk.Label: ("get_label", "set_label") } > + classes = widgetMap.keys() > + > + objs = filter(lambda obj: obj.__class__ in classes, > self.builder.get_objects()) > + for obj in objs: > + klass = obj.__class__ > + funcs = widgetMap[klass] > + > + if len(funcs) == 1: > + getattr(obj, funcs[0])() > + else: > + before = getattr(obj, funcs[0])() > + #xlated = _(before) > + #getattr(obj, funcs[1])(xlated) > + getattr(obj, funcs[1])("XXXXXXXXXX") > + > def setup(self): > """Perform whatever actions are necessary to set defaults on > the UI. > This method may be called multiple times, so it's > important to not > diff --git a/pyanaconda/ui/gui/spokes/welcome.py > b/pyanaconda/ui/gui/spokes/welcome.py > index c5d0e1d..167f012 100644 > --- a/pyanaconda/ui/gui/spokes/welcome.py > +++ b/pyanaconda/ui/gui/spokes/welcome.py > @@ -76,6 +76,8 @@ class WelcomeLanguageSpoke(StandaloneSpoke): > (store, selected) = selection.get_selected_rows() > self.window.set_may_continue(len(selected) > 0) > > + self.retranslate() > + > # Override the default in StandaloneSpoke so we can display the > beta > # warning dialog first. > def _on_continue_clicked(self, cb): > diff --git a/pyanaconda/ui/gui/spokes/welcome.ui > b/pyanaconda/ui/gui/spokes/welcome.ui > index b1894d5..d6cacd7 100644 > --- a/pyanaconda/ui/gui/spokes/welcome.ui > +++ b/pyanaconda/ui/gui/spokes/welcome.ui > @@ -242,7 +242,9 @@ OS you can rely on. It's for testing purposes > only.</property> > <property > name="headers_visible">False</property> > <property name="search_column">0</property> > <child internal-child="selection"> > - <object class="GtkTreeSelection" > id="treeview-selection"/> > + <object class="GtkTreeSelection" > id="treeview-selection"> > + <signal name="changed" > handler="on_selection_changed" swapped="no"/> > + </object> > </child> > <child> > <object class="GtkTreeViewColumn" > id="nativeName"> > diff --git a/widgets/src/BaseWindow.c b/widgets/src/BaseWindow.c > index 44c60ef..a1f7da0 100644 > --- a/widgets/src/BaseWindow.c > +++ b/widgets/src/BaseWindow.c > @@ -407,6 +407,32 @@ void > anaconda_base_window_clear_info(AnacondaBaseWindow *win) { > win->priv->info_shown = FALSE; > } > > +void anaconda_base_window_retranslate(AnacondaBaseWindow *win) { > + char *markup; > + GValue distro = G_VALUE_INIT; > + > + g_value_init(&distro, G_TYPE_STRING); > + /* g_value_set_string(&distro, > gtk_label_get_text(GTK_LABEL(win->priv->distro_label))); */ > + g_value_set_string(&distro, "XXXXXXXXXX"); > + > + /* A window name is not necessarily set. */ > + if (strcmp(gtk_label_get_text(GTK_LABEL(win->priv->name_label)), > "") != 0) { > + GValue name = G_VALUE_INIT; > + > + g_value_init(&name, G_TYPE_STRING); > + /* g_value_set_string(&name, > gtk_label_get_text(GTK_LABEL(win->priv->name_label))); */ > + g_value_set_string(&name, "XXXXXXXXXX"); > + > + anaconda_base_window_set_property((GObject *) win, > PROP_WINDOW_NAME, &name, NULL); > + } > + > + anaconda_base_window_set_property((GObject *) win, > PROP_DISTRIBUTION, &distro, NULL); > + > + markup = g_markup_printf_escaped("<span foreground='red' > weight='bold' size='large'>%s</span>", "XXXXXXXXXX"); > + gtk_label_set_markup(GTK_LABEL(win->priv->beta_label), markup); > + g_free(markup); > +} > + > static GtkBuildableIface *parent_buildable_iface; > > static void > diff --git a/widgets/src/BaseWindow.h b/widgets/src/BaseWindow.h > index f1132f6..222fb8d 100644 > --- a/widgets/src/BaseWindow.h > +++ b/widgets/src/BaseWindow.h > @@ -62,6 +62,8 @@ struct _AnacondaBaseWindowClass { > GType anaconda_base_window_get_type (void); > GtkWidget *anaconda_base_window_new (); > > +void anaconda_base_window_retranslate (AnacondaBaseWindow > *win); > + > gboolean anaconda_base_window_get_beta (AnacondaBaseWindow *win); > void anaconda_base_window_set_beta (AnacondaBaseWindow *win, > gboolean is_beta); > > diff --git a/widgets/src/StandaloneWindow.c > b/widgets/src/StandaloneWindow.c > index 5ceddd4..d770e93 100644 > --- a/widgets/src/StandaloneWindow.c > +++ b/widgets/src/StandaloneWindow.c > @@ -190,3 +190,9 @@ void > anaconda_standalone_window_set_may_continue(AnacondaStandaloneWindow > *win, > gboolean > may_continue) { > gtk_widget_set_sensitive(win->priv->continue_button, > may_continue); > } > + > +void anaconda_standalone_window_retranslate(AnacondaStandaloneWindow > *win) { > + anaconda_base_window_retranslate(ANACONDA_BASE_WINDOW(win)); > + gtk_button_set_label(GTK_BUTTON(win->priv->quit_button), > "XXXXXXXXXX"); > + gtk_button_set_label(GTK_BUTTON(win->priv->continue_button), > "XXXXXXXXXX"); > +} > diff --git a/widgets/src/StandaloneWindow.h > b/widgets/src/StandaloneWindow.h > index b1ba029..0838b20 100644 > --- a/widgets/src/StandaloneWindow.h > +++ b/widgets/src/StandaloneWindow.h > @@ -72,6 +72,7 @@ GType anaconda_standalone_window_get_type > (void); > GtkWidget *anaconda_standalone_window_new (); > gboolean anaconda_standalone_window_get_may_continue > (AnacondaStandaloneWindow *win); > void anaconda_standalone_window_set_may_continue > (AnacondaStandaloneWindow *win, gboolean may_continue); > +void anaconda_standalone_window_retranslate > (AnacondaStandaloneWindow *win); > > G_END_DECLS > > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list > _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list