You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 22:36:07