Não importa a plataforma em que você está desenvolvendo seu projeto de software, se você deseja alcançar um grande público e consequentemente alcançar suas metas, que na maioria das vez são financeiras, você deve fornecer mais de um idioma em seu software para que ele seja útil para o público espalhado pelo mundo.
A plataforma mobile, talvez seja onde seu aplicativo possa atingir o público mais variado em relação a idiomas. Hoje um aplicativo em inglês tem uma grande chance de ser um sucesso global, pois em todos os mercados terá grande aceitação do público. Mas ter só um idioma, mesmo que seja o inglês, é um fator de limitação do alcance e também da experiência do seu aplicativo, fazendo que você perca uma parcela do que você poderia alcançar atendendo a mais idiomas.
No desenvolvimento de aplicativos para iOS e Mac OS X, o processo de internacionalização de aplicativos é facilitado por uma série de recursos disponíveis na plataforma. Basicamente o que você precisa fazer é administrar arquivos onde os textos de cada idioma pode ser editado e de onde eles serão lidos.
Nesse artigo, farei um tutorial básico sobre internacionalização em aplicativos para iOS e apresentarei o aplicativo Linguan da Cocoanetics, aplicativo este que faz o trabalho de internacionalização ser mais leve e preciso.
Hora de Criar o Aplicativo
Abra o Xcode, e crie um novo aplicativo. Neste caso criarei um aplicativo do tipo “Single View”, com o nome de “Localized”:


Criando o arquivo com os textos
Para criar o arquivo que irá conter os textos para cada idioma, é preciso ir em File > New > New File > Resource > Strings File:
Após selecionar o tipo do arquivo, vamos nomeá-lo, uma boa prática é usar o nome Localizable para o arquivo:

Feito isso, é só criar o arquivo e ele irá aparecer dentro do projeto. Mas ainda não temos idiomas dentro desse arquivo de strings, dessa forma, o idioma utilizado dentro do arquivo será o idioma oficial do aplicativo. Será preciso adicionar idiomas nele, assim ele funcionará como se fosse um diretório com vários arquivos de texto com diversos idiomas. Iremos criar 3 idiomas: Português, Inglês e Espanhol. Para adicionar os idiomas é preciso abrir a barra lateral direita e adicioná-los na aba Localization:


Editando os arquivos
A edição dos arquivos de idioma é simples, basicamente você insere chave = valor, e também pode adicionar comentários:
/* hello */
"helloKey" = "hello";
Isso deve ser replicado para idioma que você deseja traduzir, dessa forma, você teria o seguinte:
/* English */
/* hello */
"helloKey" = "hello";
/* Portuguese */
/* hello */
"helloKey" = "olá";
/* Spanish */
/* hello */
"helloKey" = "hola";
Feito isso, o seu projeto já possui strings traduzidas e para traduzir é simples, basta utilizar a função NSLocalizedString com a chave para a string que você deseja exibir:
NSLocalizedString(@"helloKey", @"")
Exibir a string
Vamos fazer um pequeno teste, vamos adicionar um UILabel no meio da tela para exibir o texto que precisamos, abra o arquivo .xib do seu view controller e posicione um UILabel no meio da tela. Após isso abra o header (.h) do view controller e declare o outlet para acessar o UILabel:
@interface ViewController : UIViewController
@property (nonatomic, strong) IBOutlet UILabel *label;
@end
Feito isso, não esqueça de conectar o UILabel ao seu outlet no arquivo .xib.
Abra o arquivo .m (implementação) do view controller, faça o @synthesize e defina o texto do UILabel:
implementation ViewController
@synthesize label = _label;
- (void)viewDidLoad
{
[super viewDidLoad];
_label.text = NSLocalizedString(@"helloKey", @"");
}
@end
Dessa forma, já está tudo certo, você só precisa testar o aplicativo e mudar o idioma do dispositivo de testes para visualizar as modificações sendo feitas:

Versão em Inglês

Versão em Português

Versão em Espanhol
É muito simples até mesmo traduzir um aplicativo que já está em desenvolvimento. Mas mesmo assim, o fato de ter de replicar chave = valor para todos os arquivos, podem se tornar um pouco insustentável depois um tempo de desenvolvimento e algumas dezenas de strings para serem administradas.
Simplificando com Linguan
Para resolver esse problema de replicação, o pessoal do Cocoanetics criou um aplicativo matador para administração de arquivos de tradução chamado Linguan. O Linguan é um aplicativo super simples de ser utilizado, tem uma interface bem amigável e cumpre o que promete. Na minha opnião, é mais um aplicativo do tipo “Como eu desenvolvia sem isso” que redefine como você trabalha com strings traduzidas.
Para começar, ele está disponível na Mac App Store e custa $4,99 (uma barbada), após comprar/instalar ele, ao abrir verá a seguinte tela:

No Linguan, você não abre arquivos, você abre seu projeto do Xcode inteiro, e o aplicativo varre ele atrás de strings traduzidas e as organiza por chaves x idiomas. Abri o projeto do Localized no linguan e olhe como ficou:

Nessa tabela, será possível alterar traduções, adicionar novas chaves com suas traduções e também remover as chaves, e o melhor, tudo isso está sendo sincronizado com os arquivos originais, você pode trabalhar seu código fonte no Xcode e editar as traduções diretamente no Linguan.
O Linguan possui também as possibilidade de exportar arquivos com traduções. Dessa forma, é possível enviar ao seu tradutor um arquivo de texto com todas as chaves que estão sem tradução para ele traduzir. Quando ele enviar de volta para você, você pode importar esse arquivo e o aplicativo irá automaticamente sincronizar suas traduções. Além das possibilidades de importação e exportação de strings, o Linguan possui um validador e um “Wizard” que ajuda você a traduzir suas strings.
Para conhecer um pouco mais sobre o Linguan, o desenvolvedor dá um grande destaque a ele no seu site e também está disponível na Mac App Store.
Para finalizar, recomendo muito a criação de aplicativos com localização mesmo que você não vá traduzir o aplicativo imediatamente, dessa forma, você precisará de poucos minutos para transformar seu aplicativo de um idioma em um aplicativo com vários idiomas. E recomendo muito também, o uso do Linguan, foi um aplicativo que me chamou a atenção desde seu lançamento, pois eu acho um saco administrar arquivos de strings, pois o processo de replicação das alterações é lento e falho por depender exclusivamente de uma cabeça humana.