src/WindowMaker.h | 2 ++ src/defaults.c | 3 +++ src/main.c | 8 ++++++-- src/rootmenu.c | 27 +++++++++++++++++++-------- src/workspace.c | 18 +++++++++++++++--- 5 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/WindowMaker.h b/src/WindowMaker.h index a4e2f4e..37bfea0 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -466,6 +466,8 @@ typedef struct WPreferences { /* shading animation */ signed char shade_speed; + int translate_menu; + int edge_resistance; char attract; diff --git a/src/defaults.c b/src/defaults.c index bd075df..b601aaf 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -556,6 +556,9 @@ WDefaultEntry optionList[] = { {"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 diff --git a/src/main.c b/src/main.c index de63090..102b57d 100644 --- a/src/main.c +++ b/src/main.c @@ -791,11 +791,15 @@ real_main(int argc, char **argv) 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()) { diff --git a/src/rootmenu.c b/src/rootmenu.c index 01a5851..9259311 100644 --- a/src/rootmenu.c +++ b/src/rootmenu.c @@ -355,6 +355,17 @@ legalPanelCommand(WMenu *menu, WMenuEntry *entry) 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 @@ parseCascade(WScreen *scr, WMenu *menu, FILE *file, char *file_name) /* 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 @@ parseCascade(WScreen *scr, WMenu *menu, FILE *file, char *file_name) } 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 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command) 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 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command) 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 @@ configureMenu(WScreen *scr, WMPropList *definition) } 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 @@ configureMenu(WScreen *scr, WMPropList *definition) /* 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 @@ configureMenu(WScreen *scr, WMPropList *definition) 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"); diff --git a/src/workspace.c b/src/workspace.c index fd27b83..5c872f6 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -1349,7 +1349,10 @@ wWorkspaceMenuMake(WScreen *scr, Bool titled) { 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 @@ wWorkspaceMenuMake(WScreen *scr, Bool titled) /* 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; }