这种事情当然要写脚本完成啦,不然一个一个添加嘛?!!!
python脚本:
## 注意:
## 1.有些语言的符号可能会乱码,比如es ---> ¡ ----> ?
## 2.base_strings.xml必须包含所有key值,作为基准,否则可能会楼填。
## 3.使用:依次将不同语言的xml文件内容复制到target_strings.xml中,运行MergeLan.py文件即可。
## 4.首次使用时,result.csv为空,不需要注释next(reader),之后使用都需要注释。
import xml.etree.ElementTree as ET
import csv
import os
# 读取CSV文件并初始化result字典
def read_csv_and_initialize_result(csv_file):
result = {}
if os.path.exists(csv_file):
with open(csv_file, 'r', newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
next(reader) # 跳过标题行
for row in reader:
name = row[0]
values = row[1:]
result[name] = values
return result
# 读取XML文件并返回字符串字典
def read_strings_from_xml(filename):
tree = ET.parse(filename)
root = tree.getroot()
strings = {child.attrib['name']: child.text for child in root}
return strings
# 更新result字典以包含target_strings.xml中的值
def update_result_with_target_strings(base_strings, target_filename, result):
tree = ET.parse(target_filename)
root = tree.getroot()
for child in root:
name = child.attrib['name']
value = child.text
if name in base_strings:
if name in result:
result[name].append(value)
else:
result[name].append(" ")
#填补base在target没有的行为" "
target_strings = read_strings_from_xml(target_filename)
for base_name in base_strings:
if base_name not in target_strings:
if base_name in result:
result[base_name].append(" ")
# 将result字典写入CSV文件
def write_result_to_csv(result, output_csv):
with open(output_csv, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# 写入标题行
header = ['name'] + ['value' + str(i) for i in range(1, len(next(iter(result.values()), [])) + 1)]
writer.writerow(header)
# 写入数据行
for name, values in result.items():
row = [name] + values
writer.writerow(row)
base_filename = 'base_strings.xml'
target_filename = 'target_strings.xml'
output_filename = 'result.csv'
result = read_csv_and_initialize_result(output_filename)
base_strings = read_strings_from_xml(base_filename)
#确保base_strings包含所有键
for key in base_strings:
if key not in result:
result[key] = [''] * (len(next(iter(result.values()), [])) if result else 0)
update_result_with_target_strings(base_strings, target_filename, result)
write_result_to_csv(result, output_filename)
使用方法:
(1)将基准string.xml文件的内容复制到base_string.xml中,作为基准文件,name值都是要以基准文件为主。
(2)依次将所有多国语言的内容直接复制到target_string.xml中。
(3)运行MergeLan.py就可以了。之后重复2、3操作,就可以得到一个多国语言的表格。
打开之后是这样的:(打碼效果)
注意前提:
(1)安装python环境。
要在您的计算机上安装Python环境,请按照以下步骤操作:
-
访问Python官方网站:https://www.python.org/downloads/
-
根据您的操作系统(Windows、macOS、Linux等)选择适当的安装程序。通常,网站会根据您的系统自动推荐一个版本。点击下载推荐版本。
-
下载完成后,运行安装程序。
-
Windows:
- 双击下载的安装文件(.exe)。
- 在安装界面中,勾选"Add Python to PATH"(将Python添加到环境变量)以便在命令行中直接运行Python。
- 点击“Install Now”(立即安装)并等待安装完成。
-
macOS:
- 双击下载的安装文件(.pkg)。
- 按照安装向导的指示进行操作。
-
Linux(Ubuntu/Debian):
-
打开终端。
-
输入以下命令并回车(可能需要管理员权限,使用
sudo
):sudo apt update sudo apt install python3
-
安装完成后,可以通过输入
python3 --version
来检查Python是否安装成功。
-
-
-
安装完成后,您可以打开命令行(Windows的命令提示符或PowerShell,macOS和Linux的终端)并输入
python --version
或python3 --version
来检查Python是否已成功安装。这将显示Python的版本号。
现在,您应该已经成功安装了Python环境,并可以开始编写和运行Python脚本了。如果您需要安装特定的Python库或模块,可以使用pip
(Python的包管理器)来安装。例如,要安装名为requests
的库,您可以在命令行中输入以下命令:
pip install requests
或者,如果您使用的是Python 3,可能需要使用pip3
:
pip3 install requests
(2)在同目录下创建base_string.xml和target_strings.xml文件。
其他补充:多语言字串提取/合并key和value
`合并key和value (一般从表格中导入项目要使用)`
=CONCATENATE("<string name=",CHAR(34), $A2,CHAR(34), ">", C2, "</string>")
分离key和value (一般从项目中导入表格要使用)
举例:
在A3输入:<string name="app_name">HiShare</string>
提取key:
=MID(A3,FIND("name=""",A3)+6,FIND(""">",A3)-FIND("name=""",A3)-6)
提取value:
=MID(A3,FIND(""">",A3)+2,FIND("</",A3)-FIND(""">",A3)-2)
或者
=MID(A3,FIND(">",A3)+1,FIND("</",A3)-FIND(">",A3)-1)
A3表示在A3往下输入数据。
多国语言:
以下是根据给出的语言和地区对应的命名约定,为Danish、Finnish、Russian、German、Dutch、Norwegian、Swedish、Kazakh、Latvian、Lithuanian、Slovak、Slovenian、Estonian、Czech、Hungarian、Bulgarian、Croatian、Ukrainian、Romanian和Greek创建多国语言XML文件时的命名示例:
Euskera(巴斯克语):values-eu/strings.xml
这个文件夹是用于存储巴斯克语环境下的字符串资源文件。eu表示巴斯克语。
Gallego(加利西亚语):values-gl/strings.xml
这个文件夹是用于存储加利西亚语环境下的字符串资源文件。gl表示加利西亚语。
French(法语):values-fr/strings.xml
这个文件夹是用于存储法语环境下的字符串资源文件。fr表示法语。
Italian(意大利语):values-it/strings.xml
这个文件夹是用于存储意大利语环境下的字符串资源文件。it表示意大利语。
Polish(波兰语):values-pl/strings.xml
这个文件夹是用于存储波兰语环境下的字符串资源文件。pl表示波兰语。
Danish(丹麦语):values-da/strings.xml
这个文件夹是用于存储丹麦语环境下的字符串资源文件。da表示丹麦语。
Finnish(芬兰语):values-fi/strings.xml
这个文件夹是用于存储芬兰语环境下的字符串资源文件。fi表示芬兰语。
Russian(俄语):values-ru/strings.xml
这个文件夹是用于存储俄语环境下的字符串资源文件。ru表示俄语。
German(德语):values-de/strings.xml
这个文件夹是用于存储德语环境下的字符串资源文件。de表示德语。
Dutch(荷兰语):values-nl/strings.xml
这个文件夹是用于存储荷兰语环境下的字符串资源文件。nl表示荷兰语。
Norwegian(挪威语):values-no/strings.xml
这个文件夹是用于存储挪威语环境下的字符串资源文件。no表示挪威语。
Swedish(瑞典语):values-sv/strings.xml
这个文件夹是用于存储瑞典语环境下的字符串资源文件。sv表示瑞典语。
Kazakh(哈萨克语):values-kk/strings.xml
这个文件夹是用于存储哈萨克语环境下的字符串资源文件。kk表示哈萨克语。
Latvian(拉脱维亚语):values-lv/strings.xml
这个文件夹是用于存储拉脱维亚语环境下的字符串资源文件。lv表示拉脱维亚语。
Lithuanian(立陶宛语):values-lt/strings.xml
这个文件夹是用于存储立陶宛语环境下的字符串资源文件。lt表示立陶宛语。
Slovak(斯洛伐克语):values-sk/strings.xml
这个文件夹是用于存储斯洛伐克语环境下的字符串资源文件。sk表示斯洛伐克语。
Slovenian(斯洛文尼亚语):values-sl/strings.xml
这个文件夹是用于存储斯洛文尼亚语环境下的字符串资源文件。sl表示斯洛文尼亚语。
Estonian(爱沙尼亚语):values-et/strings.xml
这个文件夹是用于存储爱沙尼亚语环境下的字符串资源文件。et表示爱沙尼亚语。
Czech(捷克语):values-cs/strings.xml
这个文件夹是用于存储捷克语环境下的字符串资源文件。cs表示捷克语。
Hungarian(匈牙利语):values-hu/strings.xml
这个文件夹是用于存储匈牙利语环境下的字符串资源文件。hu表示匈牙利语。
Bulgarian(保加利亚语):values-bg/strings.xml
这个文件夹是用于存储保加利亚语环境下的字符串资源文件。bg表示保加利亚语。
Croatian(克罗地亚语):values-hr/strings.xml
这个文件夹是用于存储克罗地亚语环境下的字符串资源文件。hr表示克罗地亚语。
Ukrainian(乌克兰语):values-uk/strings.xml
这个文件夹是用于存储乌克兰语环境下的字符串资源文件。uk表示乌克兰语。
Romanian(罗马尼亚语):values-ro/strings.xml
这个文件夹是用于存储罗马尼亚语环境下的字符串资源文件。ro表示罗马尼亚语。
Greek(希腊语):values-el/strings.xml
这个文件夹是用于存储希腊语环境下的字符串资源文件。el表示希腊语。
Catalan-加泰罗尼亚语 :ca
标签:xml,name,表格,文件夹,values,字串,Android,strings,result
From: https://www.cnblogs.com/lxpblogs/p/18204342