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);
- Twiiter API未能获得关注者和以下详细信息
- 无法将typesPromise(_,_) – > DataRequest的返回expression式转换为返回typesPromise <DataResponse,AnyObject >>