iOS - 如何在没有编程的情况下更改storyboard字符串中的应用程序语言?

时间:2017-06-08 07:37:01

标签: ios objective-c localization nslocalizedstring localized

我正在开发一个用户可以随时更改语言的应用。我在一个演示应用程序中完成了这个。它工作正常。但它有一个问题,那就是本地化应用程序,我必须执行2个任务。

步骤1:我必须为每个对象创建IB插座(即每个类==>按钮,标签,textFields,TextViews)。

第2步:我必须为每个对象设置语言,例如:[myButton setTitle:[Language get:@"Language Test" alter:nil] forState:UIControlStateNormal];  或myLabel.text=LocalizedString(@"Forgot Passoword");

我有一个项目有很多屏幕,大约60个屏幕(在故事板中)。不幸的是,在这个项目中,没有IB出口可用于所有物体。字符串设置在故事板中。现在我必须用另一种语言支持这个应用程序(当前语言英语)名称阿拉伯语。

  

结论:如果我做了2个以上步骤(为每个对象创建IB插座   ,然后在.m文件中为每个对象编写代码)。这将需要非常多   时间。还有其他更好的选择吗?我想要不要   在.m文件中创建IB插座和编码。任何建议都会很棒!!

到目前为止我做了什么:

遵循这些tuttorials:

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

和示例项目:

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

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

我的代码:

示例调用:

[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];
    }

1 个答案:

答案 0 :(得分:0)

您可以使用用户定义的运行时属性来实现此目的。请点击this link了解详细信息。