2016-07-21 6 views
0

Как изменить настройку языка в приложении?Изменение настройки языка в приложении

Мне нужно добавить функциональность настройки языка в проект.

+0

Ум, вы пробовали найти такую ​​ссылку? – dorukayhan

+0

Обычно, как только вы реализовали локализацию, ваше приложение, в первую очередь, следовало бы за языком вашего устройства. Если вы хотите явно указать язык, вам нужно указать пакет для вашего приложения, например, пусть path = NSBundle.mainBundle(). PathForResource (язык, 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 ... 

, то вы можете вызвать Traduction строки настроены на Localizable.strings так: CurrentNSLocalizedString(@"my_text")

А вот некоторые ссылки, чтобы использовать ваши строки перевода: https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html

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

0

Если вы хотите изменить язык в вашем приложении. Есть два решения для рассмотрения.

Первый вынуждает основной пакет для загрузки конкретного источника локали

.h

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

.m

#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 

Этот подход является хорошим и простым способом, как и вы просто добавляете любые поддерживаемые локализации.

Второй является более гибким и позволяет поддерживать либо настройку языка, либо содержание, управляемое, например, одним и тем же языком Eng, однако вы хотите, чтобы английский в Германии показывал различный контент на английском языке в Сингапуре. Проще говоря, вы создаете свой собственный ресурс пакета, помещаете все поддерживаемые языки, а затем используйте NSLocalizedStringWithDefaultValue или NSLocalizedStringFromTableInBundle, чтобы указать «расслоение» и «таблица» выбранного языка.

Надеюсь, это было бы полезно.

Смежные вопросы