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

Mar*_*psz 10 xcode interface-builder internationalization ios xcode7

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

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

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

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

有更好的解决方案吗?

Swi*_*ect 8

跨目标的共享故事板

虽然此答案是首选方法,但您可以将不同的Storyboard 本地化分配给不同的目标,同时在所有目标之间共享相同的 Storyboard.

先决条件:

按照这个说明这个答案.

概念:

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

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

一步步:

  1. 按照本答案中的步骤创建所有部分.
  2. 从任何目标,删除Main.storyboard.当然,选择Remove Reverence以保留故事板.
  3. 在Finder中,找到Base.lproj.拖放Main.storyboard回项目,然后选择每个目标.
  4. 在文件检查器中,确保选择语言,并且您仍在使用Localizable Strings. 在此输入图像描述
  5. 在再次搜索,找到en.lproj,es.lproj,fr.lproj,等发现,他们每一个都包含一个版本Main.strings.将这些.lproj(整个目录)拖回到项目中.这个时候,就没有选择任何目标
  6. 最后一次,在文件检查器中,将每个关联Main.strings到所需的目标.每个重复一次.strings. 在此输入图像描述

结论

通过解耦.lproj.storyboard在Project Navigator中,您可以自由结社的文件和目标.

演示:

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

iPhone 4上的法语示例


►在GitHub上找到此解决方案以及有关Swift Recipes的其他详细信息.


Swi*_*ect 6

跨目标的共享本地化

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

    创建Main.strings

  3. 只需单击步骤2中的该复选框即可添加Main.string (English)该语言,特别是针对该语言Main.Storyboard.特别注意新的层次结构,这些不是, Localizable.strings而是Main.strings源于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";
Run Code Online (Sandbox Code Playgroud)

从这里开始为项目添加多种语言:

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

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

    选择项目

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

    挑选故事板进行本地化

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