Melhor prática usando NSLocalizedString

Estou (como todos os outros) usandoNSLocalizedStringpara localizar meu aplicativo.

Infelizmente, existem várias "desvantagens" (não necessariamente a culpa do próprio NSLocalizedString), incluindo

Nenhum preenchimento automático para strings no Xcode. Isso torna o trabalho não apenas propenso a erros, mas também cansativ 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 a questão do preenchimento automático, você precisa "lembrar" / copipar as sequências de comentários, ou entãogenstring terminará com vários comentários para uma sequênciaSe você quiser usargenstring depois de localizar algumas strings, você deve ter cuidado para não perder suas localizações antigas mesmas strings estão espalhadas por todo o projeto. Por exemplo, você usouNSLocalizedString(@"Abort", @"Cancel action") em todos os lugares e, em seguida, o Code Review solicita que você renomeie a string paraNSLocalizedString(@"Cancel", @"Cancel action") para tornar o código mais consistent

O que eu faço (e depois de algumas pesquisas no SO, achei que muitas pessoas fazem isso) é ter umstrings.h arquivo onde eu#define todo o código de localização. Por exempl

// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);

@This fornece essencialmente o preenchimento de código, um único local para alterar os nomes das 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 (ou seja, como LocString.Common.Cancel ou algo parecido

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 uma estrutura que a encapsule?

questionAnswers(18)

yourAnswerToTheQuestion