每个目标的不同故事板本地化

时间:2015-11-13 14:16:46

标签: ios xcode internationalization interface-builder xcode7

我有一个包含3个目标的项目。每个目标只需要支持一种语言,但每种目标的语言都不相同。 目前我有

  • 目标1(es)
  • 目标2(es)
  • 目标3(pt)

我的大多数字符串都在Localizable.strings文件中,我只是为每个目标定位一个不同的文件。但是,我的故事板中有许多字符串。我的问题是,似乎不可能为每个目标创建不同的故事板本地化文件。如果我更改了葡萄牙文件的定位,则西班牙文件的定位会自动更改。

一种可能的解决方案是为每个目标复制每个故事板,但随着目标数量的增长,这不会很好地扩展。我还可以在每个ViewController中使用NSLocalizedString修改所有文本,但这看起来很乏味且容易出错。

有更好的解决方案吗?

3 个答案:

答案 0 :(得分:8)

跨目标的共享故事板

虽然this answer是首选方法,但您可以将不同的故事板本地化分配给不同的目标,同时在所有目标上共享相同的故事板。

<强>先决条件:

按照this answer中的说明进行操作。

<强>概念

您希望每个目标中都有Main.storyboard,但每个目标中的Main.strings不同。此外,您不希望所有本地化都在每个目标中可用。

要实现这一点,您必须直接操作.lproj,这是一个仅在使用文件检查器时隐藏的过程。

一步一步:

  1. 按照this answer
  2. 中的步骤创建所有部分
  3. 从任意目标移除Main.storyboard。当然,选择删除敬畏以保留故事板。
  4. 在Finder中,找到Base.lproj。将Main.storyboard拖放回您的项目,然后选择每个目标。
  5. 在文件检查器中,确保选择的语言,并且您仍在使用Localizable Stringsenter image description here
  6. 再次在Finder中,找到en.lprojes.lprojfr.lproj等。请注意,它们均包含Main.strings版本。将这些.lproj(整个目录)拖回到项目中。这一次,选择任何目标
  7. 最后一次,在文件检查器中,将每个Main.strings与所需目标相关联。对每个.strings重复一次。 enter image description here
  8. <强>结论

    通过将.lproj与Project Navigator中的.storyboard分离,您可以自由地关联文件和目标。

    <强>演示:

    使用法语目标在工作中查看,在设置中语言设置为Français的设备上:

    French example on iPhone 4

    ►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。

答案 1 :(得分:6)

跨目标的共享本地化

  1. 假设您的项目中已有多种语言,在 Project Navigator 中,选择您的故事板(例如 Main.storyboard
  2. 文件检查器中的本地化下,添加英语。选择可本地化的字符串,这是默认值。这将为每种语言创建Main.string,并在所有语言中共享您的故事板。

    Create a Main.strings

  3. 只需点击第2步中的该复选框,为该语言添加 Main.string (English),特别是Main.Storyboard。请特别注意新的层次结构,这些不是 Localizable.strings,而是从Main.strings派生的Main.storyboard

    New localizations per Storyboard

  4. 将每种语言文件本地化为您的心脏内容。
  5. 例如,从世界语中的UILabel消息开始,当设备以英语运行时,它将以英语显示:

    /* Class = "UILabel"; text = "Tiu mesaĝo estas en Esperanto"; ObjectID = "acC-pA-eMt"; */
    "acC-pA-eMt.text" = "This message is in English";
    

    从此处开始为您的项目添加多种语言:

    如果您需要添加更多语言,请按以下步骤操作:

    1. Project Navigator 中,选择您的项目
    2. 项目和目标列表中,再次选择项目

      Pick the project

    3. 选择信息标签
    4. 本地化下,保留使用基础国际化 (除非您的用户界面本身必须跨语言更改)
    5. 点击 + ,选择一种新语言。在显示给您的对话框中,选择要为其设置多个本地化的每个故事板。

      Pick Storyboards to be localized

    6. 如果您在步骤5中错过了故事板,则只需按照中假设您已有多种语言中的步骤,即可为故事板添加新语言。

答案 2 :(得分:0)

您只需要:为您的应用程序创建常见的xcode工作区,然后为您的语言集创建主xcodeproj文件的副本,并为所有语言创建不同的目标,然后您还可以为各个项目设置设置语言新的xcodeproj。您也可以轻松调整构建阶段&#39; Copy Bundle Resourses&#39;和别的。我用这种方法。如果您在工作区中添加项目时遇到Xcode崩溃 - 使用Xcode打开项目,重命名并重命名或复制目标(我认为相同的名称会导致此问题)。