Ir para conteúdo

POWERED BY:

Arquivado

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

MauricioBolognese

[Resolvido] Zend_Translate

Recommended Posts

Estou tentando configurar o Zend_Translate... vamos ao que encontrei...

 

Meu Boostrap está configurado da seguinte maneira.

 

<?php
set_include_path ( '.' . PATH_SEPARATOR . './' 
	. PATH_SEPARATOR . '../library' 
	. PATH_SEPARATOR . '..//application/default/models' 
	. PATH_SEPARATOR . get_include_path () );

require_once 'Zend/Loader.php';

class Bootstrap {
	
	public static $frontController = null;
	
	public static $root = '';
	
	public static $registry = null;
	
	public static function run() {
		self::prepare ();
		$response = self::$frontController->dispatch ();
		self::sendResponse ( $response );
	}
	
	public static function setupEnvironment() {
		error_reporting ( E_ALL | E_STRICT );
		ini_set ( 'display_errors', true );
		date_default_timezone_set ( 'America/Sao_Paulo' );
		self::$root = "../";
	}
	
	public static function prepare() {
		self::setupEnvironment ();
		Zend_Loader::registerAutoload ();
		self::setupRegistry ();
		self::setupFrontController ();
		self::setupView ();
		self::setupConfigDb();
		self::setupTranslation();
	}
		
	public static function setupFrontController() {
		self::$frontController = Zend_Controller_Front::getInstance ();
		self::$frontController->throwExceptions ( true );
		self::$frontController->returnResponse ( true );
		self::$frontController->setControllerDirectory ( 
			array ('default' => self::$root . 'application/default/controllers'));
	}
	
	public static function setupView() {
		$view = new Zend_View ( );
		$view->setEncoding ( 'UTF-8' );
		$view->doctype('XHTML1_TRANSITIONAL');
		Zend_Layout::startMvc ( array ('layoutPath' => self::$root . 'application/default/views/layouts','layout' => 'layout' ));
		$registry = Zend_Registry::getInstance();
		$registry->set('view',$view);

	}
	
	public static function sendResponse(Zend_Controller_Response_Http $response) {
		$response->setHeader ( 'Content-Type', 'text/html; charset=UTF-8', true );
		$response->sendResponse ();
	}
	
	public static function setupRegistry() {
		self::$registry = new Zend_Registry ( array (), ArrayObject::ARRAY_AS_PROPS );
		Zend_Registry::setInstance ( self::$registry );
		$registry = Zend_Registry::getInstance ();
		$registry->set ( 'root', self::$root );
	}
	
	public static function setupConfigDb() {
		$config = new Zend_Config_Ini ( self::$root . 'config/config.ini', 'desenvolvimento' );
		Zend_Registry::set( 'config', $config );
		
		$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
		Zend_Db_Table_Abstract::setDefaultAdapter($db);
		
		Zend_Registry::set('db', $db);
	}
	
	public static function setupTranslation() {
		$registry = Zend_Registry::getInstance ();
		$translate = new Zend_Translate('gettext', '../traducao/pt-br/form.mo', 'pt');
		Zend_Registry::set('translate', $translate);
	}
}

Acredito que meu problema esteja sendo na hora de inicializar o translation....

 

No meu controler chamei via "<?=$this->translate->_("Hello World."); ?>" e recebi o erro:

 

Fatal error: Call to a member function _() on a non-object in /home/site/application/default/views/scripts/index/index.phtml on line 2
Linha 2 é essa chamada ai de cima....

 

Sugestões?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu faço a tradução das mensagens de erro desta forma.

 

include 'i18n/pt_BR.php';
$translate = new Zend_Translate('array', $portugues, 'pt_BR');
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Translate', $translate);

Dentro de i18n/pt_BR, temos.

 

<?php
/**
 * Arquivo que contém as traduções das mensagens de erro do formulário para pt_BR
 */
$portugues = array(
	// Campo vazio
	'isEmpty' => 'Este campo não pode ser vazio',
	// AlNum 
	'alnumNotAlnum' => '"%value%" contém caracteres não alfabéticos ou digitos.',
	// Alpha
	'alphaNotAlpha' => '"%value%" contém caracteres não alfabéticos.',
	// Barcode_Ean13 	
	'barcode_Ean13Invalid' => '"%value%" não é um código de barras EAN-13 válido.',
	'barcode_Ean13InvalidLength' => '"%value%" deve conter 13 caracteres.',
	'barcode_Ean13NotNumeric' => '"%value%" só pode conter números.',
	// Barcode_UpcA
	'barcode_UpcAInvalid' => '"%value%" não é um código de barras UPC-A válido',
	'barcode_UpcAInvalidLength' => '"%value%" deve conter 12 caracteres.',
	// Between
	'betweenNotBetween' => '"%value%" não está entre "%min%" e "%max%", inclusive.',
	'betweenNotBetweenStrict' => '"%value%" não está entre "%min%" e "%max%" ',
	// Captcha
	'missingValue' => 'Valor do captcha vazio.',
        'missingId' => 'Campo ID do captcha está vazio.',
        'badCaptcha' => 'Valor do captcha incorreto.',
	// Ccnum
	'ccnumLength' => '"%value%" deve conter enter 13 e 19 digitos.',
	'ccnumChecksum' => 'Algorítimo de Luhn (mod-10 checksum) falhou em "%value%".',
	// Date 	
	'dateFalseFormat' => '"%value%" não está no formato necessário. DD/MM/AAAA',
	'dateInvalidDate' => '"%value%" não é uma data válida.',
	'dateNotYYYY-MM-DD' => '"%value%" não é uma data no formato AAAA-MM-DD.',
	// DbAbstract
	'dbAbstractErrorNoRecordFound' => 'Não foram localizados registros que iguais a "%value%".',
	'dbAbstractErrorRecordFound' => 'Foi localizado valor igual a "%value%".',
	// Digits 	
	'digitsNotDigits' => '"%value%" não contém somente dígitos.',
	'digitsStringEmpty' => '"%value%" é um valor vazio.',
	// EmailAdress
	'emailAddressInvalidFormat' => '"%value%" não é um e-mail válido no formato nome@servidor.',
	'emailAddressInvalid' => '"%value%"  não é um e-mail válido no formato básico nome@servidor.',
	'emailAddressInvalidHostname' => '"%hostname%" não é um servidor válido para o e-mail "%value%".',
	'emailAddressInvalidMxRecord' => '"%hostname%" não aparenta ter um valor MX válido para o e-mail "%value%".',
	'emailAddressDotAtom' => '"%localPart%" não confere com formato dot-atom.',
	'emailAddressQuotedString' => '"%localPart%" não confere com o formato quoted-string.',
	'emailAddressInvalidLocalPart' => '"%localPart%" não é um nome válido para o e-mail "%value%".',
	'emailAddressLengthExceeded' => '"%value%" excede o tamanho limite.',
	// FileCount
	'fileCountTooMuch' => 'Muitos arquivos, máximo "%max%" são permitidos, mas "%count%" foram enviados.',
	'fileCountTooLess' => 'Poucos arquivos, mínimo "%min%" são esperados, mas "%count%" foram enviados.',
	// Float
	'floatNotFloat' => '""%value%"" não é um valor decimal válido.',
	'floatInvalid' => 'Tipo inválido.',
	// HostName
	'hostnameInvalid' => 'Tipo inválido, valor deve ser um texto.',
	'hostnameIpAddressNotAllowed' => '"%value%" aparenta ser um endereço IP, que não são permitidos.',
	'hostnameUnknownTld' => '"%value%" é um DNS desconhecido do modelo TLD.',
	'hostnameDashCharacter' => '"%value%" contém (-) em uma posição inválida.',
	'hostnameInvalidHostnameSchema' => '"%value%" não confere com o modelo TLD "%tld%"',
        'hostnameUndecipherableTld' => '"%value%" não tem um nome de servidor que pode ser extraído para o TLD.',
	'hostnameInvalidHostname' => '"%value%" não tem a estrutura esperada para o nome de um servidor.',
	'hostnameInvalidLocalName' => '"%value%" não é um nome de servidor local válido.',
	'hostnameLocalNameNotAllowed' => '"%value%" é um servidor local, mas não são permitidos servidores locais.',
	'hostnameCannotDecodePunycode' => '"%value%" não tem um código interpretável.',
	// InArray 	
	'inArrayNotInArray' => '""%value%"" não foi encontrado nos valores permitidos.',
);

Acredito que não seja a melhor forma, mas foi a forma que eu encontrei e funciona.

 

Atente para um detalhe importante. A classe de validação busca no Zend_Registry o valor 'Zend_Translate'. Então não adianta gravar como translate. Tem que ser como Zend_Translate.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse não é bem o caminho que quero seguir... gostei muito de trabalhar com o Poedit.

É bem prático.

O meu problema mesmo nem está sendo trabalhar de um jeito ou de outro, mas sim em iniciar o translator no bootstrap.... ele não registra nem a pau.

Já tentei com

Zend_Registry::set('Zend_Translate', $translate);
e nada feito também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, no Bootstrap coloquei assim:

 

$registry = Zend_Registry::get('$registry');
$translate = new Zend_Translate('gettext', '../traducao/pt-br/form.mo', 'pt');
$registry->set('Zend_Translate', $translate);

Ele encontra o arquivo form no path apontado.

 

O problema é quando chamo o $translate... traz ele vazio... parece que o registry não funciona.

 

Chamo na view com :

 

<?=$this->translate->_("Hello World."); ?>

Ai me traz o erro :

 

Fatal error: Call to a member function _() on a non-object in /home/site/application/default/views/scripts/index/index.phtml on line 2

A linha 2 do erro é a chamada da view.

 

Pelo tipo de erro, me faz acreditar que a única explicação seria o "$translate" estar errado.

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.