android项目多语言文件统一处理工具

0,建议首先创建3个文件夹:

 ①:1、values_all

 ②:2、xml

 ③:3、output

1,android项目多语言strings.xml文件复制到一个文件夹:

import os
import shutildef find_string_xml(directory):string_xml_files = []for root, _, filenames in os.walk(directory):for filename in filenames:if filename == "strings.xml":string_xml_files.append(os.path.join(root, filename))return string_xml_filesdef copy_file(source_file, dest_file):try:with open(source_file, 'rb') as f_source, open(dest_file, 'wb') as f_dest:shutil.copyfileobj(f_source, f_dest)except Exception as e:print(f"复制 {source_file} 到 {dest_file} 失败:{e}")def get_parent_dir_name(file_path):if not os.path.exists(file_path):raise FileNotFoundError(f"文件 {file_path} 不存在。")# 获取父目录的绝对路径parent_dir = os.path.dirname(file_path)# 获取父目录的名称parent_dir_name = os.path.basename(parent_dir)return parent_dir_namedef find_and_copy_string_xml(source_directory, dest_directory):copied_files = 0for source_file in find_string_xml(source_directory):parent_name = get_parent_dir_name(source_file)file_name = os.path.basename(source_file)dest_file = os.path.join(dest_directory, f"{parent_name}_{file_name}")copy_file(source_file, dest_file)copied_files += 1print(f"已将 {source_file} 复制到 {dest_file}")return copied_files# 使用示例
source_directory = "C:\\Users\\DHY-20210315\\Documents\\2024-05-20\\1、values_all"
dest_directory = "C:\\Users\\DHY-20210315\\Documents\\2024-05-20\\2、xml"copied_files = find_and_copy_string_xml(source_directory, dest_directory)
print(f"共复制了 {copied_files} 个 strings.xml 文件。")

2,将项目现存的其他语言对齐到指定的语言strings.xml,不存在的填充指定的。其他语言多出来的添加在此语言strings.xml文件最后。

以下代码以英文为标准:

import os
import xml.etree.ElementTree as ETdef parse_xml_to_dict(xml_file):# 解析XML文件tree = ET.parse(xml_file)root = tree.getroot()# 创建一个空字典用于存储结果result = {}# 遍历XML中的每个<string>标签for string_elem in root.findall('string'):# 获取name属性值作为键,文本内容作为值key = string_elem.attrib['name']value = string_elem.text# 存储键值对到字典中result[key] = valuereturn resultdef write_dict_to_xml(basic_dict, result_dict, output_file):# 打开文件,写入XML头部信息with open(output_file, "w", encoding="utf-8") as f:f.write('<?xml version="1.0" encoding="utf-8"?>\n')f.write('<resources>\n')# 遍历字典,每个键值对创建一个<string>标签for key, value in basic_dict.items():value2 = result_dict.get(key)if value2:value = value2del result_dict[key]# 创建<string>标签f.write('    <string name="{}">{}</string>\n'.format(key, value))if result_dict:f.write('\n\n')for key, value in result_dict.items():f.write('    <string name="{}">{}</string>\n'.format(key, value))f.write('\n')# 写入XML结束标签f.write('</resources>\n')def start_run(basic_xml, in_folder_path, out_folder_path):if not os.path.exists(basic_xml):print("basic_xml不存在")return Falsebasic_dict = parse_xml_to_dict(basic_xml)# 获取文件夹中所有的XML文件路径xml_files = [file for file in os.listdir(in_folder_path) if file.endswith('.xml')]# 遍历每个XML文件并解析内容for xml_file in xml_files:xml_file_path = os.path.join(in_folder_path, xml_file)print("解析文件:", xml_file_path)# 解析XML文件并存储结果到字典中result_dict = parse_xml_to_dict(xml_file_path)write_dict_to_xml(basic_dict, result_dict, os.path.join(out_folder_path, xml_file))return Truestr_xml = "C:\\Users\\DHY-20210315\\Documents\\2024-05-20\\values_strings2.xml"
in_dir = "C:\\Users\\DHY-20210315\\Documents\\2024-05-20\\2、xml"
out_dir = "C:\\Users\\DHY-20210315\\Documents\\2024-05-20\\3、output"
if start_run(str_xml, in_dir, out_dir):print("操作完成~")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用“记忆化搜索“解斐波那契数

一、题目描述 求第 n 个斐波那契数。 二、 利用"记忆化搜索"解斐波那契数 什么是记忆化搜索&#xff1f;记忆化搜索就是带有备忘录的递归。 我们先来看一下使用递归来解斐波那契数的这个过程&#xff0c;假设求第5个斐波那契数F(5)。 由图可见&#xff0c;要重复计…

MATLAB:format作用

format作用 介绍常用命令1. format short2. format long3. format long e 或 format short e4. format rat5. format bank6. format 7. format hex8. format compact 使用方法举例注意 介绍 在MATLAB中&#xff0c;format函数用于控制命令窗口中显示数字的格式。MATLAB提供了多…

构建可变变量的存储方式

简介 在FPGA中最常用的IP核就是FIFO和RAM了&#xff0c;这两个通常由官方IP来实现&#xff0c;但是在IP中&#xff0c;如果想要修改参数就十分困难。因此就需要构建可变存储空间的FIFO和RAM。通常构建FIFO可以用XILINX提供的源语以及宏来实现&#xff0c;构建小容量的RAM可以用…

Android加固多渠道打包和签名工具

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;同时增加了签名功能&#xff0c;旨在更好的帮助开发者构建多渠道包 使用说明 下载并解压最新工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;需本地安装java环境&#…

手机定制开发_基于天玑900的5G安卓手机定制方案

手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺&#xff0c;为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐&#xff0c;用户都能轻松驾驭。手机搭载了最新的Android 13操作系统&#xff0c;提高了数据读取的准确性&a…

解析Java中1000个常用类:Cloneable类,你学会了吗?

在 Java 编程中,复制对象是一个常见的需求。为了提供对象的复制功能,Java 引入了 Cloneable 接口和 clone 方法。 本文将深入探讨 Cloneable 接口的功能、用法、实现类及其在实际开发中的应用,帮助程序员更好地理解和利用这一接口。 Cloneable 接口概述 什么是 Cloneable…

根据IP查询城市ID和名字

根据IP查询城市ID和名字 import json import time import geoip2.database import requests from loguru import logger #创建GeoIP对象&#xff0c;并指定数据库路径 reader geoip2.database.Reader(rD:\thb\code\python-trial\pythonProject\data\GeoLite2-City.mmdb)#web …

小数第n位【蓝桥杯】

小数第n位 模拟 思路&#xff1a;arr数组用来记录已经出现过的a&#xff0c;在循环时及时退出。易知题目的3位即a%a后的第n-1,n,n1位。该代码非常巧妙&#xff0c;num记录3位的输出状况。 #include<iostream> #include<map> using namespace std; typedef long l…

vulnhub靶场之FunBox-9

一.环境搭建 1.靶场描述 Its a box for beginners, but not easy. Gather careful !!! Hint: Dont waste your time ! Every BruteForce-Attack at all ports can be stopped after 1500 trys per account. Enjoy the game and WYSIWYG ! This works better with VirtualBox…

Web前端ES6-ES13笔记合集

一. 走入ES6 ##### 1.初识ES6 > ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语…

在Spring中实现资源的动态加载和卸载

在Spring框架中&#xff0c;实现资源的动态加载和卸载通常涉及以下几个方面&#xff1a; 1. 使用Bean注解动态注册Bean 通过在配置类中使用Bean注解&#xff0c;可以在运行时动态创建和注册Bean。 Configuration public class DynamicBeanConfig {Beanpublic MyBean myBean(…

博士毕业论文/CTEX/LATEX

LATEX环境安装 CTEX 安装 &#xff08;垃圾&#xff0c;不要装&#xff09; 运行 clean.batcomp.bat 缺少字体 Couldn’t find Adobe Heiti S.cfg’ miktex-maketfm: No creation rule for font “Adobe Heiti Std”.解决方法&#xff1a;其实就是下载这四个字体之后&…

【大比武10】行业垂直大模型应用在档案管理中的探索

关注我们 - 数字罗塞塔计划 - # 大比武2024 本篇是参加“华夏伟业”杯第二届档案信息化公司业务与技术实力大比武&#xff08;简称“大比武 2024”&#xff09;的投稿文章&#xff0c;来自广州龙建达电子股份有限公司&#xff0c;作者&#xff1a;陶宣任。 在这个人工智能技…

深入理解flask规则构建与动态变量应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、Flask规则基础 1. 静态规则与动态规则 2. 规则语法与结构 三、动态变量应用…

CISCN 2022 初赛 ez_usb

还是从第一个 URB向后看 发现 同时 存在 2.8.1 2.10.1 2.4.1 但是显然 2.4.1 是7个字节 不满足 usb流量要求 只考虑 2.8.1 和 2.10.1 tshark -r ez_usb.pcapng -T json -Y "usb.src \"2.8.1\"" -e usbhid.data > 281.json 正常取数据即可 import js…

【vue】v-for只显示前几个数据,超出显示查看更多

v-for只显示前几个数据&#xff0c;超出显示查看更多 如图 <div v-for"(item,index) in list.slice(0,3)" :key"index"><div class"degreeNo" :class"index0?noOne:index1?noTwo:index2?noThree:"> NO{{index1}}:<…

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述 关于此文&#xff0c;我的一个见解想法&#xff0c;重点关注他怎么描述 「Diffusion Model」的引用的&#xff0c;以及未来方向就好了。当然从这篇文章可以知道 「Diffusion Model」的一个基石…

HR人才测评,企业人才综合素质测评?

HR企业人才综合素质测评是一种评估企业人才综合素质的方法。该测评方法通过对人才的综合能力、专业技能、沟通协调能力、团队合作能力、领导管理能力等方面进行评估&#xff0c;以期为企业提供更全面、更客观、更科学的人才选拔和管理的依据。 点击这里了解&#xff1a;『企业…

强化学习的应用场景:何时使用强化学习?

RL 强化学习的应用场景&#xff1a;何时使用强化学习&#xff1f;强化学习的基本原理适用场景1. 连续决策过程2. 不完全信息3. 动态环境4. 长期回报优化5. 无明确监督信号 实际案例游戏AI机器人控制自主驾驶金融交易推荐系统 结论 强化学习的应用场景&#xff1a;何时使用强化学…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接

参考: https://310.ai/copilot 可以通过自然语言通话晚上蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质。利用Protei…