2013-03-12 25 views
7

Attualmente ci troviamo di fronte al problema di creare e ospitare traduzioni per un'applicazione per più piattaforme (iOS, Android, HTML5, BlackBerry ...). Esistono buone pratiche per l'hosting delle traduzioni e la creazione dei file di traduzione necessari (en.lproj/Localizable.string, values-fr/strings.xml, ...) al volo?Best practice per la creazione di file di traduzione per più piattaforme

Penso di ospitare le traduzioni e le loro chiavi a un tavolo di Google Docs (o altre piattaforme) ed esportare i dati in csv e di usare gli script per creare i file.

Ho cercato su Internet ma non ho trovato finora un buon punto di partenza.

+0

Attualmente stiamo affrontando lo stesso problema. Sto iniziando a raggiungere la conclusione che fare la nostra è la soluzione più economica e migliore. Gli online sono in genere molto cari con più progetti e più lingue rispetto a creare il nostro. – Warpzit

+0

@Warpzit Suppongo che nessuna risposta abbia fornito informazioni utili. Se possibile, ti preghiamo di comunicarci la tua decisione in merito a quale piattaforma, se esistente, da utilizzare. – xnakos

+0

@xnakos, beh, in realtà hanno fornito più o meno informazioni preziose, ma non credo che ci sia stato abbastanza lavoro da parte di nessuno per distinguere il resto. Non so se AlexVogel si sente allo stesso modo :) – Warpzit

risposta

3

Lo sai Transifex?

Transifex è una piattaforma di localizzazione moderna e open source. È un sistema web che automatizza il flusso di lavoro di traduzione per progetti internazionali complessi.

+0

Suona bene, ma sai meno costa e meglio è. – AlexVogel

1

C'è http://www.getlocalization.com/

E 'gratis se siete disposti a pubblicare e condividere le corde individuali e la loro traduzione pubblicamente.

+0

Hehe yes free ma in pratica molto costoso ... – Warpzit

+0

Sì, hanno cambiato la loro licenza dal 2013 così drasticamente, non consiglierei più la loro piattaforma. Questo mi rende triste per tutte le persone che hanno contribuito con traduzioni gratuite al loro sito. Non c'è davvero alcun motivo per farlo più. –

4

È possibile provare Loco o Shuttle come strumento di localizzazione multipiattaforma.

+0

Loco ha alcune limitazioni sul modello libero, ma gli altri piani non sono così costosi. Però mi piace molto l'idea di Shuttle. Ma in futuro si prega di fare più che incollare solo in 2 link :) – Warpzit

+0

Certo, ci proverò! –

1

Realizzo app sia in inglese che in giapponese. Quello che faccio è archiviare entrambe le traduzioni in un file a cui posso accedere ovunque nell'app, cioè una variabile globale, un'istanza, un singleton, o con qualsiasi cosa tu ti senta a tuo agio.
Fai tutte le traduzioni di cui hai bisogno in casa perché i traduttori informatici non dicono le cose nel modo giusto. Quindi, ovunque tu li usi, puoi estrarlo dall'elenco basandoti su un valore booleano che dice inglese o giapponese.

+0

Questo è un approccio pessimo, non utilizza i vantaggi delle diverse piattaforme. – Warpzit

+0

Funziona se il tuo capo dice oh hey ora stai costruendo anche una versione iOS. Inoltre, perché utilizzare un'istanza condivisa è un approccio errato? Funziona bene e puoi cambiarlo in un posto e cambierà per il programma who. Il suo facile da mantenere in caso di errore di traduzione. E per completare il suo tutto in casa, nessuna terza parte da affrontare. Quindi, per favore dimmi come questo è un cattivo modo di farlo? – MNM

+0

E con questo modo puoi avere due o più lingue su una singola app. E puoi passare da una lingua all'altra con questo approccio. Basta avere un metodo semplice e una schermata delle opzioni per chiedere all'utente quale lingua preferiscono. – MNM

1

Uno strumento di traduzione open-source online (installabile per il server di scelta) che può soddisfare le vostre esigenze è Pootle, che viene costruito sopra Translate Toolkit. Ho usato Pootle come traduttore per LibreCAD. Puoi sfogliare LibreCAD's Translation Server e vederlo in azione. LibreCAD utilizza Qt come framework di base e Pootle gestisce il caricamento e il download di file TS, che vengono utilizzati per le traduzioni in Qt. Avendo anche usato Transifex, posso dirti che Pootle non è così elegante (potresti vederlo da solo, anche se hai in mente che il server di traduzione di LibreCAD usa una versione precedente di Pootle), ma non è affatto male con cui lavorare. Devi solo stabilire che i file di cui la tua applicazione avrà bisogno per le traduzioni possono essere esportati (e possibilmente importati) da (e possibilmente a) il tuo server di traduzione. Puoi tradurre usando un browser web oppure puoi tradurre offline e poi procedere con l'upload dei tuoi file modificati e applicare in batch tutte le traduzioni modificate. Un altro strumento di traduzione basato sul web che sembra fornire un approccio simile ma più moderno di Pootle (sembra migliore e ha una stretta integrazione del controllo della versione), pur essendo basato su Translate Toolkit, è Weblate. Questo è anche open-source e può essere distribuito sul tuo server preferito.

Per fornire ulteriori informazioni, se si guarda a Translation Related File Formats, si avrà un'idea migliore di ciò che Pootle e Translate Toolkit sono in grado di esportare/importare. Da quella lista e dalla mia esperienza di traduzione, posso dirvi che i file INI sono usati per le traduzioni nel core Joomla!, gli array di traduzione PHP sono usati per le traduzioni nelle applicazioni Yii, e i file Qt Linguist TS sono usati, come accennato prima, per traduzioni in applicazioni Qt. Ho anche sperimentato con GNU gettext, che è supportato dalla libreria Free Software Foundation per la localizzazione.GNU gettext utilizza i file PO per le traduzioni, che possono essere gestiti da Translate Toolkit.

L'idea alla base di tutti gli approcci di localizzazione, indipendentemente dalla piattaforma, è più o meno la stessa. Disegni il tuo codice avendo in mente una lingua principale specifica e usa questa lingua nel tuo codice. L'inglese sarebbe la scelta ideale, ma non è necessario. Dovresti scegliere una lingua con cui tutti gli sviluppatori possono lavorare, un linguaggio che non rallenta lo sviluppo (mentre cerchi un paio di etichette per i pulsanti, non ti piacerebbe pensare a una sola etichetta per minuti), e una lingua che è usato dal tuo pubblico di destinazione principale, solo nel caso in cui esista un pubblico di destinazione principale e allo stesso tempo in via di sviluppo con un altro linguaggio, potrebbe rendere l'applicazione innaturale per il tuo pubblico di destinazione principale, dopo che è stata tradotta nell'obiettivo principale lingua del pubblico. Questa è anche la lingua in cui tutti i tuoi traduttori riceveranno le stringhe della lingua d'origine (e, quindi, avranno come punto di riferimento), al fine di tradurre in tutte le altre lingue di destinazione. Potrebbe essere necessario un compromesso, perché stiamo parlando di una sola lingua per lo sviluppo. Andando avanti, in qualsiasi momento durante lo sviluppo, che è necessario inserire una stringa di lingua nel codice, non lo si inserisce direttamente, ma lo si racchiude in una chiamata di funzione speciale specificata dalla piattaforma di localizzazione che si utilizza. In un'applicazione Qt, ad esempio, anziché QLabel *label = new QLabel("Password:");, scrivere QLabel *label = new QLabel(tr("Password:"));. Durante l'esecuzione dell'applicazione, la lingua dell'utente viene determinata all'interno della chiamata alla funzione tr, viene sfogliato il file di lingua appropriato per la lingua dell'utente e viene recuperato e utilizzato come etichetta il messaggio tradotto corrispondente a "Password:" per la lingua dell'utente. La determinazione/definizione della lingua è un meccanismo separato che essenzialmente ottiene/imposta una variabile globale/statica, quella che viene cercata quando viene chiamata la funzione tr nell'esempio sopra. Ciò che può essere gestito appositamente da ciascuna piattaforma è costituito da forme plurali (traduzione condizionale basata su alcuni parametri). In Yii, ad esempio, potresti avere 'n==1#one book|n>1#many books' come stringa di traduzione. Nell'applicazione si utilizza Yii::t('app', 'n==1#one book|n>1#many books', 1);, ovvero si fornisce anche il numero effettivo come parametro, in modo che sia possibile utilizzare il modulo corretto (il parametro 'app' utilizzato nella funzione di traduzione fa riferimento a una specifica categoria di traduzione denominata app, poiché, in in ogni lingua, è possibile utilizzare diverse categorie di traduzione per parti della propria applicazione).

Per aggiungere alcune informazioni finali, l'utilizzo di un back-end comune generico per le traduzioni consente di riutilizzare la maggior parte delle stringhe tradotte, quando si esegue la migrazione da un framework a un altro o anche se esistono più implementazioni diverse per la stessa applicazione allo stesso tempo, ad es esiste un'applicazione basata su browser e un'applicazione nativa. Le forme plurali richiederebbero una gestione speciale e traduzioni separate per la stessa stringa di linguaggio a causa dell'essere realmente specifiche della piattaforma (ma, se necessario, la maggior parte delle forme plurali può essere eliminata spostando la condizione dal dominio della stringa di traduzione al dominio del codice). Ma la stragrande maggioranza delle traduzioni in un'applicazione sono mappature dirette di una stringa all'altra. Alcuni framework, come Qt, dispongono di strumenti per la scansione dei file di origine e l'aggiornamento dei file di traduzione in base ai nuovi usi della funzione di traduzione speciale (tr in Qt). Se tale strumento esiste per il framework di tua scelta, non è necessario aggiungere manualmente un mapping di traduzione a un file di traduzione. Dopo la scansione dei file di origine, la mappatura verrà visualizzata nei file di traduzione, in modo predefinito alla stringa originale come traduzione e in attesa della stringa tradotta per sostituirla. Indagare i possibili flussi di lavoro prima di impegnarsi in un approccio.

2

Abbiamo utilizzato con successo PhraseApp per più piattaforme. Hanno un'API in modo da poter fornire script di shell nell'albero del progetto per aggiornare le traduzioni con un comando rapido. Potresti anche farlo come step di costruzione.

Ricordate che sembrano esserci alcuni ostacoli difficili da gestire per questi servizi poiché le diverse piattaforme localizzate hanno set di funzionalità differenti. Ad esempio, Android supporta la pluralizzazione che iOS non IIRC.