Возникла проблема с интернационализацией MainMenu.xib для приложения Mac OS X на основе какао - PullRequest
0 голосов
/ 03 января 2012

Я работаю в проекте Mac OS X на основе Какао и сталкиваюсь с одной проблемой при интернационализации MainMenu.xib.

В пунктах меню все заголовки необходимо программно интернационализировать. Все пункты меню, такие как «вырезать», «копировать», «вставить», можно интернационализировать с помощью setTitle, кроме заголовка пункта «Отменить» и «Повторить». Кроме того, после ввода чего-либо в текстовые поля форм проекта заголовок элемента меню отмены динамически меняется на «Отменить ввод». То же самое происходит и с «Redo».

Я могу установить заголовки других меню и заголовок пунктов меню, используя,

[[[[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».

Так, как я могу отследить это динамическое изменение в заголовке и сделать интернационализацию "Undo Typing" также?

Можно ли вручную получить первый респондент файла MainMenu.xib и получить от него объект отмены менеджера? Чтобы я мог отменить привязку действия отмены, которое в настоящее время присутствует в первом респонденте, с помощью пункта меню отмены и выполнить операцию отмены вручную или можно просто изменить заголовок программно, не делая все это.

Пожалуйста, дайте мне знать, если кто-нибудь сталкивался с этой проблемой и решил ее.

1 Ответ

1 голос
/ 03 января 2012

Создайте подкласс NSUndoManager и переопределите метод undoMenuTitleForUndoActionName: и метод redoMenuTitleForUndoActionName: .Создайте экземпляры этого подкласса для каждого документа (или контекста управляемого объекта, или другого объекта), для которого требуется менеджер отмены.

...