Re: Locale switch on the fly



On Mon, 2017-07-17 at 12:32 +0300, Igor Chetverovod wrote:
Hi all, I have a need to switch locale on the fly (without  an
application
UI reload).
I  have a function which are using gkt_container_forall()  for
marking of
all widgets are having GObject property "label" ,  all of them get
aditional GObject field  "msg_id" with original english text of
property
"label").   When user press the button "Change locale"  function
iterates
through all children of  the main window and reads thier marks
"msg_id"
added before and uses them as a parameter for get_text() to
get  translated
version of the label.  And it sets  localized text of every label by
function g_object_set(). Function works good for all widgets in my
application. But there is exclusion - GtkMenuItems widgets. Function
 gkt_container_forall() iterates trough them only once - at the
"marking"
phase. In "change locale" phase it does not iterate them. It
translates
only top level of GtkMenuBar, but does not GtkMenuItems and
GtkCheckMenuItems.

Fuction gtk_container_foreach () givese the same results.

Is there method to solve this issue by gtk-functions?

I am using gtk3.22.1 for Windows7.

Hi Igor,

Translating the UI on the fly is something I have wanted for many
years, and would be awesome to have real support for :)

That said, using your current 'hack' (which seems a bit dangerous as it
makes assumptions about "label" properties on widgets and their
meaning), you are just missing some special cases to traverse through
the UI.

For this case, you can probably get away with somthing like the
following inserted into your recursive widget crawling loop:

  if (GTK_IS_MENU_ITEM(widget))
     child = gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget))

https://developer.gnome.org/gtk3/stable/GtkMenuItem.html#gtk-menu-item-get-submenu


Cheers,
    -Tristan



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]