Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ZendFramework i Multilanguage sajtovi

[es] :: PHP :: ZendFramework i Multilanguage sajtovi

[ Pregleda: 1200 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon ZendFramework i Multilanguage sajtovi20.06.2010. u 22:21 - pre 168 meseci
Pozdrav svima.
Prije par dana sam prešao na rad sa ZendFrameworkom, i naišao sam na jedan problem.
Naime, svi sajtovi na kojima radim su multilanguage sajtovi, i sada oni treba da se rewrite-uju da rade sa ZF-om.
Elem, long story short, morao sam da smislim način kako da dodam tu multi-language opciju.
Trebalo mi je dosta vremena da smislim rešenje, pa sam odlučio sa vama da ga podjelim, u slučaju da još neko od ZF newbies-a ima sličan problem :)
Sajt ima putanju npr:
http://sajt.com/news/index
A treba da ima:
http://sajt.com/jezik/news/index

I u zavisnosti od toga jezik treba da učita odgovarajući language fajl.

1. DIO - Rute
Ja sam rutu definisao kroz PHP (bootstrap file).
Code:

///////////////////////////////////////////////
// DIO ZA MULTILANG
///////////////////////////////////////////////
$router = $front->getRouter(); # MORA DA SE POZOVE ROUTER!
$route = new Zend_Controller_Router_Route(
            ':language/:controller/:action/*',
                array(
                    'language'   => 'lat',
                    'module'     => 'default',
                    'controller' => 'index',
                    'action'     => 'index'
                )
            );
$router->addRoute('lang_default', $route);
$front->registerPlugin(new Jezici_Plugin_Language());


2. DIO - Postavljanje language fajla
Language fajlove stavljate u:
application/languages/ime_jezika.php
Npr, ako je gore pomenuti parametar (jezik) postavljen na eng, ovaj fajl treba da se zove eng.php.
Format fajla:
Code:

<?php
# Definisi array
$lang = array();
# Definisi locale
define("LANG_LOCALE","sr_SR");

# Pocetak jezickog fajla
$lang["naslov_sajta"] = "ZF Pocetak";


3. DIO - Plugin
Plugin je gdje se vecina toga odvija, oko podesavanja jezika itd.
Elem, ideju (i dio koda) sam uzeo sa http://www.gsdesign.ro/blog/us...-framework-language-component/ , međutim taj kod mi i nije baš odgovarao, i baš sam se namučio dok sam shvatio kako šta ide
(opet, s' obzirom da sam tek ozbiljno počeo ZF-om da se bavim - i to posle xy neuspjelih pokušaja).
Plugin se stavlja u library/Jezici/Plugin/Language.php
Code:

<?php
/**
 * Ovaj plugin omogucava dinamicko mjenjanje jezika
 * @author Blazeme < [email protected] >
 * @copyright 2010 BildStudio d.o.o.
 * @version 1.0.0 (18. Jun 2010)
 * @see http://www.gsdesign.ro/blog/us...-framework-language-component/ (link orginalnog plugina)
 */
class Jezici_Plugin_Language extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        # Podesi standardni jezik / locale
        $standardni_jezik = "lat";
        $standardni_locale = "sr_SR";
         
        # Podesi Local settings
        $locale = new Zend_Locale();
        $parametri = $this->getRequest()->getParams(); # Preuzmi parametre sa rute
        
        $jezik = $parametri["language"];
        
        # Podesi putanje:
        # Predefinisana putanja gdje se jezici nalaze
        $putanja = getcwd().'/application/languages/'.$jezik.'.php';
        # Ovaj jezik se ukljucuje ako odabrani ne postoji.
        $standardni_jezik_putanja = getcwd().'/application/languages/'.$standardni_jezik.'.php'; 
        
        //////////////////////////////////////////////////////////////
        // Provjere
        /////////////////////////////////////////////////////////////
        # Provjeri postojanje fajla
        # I ako postoji definisi jezicku promjenjivu koju mozemo da koristimo u programu, ako negdje zatreba
        if(file_exists($putanja)){
            include $putanja;
            $trenutni_jezik = $jezik;
        }
        
        # Fajl ne postoji, prelazimo na standardni jezik
        else {
            
            # Vidi da li standardni jezik postoji (failsave) - ako je programer nesta pogrijesio
            if(file_exists($standardni_jezik)){
                # Ukljuci ako postoji
                include $standardni_jezik_putanja;
                $trenutni_jezik = $standardni_jezik;
            }
            
            # Ne postoje ni standardni ni odabrani jezik.
            # Prikazi gresku 404
            else{
                throw new Zend_Controller_Action_Exception('Jezik ne postoji!',404);
            }
        }
        
        # Jos jedna stvar - provjeri LANG_LOCALE
        defined("LANG_LOCALE") || define("LANG_LOCALE",$standardni_locale);
        
        
        # Kraj provjera
        //////////////////////////////////////////////////////////////
        // Provjere KRAJ
        /////////////////////////////////////////////////////////////
        
        # Ispodesavaj promjenjive / registry / prevodilac

                 # Podesi jezicku promjenjivu - $lang (array) i postavi Array tip adaptera za prevodjenje.
                 #Podesi LOCALE kao onaj sto je definisan u LANG file-u
            $translate = new Zend_Translate('array', $lang, LANG_LOCALE );
            Zend_Form::setDefaultTranslator($translate); # Postavi $translate kao standardni prevodilac
            Zend_Registry::set('Zend_Locale', $locale); # Podesi Zend_Locale za globalnu upotrebu
            Zend_Registry::set('Zend_Translate', $translate);  # Podesi prevodilac za globalnu upotrebu
                  # Da uvijek mozemo da vidimo koji je trenutni jezik, mada ovo i nije potrebno
            Zend_Registry::set('jezik', $trenutni_jezik); 
    }
}



Eto to bi bilo to, otprilike, ja sam radio još neke izmjene na frameworku, al bi u svakom slučaju trebalo da i kod vas radi.

Inače, bih bih zahvalan ako imate nekih predloga i to, post sam malo na brzinu napisao, al u svakom slučaju se nadam da će nekome koristiti.

P.S. Ne bih znao jel ok po pravilniku što ovde iskucah ovako neko gotovo rešenje / kod, ako modovi smatraju da nije neka obrišu :)

[Ovu poruku je menjao Goran Rakić dana 20.06.2010. u 23:34 GMT+1]
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: ZendFramework i Multilanguage sajtovi20.06.2010. u 22:42 - pre 168 meseci
Hajde dodaj ovaj kod kao prilog uz poruku, ružno ovako izgleda. Ostavi primer upotrebe, a dužinu linije ograniči na 80-100 karaktera.

Drugo, tvoje rešenje kako koristi lang datoteke ne podržava oblike za množinu (1 datoteka, 2 datoteke,...) što nekima može da bude problem. GNU gettext to odlično rešava. Korišćenje gettext biblioteke olakšava i izvlačenje poruka iz koda (izrada novog šablona za prevođenje) i kod lepše izgleda jer umesto echo $lang["naslov_sajta"] imaš echo _("ZF Početak");.

PO datoteke koje gettext koristi omogućavaju upotrebu prevodilačke memorije (prenost postojećih prevoda u novi šablon, automatski prevod sličnih već prevedenih poruka). Postoji veliki broj alata za rad sa PO datotekama kao i alata za mašinsko prevođenje. Kada gettext dodatak nije prisutan na serveru tu je implementacija u čistom PHP-u, autor je Danilo Šegan.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: PHP :: ZendFramework i Multilanguage sajtovi

[ Pregleda: 1200 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.