更改应用程序中的语言设置

时间:2016-07-21 00:37:50

标签: ios cocoa-touch localization

如何更改应用程序中的语言设置?

我需要为项目添加语言设置功能。<​​/ p>

2 个答案:

答案 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语言环境,但是,您希望德语中的英语将在新加坡显示不同的英语内容。简而言之,您可以创建自己的捆绑资源,放置所有受支持的语言,然后使用NSLocalizedStringWithDefaultValueNSLocalizedStringFromTableInBundle指定所选语言的“捆绑”和“表格”。

希望这会有所帮助。