0

I am developing an app in which an user can change language at any time. I have done this in a demo app. It is working fine. But there is an issue with it, that is for localisation app I have to do following 2 tasks.

Step 1: I have to create IB outlet for every object (i.e in every class ==> buttons, labels, textFields, TextViews).

Step 2 : I have to set language for every objects for example : [myButton setTitle:[Language get:@"Language Test" alter:nil] forState:UIControlStateNormal]; OR myLabel.text=LocalizedString(@"Forgot Passoword");

I have a project which has many screens, around 60 screens (in storyboard). Unfortunately in this project there is no IB outlet for all objects. Strings are set in via storyboard. Now I have to make support this app in another language also (current language english )name Arabic language.

Conclusion : If I do above 2 steps (create IB outlet for every objects , then write code in .m file for every object). It will take very much time. Is there any other better options please ? I want do not want create IB outlet and coding in .m file. Any suggestion will be great!!

What I have done till now :

Follow these tuttorials :

(1). How to force NSLocalizedString to use a specific language

and sample projects :

(1). https://github.com/tonisalae/TSLanguageManager

(2). https://github.com/object2dot0/Advance-Localization-in-ios-apps

My code :

example calls:

[Language setLanguage:@"it"];

OR

[Language setLanguage:@"de"];


+(void)initialize {
        NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
        NSArray* languages = [defs objectForKey:@"AppleLanguages"];
        NSString *current = [languages objectAtIndex:0];
        [self setLanguage:current];

    }

        +(void)setLanguage:(NSString *)l {
        NSLog(@"\n\n\t ***** Hint Lang. selected by user: %@   ****\n\n", l);
        NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
        bundle = [NSBundle bundleWithPath:path];
    }

        +(NSString *)get:(NSString *)key alter:(NSString *)alternate {
        return [bundle localizedStringForKey:key value:alternate table:nil];
    }
4

1 回答 1

0

您可以使用用户定义的运行时属性来实现此目的。请点击此链接了解详情。

于 2017-06-08T07:45:07.440 回答