我有一个包含3个目标的项目。每个目标只需要支持一种语言,但每种目标的语言都不相同。 目前我有
我的大多数字符串都在Localizable.strings文件中,我只是为每个目标定位一个不同的文件。但是,我的故事板中有许多字符串。我的问题是,似乎不可能为每个目标创建不同的故事板本地化文件。如果我更改了葡萄牙文件的定位,则西班牙文件的定位会自动更改。
一种可能的解决方案是为每个目标复制每个故事板,但随着目标数量的增长,这不会很好地扩展。我还可以在每个ViewController中使用NSLocalizedString修改所有文本,但这看起来很乏味且容易出错。
有更好的解决方案吗?
答案 0 :(得分:8)
虽然this answer是首选方法,但您可以将不同的故事板本地化分配给不同的目标,同时在所有目标上共享相同的故事板。
<强>先决条件:强>
按照this answer中的说明进行操作。
<强>概念强>
您希望每个目标中都有Main.storyboard
,但每个目标中的Main.strings
不同。此外,您不希望所有本地化都在每个目标中可用。
要实现这一点,您必须直接操作.lproj
,这是一个仅在使用文件检查器时隐藏的过程。
一步一步:
Main.storyboard
。当然,选择删除敬畏以保留故事板。Main.storyboard
拖放回您的项目,然后选择每个目标。Localizable Strings
。
en.lproj
,es.lproj
,fr.lproj
等。请注意,它们均包含Main.strings
版本。将这些.lproj(整个目录)拖回到项目中。这一次,不选择任何目标Main.strings
与所需目标相关联。对每个.strings
重复一次。
<强>结论强>
通过将.lproj
与Project Navigator中的.storyboard
分离,您可以自由地关联文件和目标。
<强>演示:强>
使用法语目标在工作中查看,在设置中语言设置为Français的设备上:
►在GitHub上找到此解决方案,并在Swift Recipes上找到其他详细信息。
答案 1 :(得分:6)
在文件检查器中的本地化下,添加英语。选择可本地化的字符串,这是默认值。这将为每种语言创建Main.string
,并在所有语言中共享您的故事板。
只需点击第2步中的该复选框,为该语言添加 Main.string (English)
,特别是Main.Storyboard
。请特别注意新的层次结构,这些不是 Localizable.strings
,而是从Main.strings
派生的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";
从此处开始为您的项目添加多种语言:
如果您需要添加更多语言,请按以下步骤操作:
答案 2 :(得分:0)
您只需要:为您的应用程序创建常见的xcode工作区,然后为您的语言集创建主xcodeproj文件的副本,并为所有语言创建不同的目标,然后您还可以为各个项目设置设置语言新的xcodeproj。您也可以轻松调整构建阶段&#39; Copy Bundle Resourses&#39;和别的。我用这种方法。如果您在工作区中添加项目时遇到Xcode崩溃 - 使用Xcode打开项目,重命名并重命名或复制目标(我认为相同的名称会导致此问题)。