: 나는 정적 라이브러리와 이미지와 동반자 번들 파일, 지역화 된 문자열 등을했습니다를 ...
내가 알아 냈어요 그 보인다 정적은 올바른 장치 국산화를 알아낼 수 없습니다 (죄송하지만이 문제의 원인을 찾을 수 없습니다) 그리고 나는이 일을 고정했습니다 당신이 볼 수 있듯이
@implementation NSBundle (KiosKitAdditions)
+ (NSBundle *)kioskitBundle
{
static NSBundle* kioskitBundle = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
NSString *libraryBundlePath = [[NSBundle mainBundle] pathForResource:KKBundleName
ofType:@"bundle"];
NSBundle *libraryBundle = [[NSBundle bundleWithPath:libraryBundlePath] retain];
NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [libraryBundle pathForResource:langID ofType:@"lproj"];
kioskitBundle = [[NSBundle bundleWithPath:path] retain];
});
return kioskitBundle;
}
@end
을 [NSBundle mainBundle]
과 매우 유사한 클래스 메서드를 사용하여 NSBundle 범주를 만들었고 정적 라이브러리에 대한 올바른 번들을 반환하므로 지금까지 사용할 수 있습니다. ywhere 내가 예를 들어, 원하는 :
#define KKLocalizedString(key) NSLocalizedStringFromTableInBundle(key, @"Localizable", [NSBundle kioskitBundle], @"")
를 코드는 내가 정적 라이브러리 번들에 대한 경로를 찾을 첫번째 매우 간단합니다, 현재 장치 언어를 찾은 다음 내가 만들고 그 경로 새로운 NSBundle LIBRARY_PATH/device_language.lproj .
이 방법의 단점은 모든 자산을 항상 현지화해야한다는 것이고 번들에 많은 이미지가있는 경우 고통이 될 수 있습니다 (그러나 이것이 가능하지 않을 수도 있음).
내 카테고리를 채택하지 않으려면
는이 같은 코드를 변경할 수 있습니다 접근 :
NSString *MyLocalizedString(NSString* key, NSString* comment)
{
static NSBundle* bundle = nil;
if (!bundle)
{
NSString *libraryBundlePath = [[NSBundle mainBundle] pathForResource:@"MyStaticLib"
ofType:@"bundle"];
NSBundle *libraryBundle = [NSBundle bundleWithPath:libraryBundlePath];
NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [libraryBundle pathForResource:langID ofType:@"lproj"];
bundle = [[NSBundle bundleWithPath:path] retain];
}
return [bundle localizedStringForKey:key value:@"" table:nil];
}
감사합니다. Luca, 이제 완벽하게 작동합니다. :) – Niko
Niko, 문제의 원인을 찾을 수 있는지 알려주세요. –
사실, 문제는 없지만 이미지가 거의 없습니다. – Niko