2014-10-21 13 views
5

Ben kod dil çalışma zamanı geçmek için aşağıdaki adres:IOS'da çalışma zamanında dile geçtikten sonra yerelleştirilmiş storyboard dizeleri nasıl edinilir?

-(void) switchToLanguage:(NSString *)lang{ 
    self.language = lang; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:self.language, nil] 
             forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

Ve yerelleştirilmiş dizeleri alır bir yardımcı işlevi vardır: Bu çalışıyor

+(NSString *) getLocalizedString:(NSString *)key{ 
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" 
               ofType:@"strings" 
              inDirectory:nil 
             forLocalization:appDelegate.language]; 

    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; 
    return [dict objectForKey:key]; 
} 

. Hikaye tahtalarım da yerelleştirildi, ancak başka bir dile geçtiğimde değişmiyorlar.

Film şeridi dizeleri için yerelleştirilmiş değerleri nasıl alabilirim?

+0

Eğer Baz Internationalization veya her dil için ayrı görsel senaryolar kullanıyor musunuz? –

+0

Temel içleştirme kullanıyorum. – Burak

cevap

2

Dilin çalışma zamanında değiştirilmesi biraz zor.

Bu benim bu küçük sınıfın yardımıyla bunu kullandım iyi yoldur:

Language.m:

#import "Language.h" 

@implementation Language 

static NSBundle *bundle = nil; 

+(void)initialize { 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [languages objectAtIndex:0]; 
    [self setLanguage:current]; 

} 

+(void)setLanguage:(NSString *)l 
{ 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ]; 
    bundle = [NSBundle bundleWithPath:path]; 
} 

+(NSString *)get:(NSString *)key alter:(NSString *)alternate 
{ 
    return [bundle localizedStringForKey:key value:alternate table:nil]; 
} 

@end 

Language.h:

import <Foundation/Foundation.h> 

@interface Language : NSObject 
+(void)setLanguage:(NSString *)l; 
+(NSString *)get:(NSString *)key alter:(NSString *)alternate; 

@end 

ge Dil:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", @"de", nil] forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    [Language setLanguage:@"en"]; 

    [(AppDelegate *)[[UIApplication sharedApplication] delegate] window].rootViewController = [self.storyboard instantiateInitialViewController]; 

Eğer bir dize ayarlamak istiyorum:

[self.someButton setTitle:[Language get:@"Some Button Text" alter:nil] forState:UIControlStateNormal]; 
+0

Bu, gösterilen mevcut görünümü yerelleştirilmiş dizeleri yenileyecek mi? –

+0

Bunu elde etmek için görünümü yeniden yüklemeniz veya en azından dizeleri yeniden kaydetmeniz gerekir. – Segev

İlgili konular