C'è una soluzione ancora più potente a questo problema. Date un'occhiata alla biblioteca Tr8n da TranslationExchange.com
https://github.com/tr8n/tr8n_objc_clientsdk
La libreria utilizza del TranslationExchange TML (Traduzione Markup Language), il che rende il processo di internazionalizzazione molto semplice. Prima di tutto, non hai nemmeno più bisogno di gestire i file XML di Strings, davvero ... - l'SDK Tr8n creerà e gestirà i tuoi file String per te al volo - non li guarderai mai più.
Il vostro esempio particolare sarebbe semplicemente:
Tr8nLocalizedStringWithTokens(@"{count || object}", @{@"count": objectList.count})
biblioteca Tr8n sceglierà automaticamente la forma plurale giusto per voi in qualsiasi lingua. Hah? Sì, è magico. La forma completa dell'esempio gettone sopra è in realtà:
{count:number || one: object, other: objects}
Ciò significa che segnalino "conteggio" è di tipo numerico che viene mappato plurali inglese con parole chiave "uno" e "altro" .... Ma Tr8n è abbastanza intelligente da non averti scritto tutto questo. È anche abbastanza intelligente da mappare la sequenza di parametri ai valori delle regole appropriate. E, naturalmente, sa che "contare" è associato alle regole numeriche attraverso la convenzione di denominazione.Così diventa semplicemente:
{count || object}
Btw, dal momento che hai citato russo, la traduzione russa per quanto sopra sarebbe semplicemente:
"{count || object}" = "{count || объект, объекта, объектов}"
questo esempio era troppo facile, diamo uno sguardo ad un più interessante:
Tr8nLocalizedStringWithTokens(
@"{user} uploaded {count || photo} to {user | his, her} photo album.",
@{@"user": user, @"count": 5}
)
Prima di tutto, buona fortuna a tradurre questa frase utilizzando la libreria standard di iOS i18n (o qualsiasi altra libreria è per questo) ... è uno scherzo - ma in realtà, non c'è modo per fallo usando qualsiasi cosa, ma Tr8n.
È possibile che questo TML tradotto in russo sarebbe semplicemente:
@"{user || загрузил, загрузила} {count || фотографию, фотографии, фотографий} в свой фотоальбом."
Qui abbiamo a che fare con il sesso regole allo stesso modo abbiamo a che fare con le regole numeriche. Ma invece di "uno", "pochi", "altro", abbiamo "maschio", "femmina", "sconosciuto" - beh, ogni lingua può avere differenti regole di genere e numeriche. Tr8n ci penserà, quindi non devi.
OK, passiamo al livello successivo. Hai deciso che devi avere il numero di foto per essere in grassetto. Pezzo di torta.
Tr8nLocalizedAttributedStringWithTokens(
@"{user} uploaded [bold: {count || photo}] to {user | his, her} photo album.",
@{
@"user": user,
@"count": 5,
@"bold": @{@"font":@{@"name": @"system", @"size": @12, @"type": @"bold"}}
}
)
[grassetto: ...] è un token di decorazione. Hai notato che abbiamo commutato la macro nella versione AttributedString? Questa macro produrrebbe effettivamente una NSAttributedString usando il meccanismo di decorazione nativo di iOS. Riuscite a indovinare quale sarebbe la traduzione in russo?
@"{user || загрузил, загрузила} [bold: {count || фотографию, фотографии, фотографий}] в свой фотоальбом."
Btw, è possibile predefinire tutti i gettoni di decorazione altrove, quindi non c'è bisogno di tenere definire ogni volta.
Facciamo solo un altro esempio finale ... Di ', hai una storia newsfeed nella forma seguente:
Tr8nLocalizedAttributedStringWithTokens(
@"{actor} sent {target} [bold: {count || gift}].",
@{
@"actor": user1,
@"target": user2,
@"count": 5
}
)
Non sembra interessante in inglese. Ma lo fa in russo o in altre lingue che supportano casi linguistici. Il nome di {target}, se si trova in russo, avrà effettivamente bisogno di utilizzare il caso di lingua russa.
http://en.wikipedia.org/wiki/Dative_case
Se non parlate russo, probabilmente non c'è bisogno di sapere su di esso. Ma i tuoi traduttori russi dovrebbero. Vediamo la traduzione in russo poi:
@"{actor || подарил, подарила} {target::dat} [bold: {count || подарок, подарка, подарков}].",
Tr8n è abbastanza intelligente per utilizzare il suo potente motore di regole linguistiche e di applicare il caso dativo lingua per i nomi russi passati attraverso il {target} gettone ...
Quello era una risposta un po 'lunga per una semplice domanda numerica. Grazie per averlo letto così lontano. Spero che sia d'aiuto.
Disclaimer: Sono il creatore del framework Tr8n e del linguaggio TML. Se hai qualche domanda, per favore mandami un messaggio e mi piacerebbe aiutarti con tutte le tue domande di traduzione.
Non è un problema specifico-Russo - ci sono altre lingue per cui avrete bisogno di più di un plurale. –
Vedere http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html per una spiegazione più dettagliata del problema (oltre a un elenco abbastanza lungo di lingue con irregolarità). –
Grazie Pavel, ho modificato la domanda di conseguenza – zvolkov