Как изменить настройку языка в приложении?Изменение настройки языка в приложении
Мне нужно добавить функциональность настройки языка в проект.
Как изменить настройку языка в приложении?Изменение настройки языка в приложении
Мне нужно добавить функциональность настройки языка в проект.
Попробуйте это:
// 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
Если вы хотите изменить язык в вашем приложении. Есть два решения для рассмотрения.
Первый вынуждает основной пакет для загрузки конкретного источника локали
.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
, чтобы указать «расслоение» и «таблица» выбранного языка.
Надеюсь, это было бы полезно.
Ум, вы пробовали найти такую ссылку? – dorukayhan
Обычно, как только вы реализовали локализацию, ваше приложение, в первую очередь, следовало бы за языком вашего устройства. Если вы хотите явно указать язык, вам нужно указать пакет для вашего приложения, например, пусть path = NSBundle.mainBundle(). PathForResource (язык, ofType: "lproj", inDirectory: nil, forLocalization: language) { LocalizationHelper.bundle = NSBundle (путь: путь) } – Happiehappie
Язык - это ваш код языка, указанный в Xcode, так как имя вашего файла будет выглядеть как "en.lprog" – Happiehappie