关于通过xcodeproj脚本实现Xcode字符串本地化的疑问
问题解答
1. 仅将文件放入en.lproj文件夹是否足够?
不够。Xcode的本地化系统不是仅靠文件路径识别的,必须在项目配置中明确标记该文件为本地化资源。只把文件放在en.lproj里,Xcode只会将其视为普通的文件引用,不会将其纳入本地化流程——比如不会在多语言切换时自动加载,也不会在Xcode的本地化面板中显示。
2. 能否通过脚本(xcodeproj gem)实现勾选本地化?
可以,以下是具体实现步骤:
假设你已经拿到了目标文件的引用对象,可通过以下代码完成本地化标记:
require 'xcodeproj' # 加载目标Xcode项目 project_path = './YourProject.xcodeproj' project = Xcodeproj::Project.open(project_path) # 定位到en.lproj下的目标strings文件(替换成你实际的文件名) file_ref = project.files.find { |f| f.path == 'en.lproj/Localizable.strings' } if file_ref # 先确保文件类型被正确识别为strings文件 file_ref.set_explicit_file_type('text.plist.strings') # 添加英文本地化标记,对应Xcode中勾选"English"选项 file_ref.add_localization('en') # 如果后续需要添加其他语言,比如简体中文,可继续调用: # file_ref.add_localization('zh-Hans') # 保存项目修改 project.save puts "已成功为文件添加本地化标记" else puts "未找到目标文件引用,请检查路径是否正确" end
关键细节说明:
set_explicit_file_type:必须确保文件类型被正确设置为strings类型,这是Xcode识别其为本地化资源的前提。add_localization:这个方法会直接在project.pbxproj中为文件引用添加localizations = ("en");配置,同时会自动生成对应的PBXVariantGroup(当添加多语言时会更明显),这就是你手动勾选本地化选项时Xcode在后台做的操作。
你之前对比project.pbxproj没找到规律,大概率是没定位到该文件引用对应的条目,或者忽略了PBXVariantGroup的生成逻辑——单语言时这个组的变化不明显,多语言时会清晰很多。
内容的提问来源于stack exchange,提问作者Tiny Tim
相关产品推荐
相关产品推荐

