Objective C为什么需要更改语言来重新启动应用程序?

我是iOS新手,面临语言转换问题

对于英文我正在使用这样的代码

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults]synchronize]; //to set the selected language at runtime (dynamically) NSLog(@"Language set=Malay"); [NSBundle setLanguage:@"en"]; MenuScreen *menu=[[MenuScreen alloc] initWithNibName:@"MenuScreen" bundle:nil]; [self.navigationController pushViewController:menu animated:YES]; 

对于泰语,我使用这样的代码

 [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"th-TH", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults]synchronize]; //to set the selected language at runtime (dynamically) NSLog(@"Language set=Malay"); [NSBundle setLanguage:@"th-TH"]; MenuScreen *menu=[[MenuScreen alloc] initWithNibName:@"MenuScreen" bundle:nil]; [self.navigationController pushViewController:menu animated:YES]; 

但每次需要重新启动应用程序。 是否有任何解决scheme,这或我做错了什么。 提前致谢!

Muju我创build了示例项目,我正在为您的问题获得解决scheme。我完美地得到了解决scheme。

在我下面的示例中,我想将“ 欢迎来到泰国 ”更改为“ยินดีต้อนรับสู่ประเทศไทย”。我使用本地化的概念。

在进行步骤之前,我希望你看到我的故事板devise

在这里输入图像说明

请按照以下步骤。

步骤1:点击Project-> info-> Localization-> Click +

现在显示语言的下拉列表。我们应该select泰语

在这里输入图像说明

步骤2:一旦我们select或从下拉列表中select语言,它会显示下面的窗口,我们需要点击完成button

在这里输入图像说明

现在看起来像下面

在这里输入图像说明

步骤3:为本地化创buildstring文件并设置名称。

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

上面我把String文件名设置为LocalizationThai

第四步:单击LocalizationThai.strings,同时单击File Inspector。单击File Inspector中的Localization。现在它显示下面的popup框。

在这里输入图像说明

第5步:点击本地化。一旦你本地化,它显示如下

在这里输入图像说明

步骤6:点击3checkbox

在这里输入图像说明

现在捆绑在LocalizationThai.strings下有3个文件

在这里输入图像说明

第7步:在string文件中写出您所需的更改文本。

i.In LocalizationThai.strings(泰国)文件我写在文本下面

在这里输入图像说明

ii。在LocalizationThai.strings(英文)文件下面写下文字

在这里输入图像说明

iii。在LocalizationThai.strings(Base)文件中我写下文字

在这里输入图像说明

步骤8:为多种语言创build标题文件。

在这里输入图像说明

第9步:设置标题名称(我设置标题名称为LocalizationHeader),并在头文件中定义语言如下

在这里输入图像说明

LocalizationHeader.h

 #ifndef LocalizationHeader_h #define LocalizationHeader_h #define ENGLISH 0 #define THAI 1 #endif /* LocalizationHeader_h */ 

步骤10:实现下面的编码部分

Localization.h

 #import <Foundation/Foundation.h> #import "LocalizationHeader.h" @interface Localization : NSObject +(Localization *)sharedInstance; +(NSString*) strSelectLanguage:(int)curLang; +(NSString*) languageSelectedStringForKey:(NSString*) key; @end 

Localization.m

 #import "Localization.h" int currentLanguage,selectedrow; @implementation Localization +(Localization *)sharedInstance { static Localization *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[Localization alloc] init]; }); return sharedInstance; } +(NSString*) strSelectLanguage:(int)curLang{ if(curLang==THAI){ [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"th", nil]forKey:@"AppleLanguages"]; } else{ [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil]forKey:@"AppleLanguages"]; } [[NSUserDefaults standardUserDefaults] synchronize]; currentLanguage=curLang; NSString *strLangSelect = [[[NSUserDefaults standardUserDefaults]objectForKey:@"AppleLanguages"] objectAtIndex:0]; return strLangSelect; } +(NSString*) languageSelectedStringForKey:(NSString*) key { NSString *path; NSString *strSelectedLanguage = [[[NSUserDefaults standardUserDefaults]objectForKey:@"AppleLanguages"] objectAtIndex:0]; //When we check with iPhone,iPad device it shows "en-US".So we need to change it to "en" if([strSelectedLanguage hasPrefix:@"en-"]) strSelectedLanguage = [strSelectedLanguage stringByReplacingOccurrencesOfString:@"en-US" withString:@"en"]; if([strSelectedLanguage isEqualToString:[NSString stringWithFormat: @"en"]]){ currentLanguage=ENGLISH; selectedrow=ENGLISH; path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; } else{ currentLanguage=THAI; selectedrow=THAI; path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"]; } NSBundle* languageBundle = [NSBundle bundleWithPath:path]; NSString* str=[languageBundle localizedStringForKey:key value:@"" table:@"LocalizationThai"]; return str; } @end 

ViewController.h

 #import <UIKit/UIKit.h> #import "Localization.h" @interface ViewController : UIViewController{ Localization *localization; } @property (strong, nonatomic) IBOutlet UILabel *lblWelcome; - (IBAction)actionChangeLanToThai:(id)sender; - (IBAction)actionChangeLangToEng:(id)sender; @end 

ViewController.m

 #import "ViewController.h" @interface ViewController () @end @implementation ViewController @synthesize lblWelcome; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. localization = [Localization sharedInstance]; lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)actionChangeLanToThai:(id)sender { [Localization strSelectLanguage:THAI]; lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"]; } - (IBAction)actionChangeLangToEng:(id)sender { [Localization strSelectLanguage:ENGLISH]; lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"]; } @end 

当我第一次运行应用程序

在这里输入图像说明

然后当我将语言从英语改为泰语时

在这里输入图像说明

当我把它改成英文的时候

在这里输入图像说明

你必须按照XIB相同的步骤

以下是XIB

我用XIB.ViewController创build了ViewController,名字是RootViewController 在这里输入图像说明

现在看到devise部分 在这里输入图像说明

AppDelegate.h

 #import <UIKit/UIKit.h> #import "RootViewController.h" @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong,nonatomic) RootViewController *viewController; @end 

AppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; self.window.rootViewController = navController; [navController setNavigationBarHidden:YES]; [self.window makeKeyAndVisible]; return YES; } 

RootViewController.h

  #import <UIKit/UIKit.h> #import "Localization.h" @interface RootViewController : UIViewController{ Localization *localization; } @property (strong, nonatomic) IBOutlet UILabel *lblWelcomeThaiLang; - (IBAction)actionChangeLangToThai:(id)sender; - (IBAction)actionChangeLangToEng:(id)sender; @end 

RootViewController.m

  #import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController @synthesize lblWelcomeThaiLang; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)actionChangeLangToThai:(id)sender { [Localization strSelectLanguage:THAI]; lblWelcomeThaiLang.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"]; } - (IBAction)actionChangeLangToEng:(id)sender { [Localization strSelectLanguage:ENGLISH]; lblWelcomeThaiLang.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"]; } @end 

现在看到结果

在这里输入图像说明

在这里输入图像说明

您好在ios我们有捆绑存储本地化文件..当我们切换语言使用[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@“th-TH”,nil] forKey:@“AppleLanguages”]; [[NSUserDefaults standardUserDefaults] synchronize];

它只是改变当前的应用程序的语言环境,而不是本地化的捆绑。

要更改inApp语言,您需要更改语言包。 要更改inApp语言,您需要使用

BundleLocalization

https://github.com/cmaftuleac/BundleLocalization

[BundleLocalization sharedInstance] .language = @“de”; NSLog(@“Application language:%@”,[BundleLocalization sharedInstance] .language);