Я хочу использовать NSLocalizedString для смены языков для Mac, а не для IOS. Вот шаги, которые я сделал. Однако, когда я перезапускаю приложение, язык по-прежнему не меняется.
- Добавьте новые файлы xib, а также NSLocalizedString.
- Создайте NSMenuItems.
Затем я создал один IBAction и соединился со всеми NSMenuItems с помощью этой функции.
-(IBAction)languageDidSelect: (id)sender { [[NSUserDefaults standardUserDefaults] setObject:[languages objectAtIndex: [sender tag]] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize]; [sender setState: NSOnState]; [self relaunch]; } -(void)relaunch { isRelaunch = true; //boolean variable [[NSApplication sharedApplication]terminate:nil]; exit(0); } - (void)applicationWillTerminate:(NSNotification *)notification { //relaunch the app via NSTask if (isRelaunch) { NSString *appPath = [[NSBundle mainBundle] bundlePath]; NSTask *task = [NSTask new]; [task setLaunchPath:@"/usr/bin/open"]; [task setArguments:[NSArray arrayWithObjects:appPath, nil]]; [task launch]; //After finished relaunch, run the following function [self finishedRelaunch]; } } -(void)finishedRelaunch { NSArray* langs = [[NSUserDefaults standardUserDefaults] objectForKey: @"AppleLanguages"]; //setLanguage function is using to change the NSMenuItem state if ([langs count] > 0) [self setLanguage: [langs objectAtIndex: 0]]; else [self setLanguage: nil]; } //Use to set NSMenuItem state - (void)setLanguage:(NSString *)name { NSString* ident = [NSLocale canonicalLocaleIdentifierFromString: name]; [[[languageMenu submenu] itemWithTag: 0] setState: (nil == name) ? NSOnState : NSOffState]; [[[languageMenu submenu] itemWithTag: 1] setState: ([ident isEqual: @"en"]) ? NSOnState : NSOffState]; [[[languageMenu submenu] itemWithTag: 2] setState: ([ident isEqual: @"de"]) ? NSOnState : NSOffState]; ... }
- The result is, when I checked the plist, “AppleLanguages” section did changed to new language (from jp -> de). However, the xib files and string did not change at all. Could you guys tell me how to fix it?
Спасибо!!! (Моя цель разработки — 10.5, а мой базовый SDK — OS X 10.7)