0

我有如下要求:在我的应用程序中,我提供了语言列表。现在,当用户更改语言时,它应该将所有标题和消息更改为特定语言。实际流程就像,我有一个屏幕(视图)用于在我的应用程序中进行设置。在该设置屏幕中,我提供了语言选项。现在,当用户选择语言时,然后在我的应用程序中的所有标题,消息应该以选定的语言显示,而无需启动我的应用程序。

现在的问题是,当我选择语言(例如西班牙语)时,如果不重新启动我的应用程序,它就不会生效。我使用了如下功能:

-(void) SetUserLanguage
{
    NSString *appDataFilePath = [[NSBundle mainBundle] pathForResource:@"UserLanguageList" ofType:@"plist"];
    NSDictionary *appDataDictionary = [[NSDictionary alloc] initWithContentsOfFile:appDataFilePath];
    NSString* langName = [appDataDictionary objectForKey:self.pstrUserLanguage];
    if(langName == nil || [langName isEqualToString:@""])
    {
        langName = @"en";
    }
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *langArray = [defaults objectForKey:@"AppleLanguages"];
    NSArray *currentLangArray = [NSArray arrayWithObject:langName];
    [defaults setObject:currentLangArray forKey:@"AppleLanguages"];
    [defaults synchronize];
}

上述函数是一个名为 UserDataManager 的接口的一部分,其实例可用于使用 gpUserDataManager 的应用程序全局。因此,在选择语言时,我将语言设置为此结构,然后我有预定义的 plist 文件进行映射。因此,当用户选择语言西班牙语时,它在上述函数中将值“es”设置为首选语言。但是要使此更改生效,我需要重新启动我的应用程序。请帮助如何实现我的要求。

4

2 回答 2

2

TSLanguageManager会让你做你所要求的。用法非常简单;

当您想通过点击 UIButton 来更改语言时,只需使用以下代码更改语言;

[TSLanguageManager setSelectedLanguage:kLMEnglish];

要根据新语言更改文本,

yourTextField.text = [TSLanguageManager localizedString:@"yourLocalizedString"];

请注意,您需要将所有本地化字符串保存在 Localizable.strings 文件中。

于 2013-10-03T09:16:59.030 回答
0

如果您想避免重新启动您的应用程序,请查看此答案

您基本上需要使用不同的包,所以使用NSLocalizedStringFromTableInBundle而不是NSLocalizedString宏,并为所选语言提供正确的包。

于 2013-10-03T08:37:57.800 回答