Ahmed Said
Ahmed Said

Reputation: 1315

iOS Change app Language doesn't take effect

I am changing my iOS application preferred language dynamically using this setting:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"ar"] forKey:@"AppleLanguages"];

Then I load a localised resource file from the main NSBundle object, but the loaded file isn't of the new language, it's loaded in the default english language until I restart the application totally then it loads the arabic localisation.

I want to force NSBundle to load the resource file in the new language @"ar" not the language been set when app starts. How?

Upvotes: 0

Views: 1069

Answers (3)

Umair Ali
Umair Ali

Reputation: 836

You need to synchronize user defaults after changing the language: [[NSUserDefaults standardUserDefaults] default synchronize]

Upvotes: 0

Vish
Vish

Reputation: 341

I have tried this and its working fine without restarting the app:

//Use this in constants
#ifdef NSLocalizedString
#undef NSLocalizedString
#endif
#define NSLocalizedString(str, cmt) NSLocalizedStringFromTableInBundle(str, nil, newLangbundle, cmt)

newLangbundle --> Define a global variable in .pch and vary it according to language selection using this,

 NSString* path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"];
 newLangbundle = [NSBundle bundleWithPath:path];

Upvotes: 0

Léo Natan
Léo Natan

Reputation: 57040

Your method is a hacky way to get what you need, and requires app restart to take effect.

It is best to use NSLocalizedStringFromTableInBundle instead of NSLocalizedString, and provide the bundle for that language.

NSString* path = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"];
NSBundle* ar_bundle = [NSBundle bundleWithPath:path];

NSLocalizedStringFromTableInBundle(@"str", nil, ar_bundle, @"comment");

If you put the bundle in a global scope, you can create a macro for ease:

#define ARLocalizedString(str, cmt) NSLocalizedStringFromTableInBundle(str, nil, ar_bundle, cmt)

Upvotes: 3

Related Questions