在一个应用程序中,我只想支持德语。这对我自己定义的所有文本都很好,但是我无法更改系统提供的视图显示的文本,例如UISearchBar
的取消按钮:
如果设备语言设置为德语,则取消按钮会正确显示“Abbrechen”。但是,如果我将设备语言设置为英语(或任何其他语言),则按钮显示“取消”,这是不正确的,因为应用程序中的所有内容都是德语,所以我也希望这个按钮也是德语。是否有可能完成这项工作?我做错了什么?
UIViewController
的内容视图的nib,我用来访问搜索栏的searchDisplayController
属性也在de.lproj文件夹中。我已将.pbxproj中的开发区域设置为德语:
developmentRegion = de;
我在Info.plist文件中将“Localization native development region”设置为“de”:
<key>CFBundleDevelopmentRegion</key>
<string>de</string>
答案 0 :(得分:0)
您可以通过设置placeholder
属性来轻松更改UISearchBar的占位符文本。
但是,没有任何简单的钩子可以到达取消按钮。
您可以访问搜索栏的取消按钮的方法是浏览其子视图:
UIButton *cancelButton = nil;
for(UIView *subView in [searchBar subviews])
{
if([subView isKindOfClass:[UIButton class]])
{
cancelButton = (UIButton*)subView;
[cancelButton setText:@"Abbrechen"];
}
}
答案 1 :(得分:0)
我设法通过在this answer建议的程序主函数中对应用程序语言进行硬编码来解决这个问题。
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSArray arrayWithObject:@"de_DE"] forKey:@"AppleLanguages"];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
但是,如果您只有一个本地化,这只能解决问题。
答案 2 :(得分:0)
您的解决方案已经足够,您不需要乱用AppleLanguages。
如果你已经采取了你在问题中提到的所有步骤,那么问题可能是你的设备(或模拟器)中已有en.lproj
来自之前的版本。您需要做的是从设备(或模拟器)中删除应用程序,在Xcode中运行Product > Clean
并再次安装。
这些步骤对我有用:
developmentRegion = de;
。knownRegions = ( de, );
。