Android导出所有多语言字串到表格

这种事情当然要写脚本完成啦,不然一个一个添加嘛?!!!

python脚本:

## 注意:

##  1.有些语言的符号可能会乱码,比如es ---> ¡ ----> ? 

##  2.base_strings.xml必须包含所有key值,作为基准,否则可能会楼填。

##  3.使用:依次将不同语言的xml文件内容复制到target_strings.xml中,运行MergeLan.py文件即可。

##  4.首次使用时,result.csv为空,不需要注释next(reader),之后使用都需要注释。

##  5.必須確保target_string.xml格式正確、且不含重複字串,可以在Notepad或者android studio檢查。


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环境,请按照以下步骤操作:

  1. 访问Python官方网站:https://www.python.org/downloads/

  2. 根据您的操作系统(Windows、macOS、Linux等)选择适当的安装程序。通常,网站会根据您的系统自动推荐一个版本。点击下载推荐版本。

  3. 下载完成后,运行安装程序。

    • 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是否安装成功。

  4. 安装完成后,您可以打开命令行(Windows的命令提示符或PowerShell,macOS和Linux的终端)并输入python --versionpython3 --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    
posted @ 2024-05-21 16:28  湘summer  阅读(109)  评论(0编辑  收藏  举报