Como localizar uma string dentro do arquivo info.plist do iOS?

259

Como você deve saber, o iOS 8 requer a chave NSLocationWhenInUseUsageDescription para usar o local do usuário. Eu adicionei essa chave e algumas informações gerais em minhas informações. insira a descrição da imagem aqui

Como posso usar a string de tradução dentro do arquivo plist?

- Atualização -

Eu já tenho uma string localizável. Só estou pensando que posso usar algo como NSLocalizedString (MYSTRING, nil) dentro da cadeia plist. Eu sei que posso criar vários arquivos de info.plist para localização, mas fiquei imaginando que poderia haver uma maneira mais fácil.

Soheil
fonte
Você já trabalhou nisso, estou tendo dificuldades para localizar NSLocationWhenInUseUsageDescription também?
Oliver Pearmain

Respostas:

490

Você deve usar o InfoPlist.stringsarquivo para localizar valores de Info.plist. Para fazer isso, vá para File->New->File, escolha Strings Filena Resourceguia de iOS, nomeie-o InfoPliste crie. Abra e insira os Info.plistvalores que você deseja localizar, como:

NSLocationWhenInUseUsageDescription = "Description of this";

Agora você pode localizar o InfoPlist.stringsarquivo com traduções. Boa sorte!

EDITAR:

selecione as opções de localização ou ative a localização, se necessário,

editor do lado direito

você poderá ver o arquivo também no editor do lado esquerdo.

editor do lado esquerdo

EDITAR:

Aqui está a documentação oficial para Info.plistlocalização de chaves.

Créditos a Marco , obrigado por incluir as fotos nesta resposta!

Fahri Azimov
fonte
15
Depois de criar o arquivo de strings, você precisa incluir a chave no arquivo Info.plist também ou é seguro excluir a partir daí?
Rounak 23/03
11
Dica: Use exatamente o nome "InfoPlist.strings" e nada mais. Por exemplo, meu arquivo de infoplist original recebeu outro nome, mas eu precisava usar esse nome exatamente para fazê-lo funcionar.
Sjoerd Perfors
22
Ao testar as localizações no simulador. Eu tive que mudar o idioma no simulador em si, não apenas o idioma no destino do xcode. Apenas um aviso para mais alguém.
22415 John
10
o uso correto é keyname = "seu texto"; por exemplo: NSLocationWhenInUseUsageDescription = "seu texto"
Magurizio
10
Cuidado: a chave deste arquivo não deve ter aspas, o que é diferente da localização normal. por exemplo: NSMicrophoneUsageDescription = "sua descrição";
Yuchao Zhou 11/04
33

Todas as opções acima não funcionaram para mim (XCode 7.3), então li a referência da Apple sobre como fazer e é muito mais simples do que o descrito acima. De acordo com a Apple:

Valores localizados não são armazenados no próprio arquivo Info.plist. Em vez disso, você armazena os valores para uma localização específica em um arquivo de cadeias de caracteres com o nome InfoPlist.strings. Você coloca esse arquivo no mesmo diretório de projeto específico do idioma usado para armazenar outros recursos para a mesma localização.

Assim, criei um arquivo de seqüência de caracteres chamado InfoPlist.strings e o coloquei na pasta xx.lproj do idioma "xx" (e o adicionei ao projeto usando Arquivo-> Adicionar arquivos a ...). É isso aí. Não há necessidade da chave "Recursos localizados podem ser misturados" = SIM, e não há necessidade de InfoPlist.strings em base.lproj ou en.lproj.

O aplicativo usa o valor-chave Info.plist como o valor padrão se não conseguir encontrar uma chave no arquivo específico do idioma. Assim, coloquei meu valor em inglês no arquivo Info.plist e o traduzido no arquivo específico do idioma, testado e tudo funciona.

Em particular, não há necessidade de localizar o InfoPlist.strings (que cria uma versão do arquivo no arquivo base.lproj, en.lroj e xx.lproj) e, no meu caso, seguir esse caminho não funcionou.

Zvi
fonte
2
Por que não incluiu o link para o documento apropriado?
Jurasic 18/09/19
3
Aqui está o link para a página relevante do documento da Apple, caso alguém esteja interessado: developer.apple.com/library/archive/documentation/General/…
dobra
e como decidimos que xx? por exemplo, para inglês, pode ser en, inglês, inglês, etc? Desculpe se é uma pergunta estúpida, porque eu sou um novato
Awais Nasir
Sua resposta funcionou para mim, exceto no cenário do idioma de fallback, o aplicativo está obtendo o idioma de fallback sempre o idioma usado anteriormente e não o inglês, mas meu valor em inglês está presente no arquivo Info.plist, também tentei também o
base.lproj
19

Se algo não estiver funcionando, verifique se você adicionou:

"Recursos localizados podem ser misturados" = SIM

no info.plist. No meu caso, os arquivos InfoPlist.strings foram apenas ignorados.

tuvok
fonte
15

Dicas

  1. Lembre-se de que o iOS Simulator explora por padrão o idioma do seu sistema. Altere também o idioma (e a região) na configuração do simulador do iOS para testar suas traduções.

  2. A cadeia de localização (consulte os documentos da Apple aqui ) deve ser

    NSLocationWhenInUseUsageDescription = "Description of this";

    e não (com aspas "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Giuseppe Beccari
fonte
Adições valiosas, mas acho que isso deve ser um comentário sob a respectiva resposta, não uma nova resposta. Observe também que "363" não é um identificador de postagem, mas o número de votos que a resposta tem (o número foi alterado desde então).
19419 John J. Camilleri
7
Não tenho 50 reputação para adicionar um comentário lá.
Giuseppe Beccari 11/10
Não importa se você usa aspas "..." ao redor da tecla, por exemplo: ( "NSLocationWhenInUseUsageDescription"="description"é válido). Pode ser com ou sem.
mluisbrown 03/04
12

Eu recomendo a leitura dos guias da Apple e a visualização dos recursos da WWDC listados aqui: Tópicos de Internacionalização e Localização

Para responder especificamente à sua pergunta, ao adicionar um novo idioma ao seu projeto insira a descrição da imagem aqui, você tem a oportunidade de escolher quais arquivos do InfoPlist incluir (se você tiver vários destinos, terá vários arquivos do Info Pllist). Tudo o que você precisa fazer para obter a tela a seguir é pressionar o + em Localizações e escolher um novo idioma para adicionar suporte. insira a descrição da imagem aqui

Depois de adicionar, ele criará os arquivos de string necessários nos diretórios lproj apropriados para o idioma especificado.

--EDITAR--

Apenas para esclarecer, o iOS trocará a string do arquivo Plist com base no idioma atualmente selecionado pelo usuário, usando a chave da entrada plist como a chave no arquivo de strings localizado.

Matt S.
fonte
3
Traduzir o argumento inteiro para apenas uma chave é um exagero. Encontre mais informações aqui: bit.ly/1yBUTru
RGML
2
Simplesmente não é verdade para o XCode 9. Ele nunca solicita a localização de plist ao adicionar um novo idioma.
Tom
Precisarei analisar isso no Xcode 9 - ainda não tive a chance de testar no novo Xcode.
Matt S.
11

Localize passo a passo o Info.plist:

  1. Encontre no Xcode a pasta Resources (é colocada na raiz)
  2. Selecione a pasta Recursos
  3. Em seguida, pressione o menu principal Arquivo-> Novo-> Arquivo ...
  4. Selecione na seção "Resource" Strings File e pressione Next.
  5. Em seguida, no Save Ascampo, escreva APENAS InfoPlist (maiúsculas "I" e maiúsculas "P")
  6. Em seguida, pressione Criar
  7. Em seguida, selecione o arquivo InfoPlist.strings que criou na pasta Resources e pressione no menu à direita o botão "Localizar"
  8. Em seguida, selecione o projeto no Navegador de projeto e selecione a lista O projeto do projeto
  9. Na guia informações na parte inferior, você pode encontrar o idioma desejado (na seção Localizações)
  10. O idioma que você pode ver na pasta Recursos
  11. Para localizar os valores ("chave") do arquivo info.plist, você pode abrir com um editor de texto e obter todas as chaves que deseja localizar
  12. Você escreve qualquer chave como o exemplo em qualquer InfoPlist.strings como no exemplo acima

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Isso é tudo trabalho e você localizou seu arquivo info.plist!

Costas Bakoulias
fonte
4

Para quem está enfrentando o problema do info.plist não ser incluído ao tentar adicionar localizações, como no Xcode 9.

Você precisa tornar o info.plist localizável, acessando-o e clicando no botão localizar no inspetor de arquivos, conforme mostrado abaixo.

O info.plist será incluído nos recursos do arquivo para quando você adicionar novas localizações.

insira a descrição da imagem aqui

Edward
fonte
3
Você encontrou algum problema? Eu não posso construir projeto quando eu adicionar dois idiomas para localização desde xcode está dizendo "O info.plist arquivo não pôde ser aberto porque não existe tal arquivo.
mkkrolik
2
@mkkrolik Estou tendo o mesmo problema agora. Você encontrou uma solução?
Todanley
@ Todanley pule esta solução que não funciona para mim. Use InfoPlist.strings em vez disso.
Mkkrolik 01/05/19
@mkkrolik Obrigado que funciona. E também ao testar com o simulador, tive que alterar a configuração de idioma do simulador em vez da do meu destino para que ele funcionasse.
Todanley
3

Como o RGML diz, você pode criar um InfoPlist.strings, localizá-lo e adicionar sua chave e o valor da seguinte forma: "NSLocationWhenInUseUsageDescription" = "Ajuda para me localizar!";

Ele adicionará a chave ao seu info.plist para o idioma especificado.

Boné
fonte
0

No meu caso, tudo foi configurado corretamente, mas o arquivo InfoPlist.strings ainda não foi encontrado.

A única coisa que realmente funcionou foi remover e adicionar os arquivos InfoPlist.strings novamente ao projeto.

d.ennis
fonte
0

No meu caso, a localização não funcionou causa do símbolo '-' no nome. Exemplo: "aero-Info.plist" E os arquivos localizados: "aero-InfoPlist.strings" e "aeroInfoPlist.strings" não funcionaram.

Mike Glukhov
fonte
0

Ao usar o InfoPlist.stringsarquivo (no XCode, ele deve ser colocado ao lado do Info.plistarquivo - a localização real do arquivo pode estar em qualquer lugar do projeto, provavelmente

Visualizar no XCode

) tenha cuidado ao usar o nome abreviado da chave para a tradução.

Eu estava tentando usar Privacy - Camera Usage Description, mas a chave de trabalho éNSCameraUsageDescription

Hourglasser
fonte