[PATCH 2/2] winemac: Enable localization of strings used to build Mac menus.
Ken Thomases
ken at codeweavers.com
Mon Nov 16 22:10:21 CST 2015
Signed-off-by: Ken Thomases <ken at codeweavers.com>
---
configure.ac | 2 +-
dlls/winemac.drv/cocoa_app.m | 52 +++++++++++++++++++++++++++-----------
dlls/winemac.drv/macdrv_cocoa.h | 4 +++
dlls/winemac.drv/macdrv_main.c | 55 +++++++++++++++++++++++++++++++++++++++++
dlls/winemac.drv/macdrv_res.h | 41 ++++++++++++++++++++++++++++++
dlls/winemac.drv/winemac.rc | 24 ++++++++++++++++++
6 files changed, 163 insertions(+), 15 deletions(-)
create mode 100644 dlls/winemac.drv/macdrv_res.h
diff --git a/configure.ac b/configure.ac
index 7d2449f..c2e0999 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3299,7 +3299,7 @@ WINE_CONFIG_LIB(winecrt0)
WINE_CONFIG_DLL(wined3d,,[implib])
WINE_CONFIG_DLL(winegstreamer)
WINE_CONFIG_DLL(winejoystick.drv)
-WINE_CONFIG_DLL(winemac.drv)
+WINE_CONFIG_DLL(winemac.drv,,[po])
WINE_CONFIG_DLL(winemapi)
WINE_CONFIG_DLL(winemp3.acm)
WINE_CONFIG_DLL(wineoss.drv)
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m
index c0581b8..3a80f1d 100644
--- a/dlls/winemac.drv/cocoa_app.m
+++ b/dlls/winemac.drv/cocoa_app.m
@@ -32,6 +32,18 @@
int macdrv_err_on;
+/***********************************************************************
+ * WineLocalizedString
+ *
+ * Look up a localized string by its ID in the dictionary.
+ */
+static NSString* WineLocalizedString(unsigned int stringID)
+{
+ NSNumber* key = [NSNumber numberWithUnsignedInt:stringID];
+ return [(NSDictionary*)localized_strings objectForKey:key];
+}
+
+
@implementation WineApplication
@synthesize wineController;
@@ -215,46 +227,58 @@ - (void) transformProcessToForeground
mainMenu = [[[NSMenu alloc] init] autorelease];
// Application menu
- submenu = [[[NSMenu alloc] initWithTitle:@"Wine"] autorelease];
+ submenu = [[[NSMenu alloc] initWithTitle:WineLocalizedString(STRING_MENU_WINE)] autorelease];
bundleName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey];
if ([bundleName length])
- title = [NSString stringWithFormat:@"Hide %@", bundleName];
+ title = [NSString stringWithFormat:WineLocalizedString(STRING_MENU_ITEM_HIDE_APPNAME), bundleName];
else
- title = @"Hide";
+ title = WineLocalizedString(STRING_MENU_ITEM_HIDE);
item = [submenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@""];
- item = [submenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+ item = [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_HIDE_OTHERS)
+ action:@selector(hideOtherApplications:)
+ keyEquivalent:@"h"];
[item setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask];
- item = [submenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
+ item = [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_SHOW_ALL)
+ action:@selector(unhideAllApplications:)
+ keyEquivalent:@""];
[submenu addItem:[NSMenuItem separatorItem]];
if ([bundleName length])
- title = [NSString stringWithFormat:@"Quit %@", bundleName];
+ title = [NSString stringWithFormat:WineLocalizedString(STRING_MENU_ITEM_QUIT_APPNAME), bundleName];
else
- title = @"Quit";
+ title = WineLocalizedString(STRING_MENU_ITEM_QUIT);
item = [submenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
[item setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask];
item = [[[NSMenuItem alloc] init] autorelease];
- [item setTitle:@"Wine"];
+ [item setTitle:WineLocalizedString(STRING_MENU_WINE)];
[item setSubmenu:submenu];
[mainMenu addItem:item];
// Window menu
- submenu = [[[NSMenu alloc] initWithTitle:@"Window"] autorelease];
- [submenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@""];
- [submenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""];
+ submenu = [[[NSMenu alloc] initWithTitle:WineLocalizedString(STRING_MENU_WINDOW)] autorelease];
+ [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_MINIMIZE)
+ action:@selector(performMiniaturize:)
+ keyEquivalent:@""];
+ [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_ZOOM)
+ action:@selector(performZoom:)
+ keyEquivalent:@""];
if ([NSWindow instancesRespondToSelector:@selector(toggleFullScreen:)])
{
- item = [submenu addItemWithTitle:@"Enter Full Screen" action:@selector(toggleFullScreen:) keyEquivalent:@"f"];
+ item = [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_ENTER_FULL_SCREEN)
+ action:@selector(toggleFullScreen:)
+ keyEquivalent:@"f"];
[item setKeyEquivalentModifierMask:NSCommandKeyMask | NSAlternateKeyMask | NSControlKeyMask];
}
[submenu addItem:[NSMenuItem separatorItem]];
- [submenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""];
+ [submenu addItemWithTitle:WineLocalizedString(STRING_MENU_ITEM_BRING_ALL_TO_FRONT)
+ action:@selector(arrangeInFront:)
+ keyEquivalent:@""];
item = [[[NSMenuItem alloc] init] autorelease];
- [item setTitle:@"Window"];
+ [item setTitle:WineLocalizedString(STRING_MENU_WINDOW)];
[item setSubmenu:submenu];
[mainMenu addItem:item];
diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h
index 2385097..5d607fc 100644
--- a/dlls/winemac.drv/macdrv_cocoa.h
+++ b/dlls/winemac.drv/macdrv_cocoa.h
@@ -99,6 +99,9 @@
#endif
+#include "macdrv_res.h"
+
+
/* Must match the values of Cocoa's NSDragOperation enum. */
enum {
DRAG_OP_NONE = 0,
@@ -156,6 +159,7 @@
extern int cursor_clipping_locks_windows DECLSPEC_HIDDEN;
extern int use_precise_scrolling DECLSPEC_HIDDEN;
extern int gl_surface_mode DECLSPEC_HIDDEN;
+extern CFDictionaryRef localized_strings DECLSPEC_HIDDEN;
extern int macdrv_start_cocoa_app(unsigned long long tickcount) DECLSPEC_HIDDEN;
extern void macdrv_window_rejected_focus(const struct macdrv_event *event) DECLSPEC_HIDDEN;
diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c
index 62c70df..5af0f41 100644
--- a/dlls/winemac.drv/macdrv_main.c
+++ b/dlls/winemac.drv/macdrv_main.c
@@ -60,6 +60,8 @@ int use_precise_scrolling = TRUE;
int gl_surface_mode = GL_SURFACE_IN_FRONT_OPAQUE;
HMODULE macdrv_module = 0;
+CFDictionaryRef localized_strings;
+
/**************************************************************************
* debugstr_cf
@@ -200,6 +202,58 @@ static void setup_options(void)
/***********************************************************************
+ * load_strings
+ */
+static void load_strings(HINSTANCE instance)
+{
+ static const unsigned int ids[] = {
+ STRING_MENU_WINE,
+ STRING_MENU_ITEM_HIDE_APPNAME,
+ STRING_MENU_ITEM_HIDE,
+ STRING_MENU_ITEM_HIDE_OTHERS,
+ STRING_MENU_ITEM_SHOW_ALL,
+ STRING_MENU_ITEM_QUIT_APPNAME,
+ STRING_MENU_ITEM_QUIT,
+
+ STRING_MENU_WINDOW,
+ STRING_MENU_ITEM_MINIMIZE,
+ STRING_MENU_ITEM_ZOOM,
+ STRING_MENU_ITEM_ENTER_FULL_SCREEN,
+ STRING_MENU_ITEM_BRING_ALL_TO_FRONT,
+ };
+ CFMutableDictionaryRef dict;
+ int i;
+
+ dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks);
+ if (!dict)
+ {
+ ERR("Failed to create localized strings dictionary\n");
+ return;
+ }
+
+ for (i = 0; i < sizeof(ids) / sizeof(ids[0]); i++)
+ {
+ LPCWSTR str;
+ int len = LoadStringW(instance, ids[i], (LPWSTR)&str, 0);
+ if (str && len)
+ {
+ CFNumberRef key = CFNumberCreate(NULL, kCFNumberIntType, &ids[i]);
+ CFStringRef value = CFStringCreateWithCharacters(NULL, (UniChar*)str, len);
+ if (key && value)
+ CFDictionarySetValue(dict, key, value);
+ else
+ ERR("Failed to add string ID 0x%04x %s\n", ids[i], debugstr_wn(str, len));
+ }
+ else
+ ERR("Failed to load string ID 0x%04x\n", ids[i]);
+ }
+
+ localized_strings = dict;
+}
+
+
+/***********************************************************************
* process_attach
*/
static BOOL process_attach(void)
@@ -212,6 +266,7 @@ static BOOL process_attach(void)
return FALSE;
setup_options();
+ load_strings(macdrv_module);
if ((thread_data_tls_index = TlsAlloc()) == TLS_OUT_OF_INDEXES) return FALSE;
diff --git a/dlls/winemac.drv/macdrv_res.h b/dlls/winemac.drv/macdrv_res.h
new file mode 100644
index 0000000..865d70e
--- /dev/null
+++ b/dlls/winemac.drv/macdrv_res.h
@@ -0,0 +1,41 @@
+/*
+ * Resource ID constants for Mac driver
+ *
+ * Copyright (c) 2013 Ken Thomases for CodeWeavers Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_MACDRV_RES_H
+#define __WINE_MACDRV_RES_H
+
+
+/* Strings */
+#define STRING_MENU_WINE 0x100
+#define STRING_MENU_ITEM_HIDE_APPNAME 0x101
+#define STRING_MENU_ITEM_HIDE 0x102
+#define STRING_MENU_ITEM_HIDE_OTHERS 0x103
+#define STRING_MENU_ITEM_SHOW_ALL 0x104
+#define STRING_MENU_ITEM_QUIT_APPNAME 0x105
+#define STRING_MENU_ITEM_QUIT 0x106
+
+#define STRING_MENU_WINDOW 0x110
+#define STRING_MENU_ITEM_MINIMIZE 0x111
+#define STRING_MENU_ITEM_ZOOM 0x112
+#define STRING_MENU_ITEM_ENTER_FULL_SCREEN 0x113
+#define STRING_MENU_ITEM_BRING_ALL_TO_FRONT 0x114
+
+
+#endif
diff --git a/dlls/winemac.drv/winemac.rc b/dlls/winemac.drv/winemac.rc
index b563414..863551e 100644
--- a/dlls/winemac.drv/winemac.rc
+++ b/dlls/winemac.drv/winemac.rc
@@ -19,6 +19,30 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <winnt.h>
+#include "macdrv_res.h"
+
+#pragma makedep po
+
+LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+ STRING_MENU_WINE "Wine"
+ STRING_MENU_ITEM_HIDE_APPNAME "Hide %@"
+ STRING_MENU_ITEM_HIDE "Hide"
+ STRING_MENU_ITEM_HIDE_OTHERS "Hide Others"
+ STRING_MENU_ITEM_SHOW_ALL "Show All"
+ STRING_MENU_ITEM_QUIT_APPNAME "Quit %@"
+ STRING_MENU_ITEM_QUIT "Quit"
+
+ STRING_MENU_WINDOW "Window"
+ STRING_MENU_ITEM_MINIMIZE "Minimize"
+ STRING_MENU_ITEM_ZOOM "Zoom"
+ STRING_MENU_ITEM_ENTER_FULL_SCREEN "Enter Full Screen"
+ STRING_MENU_ITEM_BRING_ALL_TO_FRONT "Bring All to Front"
+}
+
#define WINE_FILEDESCRIPTION_STR "Wine Mac driver"
#define WINE_FILENAME_STR "winemac.drv"
--
2.6.0
More information about the wine-patches
mailing list