ios – Xcode Localizable.string多个目标问题
我有一个包含多个目标的项目,它们代表相同的应用程序,只是具有不同的样式和翻译.
由于几乎整个项目对于每个目标看起来都是一样的,我需要在Localizable.strings文件中只有几个字符串,我需要不同.而且我不想将整个巨大的Localizable.strings文件复制到每个项目,因为它几乎没有不同的行. 由于项目中包含第三方库/ SDK,因此我只需要1个字符串文件.所以我不能将tableName用于localizedString. 问题是 – 我需要有一个灵活的可能性,可以分别从Localizable.strings中为每个目标覆盖几行.而且我不喜欢将整个文件复制到每个目标的想法,因为它将导致将来烦人的流量,如果我将有10个目标并且我需要为所有目标添加1个字符串. 目标是拥有一个包含所有字符串的巨大Localizable.strings文件,这对于所有目标都是通用的,并且对于应该告诉不同的字符串的每个目标具有小的配置.所以目标的文件应该合并并覆盖常见的文件. AFAIK它本身不受Xcode的支持,所以我可能正在寻找一个可以使它工作的脚本. 因此,脚本应该查看common和target的Localizable文件,合并它们,如果在两者中都定义了一些键,那么它应该使用target的文件中的一个. 任何人都可以帮我这样的脚本吗? 附:类似的问题与.xcassets存在,并且CocoaPods通过将多个资产合并为1来解决它,并且它按预期工作 – 如果某些目标的资产包含已包含在公共资产中的同名图像,则来自目标将取代它. P.S.2. Android开发人员本身也支持类似的功能 – 每个图像,每个翻译都可以被“孩子”的瑕疵或者其他任何名称所覆盖:) 解决方法
TL; DR:
示例项目:https://github.com/JakubMazur/SO45279964 好的,更容易做的是shell / python脚本,因为它适用于每个构建服务器.我假设你对每个目标有不同的方案(否则没有意义).所以你能做的是: 假设您的目标命名为: > target1 1)创建单独的文件包含应该不同的所有字符串(我将它放在Localizable目录下. 您的Localizable.strings文件可能如下所示: "someGeneralString" = "General string 1"; "AppName" = "This is a string that you probably need to change"; "someOtherGeneralString" = "General string 2"; 您的任何targetX.strings文件可能如下所示: "AppName" = "target[x]" 以下是它在项目中的样子: 请注意,目标可本地化文件的目标成员资格应仅设置为一个目标,但Localizable.strings应该适用于所有目标! 这就是项目配置的全部内容.我们去编写脚本(我将使用python): #!/usr/bin/python import sys supportedLanguages = ["en","pl"] commonPath = ".lproj/Localizable.strings" keys = ["AppName"] class CopyLocalizable(): target = "" def __init__(self,arg): self.target = arg self.perform() def perform(self): for lang in supportedLanguages: pathToLocalizable = lang+commonPath textToFile = "" with open(pathToLocalizable,"r") as languageFile: for line in languageFile.readlines(): for key in keys: if key in line: textToFile += self.foundAndReplace(key,lang) else: textToFile += line self.saveInFile(pathToLocalizable,textToFile) def foundAndReplace(self,key,lang): pathToTargetFile = "Localizable/"+lang+".lproj/"+self.target+".strings" with open(pathToTargetFile,"r") as targetFile: for targetLine in targetFile.readlines(): if key in targetLine: return targetLine def saveInFile(self,file,stringToSave): with open(file,"w+") as languageFile: languageFile.write(stringToSave) 你可以自己优化它.这是我可以考虑完成工作的简单脚本. 最后让我们自动化一下: export PATH="/usr/local/bin:$PATH" cd SO45279964/ python localize.py target[x] 并观看魔术发生;) http://www.giphy.com/gifs/26n6NKgiwYvuQk7WU 在这里,您可以找到我为运行此示例而创建的示例项目: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |