Estou (como todos os outros) usando NSLocalizedString
para localizar meu aplicativo.
Infelizmente, existem várias "desvantagens" (não necessariamente a culpa do próprio NSLocalizedString), incluindo
- Não há preenchimento automático para seqüências de caracteres no Xcode. Isso torna o trabalho não apenas propenso a erros, mas também cansativo.
- Você pode acabar redefinindo uma string simplesmente porque não sabia que uma string equivalente já existia (por exemplo, "Digite a senha" vs. "Digite a senha primeiro")
- Da mesma forma que o problema de preenchimento automático, você precisa "lembrar" / copipaste as sequências de comentários, ou então
genstring
acabará com vários comentários para uma sequência - Se você deseja usar
genstring
depois de localizar algumas seqüências, tenha cuidado para não perder suas localizações antigas. - As mesmas strings estão espalhadas por todo o projeto. Por exemplo, você usou em
NSLocalizedString(@"Abort", @"Cancel action")
todos os lugares e, em seguida, a Revisão de código solicita que você renomeie a sequênciaNSLocalizedString(@"Cancel", @"Cancel action")
para tornar o código mais consistente.
O que eu faço (e depois de algumas pesquisas no SO, achei que muitas pessoas fazem isso) é ter um strings.h
arquivo separado, onde eu #define
localizo todo o código. Por exemplo
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Isso basicamente fornece o preenchimento de código, um único local para alterar os nomes de variáveis (portanto, não é mais necessário usar genstring) e uma palavra-chave exclusiva para refatorar automaticamente. No entanto, isso tem o custo de acabar com um monte de #define
instruções que não são inerentemente estruturadas (como LocString.Common.Cancel ou algo assim).
Então, enquanto isso funciona um pouco bem, eu queria saber como vocês fazem isso em seus projetos. Existem outras abordagens para simplificar o uso do NSLocalizedString? Existe talvez até uma estrutura que a encapsule?