如何通过Fastlane脚本添加Xcode本地化语言

9
我有一个包含多个应用程序目标的项目,需要将一个现有的英文本地字符串文件添加到其中一个目标中,仅用于开发。

这是我的情况:

  1. 目标A使用英语+多个非英语本地化字符串文件。
  2. 目标B仅使用1个非英语本地化字符串文件。
  3. 目标B不能在App Store版本中包含英语字符串。

然而,在开发过程中,我们目前手动将英语字符串添加到Target B的本地化文件中(使用从Target A获取的现有文件),并在提交到App Store之前将其删除,以帮助开发。

由于我们已经运行Fastlane设置/拆卸脚本,因此我希望自动化脚本添加/删除英语字符串,这样我们就不必每次都手动执行了。

在Fastfile中,我知道如何向Target B添加文件,但由于Xcode中的本地化文件/引用与常规文件结构略有不同,我不确定正确的方法是什么。

这是我目前的进展:

def add_english_localization()
    require 'xcodeproj'

    project = Xcodeproj::Project.open("../Code/#{XCODE_PROJ}")

    app_target = project.targets.first #Target B
    english_file_ref = project.main_group.new_file('../Code/TargetA/Application/Supporting Files/en.lproj') #Existing english file in Target A's directory
    app_target.add_file_references([english_file_ref]) #This adds the file but doesn't properly update Xcode's Localization references...?

    project.save
  end

截图:

在此输入图片描述
在此输入图片描述


在此输入图片描述
在此输入图片描述


你可能可以使用Xcodeproj来完成,但我不知道具体怎么做。我知道检查这些会在你的project.pbxproj文件中添加一些行。 - Iulian Onofrei
1个回答

10

这是一个使用xcodeproj的小型Ruby脚本,用于添加和删除本地化:

要删除语言(例如法语):

require 'xcodeproj'
project_path = './Whatever.xcodeproj'
project = Xcodeproj::Project.open(project_path)

for o in project.objects do 
    if o.is_a? Xcodeproj::Project::Object::PBXGroup
        if o.hierarchy_path == "/TargetA/Localizable.strings"
            group = o
            break
        end
    end
end


files = group.files
for file in files do

    if file.path == "fr.lproj/Localizable.strings"
        file.remove_from_project
        puts "Removed " + file.path
    end
end

project.save

添加语言(例如法语):

require 'xcodeproj'
project_path = './Whatever.xcodeproj'
project = Xcodeproj::Project.open(project_path)

for o in project.objects do 
    if o.is_a? Xcodeproj::Project::Object::PBXGroup
        if o.hierarchy_path == "/TargetA/Localizable.strings"
            group = o
            break
        end
    end
end

file = project.new_file("fr.lproj/Localizable.strings")
file.move(group)
file.name = "fr"

project.save

你应该能够在fastfile中调用它,但我没有检查过...你可以使用sh("ruby ./name.rb")直接调用它。


感谢提供这些脚本!然而,我遇到的问题并不仅仅是移动文件,而是要将正确的引用添加到Xcode项目中,以便启用英语语言(请参见屏幕截图)。似乎我的原始方法添加头文件引用并不能使本地化语言生效。有什么建议吗? - JimmyJammed
脚本并不会移动文件 - 它会将文件从 .xcodeproj 中添加/删除,就像选择复选框一样。在此上下文中,该文件是从 .xcodeproj 的引用。您可以测试脚本,只需运行添加/移除文件脚本,并尝试 git diff。还要确保 hierarchy_path 正确。看起来像 TargetA/Application/Supporting Files/{language}.lproj/Localizable.strings 这样的东西。 - Dule
抱歉,层次结构路径没有包含 {language.lproj} - Dule
太棒了!经过一些微调,终于让它工作了!非常感谢您的帮助,这让我很疯狂,因为找不到好的文档资料。 - JimmyJammed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接