Ho familiarità con l'uso di NSLocalizedString() per localizzare le stringhe, ma il problema che ho oggi richiede un po 'più finezza. La mia situazione è simile a questo:Localizzazione di stringhe concatenate o dinamiche
NSString *userName; //the users name, entered by the user. Does not need localized
NSString *favoriteFood; //the users favorite food, also entered by user, and not needing localized
NSString *summary = [NSString stringWithFormat:@"%@'s favorite food is %@", userName, favoriteFood];
Questo funziona bene per l'inglese, ma non ogni lingua usa la stessa parola ordinamento come l'inglese, per esempio, una traduzione parola per parola dello stesso sentance dal giapponese in inglese sarebbe leggere: la pizza cibo preferito
di UserName è
senza contare che 's è non fare un possessivo in tutte le lingue.
Quali tecniche sono disponibili per la localizzazione di questo tipo di frase concatenata?
AGGIORNAMENTO PER IL VANTAGGIO DEGLI ALTRI: @Jon Reed ha ragione, gli specificatori di posizione sono molto importanti per la localizzazione. Il documento che ha linkato contiene solo un riferimento al fatto che possono essere usati con NSString, NSLog, altri, il link in realtà non dice COME usarli.
Ho trovato this link, che lo spiega bene. Spiega anche la mia domanda meglio di me. Dal link:
stringhe di formato per printf e sprintf (vedi Printf) presentano un problema particolare per la traduzione. Si consideri il seguente : 1
printf(_"String `%s' has %d characters\n", string, length(string))) A possible German
traduzione per questo potrebbe essere:
"%d Zeichen lang ist die Zeichenkette `%s'\n" The problem
dovrebbe essere ovvio: l'ordine delle specifiche di formato è diverso dall'originale! Anche se gettext può restituire la stringa tradotta al runtime , non può modificare l'ordine nella chiamata a printf.
Per risolvere questo problema, formato printf prescrittori possono avere un elemento opzionale aggiuntiva, che noi chiamiamo una specifica posizionale . Ad esempio:
"%2$d Zeichen lang ist die Zeichenkette `%1$s'\n" Here, the
specificatore posizionale è costituito da un conteggio intero che indica che argomento da utilizzare, e un ‘$’. I conteggi sono basati su uno e la stringa di formato non è inclusa. Così, nel seguente esempio, 'stringa' è il primo argomento e 'length (stringa)' è secondo:
$ gawk 'BEGIN { > string = "Dont Panic" > printf _"%2$d characters live in \"%1$s\"\n", > string, length(string) > }' -| 10 characters live in "Dont Panic"
Ho seguito il tuo collegamento e ho letto anche Localizing String Resources (http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html). Non ho visto alcun riferimento agli specificatori di formato che hai citato (% 2 $ @) Puoi spiegarlo un po 'per favore? – SooDesuNe
Segui il link e cerca "specificatori posizionali". Inoltre, provalo. Questo è uno strumento essenziale per la localizzazione. –
Il '% $ 1 @' dovrebbe essere '% 1 $ @' alla fine dell'esempio. – bovine