如何在运行时更改本地化图像

时间:2012-03-05 12:44:02

标签: objective-c dynamic localization

我创建了两个以en.lproj和fr.lproj命名的本地化目录。我在这些本地化的目录中放了两个名字如.png的不同图像。

现在我已经创建了一个表View Controller,分别有两行“English”和“French”文本。

选择第一行或第二行后,我在运行时获取包路径并更改应用的整个本地化文本。

代码:

-(NSString*) languageSelectedStringForKey:(NSString*) key
{

    NSString *path;
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    if([[userDefault valueForKey:@"language_Selected"] intValue] == 0)
      path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
    else if([[userDefault valueForKey:@"language_Selected"] intValue] == 1)
      path = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];

    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[[languageBundle localizedStringForKey:key value:@"" table:nil] retain];
    return str;
}

通过动态上面的代码我可以改变运行应用程序的语言。 但是如何从该捆绑中获取图像?

任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

据推测,您不希望更改每个图像,只需要更改包含文本或其他与文化相关的内容的图像。对于这些图像,您可以在包含给定语言的图像路径的localizable.strings文件中添加一个条目,并使用此路径而不是硬编码路径。

也就是说,在许多情况下,您将UI中包含的图像作为.xib的一部分。在这些情况下你需要做的就是本地化xib(即为每种语言制作一个不同版本的.xib - 你可以通过属性面板中的Languages控件在XCode中完成此操作)并只需更改每种语言版本的图像.xib使用Interface Builder。