2011-05-22 29 views
6

Xcode 4 kullanarak kendi çerçevemi geliştiriyorum ve iki örnek uygulamada kullanıyorum (bir konsol ve Mac OS X Kakao uygulaması).Xcode 4: Çerçeve yerelleştirme çalışmıyor

Çerçeveye yerelleştirme eklemeye çalışıyorum, bu yüzden Localizable.strings dosyasının iki sürümünü oluşturdum (en ve fr sürümleri), ancak her zaman örnek uygulamalardan yerelleştirilmiş bir dize yazdırmaya çalışıyorum, Sadece teknik ismini aldım. Örneğin, çerçevenin kod içine aşağıdaki satırı ile:

NSLog(NSLocalizedString(@"LOC_TEST", nil)); 

Sadece "LOC_TEST" çıktı görüntülenen olsun ...

Yerelleştirme Kakao uygulamasının yerelleştirilmiş dizeleri anlam Kakao uygulamanın kendisinde ancak (ile çalışıyor uygun şekilde gösterilir).

this article ardından, çerçevenin plist dosyasındaki lokalizasyonu eklemeye çalıştık:

<key>CFBundleLocalizations</key> 
<array> 
    <string>en</string> 
    <string>fr</string> 
</array> 

Ama

ben eksik ... hiçbir şeyi değiştirmedi?

cevap

10

nedeni makro NSLocalizedString içinde: .strings dosyanın

#define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil] 

Framework'ün yeri makro belirtilen [NSBundle mainBundle] değildir.

Gördüğüm kadarıyla

, bunun yerine NSLocalizedStringFromTableInBundle kullanmak ve çerçevenin paket konumu belirtmek gerekiyordu. o yüzden benim çerçevesinde bu makro kullanıyorum [NSBundle mainBundle] kullanma gibi

1

"Teknik ad", sizin adınız olarak, aslında bir Anahtardır. .strings dosyalarınız şunun gibi görünecektir:

/* yorum */ "LOC_TEST" = "LOC_TEST";

tr.lproj/Localizable.strings öğesinde, ikinci LOC_TEST öğesinin (=) öğesinden sonra, ingilizce dizginizle değiştirin. Fransızca metninizle aynısını fr.lproj'da yapın. framework tarafından sağ .strings dosyayı seçmek için değil

+0

Teşekkür √ http://www.LegoTechApps.com (zamanınızı kazandıracak İndir Framework) Enjoy, fakat Konsol uygulamaları hiç yerelleştirme desteği yok gibi görünüyor. Bir yıl önce bu soruyu yayınladım ve o zamandan beri düzenli olarak bir Cocoa uygulamasıyla Konsol uygulamasının yerini aldım. Şimdi her şey iyi çalışıyor! – Romain

2

kabul cevap NSLocalizedString çalışmaz, doğru

#define LOCALIZED_STRING(key) [[NSBundle bundleForClass:[self class]] localizedStringForKey:(key) value:@"" table:nil] 
0

örnek:

sizin .m dosyaya koydu:

#ifndef NSFrameworkLocalizedStrings 
#define NSFrameworkLocalizedStrings(key) \ 
NSLocalizedStringFromTableInBundle(key, @"YOUR_BUNDLE_NAME", [NSBundle bundleWithPath:[[[NSBundle frameworkBundle] resourcePath] stringByAppendingPathComponent:@"YOUR_BUNDLE_NAME.bundle"]], nil) 
#endif 

ve bu yöntemi kullanmak:

+ (NSBundle *)frameworkBundle { 
    static NSBundle* frameworkBundle = nil; 
    static dispatch_once_t predicate; 
    dispatch_once(&predicate, ^{ 
     frameworkBundle = [NSBundle bundleForClass:[self class]]; 
    }); 

    //NSLog(@"frameworkBundle %@",frameworkBundle); 
    return frameworkBundle; 
} 

Yardımlarınız için