2017-06-04 26 views
0

重新啓動我在iOS的新的,我爲什麼語言變化所需的應用程序在目標C

對於英語我使用這樣的

[[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]; 

但每次它需要重新啓動應用程序。是否有任何解決方案或者我做錯的任何事情。 在此先感謝!

+0

你能解釋一下應用程序流?以及你想要改變語言的人。 –

+0

如果您已將此代碼放入應用程序委託中,則只會運行一次 - 當您重新啓動應用程序時。 – holex

回答

2

Muju我創建了示例項目,並且我正在爲您的問題獲得解決方案。我完美地獲得瞭解決方案。

在我下面的示例中,我要改變「歡迎來到泰國」此爲「ยินดีต้อนรับสู่ประเทศไทย」。我使用本地化的概念。

臨睡前步驟,我希望你能看到我的故事板設計

enter image description here

請按照下面的步驟。

步驟1:單擊項目 - >信息 - > Localization->點擊+

現在它顯示下拉語言列表。從我們應該選擇泰國

enter image description here

第2步:一旦我們選擇或選擇從下拉列表中選擇語言,它顯示下面的窗口,我們需要單擊Finish按鈕

enter image description here

現在它看起來像下面

enter image description here

第3步:爲本地化創建字符串文件並設置名稱。

enter image description here

enter image description here

enter image description here

上面我設置字符串的文件名作爲LocalizationThai

第4步:單擊LocalizationThai.strings也單擊文件Inspector.Click本地化在File Inspector中。現在它顯示下面的彈出框。

enter image description here

第5步:點擊Localize.Once您本地化,它下面這樣表示

enter image description here

步驟6:點擊複選框3

enter image description here

現在捆綁,我們有下LocalizationThai.strings

enter image description here

STEP 7 3個文件:寫下您需要更改文本字符串的文件。

i.In LocalizationThai.strings(泰國)文件我下面寫的文字

enter image description here

ii.In LocalizationThai.strings(英語)文件我下面寫的文字

enter image description here

iii.In LocalizationThai。字符串(基地)文件我下面寫的文字

enter image description here

第8步:創建多語言的頭文件。

enter image description here

步驟9:設置在標題名稱(I設置標題名稱爲LocalizationHeader)和在頭文件定義語言象下面

enter image description here

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 

當我運行的應用程序第一

enter image description here

然後當我改變了語言從英語到泰國

enter image description here

當我再次將其更改爲英語

enter image description here

你必須遵循的廈門國際銀行

下同步驟是廈門國際銀行

我創建XIB.ViewController名的ViewController是RootViewController的 enter image description here

現在看到的設計部分 enter image description here

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 

現在看到的結果

enter image description here

enter image description here

+0

不適合我。 – Muju

+0

我使用xib是一個問題。 – Muju

+0

另外它適用於xib也請嘗試它。 – user3182143

0

喜在我們捆綁了存儲本地化文件IOS .. 當我們切換使用 [NSUserDefaults的standardUserDefaults]的setObject語言:[NSArray的arrayWithObjects:@ 「TH-TH」,零] forKey:@」 AppleLanguages「]; [[NSUserDefaults standardUserDefaults] synchronize];

它只是改變當前應用程序的語言環境而不是本地化包。

要更改inApp語言,您需要更改語言包。 要改變語言應用程式內需要使用

BundleLocalization

https://github.com/cmaftuleac/BundleLocalization

[BundleLocalization sharedInstance]。外語= @ 「德」; NSLog(@「Application language:%@」,[BundleLocalization sharedInstance] .language);

+0

它不適合我 – Muju

相關問題