Localização (i18n)

14 janeiro, 2019

Localização é o processo para habilitar o suporte de vários idiomas no seu aplicativo. Este processo possibilita a expanção da aplicação para outras localidades. Normalmente não nos preocupamos em localizar uma aplicação, seja por ser um projeto pequeno ou simplemente não ser a proposta do projeto. Porém, situações mudam e do dia para a noite pode ser necessário levar a aplicação para outros idiomas. Refatorar código por textos de exibição não é uma tarefa fácil, rápida ou simples. Portanto, nada melhor do que preparar o projeto para eventuais mudanças de escopo.

Visto que o ingês é o idioma que as linguagens normalmente são escritas, muitos programadores adotam a língua inglesa para nomear dados no código, como funções, variáveis, etc. Dessa forma não há alteração de contexto entre o idioma da linguagem de programação com o português, por exemplo. Com isso, o uso da Localização possibilita que a aplicação seja escrita em um único idioma. Isso facilita o desenvolvimento em times que possuem pessoas com nacionalidades diferentes.

Habilitar localização no Xcode

Por padrão, ao criar um novo projeto o Xcode já possui habilitado a opção Use Base Internationalization. Basta conferir se está marcado na sessão Localizations em Project Navigator. Essa opção gera automaticamente a estrutura de arquivos para a linguagem global, normalmente usa o inglês como base.

Use Base Internationalization

Adicionar novos idiomas

No Project Navigator clique no sinal + em Localizations e selecione o novo idioma.

Novo idioma

Será necessário selecionar quais storyboards que será aplicado o novo idioma.

Arquivos para localiaçãza

Um novo arquivo de localização .strings será criado junto ao Interface Builder selecionado. Para aplicar a localização em todo o projeto é necessário criar o arquivo Localizable.strings. Anteriormente o Xcode gerava por padrão esse arquivo. Nas versões recentes é necessário gerá-lo manualmente. Para isso selecione File -> New -> File.. ou o atalho ⌘N. E na seção Resources dos templates selecione Strings file. Nomeie o arquivo como Localizable.strings.

Strings File

Em seguida é necessário habilitar o novo idioma no arquivo de .strings. Selecione o arquivo Localizable.strings, na barra lateral Inspectors clique em Localize.. na seção Localizations.

Localize

Na caixa de diálogo selecione o idioma padrão (English) e clique em Localize.

Aplicar Localize

Agora no Inspectors aparece o idioma que foi adicionado no Project Navigator. Basta marcar todos os checkboxs dos idiomas para ser criado cada arquivo .strings.

Strings novo Idioma

Adicionar localizações

Selecione o arquivo Localizable.strings de cada idioma e adicione as chaves e valores para cada palavra ou frase a ser localizada. Seguindo o seguinte exemplo:

"hello_world" = "Hello World";

Os arquivos devem possuir as mesmas chaves alterando apenas os respectivos valores de acordo com o idioma. O arquivo em Localizable.strings (English) ficaria dessa forma com alguns exemplos:

Strings English

E o arquivo Localizable.strings (Portuguese (Brazil)) assim:

Strings Portuguese

Utilizar localizações

O método NSLocalizedString(key: String, comment: String) é utilizado para acessar os valores das chaves cadastradas nos arquivos de localizações. No primeiro parâmetro key deve ser informado a chave e o parâmetro comment serve apenas para ajudar na tradução dos valores.

let welcomeTitle = NSLocalizedString("hello_world", comment: "")

Para facilitar o uso do método NSLocalizedString e deixar o código mais limpo criei uma função para apenas a chave:

func localized(_ key: String) -> String {
    return NSLocalizedString(key, comment: "")
}

E utilizando a função:

let welcomeTitle = localized("hello_world")