2017-06-04 20 views
0

を再起動するなぜ私はiOSの中に新しいですし、私は私が使用タイ語については、この言語の変更に必要なアプリは、Objective 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]; 

いつでもアプリを再起動する必要があります。これまたは私が間違っていることのための解決策はありますか? ありがとうございました!私たちは、ローカライズファイルを格納するためのバンドルを持っているIOSの

+0

結果を参照してください?誰が言語を切り替えるかを選択します。 –

+0

このコードをapp-delegateに入れた場合、アプリを再起動すると1回だけ実行されます。 – holex

答えて

2

私はサンプルプロジェクトを作成しました。私はあなたの質問に答えを出しました。私は完全に解決策を得ました。私の下のサンプルで

私はこのために、「タイにようこそ」を「ยินดีต้อนรับสู่ประเทศไทย」.I利用ローカリゼーション概念を変更したいです。ステップに行く前に

、私はあなたが私のストーリーボードが

enter image description here

を設計見たいと思って、以下の手順に従ってください。

はSTEP 1:プロジェクト - > info-> Localization-> +

をクリックして今では言語のドロップダウンリストを表示]をクリックします。私たちが選択するか、ドロップダウンリストから言語を選択したら、それは窓の下に表示され、私たちは、[完了]ボタンを

enter image description hereをクリックする必要があります。それから、我々はタイ

enter image description here

STEP 2を選択する必要があります

今では

enter image description here

以下のようになります。

ステップ3:ローカリゼーション用の文字列ファイルを作成し、名前を設定します。また、ローカライズInspector.ClickファイルをクリックしLocalizationThai.stringsをクリックしてください:STEP 4

LocalizationThaiとして、私は文字列のファイル名を設定の上

enter image description here

enter image description here

enter image description here

ファイルインスペクタの内側に表示されます。次に、以下のポップアップボックスが表示されます。

enter image description here

STEP 5:3つのチェックボックスをクリックして

enter image description here

:あなたがローカライズLocalize.Onceをクリックして、それがこの

enter image description here

STEP 6のように下に示します

は今の束に、私たちは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

テキスト STEP 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

以下

のために同じ手順を実行する必要があり、私はXIB.ViewController名でのViewControllerがenter image description here

今設計部分 enter image description here

を参照RootViewController で作成

XIBのためであります

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。時間

#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

こんにちは.. 我々は [[NSUserDefaults standardUserDefaults] setObjectメソッドを使用して言語を切り替えるとき:[NSArrayのarrayWithObjects: "TH-TH" @はnil] forKey:@」は、 AppleLanguages]]; [[NSUserDefaults standardUserDefaults] synchronize]];

ローカライゼーションのバンドルではなく、現在のアプリケーションのロケールを変更するだけです。

inAppの言語を変更するには、その言語のバンドルを変更する必要があります。あなたは[BundleLocalization sharedInstance] .language = @ "ド"

BundleLocalization

https://github.com/cmaftuleac/BundleLocalization

を使用する必要がある言語inAppを変更するには 。 NSLog(@ "アプリケーション言語:%@"、[BundleLocalization sharedInstance] .language);

+0

それは私のために働いていません – Muju

関連する問題