Que nem o Jack Estripador, vamos por partes:

2008/8/21 Roberto Mello <[EMAIL PROTECTED]>:
> 2008/8/19 Yoshio <[EMAIL PROTECTED]>:
>
>> Na aplicação eu não consigo pegar os error codes do postgre para
>> definir qual foi o erro, tenho que procuram na string do erro
>> retornado algumas palavras-chaves como " violates unique constraint"
>> para definir o tipo de erro e exibir a tradução certa como "Não foi
>> possível realizar o cadastro pois estes dados já foram cadastrados".
>
> O ideal nao e' procurar na string do erro, mas sim no codigo do erro.
> Muito mais facil, e muito menos passivel de ser mudado numa versao
> futura do PostgreSQL, ao passo que o texto da mensagem pode mudar,
> invalidando sua busa na string.
Eu sei disso, mas não estou conseguindo pegar os códigos pelo Zeos.
Pelo que procurei parece que realmente não da.

> Outro problema e' que tu estas recebendo as mensagens em ingles,
> quando me parece que tu queres as mensagens em portugues. Isso e'
> controlado pelo parametro de configuracao lc_messages [1].
>
> Esse parametro pode ser modificado no arquivo de configuracao ou em
> tempo de execucao ("runtime") pela sua aplicacao cliente.
>
> homeprofile=# show lc_messages;
>  lc_messages
> -------------
>  en_US.UTF-8
>
> homeprofile=# insert into building_company(foo) values ('bar');
> ERROR:  column "foo" of relation "building_company" does not exist
> LINE 1: insert into building_company(foo) values ('bar');
>
> homeprofile=# set session lc_messages to 'pt_BR.UTF-8';
> SET
>
> homeprofile=# insert into building_company(foo) values ('bar');
> ERRO:  coluna "foo" da relação "building_company" não existe
> LINE 1: insert into building_company(foo) values ('bar');
>
> Note que a locale da linguagem tem que ter sido criada previamente,
> antes do postmaster (daemon do PG) ter sido iniciado.
Isso me parece interessante, o problema como falei é que eu não
consigo pegar os error codes na aplicação e para definir tipo de erro
eu tenho que olhar a mensagem retornada pelo db que está em inglês.
Também não gostaria que exibir as mensagens do postgres pois são muito
técnicas para o usuário entender (como falei na primeira mensagem).

>> Na procedure do db (PL) eu passo por parâmetro o idioma escolhido e
>> dentro tem 2 ifs para cada mensagens das exceções, diferente da
>> aplicação onde a tradução vem de um arquivo externo e o gettext faz a
>> alteração automática das strings.
>
> Nossa, me parece um bocado de trabalho. Nao bastaria pegar o codigo do
> erro retornado (talvez com um RAISE EXCEPTION), como numa consulta
> comum, e deixar a aplicacao cliente lidar com isso?
Eu até pensei em fazer a própria procedure retonar o código como
inteiro (se for diferente de 0 é erro), porém e se eu tiver 10 funções
em 10 aplicações/programas que fazem chamadas a uma mesma stored
procedure? Para cada função dessas aplicações eu teria os mesmos tipos
de "ifs" para cada tipo de erro. Se o db enviasse a mensagem de erro
traduzida por uma exceção eu só teria que mostra-la apara o usuário.
Seria até melhor pois para atualizar as mensagens eu não precisaria
recompilar o(s) programa(s) (ou o *.po do gettext) e redistribuir nos
clientes, só teria que alterar a procedure do db.
Mas esta solução que você falou parece que funciona, não seria tanto
trabalho recompilar e redistribuir nos pcs, mas será que não existe
jeito melhor?

>> Gostaria de saber se há uma maneira correta de fazer essas traduções,
>> se é no DB mesmo ou na aplicação e como fazer?
>
> Dependendo do driver que voce esta' usando, ele deveria retornar o
> SQLSTATE, conforme descrito no padrao SQL, na forma de codigos de erro
> que o PostgreSQL retorna atraves do driver[2].
Parece que o problema é no zeos mesmo que não retorna os erro codes
(ou eu que sou uma anta e não to conseguindo achar a solução).

> A documentacao esclarece esses detalhes[3], e tu precisas le-la para
> entender como lidar com esse problema.
>
> [1] 
> http://www.postgresql.org/docs/8.3/static/runtime-config-client.html#RUNTIME-CONFIG-CLIENT-FORMAT
> [2] http://www.postgresql.org/docs/8.3/static/errcodes-appendix.html
> [3] http://www.postgresql.org/docs/8.3/static/locale.html
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a