2009-12-11 10 views
8

Utilizzo di gettext come deve essere tradotta una frase con più variabili numeriche? ngettext prende solo un numero come parametro plurale.Internazionalizzazione delle frasi con due parole al plurale

Le permutazioni che dovrebbero essere consentite nella frase seguente sono "adulto e bambino", "adulti e bambini", "adulti e bambini" e "adulti e bambini".

"da #AVAILABILITYFROM a #AVAILABILITYTO per #NUMADULTS adulti e bambini #NUMCHILDREN"

risposta

8

grammatica può essere molto complessa in alcune lingue diverse dall'inglese e si dovrebbe essere consapevoli che è pratico impossibile generare frasi complesse corrette utilizzando il tuo approccio

Ricordare che più variabili e genere (maschio/femmina) aggiungono anche molta complessità.

La soluzione è generare solo frasi semplici in cui si dispone di una sola variabile. Questo è il caso supportato da ngettext.

Comprendere che ngettext è qualcosa di grande e questo è qualcosa che la maggior parte dei framework commerciali i18n di aziende di software bug non supportano nemmeno. Anche così ha i suoi limiti, così a breve la soluzione per la tua domanda è dividi la tua frase complessa in diversi semplici che possono essere tradotti usando solo una variabile.

+0

Voglio solo aggiungere che anche se c'è solo una forma plurale, allora questo modo di farlo richiederebbe 4 stringhe. Uno per entrambe le parti singolari, uno per entrambe le parti al plurale, uno per il primo singolare e il secondo plurale, e l'altro per il contrario. Gettext non lo supporta nemmeno e fare qualcosa che sarebbe troppo complesso da usare. –

+0

Speravo che non sarebbe stata la risposta, ma ho pensato che potesse :) – dsas

+1

Non è impossibile, può essere fatto facilmente usando più livelli di nidificazione nei messaggi, questo è l'approccio che l'ICU usa. ngettext non è eccezionale, è carente perché consente solo l'annidamento di un livello in modo che possa gestire solo la selezione su una variabile. Il consiglio di dividere la frase in più è una cattiva ma è l'unica possibile con gettext. Unisci le parti come A + B + C nel tuo codice, ma in una lingua target non è corretto e deve essere C + A + B o parte di C shoud vai prima e così via. –