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

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

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

我的大部分string都在Localizable.strings文件中,我只是针对每个目标指定一个不同的文件。 不过,我的故事板中有很多string。 我的问题是,似乎不可能为每个目标创build不同的故事板本地化文件。 如果我更改葡萄牙语文件的定位,西class牙语文件的定位会自动更改。

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

有更好的解决scheme吗?

跨目标共享本地化

  1. 假设您的项目中已经有多种语言,请Project Navigator中select您的故事板(比如Main.storyboard
  2. 在“ 文件”检查器的本地化”下,添加英文 。 select默认的可本地化的string 。 这将为每种语言创build一个Main.string ,并在所有语言中共享您的Storyboard。

    创建一个Main.strings

  3. 仅在第2步中单击该checkbox将为该语言添加 Main.string (English) ,专门用于该Main.Storyboard 。 要特别注意新的层次结构,这些不是 Localizable.strings而是从Main.storyboard派生的Main.storyboard

    新的本地化每个故事板

  4. 将每个语言文件本地化为您的心脏内容。

例如,从一个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中 ,select您的项目
  2. 项目和目标列表中 ,再次select项目

    选择该项目

  3. select信息选项卡
  4. 在“ 本地化”下 ,保留“ 使用基本国际化” (除非您的用户界面本身必须跨语言更改)
  5. 点击+ ,select一种新的语言。 在呈现给您的对话框中,select您想要具有多个本地化的每个Storyboard。

    挑选故事板以进行本地化

如果您在步骤5中错过了Storyboard,则可以按照以下步骤简单地将新语言添加到故事板中: 假设您已经拥有多种语言

共享目标板上的Storyboard

尽pipe此答案是首选方法,但您可以将不同的Storyboard 本地化分配给不同的目标,同时在所有目标之间共享同一个 Storyboard。

先决条件:

按照这个答案中的这个指示。

概念:

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

为了达到这个目的,你必须直接操作.lproj ,这个过程在仅仅使用File Inspector时是隐藏的。

一步步:

  1. 按照这个答案中的步骤创build所有的作品。
  2. 从任何目标,删除Main.storyboard 。 当然,selectRemove Reverence来保持故事画面。
  3. 在Finder中,findBase.lproj。 将Main.storyboard拖放到您的项目中,然后select每个目标。
  4. 在文件检查器中,确保select语言,并且您仍在使用可Localizable Strings在这里输入图像说明
  5. 在Finder中再次finden.lprojes.lprojfr.lproj等。注意它们都包含一个Main.strings版本。 将这些.lproj(整个目录)拖回到您的项目中。 这一次,不要select任何目标
  6. 最后一次,在“文件”检查器中,将每个Main.strings关联到所需的目标。 对每个.strings重复。 在这里输入图像说明

结论

通过在Project Navigator中将.lproj.storyboard解耦,可以自由地关联文件和目标。

演示:

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

iPhone 4上的法语例子


►在GitHub上find这个解决scheme和Swift Recipes的更多细节。

您只需要:为您的应用程序创build常见的xcode工作区,然后为您的语言集创build主xcodeproj文件的副本,并为它们创build不同的目标,然后您可以在新的xcodeproj中为单个项目设置设置语言。 你也可以轻松地调整构build阶段“复制捆绑资源”等。 我使用这种方法。 如果您在工作区中添加项目时遇到Xcode崩溃 – 使用Xcode打开项目,请重命名并重命名或重复目标(我认为相同的名称会导致此问题)。