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

标签 android excel android-studio localization

在旧版本的 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 按钮(在 Debug模式下)以纯文本形式查看所有数据,现在您可以全部选中它们并将它们粘贴到 Excel 列中。我希望它也涵盖你的情况。

关于android - 如何将翻译编辑器条目导出到 Excel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64923065/

相关文章:

android - 在 Android 应用程序的演示/精简版中处理升级/购买点击的正确方法

android - 嵌套 RecyclerView 在第一次滚动后在项目之间添加空间

java - 安卓工作室 : How to exclude google-services module in product flavor?

android - 通过方法 channel flutter 传递自定义对象

asp.net - 如何在 Epplus 中使用条件格式?

android - 每当我更改一个 Kotlin 文件中的每个函数时,都会获取 "Conflicting overloads"

Android studio 不建议导入

java - 创建一个 gradle 依赖项以从 git 导入

VBA Sort DIR 按字母顺序传输数据

excel - 如何将 Reporting Services 报表导出为 Excel,并在 Excel 列中嵌入计算?