每个目标不同的故事板本地化
我有一个3个目标的项目。 每个目标只需要支持一种语言,但每个目标的语言都不相同。 目前我有
- 目标1(es)
- 目标2(es)
- 目标3(点)
我的大部分string都在Localizable.strings文件中,我只是针对每个目标指定一个不同的文件。 不过,我的故事板中有很多string。 我的问题是,似乎不可能为每个目标创build不同的故事板本地化文件。 如果我更改葡萄牙语文件的定位,西class牙语文件的定位会自动更改。
一个可能的解决scheme是复制每个目标的每个故事板,但是这不会随着目标数量的增长而很好地扩展。 我也可以在每个ViewController中使用NSLocalizedString修改所有的文本,但是这看起来很乏味和容易出错。
有更好的解决scheme吗?
跨目标共享本地化
- 假设您的项目中已经有多种语言,请在Project Navigator中select您的故事板(比如Main.storyboard )
-
在“ 文件”检查器的 “ 本地化”下,添加英文 。 select默认的可本地化的string 。 这将为每种语言创build一个
Main.string
,并在所有语言中共享您的Storyboard。 -
仅在第2步中单击该checkbox将为该语言添加
Main.string (English)
,专门用于该Main.Storyboard
。 要特别注意新的层次结构,这些不是Localizable.strings
而是从Main.storyboard
派生的Main.storyboard
: - 将每个语言文件本地化为您的心脏内容。
例如,从一个UILabel
开始,这个信息在世界语中 ,当设备运行英文时,它将以英文显示:
/* Class = "UILabel"; text = "Tiu mesaĝo estas en Esperanto"; ObjectID = "acC-pA-eMt"; */ "acC-pA-eMt.text" = "This message is in English";
从这里开始为您的项目添加多种语言:
如果您需要添加更多的语言,请按照下列步骤操作:
- 在Project Navigator中 ,select您的项目
-
在项目和目标列表中 ,再次select项目
- select信息选项卡
- 在“ 本地化”下 ,保留“ 使用基本国际化” (除非您的用户界面本身必须跨语言更改)
-
点击+ ,select一种新的语言。 在呈现给您的对话框中,select您想要具有多个本地化的每个Storyboard。
如果您在步骤5中错过了Storyboard,则可以按照以下步骤简单地将新语言添加到故事板中: 假设您已经拥有多种语言 。
共享目标板上的Storyboard
尽pipe此答案是首选方法,但您可以将不同的Storyboard 本地化分配给不同的目标,同时在所有目标之间共享同一个 Storyboard。
先决条件:
按照这个答案中的这个指示。
概念:
你想在每个目标中有Main.storyboard
,但是在每个目标中有不同的Main.strings
。 此外,您不希望所有本地化在每个目标中都可用。
为了达到这个目的,你必须直接操作.lproj
,这个过程在仅仅使用File Inspector时是隐藏的。
一步步:
- 按照这个答案中的步骤创build所有的作品。
- 从任何目标,删除
Main.storyboard
。 当然,selectRemove Reverence来保持故事画面。 - 在Finder中,findBase.lproj。 将
Main.storyboard
拖放到您的项目中,然后select每个目标。 - 在文件检查器中,确保未select语言,并且您仍在使用可
Localizable Strings
。 - 在Finder中再次find
en.lproj
,es.lproj
,fr.lproj
等。注意它们都包含一个Main.strings
版本。 将这些.lproj(整个目录)拖回到您的项目中。 这一次,不要select任何目标 - 最后一次,在“文件”检查器中,将每个
Main.strings
关联到所需的目标。 对每个.strings
重复。
结论
通过在Project Navigator中将.lproj
与.storyboard
解耦,可以自由地关联文件和目标。
演示:
在“设置”中将语言设置为“Français”的设备上使用法语目标在工作中查看:
►在GitHub上find这个解决scheme和Swift Recipes的更多细节。
您只需要:为您的应用程序创build常见的xcode工作区,然后为您的语言集创build主xcodeproj文件的副本,并为它们创build不同的目标,然后您可以在新的xcodeproj中为单个项目设置设置语言。 你也可以轻松地调整构build阶段“复制捆绑资源”等。 我使用这种方法。 如果您在工作区中添加项目时遇到Xcode崩溃 – 使用Xcode打开项目,请重命名并重命名或重复目标(我认为相同的名称会导致此问题)。