使用与当前设备语言不同的系统视图语言

时间:2011-12-06 17:49:14

标签: ios

在一个应用程序中,我只想支持德语。这对我自己定义的所有文本都很好,但是我无法更改系统提供的视图显示的文本,例如UISearchBar的取消按钮:

UISearchBar with English localization

如果设备语言设置为德语,则取消按钮会正确显示“Abbrechen”。但是,如果我将设备语言设置为英语(或任何其他语言),则按钮显示“取消”,这是不正确的,因为应用程序中的所有内容都是德语,所以我也希望这个按钮也是德语。是否有可能完成这项工作?我做错了什么?

  • 我只有一个de.lproj文件夹,而且我没有en.lproj文件夹。我在de.lproj文件夹中有InfoPlist.strings和我的主要nib文件。
  • UIViewController的内容视图的nib,我用来访问搜索栏的searchDisplayController属性也在de.lproj文件夹中。
  • 我已将.pbxproj中的开发区域设置为德语:

    developmentRegion = de;
    
  • 我在Info.plist文件中将“Localization native development region”设置为“de”:

    <key>CFBundleDevelopmentRegion</key>
    <string>de</string>
    

3 个答案:

答案 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并再次安装。

这些步骤对我有用:

  • 项目中只有一个de.lproj文件夹(没有en.lproj)。
  • 在project.pbxproj中设置developmentRegion = de;
  • 在project.pbxproj中设置knownRegions = ( de, );
  • 将“本地化原生开发区域”设置为“de”。