
由于几乎整个项目对于每个目标看起来都是一样的,我需要在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:示例项目:@L_502_2@
好的,更容易做的是shell / python脚本,因为它适用于每个构建服务器.我假设你对每个目标有不同的方案(否则没有意义).所以你能做的是:
假设您的目标命名为:
> target1
> target2
> target3
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/pythonimport syssupportedLanguages = ["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
在这里,您可以找到我为运行此示例而创建的示例项目:
@L_502_2@
以上是内存溢出为你收集整理的ios – Xcode Localizable.string多个目标问题全部内容,希望文章能够帮你解决ios – Xcode Localizable.string多个目标问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)