面对基于Cocoa的Mac OS X应用程序的MainMenu.xib国际化问题

时间:2012-01-03 04:16:29

标签: cocoa internationalization nsundomanager

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

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

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

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

for MainMenu.xib"编辑"菜单和类似的,

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

for NSMenuItem" Copy"这是在"编辑"菜单。

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

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

menuItem标题仍保留为"撤消"

NSUndoManager提供方法undoMenuItemTitle和redoMenuItemTitle,但NSUndoManager不会将-setTitle:消息发送到"撤消"和"重做"菜单项。

那么我如何跟踪标题中的动态变化并进行#34;撤消键入"国际化呢?

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

如果有人遇到此问题并解决了问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

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