如何更改应用程序中的语言设置?
我需要为项目添加语言设置功能。</ p>
答案 0 :(得分: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上配置的字符串的traduction,如: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
答案 1 :(得分: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
指定所选语言的“捆绑”和“表格”。
希望这会有所帮助。