Come localizzare una stringa nel file info.plist di iOS?


259

Come forse saprai, iOS 8 richiede la chiave NSLocationWhenInUseUsageDescription per utilizzare la posizione dell'utente. Ho aggiunto questa chiave e alcune informazioni generali nella mia lista informazioni. inserisci qui la descrizione dell'immagine

Come posso usare la stringa di traduzione all'interno del file plist?

-- Aggiornare --

Ho già una stringa localizzabile. Mi sto solo chiedendo che posso usare qualcosa come NSLocalizedString (MYSTRING, nil) all'interno della stringa plist. So che posso creare più file di info.plist per la localizzazione, ma mi chiedevo che potesse esserci un modo più semplice.


Hai mai risolto questo problema, faccio fatica a localizzare anche NSLocationWhenInUseUsageDescription?
Oliver Pearmain,

Risposte:


490

È necessario utilizzare il InfoPlist.stringsfile per localizzare i valori di Info.plist. Per fare ciò, vai a File->New->File, scegli Strings Filesotto la Resourcescheda di iOS, nominalo InfoPliste crea. Apri e inserisci i Info.plistvalori che vuoi localizzare come:

NSLocationWhenInUseUsageDescription = "Description of this";

Ora puoi localizzare il InfoPlist.stringsfile con le traduzioni. In bocca al lupo!

MODIFICARE:

selezionare le opzioni di localizzazione o abilitare la localizzazione se necessario,

editor lato destro

dovresti essere in grado di vedere il file anche nell'editor di sinistra.

editor lato sinistro

MODIFICARE:

Ecco la documentazione ufficiale per la Info.plistlocalizzazione delle chiavi.

Crediti per Marco , grazie per includere le foto in questa risposta!


15
Dopo aver creato il file string, è necessario includere anche la chiave nel file Info.plist oppure è sicuro eliminarlo da lì?
Rounak,

11
Suggerimento: utilizzare esattamente il nome "InfoPlist.strings" e nient'altro. Ad esempio, il mio file infoplist originale era chiamato qualcos'altro ma avevo bisogno di usare questo nome esattamente per farlo funzionare.
Sjoerd Perfors

22
Durante il test delle localizzazioni sul simulatore. Ho dovuto cambiare la lingua sul simulatore stesso non solo la lingua nel target xcode. Solo un avvertimento per chiunque altro.
John Webb,

10
l'uso corretto è keyname = "il tuo testo"; es: NSLocationWhenInUseUsageDescription = "il tuo testo"
Magurizio

10
Attenzione: la chiave in questo file non deve avere virgolette, che è diversa dalla normale localizzazione. ad es .: NSMicrophoneUsageDescription = "la tua descrizione";
Yuchao Zhou,

33

Tutto quanto sopra non ha funzionato per me (XCode 7.3), quindi ho letto i riferimenti di Apple su come fare ed è molto più semplice di quanto descritto sopra. Secondo Apple:

I valori localizzati non sono memorizzati nel file Info.plist stesso. Al contrario, si memorizzano i valori per una particolare localizzazione in un file di stringhe con il nome InfoPlist.strings. Posizionare questo file nella stessa directory di progetto specifica della lingua utilizzata per archiviare altre risorse per la stessa localizzazione.

Di conseguenza, ho creato un file di stringa denominato InfoPlist.strings e l' ho inserito nella cartella xx.lproj del linguaggio "xx" (e l'ho aggiunto al progetto usando File-> Aggiungi file a ...). Questo è tutto. Non è necessario il tasto "Le risorse localizzate possono essere mescolate" = SÌ e non è necessario InfoPlist.strings in base.lproj o en.lproj.

L'applicazione utilizza il valore-chiave Info.plist come valore predefinito se non riesce a trovare una chiave nel file specifico della lingua. Pertanto, ho inserito il mio valore inglese nel file Info.plist e quello tradotto nel file specifico della lingua, testato e tutto funziona.

In particolare, non è necessario localizzare InfoPlist.strings (che crea una versione del file in base.lproj, en.lroj e xx.lproj), e nel mio caso in questo modo non ha funzionato.


2
Perché non includere il collegamento al documento appropriato?
Jurasic,

3
Qui il link alla pagina pertinente del documento Apple nel caso qualcuno fosse interessato: developer.apple.com/library/archive/documentation/General/…
piega il

e come decidiamo che xx? per esempio per l'inglese può essere en, en, eng, inglese ecc? Scusate se è una domanda stupida perché sono un principiante
Awais Nasir,

La tua risposta ha funzionato per me, tranne lo scenario della lingua di fallback, l'app sta ottenendo la lingua di fallback sempre la lingua precedentemente utilizzata e non l'inglese, il mio valore inglese è presente nel file Info.plist anche se ho anche provato base.lproj
Awais Nasir

19

Se qualcosa non funziona assicurati di aver aggiunto:

"Le risorse localizzate possono essere mescolate" = SÌ

nella info.plist. Nel mio caso i file InfoPlist.strings sono stati semplicemente ignorati.


15

Suggerimenti

  1. Ricorda che iOS Simulator sfrutta per impostazione predefinita la lingua del tuo sistema. Modifica la lingua (e la regione) anche nell'impostazione del simulatore iOS per testare le tue traduzioni.

  2. La stringa di localizzazione (vedi i documenti Apple qui ) dovrebbe essere

    NSLocationWhenInUseUsageDescription = "Description of this";

    e non (con la citazione "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";

Aggiunte preziose, ma penso che questo dovrebbe essere un commento sotto la rispettiva risposta, non una nuova risposta. Si noti inoltre che "363" non è un identificatore di post, ma il numero di voti della risposta (il numero è cambiato da allora).
John J. Camilleri,

7
Non ho 50 reputazione per aggiungere un commento lì.
Giuseppe Beccari,

Non importa se si usano le virgolette "..." attorno alla chiave, ad es .: ( "NSLocationWhenInUseUsageDescription"="description"è valido). Può essere con o senza.
mluisbrown,

12

Consiglio vivamente di leggere le guide di Apple e di visualizzare le risorse del WWDC elencate qui: Temi di internazionalizzazione e localizzazione

Per rispondere in modo specifico alla tua domanda, quando aggiungi una nuova lingua al tuo progetto inserisci qui la descrizione dell'immagine, hai l'opportunità di scegliere quali file di InfoPlist includere (se hai più destinazioni, avrai più file di informazioni). Tutto quello che devi fare per ottenere la seguente schermata è premere + sotto Localizzazioni e scegliere una nuova lingua per cui aggiungere supporto. inserisci qui la descrizione dell'immagine

Una volta aggiunto, creerà i file di stringa necessari nelle directory lproj appropriate per la lingua data.

--MODIFICARE--

Per essere chiari, iOS sostituirà la stringa per il tuo file Plist in base alla lingua attualmente selezionata dall'utente usando la chiave della voce plist come chiave nel file di stringhe localizzato.


3
Tradurre l'intero plist per una sola chiave è eccessivo. Trova maggiori informazioni qui: bit.ly/1yBUTru
XGMLC

2
Semplicemente non è vero per XCode 9. Non richiede mai la localizzazione di plist quando si aggiunge una nuova lingua.
Tom,

Dovrò esaminarlo per Xcode 9 - non ho ancora avuto la possibilità di testare nel nuovo Xcode.
Matt S.

11

Localizza passo per passo Info.plist:

  1. Trova nella Xcode la cartella Risorse (si trova nella radice)
  2. Seleziona la cartella Risorse
  3. Quindi premere il menu principale File-> Nuovo-> File ...
  4. Selezionare nella sezione File di stringhe "Risorsa" e premere Avanti
  5. Quindi nel Save Ascampo scrivi SOLO InfoPlist (maiuscole "I" e maiuscole "P")
  6. Quindi premere Crea
  7. Quindi selezionare il file InfoPlist.strings creato nella cartella Risorse e premere nel menu a destra il pulsante "Localizza"
  8. Quindi selezionare il progetto dal Navigatore progetto e selezionare l'elenco Il progetto dal progetto
  9. Nella scheda informativa in basso puoi quante lingue vuoi (C'è nella sezione Localizzazioni)
  10. La lingua che puoi vedere nella cartella delle risorse
  11. Per localizzare i valori ("chiave") dal file info.plist puoi aprire con un editor di testo e ottenere tutte le chiavi che vuoi localizzare
  12. Scrivi qualsiasi chiave come nell'esempio in qualsiasi InfoPlist.strings come nell'esempio sopra

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Questo è tutto lavoro e hai localizzato il tuo file info.plist!


4

Per tutti coloro che riscontrano il problema di info.plist non essere inclusi quando si tenta di aggiungere localizzazioni, come in Xcode 9.

È necessario rendere localizzabile info.plist accedendo ad esso e facendo clic sul pulsante localizza nella finestra di ispezione file, come mostrato di seguito.

Il file info.plist verrà quindi incluso nelle risorse del file per quando si va ad aggiungere nuove localizzazioni.

inserisci qui la descrizione dell'immagine


3
Hai riscontrato problemi? Non riesco a creare un progetto quando aggiungo due lingue a Localizzazione poiché xcode sta dicendo "Impossibile aprire il file info.plist perché non esiste un file simile.
mkkrolik

2
@mkkrolik Sto riscontrando lo stesso problema ora. Hai trovato una soluzione?
Todanley,

@Todanley salta questa soluzione non funziona per me. Utilizzare invece InfoPlist.strings.
mkkrolik,

@mkkrolik Grazie che funziona. E anche durante i test con il simulatore, ho dovuto cambiare l'impostazione della lingua del simulatore piuttosto che quella del mio obiettivo perché funzioni.
Todanley,

3

Come dice RGML, puoi creare un InfoPlist.strings, localizzarlo quindi aggiungere la tua chiave e il valore in questo modo: "NSLocationWhenInUseUsageDescription" = "Aiuto per localizzarmi!";

Aggiungerà la chiave al tuo info.plist per la lingua specificata.


0

Nel mio caso tutto è stato impostato correttamente ma il file InfoPlist.strings non è stato ancora trovato.

L'unica cosa che ha funzionato davvero è stata rimuovere e aggiungere nuovamente i file InfoPlist.strings al progetto.


0

Nel mio caso la localizzazione non ha funzionato a causa del simbolo "-" nel nome. Esempio: "aero-Info.plist" E file localizzati: "aero-InfoPlist.strings" e "aeroInfoPlist.strings" non hanno funzionato.


0

Quando si utilizza il InfoPlist.stringsfile (in XCode dovrebbe essere posizionato accanto al Info.plistfile - probabilmente la posizione del file reale può trovarsi ovunque all'interno del progetto

Visualizza in XCode

) fai attenzione a usare il nome breve della chiave per la traduzione.

Stavo cercando di usare Privacy - Camera Usage Description, ma la chiave di lavoro èNSCameraUsageDescription

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.