我有一个简单的应用程序,其中包含两个XIB,每个都使用“文件检查器”窗格中的“XCode添加本地化”功能进行本地化(对于两种语言en和ar用于阿拉伯语)。
我在根视图控制器xib
中放置了两个按钮来切换应用程序语言并切换到另一个本地化的XIB,该应用程序运行正常,除了一个小问题:阿拉伯语XIB包含{{1内部的图像并且英语XIB在imageView
,
1)当我将语言从英语切换到阿拉伯语时,阿拉伯语XIB就位,但没有图像
2)当我从阿拉伯语切换到英语时反之亦然
3)甚至在应用启动时它都不会显示图像: XCode在这三种情况下在Console中产生此错误,而不会导致应用程序崩溃:
imageView
2011-12-27 12:48:30.412 LangSwitch[4903:f803] Could not load the "image1.png" image referenced from a nib in the bundle with identifier "(null)"
方法代码为:
didFinishLaunchingWithOptions
并且 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(lang:) name:@"Lang" object:nil];
// Override point for customization after application launch.
// Set the navigation controller as the window's root view controller and display.
NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"] objectAtIndex:0];
NSBundle* bnd = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:str ofType:@"lproj"]];
RootViewController* cont = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:bnd];
self.window.rootViewController = cont;
[self.window makeKeyAndVisible];
选择器代码为:
lang
和here is the sample app包含我上面描述的内容。如果你们能帮助解决这个问题,我会非常感激你们。
提前非常感谢你......
答案 0 :(得分:2)
问题是xib文件在其自己的本地包中搜索图像,但图像不存在,自然会出现错误。解决方案是:
从xib文件中删除图像。这意味着您应该只有空的图像视图,没有背景图像的按钮.etc在您的xib文件上。
使用助手窗口,将所有子视图连接到头文件并合成相关属性。
在您的视图中执行加载方法,手动设置图像,如:
[_logoImageView setImage:[UIImage imageNamed:@"logo.png"]];
[_button1 setBackgroundImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal];
现在您的图像是从主包中加载的,但您的xib文件已本地化。编译器不会给出任何错误。
答案 1 :(得分:1)
Xib文件从主包中加载图像,而不是从自定义语言特定包中加载。
您无法以编程方式真正更改国际化应用的语言。用户可以更改手机设置中的语言但不能。如果要在应用程序中使用多种语言,请将所有图像资源放在主包中(无国际化)并设置自己的国际化方法(示例:rename pic.png到en-pic.png和ar-pic.png )
答案 2 :(得分:1)
我不认为这可以按照您的方式完成,即便如此,您使用的API也会让您的应用从App Store中退出 - Changing language on the fly, in running iOS, programmatically
但您可以尝试本地化图像(通过属性检查员完成)。
而不是尝试通过更改本地化来加载不同的笔尖 - 您将不得不手动更改笔尖。不必将相同的nib文件本地化,您必须创建两个nib文件,并根据用户的选择加载特定于语言的文件 - 您还负责自己加载所有语言本地化资源,这不是一项小任务
语言选择确实最好是在用户的设备层面上完成,而不是通过尝试强制进行本地化更改来实现 - 正如我所说的那样,Apple不鼓励这样做。
答案 3 :(得分:0)
检查图像“image1.png”是否已添加到项目中。
同时验证是否在代码中定义了IBOutlet并将其链接到图像。
答案 4 :(得分:0)
我只是在xml模式下浏览XIB
并添加了相对文件夹路径。对于前者我将图像保存在img文件夹中,图像名称为test.png。现在我进入xml模式并将test.png更改为img / test.png
它对我有用!
罗希特夏尔