0

Is it possible to use a .String file like the Localizable.String but the language change with a button in the application instead of language in settings ? If not, is there a way to indicate how to use the EN language in the FR langage for example :

In the FR language or EN language, I use => FXFormFieldTitle:NSLocalizedString(@"SMSInfo", @"")

And respectively I have that line in the FR localizable.String

/* 
  File.strings
  Formbox

  Created by OlostA on 04/11/2016.
  Copyright © 2016 NewTelApps. All rights reserved.
*/
"SMSInfo" = "Souhaitez-vous recevoir par sms les informations de la marque ?";

And that line in the EN localizable.String

/* 
  File.strings
  Formbox

  Created by OlostA on 04/11/2016.
  Copyright © 2016 NewTelApps. All rights reserved.
*/
"SMSInfo" = "Do you want to receive the brand informations by sms?";

So question. If I am in the FR language, is there a way to use the SMSInfo in the localizable.strings EN ?

vaibhav
  • 4,038
  • 1
  • 21
  • 51
ΩlostA
  • 2,501
  • 5
  • 27
  • 63
  • You can access the .strings file as adictionary and get the value. Please refer http://stackoverflow.com/questions/3153600/iphone-reading-from-localizable-strings-file-as-a-key-value-in-a-dictionary – Teja Nandamuri Nov 04 '16 at 13:45
  • Here is a solution already answered, take a look : http://stackoverflow.com/questions/22061402/change-language-in-the-app-programmatically – Tushar Nov 04 '16 at 13:46

1 Answers1

0

Yes this is possible to change language from app.

[LanguageManager saveLanguageByIndex:indexPath.row andCode:model.strLanguageCode];

LanguageManager.h

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger, ELanguage)
{
    ELanguageEnglish,
    ELanguageSpanish,
    ELanguageFrench,
    ELanguageGerman,
    ELanguageItalian,
    ELanguageArabic,
    ELanguageChinese,


    ELanguageCount
};

@interface LanguageManager : NSObject

+ (void)setupCurrentLanguage;
+ (NSArray *)languageStrings;
+ (NSString *)currentLanguageString;
+ (NSString *)currentLanguageCode;
+ (NSInteger)currentLanguageIndex;
+ (void)saveLanguageByIndex:(NSInteger)index andCode:(NSString *)strCode;
+ (BOOL)isCurrentLanguageRTL;

@end

LanguageManager.m

#import "LanguageManager.h"
#import "NSBundle+Language.h"


static NSString * const LanguageCodes[] = { @"en", @"es", @"fr", @"de",@"it",@"ar" ,@"zh-Hans"};
static NSString * const LanguageStrings[] = { @"English", @"Spanish", @"French", @"German",@"Italian",@"Arabic",@"Chinese"};
static NSString * const LanguageSaveKey = @"currentLanguageKey";

@implementation LanguageManager

+ (void)setupCurrentLanguage
{
    NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    if (!currentLanguage) {
        NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
        if (languages.count > 0) {
            currentLanguage = languages[0];
            [[NSUserDefaults standardUserDefaults] setObject:currentLanguage forKey:LanguageSaveKey];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }   
#ifndef USE_ON_FLY_LOCALIZATION
    [[NSUserDefaults standardUserDefaults] setObject:@[currentLanguage] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];
#else
    [NSBundle setLanguage:currentLanguage];
#endif
}

+ (NSArray *)languageStrings
{
    NSMutableArray *array = [NSMutableArray array];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        [array addObject:NSLocalizedString(LanguageStrings[i], @"")];
    }
    return [array copy];
}

+ (NSString *)currentLanguageString
{
    NSString *string = @"";
    NSString *currentCode = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        if ([currentCode isEqualToString:LanguageCodes[i]]) {
            string = NSLocalizedString(LanguageStrings[i], @"");
            break;
        }
    }
    return string;
}

+ (NSString *)currentLanguageCode
{
    return [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
}

+ (NSInteger)currentLanguageIndex
{
    NSInteger index = 0;
    NSString *currentCode = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        if ([currentCode isEqualToString:LanguageCodes[i]]) {
            index = i;
            break;
        }
    }
    return index;
}

+ (void)saveLanguageByIndex:(NSInteger)index andCode:(NSString *)strCode
{
    if (index >= 0 && index < ELanguageCount) {
        [[NSUserDefaults standardUserDefaults] setObject:strCode forKey:LanguageSaveKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [[NSUserDefaults standardUserDefaults] setObject:@[strCode] forKey:@"AppleLanguages"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [NSBundle setLanguage:strCode];
    }
}

+ (BOOL)isCurrentLanguageRTL
{
    NSInteger currentLanguageIndex = [self currentLanguageIndex];
    return ([NSLocale characterDirectionForLanguage:LanguageCodes[currentLanguageIndex]] == NSLocaleLanguageDirectionRightToLeft);
}
aafat
  • 148
  • 2
  • 19