ZF – Zend_Translate

Ainda continuando nos meus estudos de Zend Framework, aprendi a usar o Zend_Translate, ótima funcionalidade para gerenciar traduções das aplicações em Zend Framework.
Vou falar um pouco agora do que aprendi:

Zend Framework

Zend Framework

Primeiro a gente tem que colocar as traduções em algum lugar, existem várias formas de fazer isso, a mais simples que encontrei foi com CSV e pastas, fica mais organizado e mais fácil de colocar novos conteúdos.

Criei as seguintes pastas:
+ application
+ lang
+ pt_BR
– arquivo1.csv
– arquivo2.csv
– en
– … (quantas pastas de linguagem vc quiser)

Perceba que as traduções estão separadas por pastas e não se preocupe com os arquivos CSV que estão dentro delas, pois o ZF lerá todos. Isso facilita para separar as traduções por módulos, por exemplo, cada arquivo um módulo diferente.
Todas as linguagens não precisam ter os mesmos arquivos, porém só será traduzido as “tags” (vou chamar assim pra facilitar) que existir dentro deles.

Coloquei no application.ini uma validação para saber se existe realmente a linguagem selecionada, a cada linguagem nova é só colocar mais uma :P.
application/configs/application.ini

[general]
langs = 'en|pt_BR'

application/bootstrap.php

		$tr = new Zend_Translate('csv', ROOT_DIR.'/application/lang', null, array('scan' => Zend_Translate::LOCALE_DIRECTORY));

		try {
			$locale = new Zend_Locale('browser'); // Tenta pegar a linguagem do Browser
		} catch (Zend_Locale_Exception $e) {
			$locale = new Zend_Locale('en');
		}

		// valida a linguagem.
		$langs = explode('|', $config->general->langs);
		if (!in_array($locale, $langs)) {
			$locale = 'en';
		}

		$tr->setLocale($locale);	// Altera para a linguagem selecionada

		Zend_Registry::set('lang', $tr);

Para chamar a tradução vc deve fazer o seguinte na view:

$lang = Zend_Registry::get('lang'); // Variavel que foi registrada no Bootstrap.
echo $this->lang->translate('accept'); // 'accept' é uma linha do csv que deve ficar no formato accept;Aceitar por exemplo.

Facebook

About JLNeto