Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leonidas Pinheiro

[Resolvido] Problema com SET lc_time_names = "pt_br"

Recommended Posts

Ola, estou com uma sql que quando uso o SET lc_time_names = "pt_br" , ele retorna 0 registros.

 


	$db->Query('SET lc_time_names = "pt_br" ; SELECT `p`.*,
		DATE_FORMAT(`p`.`data`,"%%W %%d/%%m") AS `dia`,
		DATE_FORMAT(`p`.`data`,"%%Y%%m%%d") AS `rdia`
		FROM `programacao` AS `p`
	        WHERE `p`.`data` >= CURDATE()
		ORDER BY `p`.`data` ASC');

Alguem ai pode me ajudar. Ja olhei todas as configurações, e o pt_br está abilitado, porem ainda não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, estou com uma sql que quando uso o SET lc_time_names = "pt_br" , ele retorna 0 registros.

 

Leonidas Pinheiro,

 

Essa, deve ser uma consulta independente. Ficaria assim:

 

$db->Query('SET lc_time_names = "pt_br"'); //Separamos o set lc_time_names em uma consulta só para ele
$db->Query( 'SELECT `p`.*,
	DATE_FORMAT(`p`.`data`,"%%W %%d/%%m") AS `dia`,
	DATE_FORMAT(`p`.`data`,"%%Y%%m%%d") AS `rdia`
	FROM `programacao` AS `p`
	WHERE `p`.`data` >= CURDATE()
	ORDER BY `p`.`data` ASC');

 

Qualquer consulta feita após o set lc_time_names já retornará os nomes (dias, meses, ...) no idioma que você escolheu e por isso, ela deve ser enviada apenas uma vez.

O ideal é enviar essa instrução logo após a conexão.

 

Como eu disse ontem, eu não sei se você está usando PDO, MySQLi ou se você está usando as funções antigas (mysql_connect, mysql_query) para fazer esse trabalho; Se for PDO, basta na hora da conexão você enviar assim:

 

$pdo = new PDO( 'mysql:host=servidor;dbname=bancodedados', 'usuario' , 'senha',
array(
	PDO::MYSQL_ATTR_INIT_COMMAND => 'set lc_time_names="pt_BR"'
)
);

 

Se você enviar conforme o fragmento acima, você não precisará mais enviar a instrução separada e todos os nomes (dias, meses, ...) retornarão no idioma que você escolheu.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando o mysql_connect

 

@mysql_query("SET lc_time_names = 'pt_BR'");

 

 

mais ainda sim não pega os nomes em português.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que seja problema de locales, mas não tenho acesso no servidor.

 

Alguem sabe se da pra fazer uma configuração dessas no arquivo .htaccess

 

Eu sei que ele faz muita coisa, será que isso tbm tem como fazer por ele ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguem sabe se da pra fazer uma configuração dessas no arquivo .htaccess

 

Não, você não vai conseguir fazer isso pelo .htaccess

 

Apenas teste o fragmento abaixo e veja o resultado

 

$conn = mysql_connect( 'host' , 'usuario' , 'senha' ); //troque host, usuario e senha pelos dados corretos
mysql_query("SET lc_time_names = 'pt_BR'" );

if ( ( $res = mysql_query( 'select date_format( now() , "%W" ) as "dia";' ) ) !== false ){
$row = mysql_fetch_array( $res , MYSQL_ASSOC );

echo 'Hoje é ' , $row[ 'dia' ];
}

mysql_close( $conn );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma possibilidade de se recuperar o timestamp do banco de dados e formatar usando as funções do PHP, porém, fazendo isso, você estaria misturando as camadas de desenvolvimento.

 

Vou mover o tópico para o fórum de MySQL, talvez o pessoal de lá tenha alguma idéia.

 

Caso você ainda não encontre uma solução em MySQL o ideal será entrar em contato com o administrador do seu servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a Localweb não pode fazer nenhuma alteração para instalar o pt_br tive que fazer meio que uma gambiarra pra resolver o meu problema. Segua abaixo como ficou o código, pode servir de ajuda para alguem.

 

			$tmpDia = Show($r['dia'], true, true, true) . "";
			$tmpDia = strtoupper($tmpDia);
			$dias_en = array('SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY');
			$dias_pt = array('DOMINGO', 'SEGUNDA-FEIRA', 'TERÇA-FEIRA', 'QUARTA-FEIRA', 'QUINTA-FEIRA', 'SEXTA-FEIRA', 'SÁBADO');
			$tmpDia  = str_replace($dias_en, $dias_pt, $tmpDia);
			echo $tmpDia; 


Se possível algum moderador volte o post para php e o feche.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.