2016-07-21 2 views
0

응용 프로그램에서 언어 설정을 변경하려면 어떻게합니까?응용 프로그램에서 언어 설정 변경

프로젝트에 언어 설정 기능을 추가해야합니다.

+0

음, 그런 링크를 찾으셨습니까? – dorukayhan

+0

일반적으로 현지화를 구현하면 앱이 먼저 기기의 언어를 따릅니다. 명시 적으로 언어를 지정하려면 응용 프로그램에 번들을 지정해야합니다 (예 : let path = NSBundle.mainBundle(). pathForResource (language, ofType : "lproj", inDirectory : nil, forLocalization : language) { LocalizationHelper.bundle = NSBundle (경로 : 경로) } – Happiehappie

+0

언어는 Xcode에 지정된 언어 코드이며 파일 이름은 "en.lprog"와 같습니다. – Happiehappie

답변

0

이 시도 :

// reading the language from the preferredLanguages in the bundle project architecture. 
#define currentLanguageBundle [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]] 
#define CurrentNSLocalizedString(key) NSLocalizedStringFromTableInBundle(key, nil, currentLanguageBundle, @"") 

// you can set language in the same location preferred settings like this : 
[[NSUserDefaults standardUserDefaults]setObject:lang forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
// lang can be : 
@"fr" 
@"en" 
@"de" 
@"es" 
@"it" 
// etc ... 

는 다음과 같이 Localizable.Strings에 구성된 문자열의 어 번역 호출 할 수 있습니다 https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html

: 여기 CurrentNSLocalizedString(@"my_text")

그리고 당신의 문자열 변환을 사용하는 몇 가지 링크가 있습니다

https://www.raywenderlich.com/64401/internationalization-tutorial-for-ios-2014

0

언어를 변경하려면 귀하의 응용 프로그램에서 설정. 고려해야 할 2 가지 솔루션이 있습니다. 첫 번째는

#import "NSBundle+HLanguage.h" 
#import <objc/runtime.h> 

static const char _bundle=0; 

@interface HBundle : NSBundle 
@end 

@implementation HBundle 
-(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 (HLanguage) 
+(void)setLanguage:(NSString*)language 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^
        { 
         object_setClass([NSBundle mainBundle],[HBBundle class]); 
        }); 
    objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
@end 

이러한 접근 방식은 좋은 간단한 방법입니다, 같은

.H

@interface NSBundle (HLanguage) 
+(void)setLanguage:(NSString*)language; 
@end 

하는 .m에게 특정 로케일 소스를로드 할 주요 번들을 강요

지원되는 모든 지역화를 추가하기 만하면됩니다.

두 번째 언어는 더 유연하며 언어 설정 또는 동일한 영어 로케일로 구동되는 콘텐츠를 지원할 수 있습니다.하지만 독일에서 영어로는 싱가포르에서 영어로 다른 콘텐츠가 표시되기를 원합니다. 간단히 말하면, 자신의 번들 리소스를 만들고 지원되는 모든 언어를 넣은 다음 NSLocalizedStringWithDefaultValue 또는 NSLocalizedStringFromTableInBundle을 사용하여 선택한 언어의 "번들"과 "테이블"을 지정하십시오.

희망이 있으면 도움이 될 것입니다.

관련 문제