2012-07-20 13 views
6

Uygulamamda (yalnızca uygulama dili değil, tüm sistem dili)'u değiştirmek için uygulamamda bir seçenek olmasını istiyorum, lütfen bana biraz ipucu verir misiniz? peşiniOS'taki uygulama dili ayarını değiştir tüm cihaz değil

sayesinde

Ben yerelleştirme hakkında bilmek!

+0

Bu gönderinin iyi bir başlangıç ​​noktası olduğunu düşünüyorum: http: // stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-spesifik-dil –

+0

Bence cihazınız olmadan sadece uygulamanızın dilini değiştiremezsiniz. –

+0

@VineeshTP Gelişirken cihaz ve simülatörün dil ayarlarını değiştirebilirsiniz. Cevabıma bir bak. – Abizern

cevap

2

Bunu Xcode'dan oluşturduğunuz özel yapı işaretlerini kullanarak yapabilirsiniz. Bu şekilde, bir cihazın tüm ayarlarını değiştirmekten ziyade bir lokalizasyon altında bir uygulamayı çalıştırabilirsiniz.

Ben http://abizern.org/2012/03/18/simple-localisation-testing/

bu konuda bir blog yazısı yazdı Ve nasıl kullanıldığını görmek için kullanabileceği Github bir örnek projesi vardır: https://github.com/Abizern/SimpleLocalisationTesting

+0

Aynı soruya sahibim ama bunu nasıl bulabilirim -AppleLanguages ​​soryy IOS –

+0

için yeni olduğum Sadece çalışma zamanında geçirebileceğiniz bayraklardan biri. – Abizern

+1

Dokümanlar için teşekkürler. Ancak bu dokümantasyondan, – User16119012

1

Özel bir yerelleştirmeyi, sözlük dizisi ile dolu .plist tarafından oluşturdum. Bunun gibi:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

Projemde bu dizeleri okumak için tek bir sınıf hazırladım. Seçeneklerde kullanıcı, gerekli dili seçer (ilk başlangıç ​​uygulamasında geçerli sistem durumundan dili seçin veya varsayılanı ayarlar). Seçilen dil, bir sonraki başlatmada kullanmak üzere dosyaya veya ayarlara kaydedilmelidir. Singleton'da +getStringWithKey: var. Bu yüzden ben de "kYes" 'i geçiyorum ve sadece uygulama için mevcut lokalizasyon için string aldım. Ayrıca, standart yerelleştirme dosyalarını, hatta boş olsa bile, yansıtmak için eklemeniz gerekir, çünkü desteklemezseniz, desteklediğiniz tüm diller iTunes'da gösterilmez.

1

Aslında nasıl başka bir fikir düşünüyordum uygulamalarınızdaki dili değiştirin ui, ancak sizi 1'e zorlar. Tüm dizeleri manuel olarak ayarlayın. 2. Dil ayarı değiştiğinde tüm kullanıcı arayüzlerini güncelleyen bir yöntem (bildirim) sağlayın. Fikir, bir dizenin yerelleştirilmiş sürümünü bulmak için iOS'un kullandığı yöntemle aynıdır. Bu nedenle, bir ön koşul olarak, dil_id.lproj klasör yapısıyla birlikte bir paket (ör. AppNameStrings.bundle) sağlamanız gerekir; burada, dil_id, sağlamak istediğiniz dillerin tanımlayıcısıdır. Bir paket oluşturarak böyle bir paket oluşturabilir, Finder'da açabilir ve root.plist dosyasını silebilirsiniz. Ardından, paketinizden okumak için kullanabileceğiniz bir işleve ihtiyacınız var. Burada yerel dizeleri okumak için kullandığım 2 yöntem var. Sen

[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language] 

için NSBundle bir kategori oluşturmak zorunda senin GlobalDefinitions.m dosyası

NSBundle *yourNameBundle(void) { 
static NSBundle* bundle = nil; 
    if (!bundle) { 
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"]; 
    bundle = [NSBundle bundleWithPath:path]; 
    } 
    return bundle; 
} 
NSString *YourNameLocalized(NSString *stringToken, NSString *language) { 
    if (yourNameBundle()) { 
    return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]; 
    } else { 
    return stringToken; 
    } 
} 

bu kodu GlobalDefinitions.h dosyası

#ifdef __OBJC__ 
NSBundle *yourNameBundle(void); 
NSString *YourNameLocalized(NSString *stringToken, NSString *language); 
#endif 

aşağıdaki yöntemleri koyun ve standart yöntem olarak dil parametresini özlüyor. Yönteminizde ilgili language.lproj/Root.strings dosyasını açar ve stringToken için tararsınız. Bulamıyorsanız, aksi takdirde metin dizgisini belirtin. Bazı metnin yerelleştirilmiş bir sürümüne ihtiyacınız olduğunda, ör. label.text = YourNameLocalized (@ "Token", [self supplyLanguageIdentifier); ve sen bitti. Şimdiye kadar yapmadım ama işe yaramalı.

İlgili konular