Pla*_*eon 5 android google-sheets
我有一个包含所有 strings.xml 资源翻译的 Google 表格。每种语言都是一列。第一列是字符串资源 ID。
您是否知道我可以使用的工具(或宏或任何东西)可以让我将电子表格重新导出为具有适当区域后缀的 strings.xml 格式?(后缀是电子表格的第一行。)
我想出了一个在很多情况下都有效的解决方案。您的可能有所不同。
\n\n我的电子表格列标题是
\n\nname,plural value,en,fr,de,it,es,ja\n
Run Code Online (Sandbox Code Playgroud)\n\n下面是我使用的代码。它有两个缺点,您可能需要将其应用到您自己的电子表格中。首先,它不处理复数值。它只是创建重复的字符串条目,然后您需要返回并手动编辑。其次,如果要翻译的文本包含逗号,actionscript 将在这些逗号上而不是在每个部分的末尾分割字符串。后来我注意到,如果 Excel 中包含逗号,则会用双引号将值括起来。但不确定如果它们包含逗号和双引号会做什么。如果您的文本存在此类情况,您将需要添加一些代码来处理这些情况。但下面是我使用的 Actionscript 代码。
\n\n当你编译并运行swf时,会出现一个黄色按钮。单击该按钮,它将提供保存其中一种语言的选项。每次单击它都会保存一种不同的语言。如果您继续单击等,它会循环回到第一种语言。
\n\n但最终输出应该非常接近完美的翻译 strings.xml
\n\n主要类别:
\n\npackage \n{\n import flash.display.Sprite;\n import flash.events.Event;\n import flash.events.MouseEvent;\n import flash.net.FileReference;\n import flash.utils.ByteArray;\n\n /**\n * ...\n * @author Plastic Sturgeon\n */\n public class Main extends Sprite \n {\n private var rows:Array;\n private var en:XML = <resources></resources>;\n private var fr:XML = <resources></resources>;\n private var de:XML = <resources></resources>;\n private var it:XML = <resources></resources>;\n private var es:XML = <resources></resources>;\n private var xmls:Vector.<XML> = new Vector.<XML>;\n\n private var counter:uint = 0;\n public function Main():void \n {\n xmls.push(en);\n xmls.push(fr);\n xmls.push(de);\n xmls.push(it);\n xmls.push(es);\n\n if (stage) init();\n else addEventListener(Event.ADDED_TO_STAGE, init);\n }\n\n private function init(e:Event = null):void \n {\n removeEventListener(Event.ADDED_TO_STAGE, init);\n // entry point\n dumpIt();\n graphics.beginFill(0xFFCC00);\n graphics.drawRect(0, 0, 100, 100);\n stage.addEventListener(MouseEvent.CLICK, onMouseClick);\n }\n\n private function onMouseClick(e:MouseEvent):void \n {\n var language:int = counter % 5;\n var suffixes:Array = new Array("en", "fr", "de", "it", "es");\n var fr:FileReference = new FileReference();\n var ba:ByteArray = new ByteArray();\n ba.writeObject(\'<?xml version="1.0" encoding="utf-8"?>\\r\'+xmls[language].toXMLString()); \n fr.save(ba, "strings-"+suffixes[language]+".xml");\n counter++\n }\n public function dumpIt():void\n {\n var obj:EmbeddedText = new EmbeddedText();\n //txt.text = obj.toString();\n rows = obj.toString().split("\\r");\n trace(rows.length);\n for (var i:uint = 0; i < rows.length; i++ ) {\n var row:Array = String(rows[i]).split(",");\n for (var j:uint = 0; j < xmls.length; j++ ) {\n var name:String = row[0]\n name = name.substring(1);\n var value:String = row[2 + j]; \n var node:XML = new XML(\'<string name="\' + name + \'">\' + value + \'</string>\');\n //trace(\'<string name="\' + name + \'">\' + value + \'</string>\');\n xmls[j].appendChild(node);\n }\n }\n trace("en",en);\n }\n }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n用于将文本文件编译为 swf 的嵌入文本类:
\n\npackage \n{\n import flash.utils.ByteArray;\n\n /**\n * ...\n * @author Plastic Sturgeon\n */\n [Embed(source="translateion_csv.txt", mimeType="application/octet-stream")]\n public class EmbeddedText extends ByteArray\n {\n\n public function EmbeddedText() \n {\n\n }\n\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n最后:这是我翻译的文本样本,供您自行测试:
\n\nname,plural value,en,fr,de,it,es,ja\nhomescreen_new_button,,NEW TOURNAMENT,NOUVEAU TOURNOI,NEUES TURNIER,NUOVO TORNEO,NUEVO TORNEO,\nhomescreen_current_button,,VIEW CURRENT BRACKET,VOIR LE TABLEAU ACTUEL,AKTUELLER TURNIERSTAND,VISUALIZZA GRIGLIA,VER NIVEL ACTUAL,\ntournament_type_title,,TOURNAMENT SETTINGS,PARAM\xc3\x88TRES DU TOURNOI,TURNIER-EINSTELLUNGEN,IMPOSTAZIONI TORNEO,CONFIGURACI\xc3\x93N DE TORNEO,\ntournament_type_gaming_stations,,HOW MANY GAMING STATIONS,COMBIEN DE POSTES,WIE VIELE SPIELGER\xc3\x84TE,NUMERO DI POSTAZIONI DI GIOCO,N\xc3\x9aMERO DE M\xc3\x81QUINAS DE JUEGO,\ntournament_type_tournament_type,,TOURNAMENT TYPE,TYPE DE TOURNOI,TURNIERART,TIPO DI TORNEO,TIPO DE TORNEO,\ntournament_type_tournament_type_single,,SINGLE ELIMINATION,\xc3\x89LIMINATION DIRECTE,EINFACHE ELIMINIERUNG,ELIMINAZIONE SINGOLA,ELIMINACI\xc3\x93N INDIVIDUAL,\ntournament_type_tournament_type_double,,DOUBLE ELIMINATION,DOUBLE \xc3\x89LIMINATION,DOPPELTE ELIMINIERUNG,ELIMINAZIONE DOPPIA,ELIMINACI\xc3\x93N DOBLE,\ntournament_type_back_warning_title,,WARNING,AVERTISSEMENT,ACHTUNG,AVVISO,ATENCI\xc3\x93N,\ntournament_type_back_warning_message,,Going back to the home screen will clear all information.\\nDo you want to continue?,Retourner \xc3\xa0 l\\\'\xc3\xa9cran d\\\'accueil effacera toutes les donn\xc3\xa9es.\\nVoulez-vous continuer\xc2\xa0?,Durch die R\xc3\xbcckkehr zum Home-Bildschirm werden alle Informationen gel\xc3\xb6scht.\\nWirklich fortfahren?,Tornando alla schermata iniziale perderai tutte le informazioni.\\nVuoi continuare?,"Si vuelves a la pantalla principal, se borrar\xc3\xa1 toda la informaci\xc3\xb3n.\\n\xc2\xbfContinuar?",\ntournament_type_back_warning_confirm,,OK,OK,OK,OK,Aceptar,\ntournament_type_back_warning_cancel,,Cancel,Annuler,Abbrechen,Annulla,Cancelar,\ntournament_type_help_single,,Players are eliminated after their first loss.,Les joueurs sont \xc3\xa9limin\xc3\xa9s d\xc3\xa8s la premi\xc3\xa8re d\xc3\xa9faite.,Spieler scheiden nach ihrer ersten Niederlage aus.,I giocatori vengono eliminati dopo la prima sconfitta.,Los jugadores quedan eliminados a la primera derrota.,\ntournament_type_help_double,,"After a player loses once, they enter the Loser\\\'s bracket. They are eliminated if they lose a second time.","Apr\xc3\xa8s une premi\xc3\xa8re d\xc3\xa9faite, le joueur int\xc3\xa8gre le tableau des perdants. Il est \xc3\xa9limin\xc3\xa9 s\\\'il perd une seconde fois.",Nach einer ersten Niederlage nimmt der Spieler an der Verliererrunde teil. Bei einer zweiten Niederlage scheidet er aus.,"Dopo una sconfitta, i giocatori vengono inseriti nella griglia sconfitti. Vengono eliminati se perdono per la seconda volta.","Al perder una vez, pasan al nivel de perdedores. Si pierden una segunda vez, quedan eliminados.",\nadd_players_title,,ADD PLAYERS,AJOUTER DES JOUEURS,SPIELER HINZUF\xc3\x9cGEN,AGGIUNGI GIOCATORI,A\xc3\x91ADIR JUGADORES,\nadd_players_seed,,SEED,CLASSER,SETZEN,TESTA DI SERIE,CABEZA DE SERIE,\nadd_players_delete,,DELETE,SUPPRIMER,L\xc3\x96SCHEN,CANCELLA,QUITAR,\nadd_players_default_value,,PLAYER NAME,NOM DU JOUEUR,SPIELERNAME,NOME GIOCATORE,NOMBRE DE JUGADOR,\nadd_players_dialog_title,,ADD PLAYER,AJOUTER UN JOUEUR,SPIELER HINZUF\xc3\x9cGEN,AGGIUNGI GIOCATORE,A\xc3\x91ADIR JUGADOR,\nadd_players_dialog_message,,ENTER THE PLAYER NAME,ENTRER LE NOM DU JOUEUR,SPIELERNAMEN EINGEBEN,INSERISCI IL NOME DEL GIOCATORE,ESCRIBE EL NOMBRE DE JUGADOR,\nadd_players_dialog_OK,,OK,OK,OK,OK,ACEPTAR,\nadd_players_dialog_ok_and_add,,OK + ADD ANOTHER,OK + EN AJOUTER UN AUTRE,OK + MEHR HINZUF\xc3\x9cGEN,OK + AGGIUNGI ALTRO,ACEPTAR Y A\xc3\x91ADIR OTRO,\nadd_players_dialog_cancel,,CANCEL,ANNULER,ABBRECHEN,ANNULLA,CANCELAR,\nadd_players_dialog_name_taken,,Name Already Taken,Nom d\xc3\xa9j\xc3\xa0 utilis\xc3\xa9,Name bereits vergeben,Nome gi\xc3\xa0 in uso,Nombre ya utilizado,\nadd_players_dialog_name_added,,Player Added,Joueur ajout\xc3\xa9,Spieler hinzugef\xc3\xbcgt,Giocatore aggiunto,Jugador a\xc3\xb1adido,\nadd_players_delete_confirm,,DELETE,SUPPRIMER,L\xc3\x96SCHEN,CANCELLA,QUITAR,\nadd_players_delete_cancel,,DONE,TERMIN\xc3\x89,FERTIG,FATTO,HECHO,\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
3490 次 |
最近记录: |