Domanda

Ho letto l'articolo di Joel su Unicode e sento di aver almeno una comprensione di base dell'internazionalizzazione dal punto di vista del set di caratteri. Oltre a leggere questa domanda , ho anche svolto alcune mie ricerche sull'internazionalizzazione in per quanto riguarda le considerazioni sul design, ma non posso fare a meno di sospettare che ci sia molto altro là fuori che non so o non so chiedere.

Alcune delle cose che ho imparato:

  • Alcune lingue leggono da destra a sinistra anziché da sinistra a destra.
  • Calendario, date, orari, valuta e i numeri sono visualizzati in modo diverso da una lingua all'altra.
  • Il design dovrebbe essere abbastanza flessibile da ospitare molto più testo perché alcune lingue sono molto più dettagliate rispetto ad altri.
  • Non prendere icone o colori per concesso quando si tratta di loro significato semantico in quanto ciò può variare dalla cultura alla cultura.
  • La nomenclatura geografica varia da lingua a lingua.

Dove sono:

  • Il mio design è abbastanza flessibile da ospitare molto più testo.
  • Traduco automaticamente ciascuno stringa, inclusi i messaggi di errore e le finestre di dialogo della guida.
  • Non sono ancora arrivato a un punto in cui Ho avuto bisogno di visualizzare le unità di tempo, valuta o numeri, ma lo sarò lì a breve e sarà necessario sviluppare una soluzione.
  • Sto usando il set di caratteri UTF-8 su tutta la linea.
  • I miei menu e i vari elenchi nell'applicazione sono ordinati in ordine alfabetico per ogni lingua per una lettura più semplice.
  • Ho un tag parser che estrae tag filtrando le parole di arresto. Il l'elenco delle parole di arresto è specifico della lingua e può essere sostituito.

Cosa vorrei sapere di più su:

  • Sto sviluppando un'applicazione web PHP scaricabile, quindi qualsiasi consiglio specifico in merito a PHP sarebbe molto apprezzato. Ho sviluppato il mio framework e non sono interessato a usarne altri framework in questo momento.
  • So molto poco del non occidentale le lingue. Ci sono specifici considerazioni che devono essere prese in considerazione che non ho menzionato sopra? Inoltre, come si fa l'array di PHP le funzioni di ordinamento gestiscono non occidentali personaggi?
  • Ci sono dei gotcha specifici che hai sperimentato in pratica? Sto osservando sia la GUI che il codice dell'applicazione stesso.
  • Qualche consiglio specifico per lavorare con visualizza data e ora? C'è un ripartizione per regione o lingua?
  • Ho visto molti progetti e siti lasciare che le loro comunità forniscano traduzione per le loro applicazioni e contenuto. Mi consiglia questo e quali sono alcune buone strategie per assicurandoti di avere un bene una traduzione?
  • Questa domanda è sostanzialmente la misura di quello che so internazionalizzazione. Cosa no? so che non so che dovrei guardare oltre?

Modifica : ho aggiunto la generosità perché vorrei avere più esempi del mondo reale per esperienza.

È stato utile?

Soluzione

Il nostro gioco Gemsweeper è stato tradotto in 8 lingue diverse. Alcune cose che ho imparato durante quel processo:

  • Se al traduttore vengono date singole frasi da tradurre, assicurati di conoscere il contesto in cui ciascuna frase viene utilizzata. Altrimenti potrebbe fornire una possibile traduzione, ma non quella intendevi. Strumenti come Babelfish traducono senza comprendere il contesto, motivo per cui il risultato è generalmente così negativo. Prova a tradurre qualsiasi testo non banale dall'inglese al tedesco e viceversa e capirai cosa intendo.

  • Le frasi che devono essere tradotte non devono essere suddivise in parti diverse per lo stesso motivo. Questo perché è necessario mantenere il contesto (vedi punto precedente) e perché alcune lingue potrebbero avere il variabili all'inizio o alla fine della frase. Usa i segnaposto invece di spezzare la frase. Ad esempio, anziché

  

" Questo è il passaggio " " dei nostri 15 passaggi   esercitazione "

Scrivi qualcosa del tipo:

  

" Questo è il passaggio% 1 del nostro tutorial in 15 passaggi "

e sostituisci il segnaposto a livello di codice.

  • Non aspettarti che il traduttore sia divertente o creativo. Di solito non è abbastanza motivato da farlo a meno che tu non chiami i particolari passaggi di testo e gli paghi un extra. Ad esempio, se hai degli scherzi di parole e parole nelle tue risorse linguistiche, dì al traduttore in una nota a margine di non cercare di tradurli, ma di lasciarli fuori o sostituirli con una frase più cupa. Altrimenti il ??traduttore probabilmente tradurrà la battuta parola per parola, il che di solito si traduce in una totale assurdità. Nel nostro caso avevamo un traduttore e un autore di battute per la traduzione più critica (inglese).

  • Prova a trovare un traduttore la cui prima lingua è la lingua in cui tradurrà il tuo software, non viceversa. Altrimenti è probabile che scriva un testo che potrebbe essere corretto, ma sembra strano o vecchio stile per i madrelingua. Inoltre, dovrebbe vivere nel paese che stai prendendo di mira con la tua traduzione. Ad esempio, un ragazzo di lingua tedesca dalla Svizzera non sarebbe una buona scelta per una traduzione tedesca.

  • Se possibile, chiedi a uno dei tuoi utenti del beta test pubblico di comprendere la traduzione specifica verificare le risorse tradotte e il software completato. Abbiamo avuto delle traduzioni molto buone e molto cattive, a seconda della persona che lo ha fornito. Secondo alcuni dei nostri utenti, la traduzione svedese era totalmente incomprensibile, ma era troppo tardi per fare qualcosa al riguardo.

  • Tieni presente che, per ogni versione aggiornata con nuove funzionalità, dovrai tradurre le tue risorse linguistiche. Questo può creare un grave sovraccarico.

  • Tieni presente che gli utenti finali si aspetteranno che il supporto tecnico parli la loro lingua se il tuo software viene tradotto. Ancora una volta, Babelfish molto probabilmente non lo farà.

Modifica - Alcuni altri punti

  • Semplifica il passaggio da una posizione all'altra. In Gemsweeper abbiamo un tasto di scelta rapida per passare da una lingua all'altra. Rende i test molto più semplici.

  • Se stai per usare caratteri esotici, assicurati che includano caratteri speciali. I caratteri che abbiamo scelto per Gemsweeper andavano bene per il testo inglese, ma abbiamo dovuto aggiungere alcuni caratteri a mano che esistono solo in tedesco, francese, portoghese, svedese, ...

  • Non codificare il proprio framework di localizzazione. Probabilmente stai molto meglio

Altri suggerimenti

  
      
  • I miei menu e vari elenchi in   l'applicazione è ordinata alfabeticamente   per ogni lingua per una lettura più semplice.
  •   
Le liste

dovrebbero essere ordinate, i menu no. tieni presente che un determinato utente potrebbe voler utilizzare la tua applicazione in più di una lingua, che dovrebbe comunque trovare ovunque nello stesso posto.

lo stesso con le scorciatoie, se ne hai: non tradurle .

inoltre, ricorda che l'internazionalizzazione e la traduzione sono due cose molto diverse, gestiscile separatamente.

Quando abbiamo lavorato sui numeri i18n / l10n di Dreamfall e Age of Conan, ci siamo imbattuti in alcuni problemi che vale la pena tenere a mente. Alcuni di questi abbiamo risolto, alcuni sono stati risolti per noi e altri abbiamo lavorato intorno. Alcuni che non abbiamo mai risolto ...

  • Assicurati che tutti i tuoi strumenti e tutto il tuo codice supportino tutti i set di caratteri che desideri utilizzare e ricontrolla due volte questa ipotesi nel corso del progetto e un paio di volte in più.

  • Assicurati di utilizzare un carattere che supporti tutte le lingue che desideri utilizzare. La maggior parte dei caratteri che dichiarano di essere unicode sono solo unicode nel senso che i caratteri che ha sono nel punto di codice corretto. Non significa che ha caratteri utilizzabili per tutti i punti di codice.

  • La disposizione del testo non viene eseguita solo negli spazi, poiché alcune lingue non usano lo spazio per separare le parole (mi viene in mente il cinese). Assicurati che le tue procedure di avvolgimento del testo gestiscano il testo senza spazi.

  • Gestire correttamente il plurale è complicato nei casi facili e dannatamente duro nei casi difficili. Assicurati di conoscere abbastanza le lingue che utilizzerai per poter scrivere il codice per gestire correttamente il problema al plurale. Tieni presente che le lingue inglese (e le altre lingue "occidentali" sono tra le più semplici.

  • Non spezzare mai le frasi e costruire stringhe con esse per adattarle a una variabile, poiché la variabile potrebbe essere collocata altrove nella frase in una lingua diversa. Usa segnaposto.

  • Tieni presente che per alcune lingue, il valore del segnaposto potrebbe cambiare il modo di scrivere la frase. La grammatica è dura. Assicurati di avere un piano per affrontarlo. (In particolare, assicurati di avere un modo per classificare i valori che usi nei segnaposto in base a sesso, tempo, ecc.)

Vorrei fare i seguenti commenti: questi sono tratti da alcune linee guida aziendali in cui i prodotti di classe 1 sono tradotti in 31 locali diversi. Seguire queste linee guida ci ha dato (il nostro team di sviluppo piuttosto che l'intera azienda) la massima produttività nella traduzione.

  • Non tentare di riutilizzare frammenti di messaggi di errore. Ad esempio, non pensare che, poiché hai i due errori " Hai selezionato la voce di menu errata " e " Quella voce di menu non è ancora disponibile " , tu può estrarre " voce di menu " in un elemento separato e utilizzarlo in entrambi i punti. Tutti i messaggi devono essere autonomi poiché le loro traduzioni possono cambiare in base al contesto.

  • Utilizza un traduttore professionale esperto di tecnologia. Se ti avvicini a un servizio come BabelFish, otterrai tutto ciò che meriti. Ad esempio, " Microsoft Windows " è " Microsoft Windows " ovunque sul pianeta, non diventa " Microsoft Fenster " in Germania.

  • Cerca di non incorporare le variabili all'interno di i tuoi messaggi (come "% 1 non è riuscito " dove % 1 cambia dinamicamente) poiché le posizioni e, in effetti, il genere possono cambiare: " La table est spazzatura " vs. " L'Homme est ubriaco " o " La tabella rossa " vs " La table rouge " . Meglio usare un nome generico con parametri aggiunti: " L'articolo non è riuscito [% 1] " .

  • Traduci solo le cose che l'utente dovrebbe vedere. I messaggi di registro in un file di registro (che solo tu utilizzerai) dovrebbero essere in inglese (o nella tua lingua madre), non tradotti a qualcosa come Swahili che non potevi leggere comunque.

  • I menu devono essere ordinati in base alla funzionalità, non all'ordine di confronto.

  • Le unità traducibili devono essere archiviate esterne nel codice e caricate in fase di esecuzione. Questo rende la traduzione un problema di spedizione del file esterno, non di cercare di modificare le modifiche nel mezzo del codice. Inoltre semplifica l'aggiunta di altre lingue in futuro.

Per ora è abbastanza. Meglio fermarsi prima di addormentarsi :-)

Una cosa sui numeri: in inglese, a quanto ho capito, basta usare un singolare con 1 e il plurale con 2 o più. Come: & # 8220; Hai 1 messaggio & # 8221 ;; & # 8220; 2 messaggi & # 8221 ;; & # 8220; 3 ... messaggi & # 8221 ;. In russo, queste cose diventano più complicate. Usi singolare per 1, 21, 31, 41 ... 101, 121 (quindi, per tutto ciò che termina con 1 tranne quando termina con 11). Quindi usi caso genitivo singolare per 2, 3, 4; 22, 23, 24; 32, 33, 34 ... 102, 103, 104; 122, 123, 124. E in tutti gli altri casi usi caso genitivo plurale .

Non è davvero difficile da implementare. Ciò che è difficile è implementare qualcosa che saprà gestire qualsiasi linguaggio a priori sconosciuto con tutta la sua stranezza :-)

E questo è solo numeri :-)

Finora non ho molto da aggiungere alle grandi risposte, ma qui ci sono alcune cose da considerare e da controllare.

  • Non fare ipotesi. Questa è la regola generale. È facile assumere elementi che siano specifici per regione o lingua ed è difficile notare questi presupposti.
  • Stai molto attento con i confronti delle stringhe. Ci sono alcune lingue, come il turco, che hanno lettere simili visivamente ad altre ma diverse.
  • Usa la pseudo traduzione come test del fumo. Se leggi le stringhe tradotte da un file di risorse, crea una versione pseudo tradotta del file che è ancora comprensibile per te ma che sottolinea la capacità e la capacità di ogni stringa traducibile nell'applicazione. Ad esempio, riempi una stringa come " Annulla " con qualcosa come " CancelXXXX! " in modo che sia largo quanto la tua tolleranza per le stringhe tradotte. Quindi è possibile verificare per verificare che ogni stringa verrà visualizzata completamente. Riconoscimento aggiuntivo per l'attaccamento anche al personaggio più complesso che potrebbe essere reso per verificare che venga visualizzato correttamente in tutti i luoghi.
  • Non fare ipotesi sul layout della tastiera. " ASDW " può essere un ottimo set di controllo dei tasti direzionali per le tastiere QWERTY, ma una codifica rigida che rende poco pratico, se non impossibile, l'uso per le persone con altri layout di tastiera.
  • Prova varie impostazioni della data, quindi prova di nuovo. Ho riscontrato problemi dovuti a qualcosa di piccolo come un formato diverso per " AM / PM " nelle impostazioni regionali. Anche mm / gg / aaaa vs gg / mm / aaaa si presentano molto, ma ogni impostazione qui può avere importanza.
  • Prova vari formati numerici, quindi testali di nuovo. Non vuoi dipendere da separatori decimali o migliaia, ad esempio.
  • Prova con e senza un utente connesso al server. Potrebbe essere più specifico di Windows, ma è molto facile configurare un componente sul server configurato in modo tale che utilizzi l'utente connesso impostazioni internazionali mentre un utente ha effettuato l'accesso e un'impostazione internazionale predefinita quando l'utente non ha effettuato l'accesso. Ciò può causare comportamenti strani e intermittenti.
  • Prova con varie impostazioni internazionali e della lingua. Ad esempio, Windows non ha solo impostazioni internazionali e della lingua, ma IE ha le sue impostazioni della lingua. Ad esempio, il comportamento di un client IE con en-us elencato per primo potrebbe non essere sempre uguale a quello con en-nz elencato per primo.
  • Assicurati che il tuo traduttore capisca il business e le lingue, quindi verifica con qualcun altro. Fai molta attenzione ogni volta che usi la terminologia specifica dell'applicazione. Se il tuo programma utilizza parole specifiche per indicare qualcosa di speciale nell'applicazione, assicurati che siano tradotti in modo simile in ogni caso, incluso nel testo di aiuto. Se hai obiettivi di lingua specifici, potresti persino arrivare a tradurre in anticipo tali parole e assicurarti che non traducano male nelle lingue di destinazione. Questo è più una questione di ricerca di prodotto, ma può fare la differenza in quali parole vengono utilizzate nell'interfaccia, ed è più facile per tutti se quelle parole sono in atto dall'inizio. Volete anche evitare idiomi che potrebbero non tradursi bene.

Okay, avevo più da dire di quanto pensassi ...

Una cosa che ho imparato nel modo più duro: se hai diversi file che devono essere tradotti, includi un tag extra nel nome, in modo che in seguito potrai cercare quel tag nella tua intera cartella.

es. invece di nominare un file 'sample-database.txt', denominare la versione inglese 'sample-database-loc-en.txt', la versione italiana 'sample-database-loc-it.txt

La mia prima risposta in StackOverflow, quindi scusate se è stato detto uno stupido.

Dalla mia esperienza:

  • PHP : gettext è stato estremamente utile;
  • lingue non occidentali : UTF-8 ovunque (codice, DB) e finora stiamo andando bene;
  • Ci sono dei gotcha specifici che hai sperimentato in pratica? Rompere i lunghi paragrafi per i18n in frasi diverse può essere meno costoso da tradurre, se la stringa viene ripetuta più di una volta nel sito ho solo bisogno di averlo tradotto una volta. Ma fai attenzione, se frammenti il ??testo troppi traduttori perderanno il contesto;
  • Ho visto molti progetti e siti consentire alle loro comunità di fornire traduzioni per le loro applicazioni e contenuti. Consigli questo e quali sono alcune buone strategie per assicurarti di avere una buona traduzione? Se hai un numero molto elevato di volontari, puoi farlo, ma a seconda di quanto testo hai, potresti davvero aver bisogno di un tonnellate di volontari. Assicurati sempre anche di avere qualcuno di cui ti fidi a capo di un progetto linguistico per essere il correttore di bozze che controlla l'accuratezza della traduzione.
  • Le regole di confronto / ordinamento possono differire notevolmente tra le lingue: & # 228; è ordinato diversamente in tedesco che in svedese. Quindi l'ordinamento deve essere specifico per la cultura.
  • Le maiuscole / minuscole possono contenere sorprese: la "S marcata" tedesca. personaggio & # 223; non ha una versione maiuscola e viene trasformato in "SS" o rimane minuscolo se l'esattezza è importante. Il turco ha una i minuscola senza punti e una I. in maiuscolo punteggiato
  • Per le app Web multilingue, pensa attentamente a come decidere quale versione mostrare e come inserirla nell'URL. L'utente dovrebbe sempre essere in grado di scegliere manualmente la lingua e desideri che i motori di ricerca trovino versioni di lingue diverse sotto URL diversi.
  • Alcune lingue dell'Asia orientale (ovvero giapponese e cinese, forse altre) non hanno spazi tra le parole
  • Il giapponese (forse anche altri) ha versioni separate ("a larghezza intera") di cifre e spazio arabi, e persino due versioni di alcuni dei suoi caratteri (katakana a mezza larghezza e a larghezza intera).

Sì, questo è un argomento massiccio . Farla bene è un lavoro tremendo.

Nel mio programma uso una chiave intera per ogni pezzo di testo e la cerco in un file secondo necessità in base alla lingua. Non ci sono stringhe letterali da nessuna parte nel codice, solo chiavi. Li definisco con un "enum" in C ++ quindi non sto digitando numeri. Ho scritto un'utilità per sincronizzare i vari file di lingua quando aggiungo più enum e i traduttori riempiono gli spazi vuoti.

Ogni tasto ha anche una descrizione comandi, un'immagine, una scorciatoia da tastiera, ecc.

associati

Per quanto riguarda i tempi e le date ... di nuovo, questo è molto più complesso di quanto si possa pensare, ma PHP non lo gestisce per te? (Non lo so, sono un tipo C ++ ...)

PHP rappresenta le stringhe internamente come flussi di byte e assume iso-8859-1, per i casi in cui la codifica è importante. Per la maggior parte, puoi semplicemente usare UTF-8 in tutto il luogo e andrà tutto bene. Un problema, se il tuo sito riceve input dai suoi utenti, è che non puoi mai essere sicuro al 100% che stanno inviando contenuti nella codifica corretta. Potresti voler utilizzare mb_detect_encoding per verificare l'input o utilizzare un campo nascosto con " ; esotici " caratteri da verificare.

Tieni presente che tutte le funzioni relative alle stringhe in PHP, che funzionano in base al carattere, assumono quel carattere = byte. Ciò significa che generalmente non ci si può fidare delle funzioni di stringa. Dai un'occhiata a questa pagina per maggiori dettagli.

Un'altra buona risorsa per PHP è Trucchi di Nick Nettleton .

Un argomento strettamente correlato a caratteri / codifiche, è collation . Hai bisogno delle tue regole di confronto per abbinare la lingua / cultura con cui stai lavorando. Almeno in MySql (probabilmente anche in altri RDBMS), puoi specificare le regole di confronto su diversi livelli, come per database, per tabella, per colonna e persino nella query stessa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top