ios – Xcode Localizable.string多个目标问题

ios – Xcode Localizable.string多个目标问题,第1张

概述我有一个包含多个目标的项目,它们代表相同的应用程序,只是具有不同的样式和翻译. 由于几乎整个项目对于每个目标看起来都是一样的,我需要在Localizable.strings文件中只有几个字符串,我需要不同.而且我不想将整个巨大的Localizable.strings文件复制到每个项目,因为它几乎没有不同的行. 由于项目中包含第三方库/ SDK,因此我只需要1个字符串文件.所以我不能将tableNa 我有一个包含多个目标的项目,它们代表相同的应用程序,只是具有不同的样式和翻译.

由于几乎整个项目对于每个目标看起来都是一样的,我需要在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多个目标问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1055659.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存