0

我在一个基于 Cocoa 的 Mac OS X 项目中工作,并面临一个国际化 MainMenu.xib 的问题。

在菜单项中,所有标题都需要以编程方式进行国际化。除了撤消和重做菜单项标题外,所有菜单项,如“剪切”、“复制”、“粘贴”都可以使用 setTitle 进行国际化。除此之外,在项目表单的文本字段中键入任何内容后,撤消菜单项标题动态更改为“撤消键入”。“重做”也是如此。

我可以使用设置其他菜单的标题和菜单项的标题,

[[[[NSApp mainMenu] itemAtIndex:1] submenu]setTitle:@"Edit_Test"] 

对于 MainMenu.xib “编辑”菜单,类似地,

[[[[[NSApp mainMenu] itemAtIndex:1] submenu]itemAtIndex:4]setTitle:@"Copy_Test"] 

对于“编辑”菜单下的 NSMenuItem “复制”。

但是如果我使用相同的代码,

  [[[[[NSApp mainMenu] itemAtIndex:1] submenu]itemAtIndex:0]setTitle:@"Undo_Test"] 

menuItem 标题仍保持为“撤消”

NSUndoManager 提供了 undoMenuItemTitle 和 redoMenuItemTitle 方法,但是 NSUndoManager 不会将 -setTitle: 消息发送到“Undo”和“Redo”菜单项。

那么如何跟踪标题的动态变化并使“撤消打字”也国际化呢?

是否可以手动获取 MainMenu.xib 的第一响应者并从中获取 undomanager 对象?这样我就可以使用撤消菜单项解除第一响应者中当前存在的撤消操作并手动执行撤消操作,或者是否可以仅以编程方式更改标题而不执行所有这些操作。

请让我知道是否有人遇到此问题并解决了该问题。

4

1 回答 1

1

创建一个NSUndoManager 的子类并覆盖undoMenuTitleForUndoActionName:methodmethod。为需要撤消管理器的每个文档(或托管对象上下文或其他事物)创建此子类的实例。redoMenuTitleForUndoActionName:

于 2012-01-03T04:34:36.683 回答