Mac OS: added support for internationalization of the application menu.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9809 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
e9c3075c26
commit
834c714f26
1
FL/mac.H
1
FL/mac.H
@ -186,6 +186,7 @@ extern void fl_open_display();
|
||||
|
||||
/** \defgroup group_macosx Mac OS X-specific symbols
|
||||
Mac OS X-specific symbols declared in <FL/x.H> or <FL/gl.h>
|
||||
\sa \ref osissues_macos
|
||||
@{ */
|
||||
|
||||
/** @brief Register a function called for each file dropped onto an application icon.
|
||||
|
@ -716,10 +716,6 @@ void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut)
|
||||
Attaches the callback \c cb to the "About myprog" item of the system application menu.
|
||||
\c cb will be called with NULL first argument and \c user_data second argument.
|
||||
|
||||
Fl_Mac_App_Menu class
|
||||
\par
|
||||
The Fl_Mac_App_Menu class allows to localize the application menu.
|
||||
|
||||
Fl_Sys_Menu_Bar class
|
||||
|
||||
\par
|
||||
@ -727,8 +723,8 @@ The Fl_Sys_Menu_Bar class allows to build menu bars that, on Mac OS X, are
|
||||
placed in the system menu bar (at top-left of display), and, on other platforms,
|
||||
at a user-chosen location of a user-chosen window.
|
||||
|
||||
\subsection osissues_quartz Drawing Things Using Quartz
|
||||
|
||||
\subsection osissues_quartz Drawing Things Using Quartz
|
||||
All code inside Fl_Widget::draw()
|
||||
is expected to call Quartz drawing functions. The Quartz coordinate system
|
||||
is flipped to match
|
||||
@ -737,6 +733,27 @@ left corner of the enclosing Fl_Window. The global variable
|
||||
\c fl_gc (of type \c CGContextRef) is the appropriate Quartz 2D drawing environment.
|
||||
Include FL/x.H to declare the \c fl_gc variable.
|
||||
|
||||
\subsection osissues_localize Internationalization
|
||||
All FLTK programs contain an application menu with, e.g., the About xxx, Hide xxx, and Quit xxx items.
|
||||
This menu can be internationalized/localized by any of two means.
|
||||
\li using the Fl_Mac_App_Menu class.
|
||||
\li using the standard Mac OS X localization procedure. Create a language-specific .lproj directory
|
||||
(e.g., <tt>German.lproj</tt>) in the Resources subdirectory of the application bundle.
|
||||
Create therein a <tt>Localizable.strings</tt> file that translates all menu items to this language.
|
||||
The German <tt>Localizable.strings</tt> file, for example, contains:
|
||||
\verbatim
|
||||
"About %@" = "Über %@";
|
||||
"Print Front Window"="Frontfenster drucken";
|
||||
"Services" = "Dienste";
|
||||
"Hide %@"="%@ ausblenden";
|
||||
"Hide Others"="Andere ausblenden";
|
||||
"Show All"="Alle einblenden";
|
||||
"Quit %@"="%@ beenden";
|
||||
\endverbatim
|
||||
Set <tt>"Print Front Window" = "";</tt> therein so the application menu doesn't show a "Print Front Window" item.
|
||||
To localize the application name itself, create a file <tt>InfoPlist.strings</tt> in each .lproj directory
|
||||
and put <tt>CFBundleName = "localized name";</tt> in each such file.
|
||||
|
||||
Fl_Double_Window
|
||||
|
||||
OS X double-buffers all windows automatically. On OS X,
|
||||
|
@ -74,13 +74,13 @@ extern double fl_mac_flush_and_wait(double time_to_wait, char in_idle);
|
||||
// Globals...
|
||||
//
|
||||
#if defined(__APPLE__) || defined(FL_DOXYGEN)
|
||||
const char *Fl_Mac_App_Menu::about = "About ";
|
||||
const char *Fl_Mac_App_Menu::about = "About %@";
|
||||
const char *Fl_Mac_App_Menu::print = "Print Front Window";
|
||||
const char *Fl_Mac_App_Menu::services = "Services";
|
||||
const char *Fl_Mac_App_Menu::hide = "Hide ";
|
||||
const char *Fl_Mac_App_Menu::hide = "Hide %@";
|
||||
const char *Fl_Mac_App_Menu::hide_others = "Hide Others";
|
||||
const char *Fl_Mac_App_Menu::show = "Show All";
|
||||
const char *Fl_Mac_App_Menu::quit = "Quit ";
|
||||
const char *Fl_Mac_App_Menu::quit = "Quit %@";
|
||||
#endif // __APPLE__
|
||||
#ifndef FL_DOXYGEN
|
||||
Fl_Widget *Fl::belowmouse_,
|
||||
|
@ -3066,21 +3066,23 @@ static void createAppleMenu(void)
|
||||
NSMenu *mainmenu, *services = nil, *appleMenu;
|
||||
NSMenuItem *menuItem;
|
||||
NSString *title;
|
||||
|
||||
NSString *nsappname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
|
||||
|
||||
SEL infodictSEL = (fl_mac_os_version >= 100200 ? @selector(localizedInfoDictionary) : @selector(infoDictionary));
|
||||
NSString *nsappname = [[[NSBundle mainBundle] performSelector:infodictSEL] objectForKey:@"CFBundleName"];
|
||||
if (nsappname == nil)
|
||||
nsappname = [[NSProcessInfo processInfo] processName];
|
||||
appleMenu = [[NSMenu alloc] initWithTitle:@""];
|
||||
/* Add menu items */
|
||||
title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::about] stringByAppendingString:nsappname];
|
||||
title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::about],nil), nsappname];
|
||||
menuItem = [appleMenu addItemWithTitle:title action:@selector(showPanel) keyEquivalent:@""];
|
||||
FLaboutItemTarget *about = [[FLaboutItemTarget alloc] init];
|
||||
[menuItem setTarget:about];
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
// Print front window
|
||||
if (strlen(Fl_Mac_App_Menu::print) > 0) {
|
||||
title = NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::print], nil);
|
||||
if ([title length] > 0) {
|
||||
menuItem = [appleMenu
|
||||
addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::print]
|
||||
addItemWithTitle:title
|
||||
action:@selector(printPanel)
|
||||
keyEquivalent:@""];
|
||||
[menuItem setTarget:about];
|
||||
@ -3092,29 +3094,29 @@ static void createAppleMenu(void)
|
||||
// Services Menu
|
||||
services = [[NSMenu alloc] init];
|
||||
menuItem = [appleMenu
|
||||
addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::services]
|
||||
addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::services], nil)
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[appleMenu setSubmenu:services forItem:menuItem];
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
// Hide AppName
|
||||
title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::hide] stringByAppendingString:nsappname];
|
||||
title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::hide],nil), nsappname];
|
||||
[appleMenu addItemWithTitle:title
|
||||
action:@selector(hide:)
|
||||
keyEquivalent:@"h"];
|
||||
// Hide Others
|
||||
menuItem = [appleMenu
|
||||
addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::hide_others]
|
||||
addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::hide_others] , nil)
|
||||
action:@selector(hideOtherApplications:)
|
||||
keyEquivalent:@"h"];
|
||||
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
|
||||
// Show All
|
||||
[appleMenu addItemWithTitle:[NSString stringWithUTF8String:Fl_Mac_App_Menu::show]
|
||||
[appleMenu addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::show] , nil)
|
||||
action:@selector(unhideAllApplications:) keyEquivalent:@""];
|
||||
[appleMenu addItem:[NSMenuItem separatorItem]];
|
||||
// Quit AppName
|
||||
title = [[NSString stringWithUTF8String:Fl_Mac_App_Menu::quit]
|
||||
stringByAppendingString:nsappname];
|
||||
title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::quit] , nil),
|
||||
nsappname];
|
||||
[appleMenu addItemWithTitle:title
|
||||
action:@selector(terminate:)
|
||||
keyEquivalent:@"q"];
|
||||
|
Loading…
x
Reference in New Issue
Block a user