[PHP] Zend_Translate probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Nic0demus
  • Registratie: September 2007
  • Laatst online: 16-06-2016
Heren van het goede leven.

Ik maak een website met het Zend Framework en ik heb een probleempje met Zend_Translate waar ik niet uitkom. Het werkt als volgt. In mijn frontcontroller scan ik mijn directory met talen, een Zend_Translate object wordt aangemaakt. Dit werkt, wanneer ik daarna het object dump zitten nederlands en engels allebei in het object. Ook kan ik in mijn frontcontroller via setLocale() de language setten en dan werkt dit. Engels of nederlands, afhankelijk van wat ik daar neerzet wordt getoond.

code:
1
2
3
4
5
6
$translate = new Zend_Translate('gettext', '../application/languages/', '', array('scan' => Zend_Translate::LOCALE_DIRECTORY));
      
//Default language, comment this line to let the framework detect appropriate language itself.
$translate->setLocale($config->defaultLanguage);

Zend_Registry::set('Zend_Translate', $translate);


Het probleem ligt echter als ik tijdens het navigeren over de pagina op een vlaggetje druk. Ik heb het zo geregeld dat dan naar een LangController setAction wordt gestuurd met als parameter de taal van het vlaggetje. In de actie wilde ik de parameter uitlezen, de locale opnieuw setten en vervolgens redirecten naar de home pagina. Hier gaat het echter fout. Op de home pagina is alles gewoon weer de standaardtaal. Dit komt hoogstwaarschijnlijk omdat de in de frontcontroller de taal gewoon WEER wordt geset bij een nieuwe request. Mijn vraag is, hoe los ik dit op?

De set action werkt; als ik een exit plaats op et einde van de action en daarvoor het translate object dump staat deze perfect op de taal die ik heb geset.

Hier is de setAction:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public function setAction()
   {
      $this->_helper->viewRenderer->setNoRender();
      $newLang = $this->getRequest()->getParam('lang');
      $translate = Zend_Registry::get('Zend_Translate');
      $translate->setLocale($newLang);
      
      //print_r($translate);
      //exit();
      Zend_Registry::set('Zend_Translate', $translate);

      $this->_redirect('/');
   }


Alvast bedankt...

//edit: ook een Zend_Registry::isRegistered() in de frontcontroller werkt niet. het lijkt of er bij een nieuwe request die Zend_Translate value in de registry wordt weggehaald ofzo. Heel vreemd..

[ Voor 4% gewijzigd door Nic0demus op 04-07-2008 11:52 ]

Life would be so much easier if I had the source code...


Acties:
  • 0 Henk 'm!

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Lijkt me nogal logisch.. het registery wordt helemaal niet cross requests bewaard, daarvoor heb je sessies of cookies.

Ik zelf pak altijd eerst een language cookie, en als die niet geset is een default
(ik haat sites die je browsertaal pakken zonder te vragen.. vooral lekker als je in het buitenland zit achter een PC :S)

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Sinds een paar weken ook op Zend Framework gaan werken hier. Heb hier een oplossing voor gemaakt maar ik geef het je niet cadeau, sorry. Het idee is ieder geval als volgt:

- je past je default route aan dat je zoiets krijgt lang/controller/action
- check of lang gezet is
zoja -> gebruik die locale/translate
zoniet -> gebruik de locale die de browser aangeeft

heel simpel idee maar de kunst is om het netjes uit te werken :) Ik laad de functionaliteit in met plugins. Uiteraard moet je wel ff checken of de waardes die je terugkrijgt uit de url of van de browser wel hebt. Zoniet, dan pak je de taal die je als default in je config (bijv.) hebt opgegeven.

Als je voor snel en simpel wilt gaan is een cookie ook prima, maar vergeet niet elke keer die waarde te controleren :)

[ Voor 8% gewijzigd door Cartman! op 04-07-2008 12:25 ]


Acties:
  • 0 Henk 'm!

  • Nic0demus
  • Registratie: September 2007
  • Laatst online: 16-06-2016
Ah bedankt OxiMoron. Ik was hier niet van op de hoogte. Ik veronderstelde dat die session wel ingebakken zou zitten in het Zend object. Het is inmiddels gelukt.

Life would be so much easier if I had the source code...