如何将翻译编辑器条目导出到 Excel?

问题描述 投票:0回答:2

在旧版本的 Android Studio 中,可以简单地选择所有条目并将其复制/粘贴到 Excel 中。

现在我使用的是 Android Studio 4.0.1,由于某种原因,他们在翻译编辑器中禁用了 Cmd+A 热键。

我研究了所有可用的插件/第三方工具,但它们似乎都不适合我。 还检查了类似的 SO 线程,但那里的想法都没有帮助我。

我有大量的 string.xml 文件被翻译成 10 种语言,所以我只寻找自动化解决方案。

android excel android-studio localization
2个回答
5
投票

我在 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 列中。我希望它也能涵盖您的情况。


0
投票

我编写了一个 gradle-plugin 来在 Android 翻译

strings.xml
文件和 Excel 之间进行转换,您可以将其包含在 Android 项目中:

android-翻译-转换器-插件

通过任务

exportTranslationsToExcel
,您可以将所有
strings.xml
导出到单个 Excel 文件

使用

importTranslationsFromExcel
您可以将它们导入回来

作为一个 gradle 插件,您可以轻松地自动化它以在每个构建上运行或作为预提交运行。这在 README.md

中有进一步描述
© www.soinside.com 2019 - 2024. All rights reserved.