Android开发使用strings.xml多语言翻译解决方案
作者:Knight_Davion 发布时间:2023-06-27 14:19:24
概述
在实际项目开发中如果需要支持多语言,我们需要整理项目中所有的字符串并翻译成对应的语种放在相应的文件夹下,就像这样
最让我们头痛的是我们得一条一条的复制粘贴这些翻译文本到对应语种文件夹下的string.xml文件中,这种重复性的工作浪费了大量的开发时间。针对这个问题网上也有很多的解决方案比如Android-strings-xml-csv-converter这个插件,不过这个插件貌似并不能兼容所有的AS版本,比如我现在使用的3.1.2安装之后就无法使用(也有可能是我的打开方式不对)。总之虽然在我这不能使用但是却提供了一个非常好的解决思路,那就是把xml文件转换成excel文档,再把翻译后的excel文档转换成各个语种对应的xml即可。
按照这个思路用python写了两个脚本并封装成了exe文件(xls转xml.exe和xml转xls.exe),下面我们就来看看这两个工具如何使用。
使用步骤
1 XML转XLS
首先我们要有一个string.xml文件 其实就是中文下的文本就像这样
<resources>
<string name="app_name">多语言翻译测试</string>
<string name="confirm">确定</string>
<string name="cancel">取消</string>
<string name="submit">提交</string>
<string name="edit">编辑</string>
<string name="join">加入</string>
<string name="create">创建</string>
<string name="tips">提示</string>
... ...
</resources>
当然你的项目肯定不止这些 然后把这个xml文件放到 xml转xls.exe 的同级目录下
双击执行xml转xls.exe
输入你要转换的语种 ,比如 英文 日文 韩文(使用空格分割)回车,会在当前目录下生成一个strings.xls文件
打开格式如下
这个文档就可以提供给翻译公司或者我们自己完成对应语种下的翻译了。
2 XLS转XML
现在假如我们已经拿到了翻译好文档,就像这样
现在我们把这个文档放在xls转xml.exe的同级目录下
注意:文档名为strings.xls不能修改
双击执行xls转xml.exe,执行完毕后你会发现目录下成了以下四个文件
这些文件就是我们要放置到各个语种文件夹下的xml文件(中文的可以忽略),打开查看一下
英文
日文
韩文
任务完成!
由于我们是直接转换的xml文件,所有不管你是AndroidStudio或者Eclipse都是适用的。
下面是工具及Python源码的github地址,欢迎fork和star!
https://github.com/shiweibsw/Translation-Tools
(提示windows用户可直接使用exe文件,mac用户需要安装python运行环境后使用对应的python脚本)
来源:https://juejin.cn/post/6844903630798061581


猜你喜欢
- 本文实例讲述了Android编程实现仿QQ发表说说,上传照片及弹出框效果。分享给大家供大家参考,具体如下:代码很简单,主要就是几个动画而已,
- 本文将介绍Java在ICPC快速IO实现方法,下面看看
- 目录Retrofit介绍Retrofit优点Retrofit的使用1.引入依赖项2.添加网络权限3.编写Retrofit辅助类4.定义Api
- java 遍历listpackage com.tiandy.core.rest;import java.util.ArrayList;imp
- 详解微信小程序 同步异步解决办法小程序中函数体还没有完成,下一个函数就开始执行了,而且两个函数之间需要传参。那是因为微信小程序函数是异步执行
- 关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListVie
- 读取xml配置bean(@ImportResource)1、应用场景旧框架SSM项目移行到SpringBoot中,xml配置文件很齐全,就可
- 许多开发人员对异步代码和多线程以及它们的工作原理和使用方法都有错误的认识。在这里,你将了解这两个概念之间的区别,并使用c#实现它们。我:“服
- 配置操作第一步操作如图:选择右侧的database页签,一般在idea的右边会有Database界面,点击它即可。有时候我们会发现这个Dat
- 先看看目前这4种数据库的分页写法:-- OracleSELECT * FROM ( SELECT RO
- CyclicBarrier是什么CyclicBarrier是Java并发包中提供的一种同步工具类,它可以让多个线程在某个屏障处等待,直到所有
- MyBatis if test 判断字符串相等不生效采用 MyBatis 框架操作 MySQL 数据库时,判断传入的字符串 priceFla
- Java发红包案例,供大家参考,具体内容如下首先我们需要分析这个代码的架构是什么,需要什么类组成等。我们需要建立4个类,这4个类分别是用户类
- 继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲染以及画布旋转等知识点,效果如下:虽然步骤
- Logback TurboFilter实现日志级别等内容的动态修改可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就
- 主要原理:是在主界面有两个空间,一个是EditText,一个是ListView,ListView是放在EditText下面的,然后自定义建立
- 本文实例讲述了C#实现根据年份计算生肖属相的方法。分享给大家供大家参考。具体分析如下:提供年份可以输出属相,代码比较简单,因为2008年为鼠
- byte:java中最小的数据类型。1字节/8位。-128(2^7)~127(2^7-1),默认值0。short:短整型,2字节/16位,取
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl
- 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。声明数组变量并不是声明 nu