2012-08-29 9 views
37

UIBarButtonItem ha identificatori come Annulla, Fatto e altri. Sono mostrati come testo per l'utente. Se l'utente cambia lingua, ad esempio il pulsante Annulla verrà tradotto automaticamente. E come sviluppatore non è necessario fornire una stringa di localizzazione per questi pulsanti. Significa che Cancel, Done e altre stringhe sono già localizzate e si uniscono al sistema operativo.Come ottenere localizzato Annulla, Fatto e così via?

È qui un modo per ottenere queste stringhe a livello di codice?

Non voglio aggiungere ulteriori stringhe ai file di localizzazione. E se è possibile accedere allora sarebbe molto buono.

+0

non si può ottenere accesso alla stringa attraverso la proprietà del titolo? – tiguero

+2

Posso ottenere il titolo di UIBarButtonItem se questo pulsante è inserito nell'interfaccia utente. Ma voglio ottenere queste traduzioni non usando il lavoro in giro. – Ramis

+0

yourUIBarButtonItem.title ti permette di recuperare la stringa che viene visualizzata - è quello che vuoi? – tiguero

risposta

21

Ecco un piccolo macro che ho creato per ottenere il sistema UIKit Strings:

#define UIKitLocalizedString(key) [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] localizedStringForKey:key value:@"" table:nil] 

Utilizzare in questo modo:

UIKitLocalizedString(@"Search"); 
UIKitLocalizedString(@"Done"); 
UIKitLocalizedString(@"Cancel"); 
... 
+8

fare una normale funzione senza odori di macro – gaussblurinc

+1

C'è un modo per ottenere tutte le chiavi? – kelin

+0

non funziona ora – Vyacheslav

1

Suona come quello che stai chiedendo se Apple fornisce un modo per accedere a un dizionario di stringhe preregistrate. Penserei che qualsiasi cosa fornita da Apple per qualcosa del genere si trovi nella loro Documenti: Internationalization Programming Topics

Per rispondere alla tua domanda, non credo che forniscano un dizionario/elenco di traduzioni conosciute. O dovrai definirli nel tuo file di risorse Localizable.strings o fare come altri hanno dichiarato nei commenti e tirare il titolo da UIBarButtonItem (io andrei personalmente con il file di risorse).

3

Anche se forse non esattamente quello che stavi cercando, nel Mac App Store c'è un'app commerciale chiamata "Stringhe di sistema" che afferma che fornisce una raccolta di oltre 53000 stringhe localizzate standard. È stato rilasciato il 2 novembre 2012. Non sono in alcun modo affiliato con questa app o l'autore. L'URL è https://itunes.apple.com/us/app/systemstrings/id570467776.

+0

Sì, non è quello che volevo, ma sembra buono. Vicino al punto – Ramis

9

Un modo (certamente discutibile) di realizzare facilmente questo è usare le localizzazioni di bundle framework di Apple direttamente:

Per vedere ciò che hanno da offrire, aprire la seguente directory tramite il Finder:

/Applications/Xcode/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks

E nel tuo caso, aprirai successivamente ./UIKit.framework/English.lproj/Localizable.strings (in TextMate). Qui puoi vedere un'ampia varietà di traduzioni che Apple usa per cose come "Stampa", "OK", "On", "Off", ecc. La vera magia è che ci sono circa 35 diverse traduzioni linguistiche che puoi copiare nel tuo possedere i file Localizable.strings, gratuitamente.

Se siete incredibilmente sfacciata e non ti dispiace mettere la stabilità futura della tua app in questione, si potrebbe saltare l'intero "copiare nel proprio Localizable.strings" processo e andare direttamente alla fonte di programmazione:

NSBundle *uiKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.UIKit"]; 
NSString *onText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"Yes" value:nil table:nil] : @"YES"; 
NSString *offText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"No" value:nil table:nil] : @"NO"; 

Caveat: in nessun modo vi consiglio che in realtà accedere a queste risorse localizzate a livello di codice in un app che si intende presentare al App Store. Sto semplicemente illustrando una particolare implementazione che ho visto che affronta la tua domanda originale.

0

Perché non utilizzare la localizzazione di base con lo storyboard? Lo localizzerà per te.

+0

Avevo bisogno di accedere a questi per alcuni test di integrazione KIF. –

-3

Si potrebbe utilizzare

NSLocalizedString(@"Cancel", @"Cancel") 
Problemi correlati