É possível atualizar as strings de um storyboard localizado?


226

Eu localizei uma parte do meu aplicativo criando um storyboard base.lproj e três arquivos de string para ele. Foi há um mês e depois adicionei um novo controlador de exibição ao aplicativo, mas os botões e rótulos desse controlador não aparecem nos arquivos de string

É possível atualizar esses 3 arquivos de string anexados ao storyboard ou devo adicionar novas traduções de strings programaticamente usando NSLocalizableString e Localizable.strings?


Respostas:


264

Existem duas opções:

Opção 1

O Xcode pode "recarregar" o arquivo convertendo-o em um tipo de arquivo [Interface Builder Cocoa Touch Storyboard] ou em um tipo de arquivo [Localizable Strings] .

  1. Selecione seu arquivo de storyboard base no Project Navigator
  2. Encontre a seção Localização no Inspetor de arquivos
  3. Se o seu arquivo atualmente é um [Localizable Strings], altere-o para [Interface Builder Cocoa Touch Storyboard] ou vice-versa.
  4. O Xcode deveria ter convertido seu storyboard para a versão atual, preservando seus antigos esforços de localização. Aqui você pode alterar o arquivo novamente para o tipo de arquivo original, se desejar.

opção 2

Use o ibtool para extrair as strings do seu storyboard.

  1. Abra o aplicativo Terminal

  2. Localize o diretório Base.lproj

  3. Use esta linha para extrair as seqüências de caracteres:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. Depois que o ibtool extrai as strings para file_name.strings, você pode copiá-lo e colá-lo no seu arquivo .strings original

Visite para mais informações: https://conyac.cc/business/columns/localization_guide_ios


1
Tentei a opção 1, mas alterar o tipo de arquivo de [Localizable Strings] para [Interface Builder Cocoa Touch Storyboard] resulta sempre em uma falha do Xcode 5.0.1. O motivo pode ser que, porque eu não conhecia as possibilidades acima, editei os arquivos de localização do storyboard manualmente anteriormente.
Reinhard Männer

16
A opção 1 funciona.mas você precisa mudar de "Localizable .." para "interface ..." e depois novamente!
João Nunes

3
A opção 1 não funciona para mim usando o XCode 6.0.1. Ao tentar converter meu arquivo .strings em .interfacebuilder, o XCode pergunta se os arquivos devem ser convertidos. Os arquivos são criados no sistema de arquivos, no entanto, os arquivos de sequência ainda permanecem e contêm os valores antigos.
Bit Bouncing

53
Para mim, a opção 1 substituiu todas as seqüências já traduzidas por inglesas. Eu tive que adicionar a tradução mais uma vez.
Mihail Velikov

5
A opção 1 parece muito instável no Xcode 7. Às vezes funciona, às vezes não. Às vezes, substitui aleatoriamente algumas das minhas strings já traduzidas por versões em inglês novamente.
31915 Adam Adams

76

Confira o BartyCrouch , ele resolve perfeitamente o seu problema. Também é de código aberto , é mantido ativamente e pode ser facilmente instalado e integrado ao seu projeto.


Instale o BartyCrouch via Homebrew :

brew install bartycrouch

Como alternativa, instale-o via Mint :

mint install Flinesoft/BartyCrouch

Atualize incrementalmente seus arquivos Storyboards / XIBs Strings:

$ bartycrouch update

Isso fará exatamente o que você estava procurando.


Para manter seus arquivos Storyboards / XIBs Strings atualizados ao longo do tempo , recomendo adicionar um script de construção (instruções sobre como adicionar um script de construção aqui ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Além de atualizar de maneira incremental seus arquivos Storyboards / XIBs Strings, isso também garantirá que seus Localizable.stringsarquivos permaneçam atualizados com as novas chaves adicionadas no código usandoNSLocalizedString e mostrando avisos para chaves duplicadas ou valores vazios.

Verifique o BartyCrouch no GitHub ou este artigo detalhado para obter informações adicionais.


1
Uau! Esta ferramenta é simplesmente incrível. Isso precisa de mais votos!
Ph1lb4

1
ferramenta adorável - não há mais cópia / colagem manual de novos textos de etiqueta em arquivos * .strings (... e esquecendo a tradução de qualquer nova etiqueta como antes) ... Muito obrigado!
IKK 16/08/19

existe um pod semelhante para projetos OBJC?
Rpgvo

2
Esta é a resposta que estamos procurando. Essa deve ser a resposta aceita.
Juanjo

3
Não entendi por que, depois de 6 anos, desde que essa pergunta é feita e essa solução irregular ainda é necessária para que isso funcione no Xcode. A Apple deveria ter trabalhado nisso.
huggie

57

Você pode adicionar manualmente uma chave ao seu arquivo de localização. Você pode encontrar o objeto principal selecionando-o no editor de storyboard. Vamos dar uma olhada no Object-IDinspetor de identidade. É parecido com"nwc-b2-19c"

Na sua atualização de localização ou adicione tradução. Por exemplo :

"nwc-b2-19c.title" = "Translated title";

8
acho que é a abordagem menos arriscada
Nicolas Manzini

Mas alguns dos Object-ID não são mostrados no arquivo .string. Porque eles não estão conectados. Então, naquele momento, o que posso fazer?
Mihir Oza

existe uma maneira de selecioná-lo por um nome e não apenas pelo ID gerado automaticamente?
Cocoseis

Para um UILabel, é: "YeB-ap-Wkw.text" = "Texto dos meus marcadores";
ioopl

30

Este não é para todos, mas não requer ferramentas adicionais no terminal e é fácil para pequenas alterações manuais. (Não considere isso quando quiser automatizar seu processo.)

Etapa 0: configuração do idioma do storyboard

  • Base (com textos em inglês)
  • Inglês (o arquivo de cadeias localizáveis ​​não existe porque o arquivo base é inglês)
  • outros idiomas (arquivos de strings localizáveis)

configuração de base

Esta etapa é realizada apenas uma vez.

Agora, quando adiciono algo ao storyboard, faço o seguinte

Etapa 1: adicionar o arquivo de seqüências de caracteres localizáveis ​​em inglês

Adicionar Inglês

basta marcar o item de linha em inglês.

Isso cria um novo arquivo de strings localizáveis ​​em inglês com todas as linhas

Etapa 2: copiar os novos itens de linha nos arquivos de outros idiomas

e traduzi-los

Etapa 3: desmarque o inglês e remova o arquivo de seqüências de caracteres localizável correspondente

o arquivo era necessário apenas para obter os novos itens de linha

Este é um processo fácil e rápido, tudo é feito no editor de storyboard

Editar:

Esse processo funciona muito bem com pequenos storyboards. Por exemplo, eu tenho um projeto baseado em guias e um storyboard para cada guia.

Pesquise "referência do storyboard" para encontrar tutoriais.

Bom exemplo: referência do Storyboard no Xcode, onde devemos usá-lo?

Portanto, cada pequeno storyboard possui apenas algumas seqüências de caracteres para localizar.


ótimo! Você também encontrou uma idéia sobre como remover elementos excluídos?
Tobe

@Tobe Se você dividir seu storyboard como sugeri acima, é realmente fácil identificar as strings que não são mais usadas.
Gerd Castan

15

Finalmente, minha solução foi (rudimentar, mas eficaz) copiar as traduções anteriores e colá-las em um novo arquivo criado, desmarcando e marcando a caixa Idioma da localização.

Isso seria útil em alguns casos como o meu, quando você precisar alterar apenas um ou dois textos.


Isso preservaria os IDs e outros o tempo todo? Fiz um teste e parecia funcionar, mas poderia ser um desastre se o ID fosse alterado.
Ullstrm

Acho que sim, já fiz isso várias vezes sem nenhum problema.
jpl850

1
Os IDs são atribuídos quando você solta os elementos da interface do usuário. Eles são independentes da localização, pois são designados pelo storyboard. Portanto, não haverá efeito nos IDs.
iBug 8/12/16

Obrigado iBug pela explicação =)
jpl850

14

Acho que a melhor maneira é usar Localizações de exportação / importação internas:

  1. No Project Navigator, escolha a pasta do projeto
  2. Escolha Editor> Exportar para localização,
  3. Todas as traduções deixadas em seus lugares e o XCode adicionam seqüências perdidas automaticamente. Além disso, antes da importação, você pode editar .xliff no XLIFF Editor (por exemplo, online - http://xliff.brightec.co.uk ) e, em seguida, não precisa fazer isso no XCode.
  4. em Editor> Importar localizações e escolha o arquivo .xliff salvo.

PS Se você não deseja editar no XLIFF Editor e pulou a etapa 3, o XCode não pode salvar novas strings. Nesse caso, abra .xliff no XLIFF Editor, salve novamente sem alterações e importe um novo arquivo.


1
+1 Maneira fácil e adequada de trabalhar com a Localização. Além disso é maneira preferida ser a Apple
Jurasic

1
Usando o Xcode 7.3.1, em um projeto de amostra já localizado, alterei um rótulo (de "um texto" para "um texto básico") e adicionei um novo rótulo. Exportei para localização, toquei no arquivo .xliff (sem alterações) e importei-o novamente. No arquivo Main.strings, a linha de comentários para o rótulo alterado foi atualizada /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, mas o novo rótulo NÃO é criado no arquivo Main.strings. Depois editei o arquivo .xliff para adicionar uma tradução para o novo rótulo. Eu o importei novamente. O novo rótulo agora está inserido no arquivo Main.strings.
27616 duthen

+1, mas há um erro que eu descobri. Ao adicionar novos elementos, eles não estão em um arquivo exportado (como está dizendo duthen). Mas quando eu faço uma exportação logo após (sem alterações no storyboard) todos os elementos adicionados são, surpreendentemente, incluídos. Faça uma exportação duas vezes. O segundo incluirá todos os novos elementos. Obrigado Apple!
Viktor Kucera

6

Quando você clica em seu storyboard, Main.storyboard por exemplo ... No lado direito, você pode ver o menu de localização (veja a imagem em anexo). Se você desmarcar e verificar novamente um idioma, o arquivo será gerado novamente. Normalmente, copio o conteúdo, giro o arquivo novamente e colo o conteúdo que copiei e já fui traduzido.

É assim que eu uso para atualizar o dicionário.

insira a descrição da imagem aqui


Com o Xcode 10, se você usa o git, destaca as diferenças!
Ricardo Ruiz Romero

Sim, é possível ... agora meu arquivo é maior que nesta data e eu o mesclo com a versão do repositório depois de gerá-lo novamente.
31918 J. Fdez

5

Eu tenho um storyboard enorme com muitas cordas lá. Dois idiomas baseiam o inglês e outro árabe. A tarefa era adicionar alguns campos e rótulos ao storyboard e adicionar localização para eles sem nenhum script e NSLocalizableStrings.

Para mim ajudou a seguir:

Primeiro : verifique se você tem o git para evitar alterações inesperadas.

  1. Vá para a tela de destino no xcode e pressione Editor-> Export For Localization.... Salve o arquivo ar.xliff em algum lugar.
  2. Faça o download do XLIFF Edtior .
  3. Abra o arquivo ar.xliff e faça as alterações.
  4. Importe este arquivo no xcode. Feito! Você atualizou o arquivo de strings do storyboard.

Para que isso funcione, primeiro selecione o projeto ou o destino no editor de projeto do Xcode.
Chuck Boris

4

Existe um aplicativo, uma ferramenta de linha de comando da Apple chamada AppleGlot que suporta localização incremental. Ainda não tentei, mas parece exatamente com a ferramenta que você pesquisou (há algum tempo).


A appleglotferramenta está trabalhando com pacotes finais de aplicativos. É uma abordagem completamente diferente para aplicativos de tradução.
Flovdis

1
Algo errado com uma "abordagem diferente" ou o que causa o voto negativo?
tilo 20/07

Precisa pesquisar AppleGlot nesse link agora.
NSDeveloper

4

Aqui está um script para extrair seqüências de caracteres de storyboards e xibs e mesclá-las com as traduções existentes.

Para executar o script automaticamente quando você cria um projeto, coloque o script no diretório raiz do projeto e adicione uma fase Executar Script com a seguinte linha às fases de construção de destino nas configurações do projeto.

./mergegenstrings.py PathToSourceDir

Ou você pode executar o script no Terminal manualmente quando quiser.

O script é executado ibtoolcomo Tha Leang respondeu. Também é executado genstringspara extrair e mesclar seqüências marcadas com NSLocalizedStringno seu código-fonte. O script é baseado em um script nesta postagem , que mescla seqüências de caracteres após a execução genstrings.


você pode fornecer mais informações sobre como usar isso?
user023

1
Eu adicionei um comentário à essência. Espero que ajude. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

Obrigado, funciona perfeitamente para mim. Se alguém tiver problemas com permissões, isso pode ser útil: stackoverflow.com/questions/9850936/…
iCode

Este script funciona bem para arquivos Main.strings storyboard, mas parece estar substituindo minhas traduções Localizable.strings no Xcode 7.
Adam Johns

3

A abordagem mais fácil e muito menos arriscada é apenas copiar o ID do objeto do storyboard e adicionar uma nova chave para a chave no arquivo localizado, como no exemplo abaixo:

1: Copie a identificação do objeto conforme abaixo do storyboard para o componente:

insira a descrição da imagem aqui

2: Adicione uma nova chave no arquivo localizado, como abaixo:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Nota: Essa é uma abordagem muito menos arriscada se você quiser atualizar apenas alguns componentes, caso contrário, poderá recriar arquivos localizados para o storyboard.


Obrigado pela sua resposta !!!!!. Tenho uma pergunta a fazer: Nos meus projetos, não criei uma saída para alguns dos rótulos, botões ... Se eu usar o objectID para esses botões e rótulos, será suficiente?
Harikarthick K

3

O Xlifftool está disponível como aplicativo para Mac e funciona bem. Ele mostra todas as strings e objetos traduzíveis de info.plist, strings localizáveis ​​e o storyboard.

Obtenha aqui para o mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Etapa 1: no Xcode, selecione a pasta do projeto no navegador do projeto. Em seguida, selecione Editor / Exportar para localização ...

Suas strings traduzíveis serão incluídas em um arquivo xliff no idioma que você selecionou para localização no Xcode.

Etapa 2: abra o arquivo com xlifftool e traduza ou atualize suas traduções que foram feitas anteriormente.

Etapa 3: faça o upload novamente no seu projeto com Editor / Importar localizações ...


Outra alternativa para o macOS é o Loca Studio . Semelhante ao Xlifftool, o aplicativo pode abrir o resultado da ação do Xcode Editor -> Exportar para Localização. Possui alguns recursos mais avançados de filtragem e pesquisa, além de verificações automáticas de controle de qualidade. (divulgação completa: eu sou o desenvolvedor principal).
guru_meditator 21/01

0

Esta é a minha maneira fácil de atualizar novo texto do storyboard ou xib para a sequência de localização

1- use este script http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- selecione sua string de localização que deseja atualizar e alterne a string de idioma de "String de localização" para "Storyboard do construtor de interface"

3- troque de volta :)

Feito.

insira a descrição da imagem aqui


Ele faz alterar o arquivo de Interface Builder Storyboard mas de novamente após 1 ou 2 segundos revertê-lo de volta para Localizable Cordas e nenhum além Localizable Cordas para novo texto vista
Mujahid Latif

@MujahidLatif Estou usando este Pod agora, é realmente útil para mim e é possível atualizar localizações storyboard e Localization.String como vontade github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Opção 1 O
Xcode pode "recarregar" o arquivo convertendo-o em um [Interface Builder Cocoa Touch Storyboard]tipo ou [Localizable Strings]arquivo.

Selecione seu arquivo de storyboard base na seção Localizar o Localizador do Project Navigator no Inspetor de Arquivos . Se seu arquivo é atualmente um , altere-o para ou vice-versa. O Xcode deveria ter convertido seu storyboard para a versão atual, preservando seus antigos esforços de localização. Aqui você pode alterar o arquivo novamente para o tipo de arquivo original, se desejar.[Localizable Strings][Interface Builder Cocoa Touch Storyboard]

Opção 2
Use ibtoolpara extrair as seqüências de caracteres em seu storyboard.

Abra o aplicativo Terminal
Localize seu Base.lprojdiretório
Use esta linha para extrair as seqüências de caracteres:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

Depois que o ibtool extrai as strings para file_name.strings, você pode copiá-lo e colá-lo no seu .stringsarquivo original .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.