首页 > 其他分享 >Android导出所有多语言字串到表格

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

时间:2024-05-21 16:31:09浏览次数:26  
标签:xml name 表格 文件夹 values 字串 Android strings result

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

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

  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    

标签:xml,name,表格,文件夹,values,字串,Android,strings,result
From: https://www.cnblogs.com/lxpblogs/p/18204342

相关文章

  • C#在DataGridView表格中操作Access数据库
    C#在DataGridView表格中直接添加修改删除数据 效果图 Form1.cs完整代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Dat......
  • Android查看apk安装包的AndroidManifest.xml文件
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`Android查看apk安装包的AndroidManifest.xml文件日期:2020-4-19阿珏折腾代码浏览:946次评论:5条起因上周在做安卓系统的厂家推送功......
  • 跨平台应用开发进阶(八) :uni-app 实现Android原生APP-云打包集成极光推送(JG-JPUSH)详
    跨平台应用开发进阶(八):uni-app实现Android原生APP-云打包集成极光推送(JG-JPUSH)详细教程:https://blog.csdn.net/sunhuaqiang1/article/details/124337987?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171619616916800182772309%2522%252C%2522scm%2522%253A%252......
  • Android Binder 学习
    AndroidBinderAndroid作为多进程操作系统,每个功能模块都是一个独立的进程,特别是hal层将底层硬件隔离开,进程通信会频繁的发生,为了更好的在进程间通信,Android开发了Binder模块专门用于解决该问题。前置知识介绍进程执行过程Linux下进程通信方式Binder概述AndroidBin......
  • Perform APK Downgrade Extraction on smartphones running Android 14
    SomeonementionedthatAPKDowngradeExtractionnolongerworksonAndroid14,andregardlessofthemobileforensictoolused,itisimpossibletosuccessfullyextractdataviaAPKDowngradeExtraction.I'mcuriousaboutthisissueanddecidetofind......
  • WPS 表格使用与常用函数
    参考职场必用的9个表格函数20个常用函数及18个常用快捷键rank怎么锁定范围合集·Excel轻教程ExcelVBA入门到精通详细教程环境软件/系统版本说明WindowsWindows10专业版22H219045.4291WPS2024春季更新(16417)正文参考连接已非常清晰,不再cv。......
  • Android/iOS版本号机制简介
    Android和iOS有各自的版本号机制,但都根据版本号的用途,分为了2类:程序向的构建版本号:用户不可见影响APP的功能:覆盖安包(低版本覆盖高版本会提示异常或失败)影响APP商店提审:每个提审包都必须必上一次版本号高用户向的显示版本号:用户可见影响APP的版本号显示:系统设置里可......
  • 基于uniapp+vue3自定义增强版table表格组件「兼容H5+小程序+App端」
    vue3+uniapp多端自定义table组件|uniapp加强版综合表格组件uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5+小程序端+App端。如下图:H5+小程序+App端,多端......
  • Android 15 的新功能与适配
    前台服务变化前台服务一直是比较损耗电池寿命的操作,在Android15Beta2里,**dataSync 和 mediaProcessing 的前台服务类型现在有大约6小时的超时时间**,之后系统将调用Android15新的 Service.onTimeout(int,int)方法,之后该服务就不会再被视为前台服务,如果服务没有调用......
  • vue项目中实现表格的预览与编辑(luckysheet)
    在最近的项目中遇到了这么一个需求,需要对上传的表格进行呈现预览,并且可以在线对表格进行编辑,然后进行保存。思路:用到的组件 luckysheet   exceljs  FileSaver  LuckyExcel相关依赖:npminstallexceljsnpminstallFileSavernpminstallluckyexcel 相关步骤:......