이렇게하면됩니다. 그러나이 코드는 Obj-C에 있습니다.
은 다음과 같이 NSBundle의 카테고리 클래스 만들기 :이 후
#import "NSBundle+ForceLocalization.h"
#import <objc/runtime.h>
static const char _bundle=0;
@interface BundleEx : NSBundle
@end
@implementation BundleEx
-(NSString*)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName
{
NSBundle* bundle=objc_getAssociatedObject(self, &_bundle);
return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];
}
@end
@implementation NSBundle (ForceLocalization)
+(void)setLanguage:(NSString*)language
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^
{
object_setClass([NSBundle mainBundle],[BundleEx class]);
});
objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
, 단순히 전화 :
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects: langCode, nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
[NSBundle setLanguage: langCode];
는 다시 현재 화면의 UI를 다시로드해야합니다. 다른 컨트롤러로 이동하면 업데이트 된 언어가 표시됩니다.
[ios swift에서 현지화가 가능합니다. 어떻게 런타임에 응용 프로그램 언어를 변경할 수 있습니까?] (http://stackoverflow.com/questions/35425788/localization-in-ios-swift-how-can-i-change-application-language-at-run-time) – MwcsMac
NSLocalizedString 및 스토리 보드 현지화를 사용하고 있으므로 레이블을 변경하지 않으려 고합니다. 아랍어의 경우 오른쪽 - 왼쪽 또는 영어의 경우 왼쪽 - 오른쪽으로 이동해야하므로 번들을 다시로드해야합니다. 나는 많은 애플 리케이션을 보았다. 새 언어를 선택하자마자 선택한 언어로 된 앱이 다시 실행됩니다. – Diyaa
이 요점을 확인하십시오. https://gist.github.com/afshin-hoseini/a46f431fbe6bb20fde8e8ed675e81018 – Afshin