场景

已经存在一个主Target,要新建一个Taregt 并且多语言词条的内容一致,但是要求部分关键内容需要更改。

操作

新建多语言文件

image.png|500
在新建Target的文件夹中新建 InfoPlist.stringsLocalizable.strings

选择需要同步的语言

image.png|300

python脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import os
import shutil

def copy_and_replace_strings(source_dir, target_dir, old_text, new_text):
try:
# 获取源目录下的一级文件夹
folders = [f for f in os.listdir(source_dir) if os.path.isdir(os.path.join(source_dir, f))]

# 遍历一级文件夹
for folder in folders:
source_folder = os.path.join(source_dir, folder)
target_folder = os.path.join(target_dir, folder)
# 检查是否在目标目录中有对应的文件夹
if os.path.exists(target_folder):
# 复制.strings文件到目标目录下相同文件中并替换内容
copy_and_replace_strings_from_source_to_target(source_folder, target_folder, old_text, new_text)

print("拷贝并替换完成!")

except FileNotFoundError:
print("文件或目录未找到,请检查路径是否正确。")

def copy_and_replace_strings_from_source_to_target(source_dir, target_dir, old_text, new_text):
try:
# 遍历源目录下的所有文件
for file in os.listdir(source_dir):
# 只处理.strings文件
if file.endswith('.strings'):
source_file_path = os.path.join(source_dir, file)
target_file_path = os.path.join(target_dir, file)
# 逐行读取文件内容并替换值
with open(source_file_path, 'r') as source_file:
with open(target_file_path, 'w') as target_file:
for line in source_file:
if '=' in line:
key, value = line.strip().split('=', 1)
if old_text.lower() in value.lower():
# 定位文本位置并替换
start_index = value.lower().find(old_text.lower())
end_index = start_index + len(old_text)
new_value = value[:start_index] + new_text + value[end_index:]
target_file.write(f"{key}={new_value}\n")
else:
target_file.write(line)
else:
target_file.write(line)

print(f"文件内容已从 {source_file_path} 复制到 {target_file_path} 并替换完成")

except FileNotFoundError:
print("文件或目录未找到,请检查路径是否正确。")

# 获取用户输入的源路径、目标路径以及替换前后的文本
source_directory = input("请输入源路径:")
target_directory = input("请输入目标路径:")
old_text = input("请输入要替换的文本(原文本):")
new_text = input("请输入替换后的文本(新文本):")

copy_and_replace_strings(source_directory, target_directory, old_text, new_text)