Swift如何从Locazilable.string读取字符串写入Main.strings
实现方案
你可以根据文件的条目数量选择对应实现方式:
1. 少量条目手动处理
如果两个文件里的条目数量不多,直接手动修改即可:
- 先整理
Locazilable.string的键值对应关系,比如你给出的示例里,键"1"对应值"aaa" - 打开
Main.strings,把原条目右侧的固定字符串替换为getFromLocazilable("对应Locazilable的键")即可,修改后的示例如下:
"4O3-WU-Cfv.text" = getFromLocazilable("1");
2. 大量条目脚本批量处理
如果条目较多,建议用Python脚本自动完成替换,操作逻辑如下:
- 先解析
Locazilable.string的所有键值对,存入字典做映射 - 遍历
Main.strings的每一行,匹配到原有值后对应替换成调用方法的格式 - 输出替换后的新
Main.strings文件
参考代码如下:
import re # 读取Locazilable.string生成值到键的映射 loc_value_to_key = {} with open("Locazilable.string", "r", encoding="utf-8") as loc_file: for line in loc_file: line = line.strip() match_res = re.match(r'"(.*?)"\s*=\s*"(.*?)";', line) if match_res: loc_key, loc_value = match_res.groups() loc_value_to_key[loc_value] = loc_key # 处理Main.strings output_content = [] with open("Main.strings", "r", encoding="utf-8") as main_file: for line in main_file: line = line.strip() match_res = re.match(r'(".*?")\s*=\s*"(.*?)";', line) if match_res: main_key, main_value = match_res.groups() # 找到匹配的Locazilable键就替换,找不到就保留原内容 if main_value in loc_value_to_key: output_content.append(f'{main_key} = getFromLocazilable("{loc_value_to_key[main_value]}");') continue output_content.append(line) # 写入结果到新文件,避免覆盖原文件出错 with open("Main_generated.strings", "w", encoding="utf-8") as output_file: output_file.write("\n".join(output_content))
- 注意:如果存在多个Locazilable键对应同一个值的情况,脚本默认取第一个匹配到的键,你可以根据实际需求调整映射逻辑。
补充说明:如果是苹果生态开发场景,
getFromLocazilable方法可以直接封装系统的NSLocalizedString接口,直接从对应语言的Locazilable.string表读取值,不需要提前把文本写入Main.strings。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

