Este capítulo descreve as funcionalidades de idioma (locale) disponíveis do ponto de vista do administrador. O suporte a idioma no PostgreSQL é realizado de duas maneiras:
Utilizando as funcionalidades de idioma do sistema operacional, para fornecer a ordem de intercalação, formatação de números, mensagens traduzidas, e outros aspectos específicos do idioma.
Disponibilizando no servidor PostgreSQL vários conjuntos de caracteres diferentes, incluindo conjuntos de caracteres de vários bytes, para permitir o armazenamento de textos em todos os idiomas, e provendo a tradução de conjuntos de caracteres entre o cliente e o servidor.
O suporte a idioma se refere a um aplicativo que respeita as preferências culturais com relação ao alfabeto, classificação, formatação de números, etc. O PostgreSQL utiliza as facilidades de idioma ISO C e POSIX padrão fornecidas pelo sistema operacional do servidor. Para obter informações adicionais deve ser consultada a documentação do sistema utilizado.
O suporte a idioma é inicializado, automaticamente, quando o agrupamento de bancos de dados é criado utilizando o utilitário initdb. Por padrão, o initdb inicializa o agrupamento de bancos de dados com a definição de idioma do ambiente onde executa; portanto, se o sistema operacional estiver definido para utilizar o mesmo idioma desejado para o agrupamento de bancos de dados, então não será necessário fazer mais nada. Se for desejado utilizar um idioma diferente (ou não houver certeza do idioma definido no sistema operacional), poderá ser informado ao initdb qual é o idioma desejado através da opção --locale. Por exemplo:
initdb --locale=pt_BR
Este exemplo define o idioma como Português (pt) conforme falado no Brasil (BR). Outras possibilidades são en_US (Inglês dos Estados Unidos) e fr_CA (Francês do Canadá). Se o idioma permitir utilizar mais de um conjunto de caracteres, então a especificação ficará parecida com esta: pt_BR.ISO8859-1. Quais idiomas estão disponíveis no sistema operacional, e quais são os seus nomes, depende do que é disponibilizado pelo distribuidor do sistema operacional, e do que foi instalado (Na maioria dos sistemas o comando locale -a mostra a relação de idiomas disponíveis).
Ocasionalmente é útil combinar regras de idiomas diferentes como, por exemplo, regras de intercalação do Inglês com mensagens em Português. Para que isto seja possível, existe um conjunto de subcategorias de idioma controlando somente certos aspectos das regras de idioma.
LC_COLLATE | Ordem de classificação das cadeias de caracteres [a] [b] [c] [d] [e] |
LC_CTYPE | Classificação dos caracteres (O que é uma letra? Sua letra maiúscula equivalente?) [f] |
LC_MESSAGES | Idioma das mensagens |
LC_MONETARY | Formatação das quantias monetárias |
LC_NUMERIC | Formatação dos números |
LC_TIME | Formatação das datas e das horas |
Notas: a. collation; collating sequence — Um método para comparar duas cadeias de caracteres comparáveis. Todo conjunto de caracteres possui seu collation padrão. (Second Informal Review Draft) ISO/IEC 9075:1992, Database Language SQL- July 30, 1992. (N. do T.) b. SQL Server — intercalação (collation) — é um conjunto de regras que determina como os dados são comparados, ordenados e apresentados. Os dados caractere são classificados de acordo com a informação de intercalação, que inclui o idioma, a ordem de classificação e a diferenciação de letras minúsculas e maiúsculas. SQL Server 2005 Books Online — Glossary of Terms (N. do T.) c. collation é uma classificação apropriada para o idioma. Collation (N. do T.) d. collation — [informática, computadores] — s. intercalação, f. collation | Portuguese | Dictionary & Translation by Babylon (N. do T.) e. collation — O processo de ordenar unidades de informação textuais, geralmente específico de um determiando idioma. Glossary of Unicode Terms (N. do T.) f. LC_CTYPE — Define a classificação do caractere, conversão maiúscula/minúscula, e outros atributos do caractere. LC_CTYPE Category for the Locale Definition Source File Format (N. do T.) |
Se for desejado que o sistema se comporte como não tendo suporte a idioma, devem ser utilizados os idiomas especiais C ou POSIX.
Os valores de algumas categorias de idioma devem permanecer fixos por toda a existência do agrupamento de bancos de dados. Ou seja, uma vez executado o utilitário initdb não pode mais haver alteração dos valores definidos para estas categorias. Estas categorias são LC_COLLATE e LC_CTYPE, que afetam a ordem de classificação dos índices e, portanto, devem permanecer fixas ou os índices das colunas de texto vão ficar danificados. O PostgreSQL impõe esta restrição registrando os valores de LC_COLLATE e LC_CTYPE usados pelo initdb. O servidor adota estes dois valores, automaticamente, na inicialização.
Quando o servidor está em execução as demais categorias de idioma podem ser alteradas como se desejar, definindo as variáveis de configuração em tempo de execução que possuem o mesmo nome das categorias de idioma (consulte a Seção 16.4.8.2 para obter detalhes). Na verdade, os padrões escolhidos pelo utilitário initdb são escritos no arquivo de configuração postgresql.conf apenas para servirem como padrão quando o servidor é inicializado. Se forem removidas as atribuições presentes no arquivo postgresql.conf, o servidor herdará as definições do ambiente de execução.
Deve ser observado que o comportamento de idioma do servidor é determinado pelas variáveis de ambiente enxergadas pelo servidor, e não pelo ambiente de qualquer um dos clientes. Portanto, antes de inicializar o servidor deve-se tomar o cuidado de configurar as definições de idioma corretamente. Uma conseqüência deste fato é que, se o cliente e o servidor forem configurados com idiomas diferentes, as mensagens poderão ser mostradas em idiomas diferentes dependendo de onde forem originadas.
Nota: Quando se fala em herdar o idioma do ambiente de execução, isto significa o seguinte na maioria dos sistemas operacionais: Para uma determinada categoria de idioma, como a intercalação, as seguintes variáveis de ambiente são consultadas, nesta ordem, até ser encontrada uma com valor definido: LC_ALL, LC_COLLATE (a variável correspondente à respectiva categoria) e LANG. Se nenhuma destas variáveis de ambiente estiver definida, então o padrão é utilizar o idioma C.
Algumas bibliotecas de idioma de mensagem também examinam a variável de ambiente LANGUAGE, que prevalece sobre todas as outras definições de idioma para a finalidade de definir o idioma das mensagens. Em caso de dúvida, deve ser consultada a documentação do sistema operacional para obter informações adicionais, em particular a documentação sobre gettext.
Para ativar as mensagens traduzidas para o idioma preferido do usuário, deve ser ativado o NLS (suporte a idioma nacional) em tempo de construção. Esta escolha independe dos outros suportes a idioma.
O suporte a idioma exerce influência sobre as seguintes funcionalidades:
Ordem de classificação das consultas que utilizam a cláusula ORDER BY.
A família de funções to_char.
A desvantagem de utilizar idiomas diferentes de C e POSIX no PostgreSQL é o impacto no desempenho. Torna a manipulação de caracteres mais lenta, e impede a utilização de índices comuns na cláusula LIKE. Por estes motivos, a utilização de idioma deve ser feita somente quando for realmente necessária.
Se, apesar do que foi explicado acima, o suporte a idioma não funcionar, deve ser verificado no sistema operacional se o suporte a idioma está configurado de forma correta. Pode ser utilizado o comando locale -a para verificar quais idiomas estão instalados no sistema operacional, caso este comando esteja disponível no sistema operacional utilizado. [1]
Deve ser verificado se o PostgreSQL está realmente utilizando o idioma que se pensa que esteja utilizando. As definições de LC_COLLATE e LC_CTYPE são determinadas quando o utilitário initdb é executado, não podendo ser mudadas sem que o initdb seja executado novamente. Outras definições de idioma, incluindo LC_MESSAGES e LC_MONETARY, são determinadas inicialmente a partir do ambiente onde o servidor é posto em execução. As definições ativas de idioma podem ser verificadas utilizando o comando SHOW.
Na distribuição do código fonte, o diretório src/test/locale contém um conjunto de testes para o suporte a idioma do PostgreSQL.
Como é obvio, os aplicativos cliente que tratam os erros gerados pelo servidor analisando o texto da mensagem de erro terão problemas quando as mensagens do servidor estiverem em outro idioma. Os autores destes aplicativos são aconselhados a utilizar o esquema de códigos de erro para tratar erros, em vez dos textos das mensagens.
A manutenção dos catálogos de mensagens traduzidas requer o esforço contínuo de muitos voluntários que desejam ver o PostgreSQL falando bem o seu idioma. Se as mensagens no seu idioma não estiverem disponíveis atualmente, ou se não estiverem inteiramente traduzidas, sua ajuda será apreciada. Se desejar ajudar, consulte o Capítulo 45 ou escreva para a lista de discussão dos desenvolvedores.
[1] |
O comando locale -a executado no Fedora Core 3 mostrou a seguinte relação: aa_DJ, aa_DJ.iso88591, aa_ER, aa_ER@saaho, aa_ER.utf8, aa_ER.utf8@saaho, aa_ET, aa_ET.utf8, af_ZA, af_ZA.iso88591, ... , portuguese, POSIX, pt_BR, pt_BR.iso88591, pt_BR.utf8, pt_PT, pt_PT@euro, pt_PT.iso88591, pt_PT.iso885915@euro, pt_PT.utf8, ... , zu_ZA, zu_ZA.iso88591, zu_ZA.utf8. (N. do T.) |