代码之家  ›  专栏  ›  技术社区  ›  James J

iOS应用程序的非英语默认语言?

  •  37
  • James J  · 技术社区  · 15 年前

    我正在为欧洲的一位客户开发一款应用程序。我在美国说英语。我们的应用程序将支持多种语言,但不支持英语。我把应用程序中的所有字符串都翻译成中文。字符串文件,为不同的语言正确设置,当设备设置为正确的语言(设备的语言为德语=应用程序正确本地化为德语)时,它们都可以正常工作。

    如果设备未设置为我们支持的语言之一,则会出现问题,例如,在设置为英语的手机上。在这种情况下,我们希望手机回归德国,但这并没有发生。我们看到的是,手机使用的语言在“设置”的“国际”部分的语言列表中排名最高。应用程序。对于我的手机来说,名单上最高的非英语语言是法语,所以当我运行应用程序时,它被本地化为法语。如果我把手机换成德语,然后又换回英语(这会改变语言列表中的顺序),应用程序就会本地化为德语。

    this tutorial 设置项目的区域设置。这包括删除第一次本地化文件时创建的默认“英语”区域设置。在项目文件中,我添加了:

    developmentRegion = de;
    

    还有,在信息中。普利斯特,我有

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

    没有成功。

    4 回复  |  直到 15 年前
        1
  •  45
  •   user1071136    13 年前

    默认使用某一种语言不是你应该努力的目标。假设一位住在法国、法语流利的日本用户将手机设置为日语。你的应用程序将默认为德语,尽管它有法语翻译;我猜这不是你想要的,也肯定不是用户想要的。

    因此,我建议尊重用户设定的语言优先级。

    既然你不想支持英语,但已经用英语开发了应用程序,那么你能做的最简单的事情就是摆脱它 en.lproj


    有一个非常简单的解决方案 删除特定本地化

    让Xcode使用所有当前本地化构建应用程序,然后在代码签名开始之前删除 ENlproj 文件夹和该语言的所有本地化文件都已消失。您可以通过向目标添加一个运行脚本构建阶段来轻松实现这一点,该阶段包含以下一行代码(这是一个Bash脚本):

    rm -r "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/en.lproj"
    

    代码签名总是在所有构建阶段完成后开始,所以只需将该构建阶段放在当前阶段的末尾。

    笔记

    我希望这是一个可行的解决方案。


    关于 :

    问题是什么 这是一个适当的本地化 ? 如果用户的第三个选择是法语(在两种不受支持的语言之后),这个解决方案将使应用程序退回法语,这

    应用程序启动时发生的事情很简单:操作系统会按照“首选项”中的设置,从用户语言列表中向下搜索,直到找到匹配的本地化,然后使用这种语言。许多应用默认使用英语而不是德语,原因很简单,因为英语出现在大多数用户语言列表中,高于德语。系统没有固有的语言偏好。如果删除英文翻译,则只支持您想要支持的语言,并在这些语言中选择用户列表中较高的语言。

        2
  •  14
  •   Pascal    15 年前

    反对

    这就是说,有一种方法可以强制iOS以特定的顺序使用特定的语言。我主要使用它来调试本地化,而不需要将设备语言设置为其他语言,是否可以使用它来解决这个问题中不存在的问题,我说不出来。

    有一把钥匙 AppleLanguages

    NSArray *langOrder = [NSArray arrayWithObjects:@"de", nil];
    [[NSUserDefaults standardUserDefaults] setObject:langOrder forKey:@"AppleLanguages"];
    

    main.m 之前 UIApplicationMain ,否则需要重新启动应用程序,此更改才能生效。

    你的 选择

        3
  •  -1
  •   geser    11 年前

    在didFinishLaunchingWithOptions()函数中试试这个

    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de_DE", nil] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    
        4
  •  -1
  •   Chowdhury Md Rajib Sarwar    7 年前

    let arr = NSArray(objects: "ja")
    UserDefaults.standard.set(arr, forKey: "AppleLanguages")