--- WindowMaker-0.91.0/src/rootmenu.c.vns 2005-05-18 14:12:23 +0400 +++ WindowMaker-0.91.0/src/rootmenu.c 2005-05-18 14:12:23 +0400 @@ -355,6 +355,17 @@ wShowLegalPanel(menu->frame->screen_ptr); } +/************ translate menu item on the fly *************/ +#define NOTRANSLATE_PREFIX "notranslate " +static char* +translateMenuTitle(char* title) +{ + if(!strncmp(NOTRANSLATE_PREFIX, title, strlen(NOTRANSLATE_PREFIX))) + return title + strlen(NOTRANSLATE_PREFIX); + if(wPreferences.translate_menu) + return dgettext("menu-messages", title); + return title; +} /********************************************************************/ @@ -1146,13 +1157,13 @@ /* start submenu */ - cascade = wMenuCreate(scr, title, False); + cascade = wMenuCreate(scr, translateMenuTitle(title), False); cascade->on_destroy = removeShortcutsForMenu; if (parseCascade(scr, cascade, file, file_name)==NULL) { wMenuDestroy(cascade, True); } else { wMenuEntrySetCascade(menu, - wMenuAddCallback(menu, title, NULL, NULL), + wMenuAddCallback(menu, translateMenuTitle(title), NULL, NULL), cascade); } } else if (strcasecmp(command, "END")==0) { @@ -1161,7 +1172,7 @@ } else { /* normal items */ - addMenuEntry(menu, title, shortcut[0] ? shortcut : NULL, command, + addMenuEntry(menu, translateMenuTitle(title), shortcut[0] ? shortcut : NULL, command, params[0] ? params : NULL, file_name); } } @@ -1534,7 +1545,7 @@ strcat(buffer, command); } - addMenuEntry(menu, data->name, NULL, "OPEN_MENU", buffer, path[data->index]); + addMenuEntry(menu, translateMenuTitle(data->name), NULL, "OPEN_MENU", buffer, path[data->index]); wfree(buffer); if (data->name) @@ -1582,7 +1593,7 @@ if (ptr && ptr!=data->name) *ptr = 0; } - addMenuEntry(menu, data->name, NULL, "SHEXEC", buffer, path[data->index]); + addMenuEntry(menu, translateMenuTitle(data->name), NULL, "SHEXEC", buffer, path[data->index]); wfree(buffer); if (data->name) @@ -1701,7 +1712,7 @@ } mtitle = WMGetFromPLString(elem); - menu = wMenuCreate(scr, mtitle, False); + menu = wMenuCreate(scr, translateMenuTitle(mtitle), False); menu->on_destroy = removeShortcutsForMenu; #ifdef GLOBAL_SUBMENU_FILE @@ -1738,7 +1749,7 @@ /* submenu */ submenu = configureMenu(scr, elem); if (submenu) { - mentry = wMenuAddCallback(menu, submenu->frame->title, NULL, + mentry = wMenuAddCallback(menu, translateMenuTitle(submenu->frame->title), NULL, NULL); wMenuEntrySetCascade(menu, mentry, submenu); } @@ -1761,7 +1772,7 @@ if (!title || !command) goto error; - addMenuEntry(menu, WMGetFromPLString(title), + addMenuEntry(menu, translateMenuTitle(WMGetFromPLString(title)), shortcut ? WMGetFromPLString(shortcut) : NULL, WMGetFromPLString(command), params ? WMGetFromPLString(params) : NULL, "WMRootMenu"); --- WindowMaker-0.91.0/src/defaults.c.vns 2005-05-18 14:12:23 +0400 +++ WindowMaker-0.91.0/src/defaults.c 2005-05-18 14:12:23 +0400 @@ -556,6 +556,9 @@ {"SingleClickLaunch", "NO", NULL, &wPreferences.single_click, getBool, NULL }, + {"TranslateMenu", "YES", NULL, + &wPreferences.translate_menu, getBool, NULL + }, /* style options */ {"MenuStyle", "normal", seMenuStyles, &wPreferences.menu_style, getEnum, setMenuStyle --- WindowMaker-0.91.0/src/WindowMaker.h.vns 2005-05-18 14:12:23 +0400 +++ WindowMaker-0.91.0/src/WindowMaker.h 2005-05-18 14:12:23 +0400 @@ -466,6 +466,8 @@ /* shading animation */ signed char shade_speed; + int translate_menu; + int edge_resistance; char attract; --- WindowMaker-0.91.0/src/workspace.c.vns 2004-10-26 07:17:12 +0400 +++ WindowMaker-0.91.0/src/workspace.c 2005-05-18 14:12:23 +0400 @@ -1349,7 +1349,10 @@ { WMenu *wsmenu; - wsmenu = wMenuCreate(scr, titled ? _("Workspaces") : NULL, False); + if(wPreferences.translate_menu) + wsmenu = wMenuCreate(scr, titled ? _("Workspaces") : NULL, False); + else + wsmenu = wMenuCreate(scr, titled ? "Workspaces" : NULL, False); if (!wsmenu) { wwarning(_("could not create Workspace menu")); return NULL; @@ -1358,8 +1361,17 @@ /* callback to be called when an entry is edited */ wsmenu->on_edit = onMenuEntryEdited; - wMenuAddCallback(wsmenu, _("New"), newWSCommand, NULL); - wMenuAddCallback(wsmenu, _("Destroy Last"), deleteWSCommand, NULL); + + if(wPreferences.translate_menu) + { + wMenuAddCallback(wsmenu, _("New"), newWSCommand, NULL); + wMenuAddCallback(wsmenu, _("Destroy Last"), deleteWSCommand, NULL); + } + else + { + wMenuAddCallback(wsmenu, "New", newWSCommand, NULL); + wMenuAddCallback(wsmenu, "Destroy Last", deleteWSCommand, NULL); + } return wsmenu; } --- WindowMaker-0.91.0/src/main.c.vns 2004-10-25 05:32:51 +0400 +++ WindowMaker-0.91.0/src/main.c 2005-05-18 14:14:26 +0400 @@ -791,11 +791,15 @@ if (!Locale || strcmp(Locale, "C")==0 || strcmp(Locale, "POSIX")==0) Locale = NULL; #ifdef I18N - if (getenv("NLSPATH")) + if (getenv("NLSPATH")) { bindtextdomain("WindowMaker", getenv("NLSPATH")); - else + bindtextdomain("menu-messages", getenv("NLSPATH")); + } else { bindtextdomain("WindowMaker", LOCALEDIR); + bindtextdomain("menu-messages", LOCALEDIR); + } bind_textdomain_codeset("WindowMaker", "UTF-8"); + bind_textdomain_codeset("menu-messages", "UTF-8"); textdomain("WindowMaker"); if (!XSupportsLocale()) {