# Internacionalização (informática)

Internacionalização e localização, em informática, são processos de desenvolvimento e/ou adaptação de um produto, em geral softwares de computadores, para uma língua e cultura de um país. A internacionalização de um produto não fabrica o produto novamente, somente adapta as mensagens do sistema à língua e à cultura locais. Isto é importante porque permite que o desenvolvedor de software respeite as particularidades de cada língua e cultura de cada país.

## Nomenclatura

Internacionalização também é escrita acronimamente como i18n, vindo da palavra inglesa internationalization, onde se tomam a primeira e a última letra e o número de letras entre elas; o mesmo é feito com localization escrito como L10n. O suporte de algumas línguas pelo sistema informático relaciona-se como um problema entre localização (L10n), depois multilinguísticas (m17n), até internacionalização (i18n).
* Um sistema informático localizado foi adaptado ou convertido para utilização num locale específico.
* Um sistema multilinguístico dá suporte a várias línguas ou locales instalados mas guarda esses dados como dados.
* Um sistema internacionalizado compreende um suporte a um leque grande de locales (ou para usuários de outras línguas), permitindo que várias línguas, conjuntos de codificação de textos, visualização, e interfaces do usuário todos funcionem naturalmente.

## Fundamentos

Os pontos fundamentais para internacionalização e localização incluem
* A língua, contendo a codificação do texto em diferentes sistemas de escrita (Alfabetos), diferentes sistemas numerais, scripts da esquerda-para-direita e scripts da direita-para-esquerda (por exemplo, para língua hebraica). Os sistemas atuais utilizam Unicode para solucionar problemas de codificação de caracteres. Contendo também a representação gráfica do texto, o áudio e os subtítulos para vídeos.
* O formato de data e tempo, incluindo diferentes calendários.
* As diferentes formatações de números.
* O fuso horário (UTC) de cada país para coincidir com a língua a ser internacionalizada.
* Os números pré-definidos governamentalmente como: passaportes, RG, CPF.
* Os padrões de números de telefones, endereço e códigos postais internacionais.
* Os pesos e medidas de cada país.
* O tamanho de papéis.
* A moeda local.
* Nomes e títulos locais.

## Diferença entre internacionalização e localização

A diferença entre internacionalização e localização é somente fundamental. A internacionalização é uma adaptação de um produto para melhoramento e a localização é uma adição de características específicas de uma região. Os dois são evidentemente complementares.
Alguns dos elementos específicos da localização são: tradução linguística, suporte a várias línguas, suporte a caracteres das línguas da Ásia oriental, símbolos, métodos de ordenação de listas, valores culturais e contexto social.
No desenvolvimento de software, depois de internacionalizado um produto, o termo localização se refere ao processo necessário para o produto internacionalizado esteja também pronto para mercados específicos.
Por esta razão pode-se falar que um produto internacionalizado satisfaz a comunidade internacional, mas não para um mercado específico. A preparação para um mercado específico é chamado de localização.

## Importância da localização

Atualmente, as pessoas que queiram usar computadores devem primeiramente aprender o inglês. Em um país com baixas taxas de alfabetização obstrui o acesso às tecnologias de informação e de comunicações, especialmente para pessoas com baixa renda e as comunidades rurais que não têm o mesmo acesso à instrução. A localização traz inúmeros benefícios como a redução significativamente a quantidade de treinamento necessária para os usuários finais para usar um sistema de computador, facilitando a introdução da informática em pequenas e médias empresas, permitindo que empregados trabalhem inteiramente na sua língua nativa e facilitando o desenvolvimento dos sistemas e para controlar bases de dados de nomes e de dados locais da língua, facilitando a decentralização dos dados em níveis provinciais e de distrito.
O mesmo aplica-se às companhias de serviço público (eletricidade, água, telefone), que desenvolverão as bases de dados locais da língua, desse modo reduzindo custos e dando o serviço melhor aos cidadãos, permitindo que os cidadãos comuniquem-se com o e-mail em sua própria língua, fornecendo a indústria local dos projetos, fontes adequadas aquela região e ajudando universidades a treinarem mais engenheiros de software.

## Dificuldades

Uma das grandes dificuldades das equipes do desenvolvimento é a necessidade que alguém compreenda línguas estrangeiras e culturas e tenha algum conhecimento técnico; tal pessoa pode ser difícil de encontrar. Outra dificuldade é a duplicação de esforços para a manutenção e atualização rotineira das mensagens do sistema em paralelo ao desenvolvimento do software e da inclusão de novas características, consequentemente, criação de novas mensagens a serem traduzidas. Por exemplo, se uma mensagem indicada ao usuário em uma de diversas línguas for modificada, todas as versões traduzidas devem ser mudadas. Há bibliotecas de software que ajudam a minimizar este problema, como o gettext.
O software de código-fonte aberto pode geralmente ser livremente modificado e redistribuido, por isso é mais apto a internacionalização. A maioria dos softwares proprietários está somente disponível nas línguas consideradas economicamente viáveis. O projeto KDE é feito sob software livre e está traduzido para mais de 90 línguas, o GNOME, também software livre, é traduzido para mais de 100 línguas, já os softwares comerciais como o Skype não tem traduções mais do que em 30 línguas.

## Localização de softwares

Localização é uma tarefa multifunção, que tem por objetivo traduzir os conteúdos de texto de um software ou de um site, adaptando a tradução para a cultura do país ao qual se destina, considerando costumes, religião, sistemas de pesos e medidas, moeda, padronização de data e hora, legislação e outras variáveis que possam afetar o produto.
A Localização envolve também atividades que requerem profundos conhecimentos de Tecnologia de Informação, em consonância com padrões internacionais convencionados pela Globalização.
A localização de software é um processo de traduzir as mensagens que os usuários finais irão visualizar e de adaptá-las a fim de que sirvam uma cultura estrangeira. Este processo é um trabalho intensivo e requer frequentemente esforços significativos das equipes de desenvolvimento. Há ferramentas que podem simplificar o processo de localização. Vários projetos de software comerciais e de software livre começam sem a implementação da localização, ou para cortar custos ou para reduzir esforços já que para se fazer a internacionalização de um software é necessário que o tradutor ou localizador conheça e utilize o software e também, que domine a língua e conheça detalhes do país originário da língua a traduzir.
A localização de softwares também pode adaptar o software de uma cultura a outra. Durante a localização, algumas referências a história ou à cultura são substituídas a uma referência nativamente equivalente, que idealmente não mude o sentido da indicação.

## Problemas com padrões da internet

De acordo com as normas da internet softwares modernos são mais aptos a integrar componentes de internacionalização devido suas tecnologias mais modernas como navegador web, aplicações para servidor e banco de dados. É nas relações destes componentes que as deficiências nos padrões se tornam mais aparentes. Por exemplo, não há nenhum mecanismo padronizado para o HTTP indicar os caracteres de codificação utilizados nos índices de formulários HTML. Embora haja alguns mecanismos específicos de navegadores que podem indicar os caracteres, não há nada especificado pelos padrões da W3C. Houve somente uma intenção de solucionar este problema em 2004.

## Conceito de Locale

Em informática, o conceito de locale é um grupo de parâmetros que define uma língua, levando em conta suas variantes específicas, a qual o usuário final define sua língua nativa, e é ela que irá aparecer no software usado. Normalmente um identificador locale está no formato de identificação da língua (em minúsculo) e um identificador de região (em maiúsculo).
Abaixo as línguas comumente utilizadas em relação aos países:
| Árabe Identificação Região ar-AE Emirados Árabes Unidos ar-BH Bahrein ar-DZ Argélia ar-EG Egito ar-IL Israel ar-IQ Iraque ar-JO Jordânia ar-KW Kuwait ar-LB Líbano ar-LY Líbia ar-MA Marrocos ar-MR Mauritânia ar-OM Omã ar-PS Palestina ar-QA Catar ar-SA Arábia Saudita ar-SD Sudão ar-SO Somália ar-SY Síria ar-TD Chade ar-TN Tunísia ar-YE Iêmen Bengali Identificação Região bn-BD Bangladesh bn-IN Índia bn-SG Singapura Chamorro Identificação Região ch-GU Guam ch-MP Marianas Setentrionais Chinês Identificação Região zh-CN China zh-HK Hong Kong zh-MO Macau zh-SG Singapura zh-TW Taiwan Coreano Identificação Região ko-KP Coreia do Norte ko-KR Coreia do Sul Croata Identificação Região hr-BA Bósnia e Herzegovina hr-HR Croácia Dinamarquês Identificação Região da-DK Dinamarca da-GL Gronelândia Francês Identificação Região fr-AD Andorra fr-BE Bélgica fr-BF Burquina Fasso fr-BI Burundi fr-BJ Benim fr-CA Canadá fr-CD República Democrática do Congo fr-CF República Centro-Africana fr-CG República do Congo fr-CH Suíça fr-CI Costa do Marfim fr-CM Camarões fr-DJ Djibouti fr-FR França fr-GA Gabão fr-GB Reino Unido fr-GF Guiana Francesa fr-GN Papua-Nova Guiné fr-GP Guadalupe fr-HT Haiti fr-IT Itália fr-KM Comores fr-LB Líbano fr-LU Luxemburgo fr-MC Mónaco fr-MG Madagáscar fr-ML Mali fr-MQ Martinica fr-NC Nova Caledônia fr-PF Polinésia Francesa fr-PM São Pedro e Miquelão fr-RE Reunião fr-RW Ruanda fr-SC Seicheles fr-TD Chade fr-TG Togo fr-VU Vanuatu fr-WF Wallis e Futuna fr-YT Mayotte Grego Identificação Região el-CY Chipre el-GR Grécia Inglês Identificação Região en-AN Antilhas Holandesas en-AI Anguila en-AS Samoa Americana en-AU Austrália en-BB Barbados en-BM Bermudas en-BN Brunei en-BS Bahamas en-BW Botswana en-BZ Belize en-CA Canadá en-CK Ilhas Cook en-CM Camarões en-DM República Dominicana en-ER Eritreia en-ET Etiópia en-FJ Fiji en-FK Ilhas Malvinas en-FM Estados Federados da Micronésia en-GB Reino Unido en-GD Granada en-GH Gana en-GI Gibraltar en-GM Gâmbia en-GU Guam en-GY Guiana en-IE Irlanda en-IL Israel en-IO Território Britânico do Oceano Índico en-JM Jamaica en-KE Quênia en-KI Kiribati en-KN São Cristóvão e Neves en-KY Ilhas Caimã en-LC Santa Lúcia en-LR Libéria en-LS Lesoto en-MP Marianas Setentrionais en-MS Monserrate en-MT Malta en-MU Ilhas Maurícias en-MW Malawi en-NA Namíbia en-NF Ilha Norfolk en-NG Nigéria en-NR Nauru en-NU Niue en-NZ Nova Zelândia en-PG Papua-Nova Guiné en-PH Filipinas en-PK Paquistão en-PN Pitcairn en-PR Porto Rico en-PW Palestina en-RW Ruanda en-SB Ilhas Salomão en-SC Seicheles en-SG Singapura en-SH Santa Helena, Ascensão e Tristão da Cunha en-SL Serra Leoa en-SO Somália en-SZ Essuatíni en-TC Turcas e Caicos en-TK Toquelau en-TO Tonga en-TT Trinidad e Tobago en-UG Uganda en-US Estados Unidos en-VC São Vicente e Granadinas en-VG Ilhas Virgens Britânicas en-VI Ilhas Virgens Americanas en-VU Vanuatu en-WS Samoa en-ZA África do Sul en-ZM Zâmbia en-ZW Zimbabwe Irlandês Identificação Região ga-GB Reino Unido ga-IE Irlanda Italiano Identificação Região it-CH Suíça it-HR Croácia it-IT Itália it-SI Eslovênia it-SM San Marino Lingala Identificação Região ln-CD República Democrática do Congo ln-CG República do Congo Malaio Identificação Região ms-BN Brunei ms-MY Malásia ms-SG Singapura Neederlandês Identificação Região nl-AN Antilhas Holandesas nl-AW Aruba nl-BE Bélgica nl-NL Países Baixos nl-SR Suriname | Português Identificação Região pt-AO Angola pt-BR Brasil pt-CV Cabo Verde pt-GW Guiné-Bissau pt-MZ Moçambique pt-PT Portugal pt-ST São Tomé e Príncipe pt-TL Timor-Leste Romeno Identificação Região ro-MD Moldávia ro-RO Roménia Sérvio Identificação Região sr-BA Bósnia e Herzegovina sr-YU Sérvia e Montenegro Hindi Identificação Região hi-IN Índia hi-PK Paquistão Espanhol Identificação Região es-AR Argentina es-BO Bolívia es-CL Chile es-CO Colômbia es-CR Costa Rica es-CU Cuba es-DO República Dominicana es-EC Equador es-ES Espanha es-GQ Guiné Equatorial es-GT Guatemala es-HN Honduras es-MX México es-NI Nicarágua es-PA Panamá es-PE Peru es-PR Porto Rico es-PY Paraguai es-SV El Salvador es-US Estados Unidos es-UY Uruguai es-VE Venezuela Sueco Identificação Região sv-FI Finlândia sv-SE Suécia KiSwahili Identificação Região sw-KE Quênia sw-TZ Tanzânia Suazi Identificação Região ss-SZ Essuatíni ss-ZA África do Sul Tâmil Identificação Região ta-IN Índia ta-LK Sri Lanka ta-SG Singapura Alemão Identificação Região de-AT Áustria de-BE Bélgica de-CH Suíça de-DE Alemanha de-DK Dinamarca de-LI Liechtenstein de-LU Luxemburgo SeTswana Identificação Região tn-BW Botswana tn-ZA África do Sul Turco Identificação Região tr-BG Bulgária tr-CY Chipre tr-TR Turquia Húngaro Identificação Região hu-HU Hungria hu-SI Eslovênia Urdu Identificação Região ur-IN Índia ur-PK Paquistão |

## Funcionamento da tradução

O gettext é uma biblioteca de internacionalização criada pelo Projeto GNU parte do GNU Translation Project, é usada para escrever as mensagens de programas em multi-línguas, utilizada por vários importantes programas para tradução de seus softwares. Veja Lista de softwares que usam gettext.

### Programação

O código fonte é primeiro modificado para as chamadas do GNU gettext. Isto é, para a maioria das linguagens de programação, é feito uma encapsulação das strings e o gettext irá chamar qual strings o usuário irá visualizar. Esta função é usualmente modificada para _ (underline), veja por exemplo o código em C:
é escrito assim:
em outras linguagens também segue o mesmo padrão, veja em linguagem Python:
é escrito assim:
Outras linguagens também possuem a funcionalidade do gettext como: C++, Objective-C, Shell script, bash, LISP, Smalltalk, Java, awk, Pascal, wxWidgets, Tcl, Perl, PHP e outras mais.

### Tradução

Para a tradução da string acima é necessário junto ao programa um arquivo com extensão .po, ou um template, que contenha uma lista de todas as frases e palavras que precisam ser traduzidas no código fonte. Dentro do arquivo .po de um programa escrito em C é necessário conter:
Nos exemplos acima, a primeira linha mostra o caminho para qual arquivo (src/name.c) e para qual linha (linha 36) a frase terá que ser traduzida.
O mesmo pode ser feito com outras linguagens, o padrão também é seguido alterando somente a extensão do arquivo fonte, veja em Python:
Em um software que contenha várias linguagens de programação, as mensagens de tradução funcionam normalmente, basta somente referenciar o nome do arquivo fonte correspondente a linha, como exemplificado nos exemplos acima.
Para a tradução das frases da língua nativa do programa para a língua que deseja traduzir é necessário um programa que edite arquivos .po e depois de traduzidas as mensagens é necessário ter um compilador para gerar o arquivo .mo, os programas mais comuns são o próprio gettext, para KDE existe o Kbabel e para multiplataformas tem o Poedit, estes programas fazem com que as strings de tradução estajam alinhadas no arquivo, facilitando a localização das frases que não foram traduzidas ou com tradução incompletas.
Programas como Gedit, Kate ou Bloco de notas também funcionam para traduzir os programas, atrapalhando somente na visualização.

### Babelzilla

A comunidade Babelzilla é dedicada a prover locales para extensões feitas para programas da família Mozilla baseados em Gecko, como o Firefox e o Thunderbird. Os desenvolvedores disponibilizam suas extensões no Web Translation System - WTS (Sistema de Tradução na Web) e então tradutores voluntários em todo o mundo fornecem os locales, constituindo-se em uma plataforma de tradução simultânea que permite a atualização das traduções sempre que os programadores acrescentarem novas línguas.
A página www.babelzilla.org é constituída pelo Web Translation System - WTS (Sistema de Tradução na Web), por um fórum, glossário, wiki tutorial e outras ferramentas para comunicação da comunidade de desenvolvedores e tradutores.