2011-05-06 26 views
5

Uygulama dilini değiştirmeye çalışıyorum, ancak bir uygulamayı kapatıp tekrar çalıştırdıktan sonra bu kodu main.h dilinde çalıştıracağım. Yeniden başlatılmadan dil değiştirmek mümkün mü?dil değişikliği sadece iphone yeniden başlatıldıktan sonra

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSArray *languages = [NSArray arrayWithObject:@"en_GB"]; 
    [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 
+0

aşağıdaki sonrası benim cevap kontrol edin: http://stackoverflow.com/a/20257557/306764 –

cevap

3

Güncelleme

NSLocalizedString() "uygulaması içinde dillerini nasıl değiştirilir" (ve varyasyonları) cevap tercih diller için kullanıcının ayarları belirlemek için NSUserDefaults içinde "AppleLanguages" tuşuna erişmek . Bu, bir dil kodu dizisini döndürür, bunlardan ilki, kullanıcı tarafından telefon için ayarlanmış olan ve daha sonra tercih edilenler, bir kaynak tercih edilen dilde mevcut değilse, geri dönüş olarak kullanılır.

İster kendi yaptığınız gibi kendi dil listenizi ayarlamak için setObject: forKey: yöntemini kullanarak isterseniz, kendi uygulamanız için genel ayarı geçersiz kılabilirsiniz. Bu, global olarak belirlenen değere göre öncelikli olacak ve uygulamanızda yerelleştirmeyi gerçekleştiren herhangi bir koda geri dönecektir.

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

Not: Bu kod benzer görünümde olacaktır güvenli tarafta olmak için buna uygun bir ön tanımlı diller adını kullandığınızdan emin olun.

Kod snippet'i aşağıdadır, ancak projenizdeki tüm yerelleştirme dosyalarına sahip olmalısınız.

@implementation LocalizeLanguage 

static NSBundle *bundle = nil; 

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

/* 
    [LocalizeLanguage setLocalizeLanguage:@"en"]; 
    [LocalizeLanguage setLocalizeLanguage:@"fr"]; 
*/ 

+(void)setLocalizeLanguage:(NSString *)lang { 
    NSLog(@"preferredLang: %@", lang); 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

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

@end 
+3

Tamam, ama ben zaten bunu yapmış :) Ve her şey perfectlly çalışıyor. Mevcut iPhone dili İngilizce olduğunda, uygulama Settings.app uygulamasında dili değiştirmek için bir olasılık eklemek istiyorum. ama kullanıcı benim uygulama için Fransızca i Settings.app ayarladı. Uygulamamı Fransızca olarak yerelleştirmek için zorlamak zorundayım. Bunu daha önce yazdığım kodu kullanarak yapmaya çalışıyorum ve işe yarıyor ama bundan sonra uygulamayı yeniden başlatmam gerekiyor ve bu, çözmeye çalıştığım sorun. – pawelini1

+0

Cevabı güncelledim - ama yapmak istediğinizi yapmak gerekli değil. iOS işletim sistemine yerleşik yerelleştirme desteğine sahiptir - yapmanız gereken tek şey uygun dil dosyalarını sağlamaktır ve kullanıcı istediği dili seçebilir. Ama yine de bu sizin için çalışacaktır - iyi şanslar! :) – Deminem

+1

Aynı problemi aldım! –

İlgili konular