Autore Topic: Tecniche avanzate di localizzazione  (Letto 754 volte)

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
    Zapmobilegames
  • Sistema operativo:
    Win XP
Tecniche avanzate di localizzazione
« il: 19 Gennaio 2012, 09:14:39 CET »
0
Ciao a tutti,
prima di postare ho fatto un giro nella sezione Translate (dove c'è il progetto di traduzione app da altre lingue all'italiano), ma non mi sembrava consono con quanto avevo da dire.
I miei giochi, di base, sono in 5 lingue. Un po' perchè se uno ha le qualità le deve usare  8-) un po' perchè credo molto nella localizzazione per la diffusione delle app, anche se per Android il 50% dei download sono in lingua inglese, dalla mia esperienza.
Capite che gestire 5 strings.xml ogni volta che devi aggiungere una frase nel gioco è delicato e noioso, però vabbè... si fa.
In questi giorni mi è venuto lo sfizio di indagare meglio le API di Google per le traduzioni, siamo alla V2. "Dovrebbero" permettere di usare Google Translator in automatico (chiedo perdono ai puristi e agli estremisti linguistici per quanto segue).
Purtroppo tali API sono a pagamento guarda caso da Dicembre 2011 (e che sfiga!). 20$ per 1 milione di caratteri. Vabbè... nella mia ricerca di altri metodi aggratis mi sono studiato un tool per Eclipse, tale Sequoyah, con plug in chiamato localization (googlatelo per info).
Installato e cominciato ad usare già si presenta molto bene. L'interfaccia grafica in Eclipse è stile foglio Excel (proprio quello che avevo fatto io per gestire 5 lingue, che caso!), con le varie lingue in colonna una dopo l'altra e per ogni riga c'è la traduzione di una stessa frase nelle varie lingue.
La cosa simpatica è che se vuoi aggiungere una lingua, con un paio di click ti crea la cartella values-xx, il foglio strings.xml dentro vuoto e la colonna vuota da riempire.
La cosa che lo renderebbe il mio tool ideale, sarebbe la traduzione automatica dello strings.xml nella lingua nuova inserita, collegandosi magari proprio a Google Translate e restituendo la colonna riempita. Purtroppo credo che, vista la recente politica PAY di Google, questo se una volta era possibile, ora non lo è più.
Mi sono iscritto al MOTODEV Forum dove pare che ci fossero persone capaci di gestire il mio problema ed hanno confermato che il tool della Motorola opera con Sequoyah e Google, ma devi avere la licenza di Google per andare avanti.... Però, aggiungono:

"The addition of new translators, though, is quite simple to do through Sequoyah. It consists of implementing one of their extension points (org.eclipse.sequoyah.localization.tools.translator) by providing a class that contains some methods that receive lists of strings to translate, do the actual translation by using a translating service of your choice, and return the results. Once you get your Eclipse running with this, you'll see it show up on the drop down list for choosing the translator service"

Questo è interessante ed è una delle ragioni del mio post. La prima era di condividere con voi queste mie ricerche. La seconda ragione era di chiedervi un aiuto in relazione a quanto descritto dal team MOTODEV. In particolare loro mi dicono che se mi faccio la mia classe di traduzione con input/output, poi la posso usare in Sequoyah.
Senza andare troppo oltre (che post kilometrico!), avete idea di come poter procedere?

Grazie per la pazienza!

Zapp

P.S.: So benissimo che le traduzioni automatiche di Google fanno abbastanza skifo (benchè in rapido miglioramento, sinceramente), ma può essere un modo per entrare in certi mercati, farsi conoscere e magari trovare qualche volenteroso che ti dà una mano a tradurle per bene, da madrelingua. Ho iniziato tempo fa a scrivere ovunque per chiedere supporto in traduzioni, ma se NON PAGHI, non hai niente....

Zapmobilegames website
Tic Tank Toe: a new approach for a classic game

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Tecniche avanzate di localizzazione
« Risposta #1 il: 19 Gennaio 2012, 10:31:06 CET »
0
"The addition of new translators, though, is quite simple to do through Sequoyah. It consists of implementing one of their extension points (org.eclipse.sequoyah.localization.tools.translator) by providing a class that contains some methods that receive lists of strings to translate, do the actual translation by using a translating service of your choice, and return the results. Once you get your Eclipse running with this, you'll see it show up on the drop down list for choosing the translator service"

Questo è interessante ed è una delle ragioni del mio post. La prima era di condividere con voi queste mie ricerche. La seconda ragione era di chiedervi un aiuto in relazione a quanto descritto dal team MOTODEV. In particolare loro mi dicono che se mi faccio la mia classe di traduzione con input/output, poi la posso usare in Sequoyah.
Senza andare troppo oltre (che post kilometrico!), avete idea di come poter procedere?

Forse non ho capito una cosa. Io capisco che il tool Sequoyah è in grado di integrarsi con altri servizi di traduzione (come Google Translator) se tu realizzi la classe di interfaccia. A parte la classe di interfaccia, tu avevi già trovato un servizio alternativo a quello Google e gratuito?

Ho iniziato tempo fa a scrivere ovunque per chiedere supporto in traduzioni, ma se NON PAGHI, non hai niente....

Eheh, mi sembra anche abbastanza normale.  :-)

Senza perdere tempo (tempo=denaro), non ti merita offrire tipo 10 dollari per la traduzione di uno strings.xml ad un madrelingua, con qualità sicuramente superiore alle traduzioni automatiche? Questo ovviamente ha senso se è destinato a prodotti che "vendi".
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
    Zapmobilegames
  • Sistema operativo:
    Win XP
Re:Tecniche avanzate di localizzazione
« Risposta #2 il: 19 Gennaio 2012, 10:56:45 CET »
0
Per il costo, non so se me la caverei con 10$ per ogni strings.xml, ma ad ogni modo resto comunque confinato a non poter effettuare modifiche evolutive senza tornare dal traduttore.
Per il discorso dei sistemi di traduzione alternativi, sto cercando, ho iniziato da pochi giorni ad analizzare questo discorso e mi sono imbattuto nel problema delle API di Google a pagamento. Da qualche parte in rete suggeriscono di usare Bing, ma non ho ancora approfondito.
Il mio principale problema resta quello, un sistema automatico di traduzione dei miei strings.xml sfruttando tool esistenti e automatizzando il più possibile il procedimento. Sequoyah sembrava ottimo, ma mi sono arenato :(
Zapmobilegames website
Tic Tank Toe: a new approach for a classic game

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Tecniche avanzate di localizzazione
« Risposta #3 il: 19 Gennaio 2012, 11:19:49 CET »
0
Con 20$ a milione di caratteri quanti strings.xml riesci a tradurre?

EDIT: Contando una media 50 caratteri per stringa e 200 stringhe, farebbero 100 strings.xml tradotti per 20$. Che ne dici?
« Ultima modifica: 19 Gennaio 2012, 11:21:52 CET da bradipao »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Zappescu

  • Utente junior
  • **
  • Post: 110
  • Respect: +7
    • Mostra profilo
    • Tic Tank Toe
  • Dispositivo Android:
    HTC Magic
  • Play Store ID:
    Zapmobilegames
  • Sistema operativo:
    Win XP
Re:Tecniche avanzate di localizzazione
« Risposta #4 il: 19 Gennaio 2012, 11:33:24 CET »
0
Ho fatto una rapida verifica con i miei strings.xml e i tuoi conti sono più o meno quelli. Quindi con 20$ dovrei essere coperto dalle traduzioni di Google, ma perchè non investigare le strade FREE? :)
Sto leggendo Bing... forse si può fare con loro anche se mi viene un po' l'orticaria pensando a Microsoft, ma vabbè:

   Using the free Bing Translation APIs

Zapmobilegames website
Tic Tank Toe: a new approach for a classic game

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Tecniche avanzate di localizzazione
« Risposta #5 il: 19 Gennaio 2012, 11:47:30 CET »
0
di Google, ma perchè non investigare le strade FREE? :)

Questo dipende da te.  :-)

Io considero che se perdo 1 ora del mio tempo, praticamente perdo 20$.  ;-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Tecniche avanzate di localizzazione
« Risposta #6 il: 19 Gennaio 2012, 12:20:56 CET »
0
Qualche tempo fa ho realizzato questa porcheria  a mio uso e consumo:


Codice (Java): [Seleziona]
package it.mp.codicileggi.online.parser;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLEncoder;

public class TeoTranslate {

        private static final String UTF8 = "UTF_8";
        private static final String A_CAPO_UTF8 = "%0A";
        private static final String SPAZIO_UTF8 = "%20";
        private static final String URI_START = "http://translate.google.com/translate_a/t?client=t&text=";
        private static final String URI_END = "&hl=it&sl=it&tl=%1";

        private String inputFile;
        private String outputFile;
        public TeoTranslate(String inputFile, String outputFile) {
                this.inputFile = inputFile;
                this.outputFile = outputFile;
        }

        public static void main(String[] args) {
                TeoTranslate teoTranslate = new TeoTranslate(args[0], args[1]);
                try {
                        teoTranslate.translate("de");
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        private void translate(String lingua) throws IOException {
                FileInputStream fIn = new FileInputStream(inputFile);
               
                BufferedReader reader = new BufferedReader(new InputStreamReader(fIn, UTF8), 8000);
                String line = null;
                StringWriter sw = new StringWriter();
                sw.append(URI_START);
                while ((line = reader.readLine()) != null) {
                        sw.append(URLEncoder.encode(line, UTF8).replace("+", SPAZIO_UTF8));
                        sw.append(A_CAPO_UTF8);
                }
                sw.append(URI_END.replace("%1", lingua));              
                FileOutputStream fOut = new FileOutputStream(outputFile);
                OutputStreamWriter osw = new OutputStreamWriter(fOut);

                URL url = new URL(sw.toString());
                InputStream is = url.openStream();
                reader = new BufferedReader(new InputStreamReader(is, UTF8), 8000);
                line = reader.readLine();

                int startIndex = 0;
                int endIndex = 0;
                boolean finito = false;
               
                do {
                        startIndex = line.indexOf("[\"", startIndex) + 2;
                        if (line.substring(endIndex, startIndex).indexOf("]]") != -1) {
                                finito = true;
                        } else {
                                endIndex = line.indexOf("\",\"", startIndex);
                                osw.write(line.substring(startIndex, endIndex).replace("\\", ""));
                        }
                } while (!finito);
                osw.flush();
                osw.close();
        }

}


Prova a vedere se è ancora valida e se ti può essere d'aiuto.