在旧版本的 Android Studio 中,可以简单地选择所有条目并将其复制/粘贴到 Excel 中。
现在我使用的是 Android Studio 4.0.1,由于某种原因,他们在翻译编辑器中禁用了 Cmd+A 热键。
我研究了所有可用的插件/第三方工具,但它们似乎都不适合我。 还检查了类似的 SO 线程,但那里的想法都没有帮助我。
我有大量的 string.xml 文件被翻译成 10 种语言,所以我只寻找自动化解决方案。
我在 Android Studio 中遇到了同样的问题,我无法从翻译编辑器复制所有条目,所以我决定做我自己的 XmlResourceParser,它从特定的 strings.xml 文件读取所有键和值。当然,你可以根据自己的需要使用和修改这个脚本。
private void parseResourceXML(XmlResourceParser parser) {
try
{
int eventType = parser.getEventType();
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
StringBuilder sbValues = new StringBuilder();
StringBuilder sbKeys = new StringBuilder();
String nameAttr = "";
boolean translatableAttr = true;
while (eventType != XmlResourceParser.END_DOCUMENT)
{
if (eventType == XmlResourceParser.START_DOCUMENT)
{
//Log.d("XmlResourceParser", "Start Document");
}
else if (eventType == XmlResourceParser.START_TAG)
{
//Log.d("XmlResourceParser", "Start Tag " + parser.getName());
String element = parser.getName();
if (!TextUtils.isEmpty(element))
{
switch (element)
{
case "string":
nameAttr = parser.getAttributeValue(null, "name");
translatableAttr = parser.getAttributeBooleanValue(null, "translatable", true);
map.put(nameAttr, nameAttr);
sbKeys.append(nameAttr);
sbKeys.append("\n");
break;
case "string-array":
nameAttr = parser.getAttributeValue(null, "name");
translatableAttr = parser.getAttributeBooleanValue(null, "translatable", true);
break;
case "item":
nameAttr = parser.getAttributeValue(null, "name");
translatableAttr = parser.getAttributeBooleanValue(null, "translatable", true);
map.put(nameAttr, nameAttr);
sbKeys.append(nameAttr);
sbKeys.append("\n");
break;
}
}
}
else if (eventType == XmlResourceParser.END_TAG) {
//Log.d("XmlResourceParser", "End Tag " + parser.getName());
}
else if (eventType == XmlResourceParser.TEXT) {
//get the String value text
String text = parser.getText();
map.put(nameAttr, text);
sbValues.append(text);
sbValues.append("\n");
}
eventType = parser.next();
}
String sKeys = sbKeys.toString();
String sValues = sbValues.toString();
int i = 0; //<------- PUT A BREAK POINT HERE and point to sKeys or sValues and click + button and then click on VIEW button (in debug mode) and copy them all. Then Paste all sKeys in Excel in Column1 and sValues in Column2
} catch (Exception e) {
e.printStackTrace();
}
}
您可以在 Activity 的 onCreate 方法中像下面这样调用它:
parseResourceXML(getResources().getXml(R.xml.strings));
并将您的 strings.xml 或本地化的 strings_fr.xml 放在 res/xml 文件夹下。 在上面的脚本中,只需在末尾的 sKeys 或 sValues 中放置一个断点,然后单击 + 按钮查看数据,然后单击 VIEW 按钮(在调试模式下)以纯文本形式查看所有数据,现在您可以选择全部数据并将它们粘贴到 Excel 列中。我希望它也能涵盖您的情况。
我编写了一个 gradle-plugin 来在 Android 翻译
strings.xml
文件和 Excel 之间进行转换,您可以将其包含在 Android 项目中:
通过任务
exportTranslationsToExcel
,您可以将所有 strings.xml
导出到单个 Excel 文件
使用
importTranslationsFromExcel
您可以将它们导入回来
作为一个 gradle 插件,您可以轻松地自动化它以在每个构建上运行或作为预提交运行。这在 README.md
中有进一步描述