Perché non viene parametrizzato gettext? [chiuso]

-2

In questo momento:

  • i traduttori sono esposti ai dettagli del linguaggio di programmazione

  • il testo è programmazione specifica del linguaggio (% s)

  • i traduttori non possono cambiare l'ordine delle stringhe (ad esempio: il cognome viene prima in ungherese)

printf(gettext("My name is %s %s."), first, family);

msgid "My name is %s %s."

msgstr "A nevem %s %s."

Perché non piace questo:

printf(gettext("My name is Peter Smith.",[("Peter",first),("Smith",family)]));

msgid "My name is Peter Smith." with "Peter","Smith"

msgstr "A nevem Smith Peter."

La GUI può evidenziare che Smith e Peter sono nomi-parametro e controlla la loro presenza. Uno potrebbe usare givenname e familyname invece.

Questo avrebbe prestazioni peggiori? Qualche altro problema che ho trascurato?

    
posta kyqibmbo 24.05.2015 - 18:20
fonte

1 risposta

5

La corretta localizzazione è incredibilmente difficile. Per esempio. molte lingue presentano regole complicate per la declinazione che potrebbero cambiare la radice della parola o dipende dal genere grammaticale di quella parola nella lingua di destinazione. La mia lingua principale è il tedesco, dove gli articoli sono di genere. Quindi un modello "I'm holding a %s" dovrebbe avere tre diverse forme tedesche:

  • "Ich halte eine %s" per parole femminili come Blume (fiore).
  • "Ich halte einen %s" per parole maschili come Schlüssel (chiave).
  • "Ich halte ein %s" per parole neutre come Banda (barra multifunzione)

Infatti, l'articolo indefinito inglese a/an dipende dal suono iniziale della parola seguente, quindi anche questo caso è difficile da rappresentare in un sistema di localizzazione senza un motore di regole complicato. Anche all'interno del gruppo di lingue indo-germaniche (che condividono caratteristiche grammaticali comuni), esistono casi unici che rendono impossibile avere un semplice strumento di traduzione basato sulla sostituzione.

Quindi, possiamo avere uno strumento di traduzione ideale? Sì, utilizzando un linguaggio di programmazione appropriato piuttosto che un sistema basato sulla sostituzione. In tale architettura, associamo ogni chiave del messaggio a un callback responsabile della restituzione di una stringa correttamente localizzata con un significato equivalente, a seconda delle informazioni di contesto passate in tale callback. Sfortunatamente, ciò richiede che i traduttori siano programmatori e che la lingua abbia un supporto decente per i callback. Cambiare la lingua non è semplice come leggere da un file di traduzione diverso, ma probabilmente ci impone di collegarci dinamicamente a un'altra libreria.

Tutta questa complicazione è un buon argomento per non usare soluzioni perfette, e piuttosto per fare qualcosa che funzioni abbastanza bene nella maggior parte dei casi, specialmente quando questo motore di traduzione deve lavorare all'interno delle restrizioni di C. Se gettext sono stati parametrizzati e inclusi motore di template complesso: sarebbe comunque difficile per rappresentare correttamente l'intera ricchezza delle lingue umane.

I nomi sono un intero capitolo a parte sulle difficoltà di localizzazione - in parte perché molte culture collocano il "cognome" prima del "nome dato", ma soprattutto perché molte persone non hanno esattamente due nomi che si adattano esattamente questi due ruoli. 40 programmatori di falsi credenza sui nomi è una lettura divertente su questo argomento . Nel contesto dei sistemi software, sarebbe meglio smettere di distinguere i nomi di famiglia e di primo livello eccetto quelli necessari per ragioni legali, e piuttosto usare un nome visualizzato che contenga il nome completo in qualsiasi ordine o formattazione che la persona preferisce. Nota che l'ordine dei nomi corretto dipende dalla persona che porta quel nome, non dal contesto in cui quel nome viene visualizzato.

    
risposta data 24.05.2015 - 19:07
fonte

Leggi altre domande sui tag