<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum CakePHP.org.pl - i18n, l10n]]></title>
	<link rel="self" href="http://forum.cakephp.org.pl/feed/atom/forum/6/"/>
	<updated>2009-09-22T07:57:56Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.cakephp.org.pl/</id>
		<entry>
			<title type="html"><![CDATA[Jak wyłączyć internacjonalizacje i lokalizacje]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/107/jak-wylaczyc-internacjonalizacje-i-lokalizacje/new/posts/"/>
			<summary type="html"><![CDATA[<p>Jak wyłączyć, żeby CakePHP nie próbował automatycznie zmieniać języka?<br />Mam aplikacje korzystającą z i18n, ale dane są wprowadzone tylko w języku polskim.</p><p>Nie chce, żeby jakiś np. anglik wszedł na stronę i nic mu się nie pokazało. Chcę żeby on też widział polską wersję.</p><p>pozdr.</p>]]></summary>
			<author>
				<name><![CDATA[gaw]]></name>
				<uri>http://forum.cakephp.org.pl/user/95/</uri>
			</author>
			<updated>2009-09-22T07:57:56Z</updated>
			<id>http://forum.cakephp.org.pl/topic/107/jak-wylaczyc-internacjonalizacje-i-lokalizacje/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Google i lokalizacja]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/84/google-i-lokalizacja/new/posts/"/>
			<summary type="html"><![CDATA[<p>witam,</p><p>jak zachowuje się strona zrobiona w cake podczas indeksacji przez google?</p><br /><p>Właśnie zauważyłem, że zaindeksowało moją stronę jako &quot;pageTitle_homeStrona główna&quot;</p><p>Tak chyba nie powinno być?</p><p>pozdr.</p>]]></summary>
			<author>
				<name><![CDATA[m1chal]]></name>
				<uri>http://forum.cakephp.org.pl/user/95/</uri>
			</author>
			<updated>2009-09-19T23:41:26Z</updated>
			<id>http://forum.cakephp.org.pl/topic/84/google-i-lokalizacja/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[i18n i relacje z innymi modelami]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/105/i18n-i-relacje-z-innymi-modelami/new/posts/"/>
			<summary type="html"><![CDATA[<p>witam,</p><p>Mam dwa modele - Product oraz Science.<br />Product hasMany Science.</p><p>Zarówno model Product jak i model Science są tłumaczone przez i18n. Problem polega na tym, że gdy czytam dane produktu i mam ustawione recuresive np. na 1 lub więcej to w tablicy dostaję przetłumaczone dane Product z tabeli i18n, ale&nbsp; nieprzetlumaczone dane na sztywno wczytane z tabelki sciences.</p><p>tak wyglada controller<br /></p><div class="codebox"><pre><code>&lt;?php
class ProductsController extends AppController {

    var $name = &#039;Products&#039;;
    var $helpers = array(&#039;Html&#039;, &#039;Form&#039;,&#039;FlvPlayer&#039;,&#039;Text&#039;);
    //var $layout = &#039;products&#039;;
    
    
    
    function index() {
        $this-&gt;Product-&gt;recursive = 0;
        $this-&gt;set(&#039;products&#039;, $this-&gt;paginate());
        $this-&gt;layout = &#039;products&#039;;
    }

    function view($id = null) {
        if (!$id) {
            $this-&gt;Session-&gt;setFlash(__(&#039;Invalid Product.&#039;, true));
            $this-&gt;redirect(array(&#039;action&#039;=&gt;&#039;index&#039;));
        }
        $this-&gt;set(&#039;product&#039;, $this-&gt;Product-&gt;read(null, $id));
        $this-&gt;layout = &#039;products&#039;;
    }
    
    function science($id = null) {
        if (!$id) {
            $this-&gt;Session-&gt;setFlash(__(&#039;Invalid Product.&#039;, true));
            $this-&gt;redirect(array(&#039;action&#039;=&gt;&#039;index&#039;));
        }
        $this-&gt;Product-&gt;recuresive = 1;
        $this-&gt;set(&#039;product&#039;, $this-&gt;Product-&gt;read(null, $id));
        $this-&gt;layout = &#039;products&#039;;
    }</code></pre></div><p>dlaczego te dane nie są przetlumaczone? </p><p>Jeśli próbuję dostać się do danych bezpośrednio z controllera sciences tłumaczy jak należy.</p><p>pozdr.</p>]]></summary>
			<author>
				<name><![CDATA[gaw]]></name>
				<uri>http://forum.cakephp.org.pl/user/95/</uri>
			</author>
			<updated>2009-09-17T14:40:52Z</updated>
			<id>http://forum.cakephp.org.pl/topic/105/i18n-i-relacje-z-innymi-modelami/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Inna beczka]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/94/inna-beczka/new/posts/"/>
			<summary type="html"><![CDATA[<p>Cześć, pozwolę sobie na pytanie z innej beczki.</p><p>Mam do poprawienia projekt nie robiony w Cake lecz w czystym PHP (&#039;lekko obiektowy&#039;). Musze mu dorobić wersje jezykowe a troche tego moze byc ;/</p><p>Pytanie jak sie do tego w miare rozsadnie zabrac (bez pisania mi tu ze od nowa napisac <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /> ):<br />1) utworzyc pliki z tabelami gdzie kazdy wiersz tabeli to osobny tekst a nastepnie zaczytywac na poczatku caly plik z tekstem (troche mam wrazenie ze mozolne)</p><p>2) wykozystac do tego w jakis sposob baze danych (wprowadzanie tekstow bedzie trwalo lata i wyciaganie tez troche powolne)</p><p>3) rozwiazanie podobne do pierwszego: jakas klasa i wywolywac teksty</p><p>4) jakies inne propozycje na szybko?</p><p>PS: troche bedzie czas gonil a do tego jeszcze to trzeba bedzie tlumaczyc <img src="http://forum.cakephp.org.pl/img/smilies/hmm.png" width="15" height="15" alt="hmm" /></p><p>Dzieki z gory <img src="http://forum.cakephp.org.pl/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></summary>
			<author>
				<name><![CDATA[duke_piotr]]></name>
				<uri>http://forum.cakephp.org.pl/user/31/</uri>
			</author>
			<updated>2009-08-14T06:31:59Z</updated>
			<id>http://forum.cakephp.org.pl/topic/94/inna-beczka/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Przetwarzanie danych]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/88/przetwarzanie-danych/new/posts/"/>
			<summary type="html"><![CDATA[<p>witam,<br />korzystam z i18n do tlumaczenia zawartosci bazy.<br />Problem pojawił się przy edycji bo nie wiem jak to mogę zedytować.<br />Do i18n przesyłam name, description oraz url - i te wartosc sa zapisywane.</p><p>Jednak gdy chce odczytać dane to nie mam tego description oraz url (oczywiście w bazie sa)<br />Robię wg. tego przykładu:<br /><a href="http://book.cakephp.org/pl/view/797/Retrieve-all-translation-records-for-a-field">http://book.cakephp.org/pl/view/797/Ret &#133; or-a-field</a></p><div class="codebox"><pre><code>$this-&gt;Product-&gt;bindTranslation(array (&#039;name&#039; =&gt; &#039;ProductsDescriptions&#039;));</code></pre></div><p>i to co zwraca mi $this-&gt;data wyglada tak</p><div class="codebox"><pre><code>[Product] =&gt; Array
                (
                    [id] =&gt; 1
                    [image] =&gt; jkh
                    [date] =&gt; 2009-07-29
                    [locale] =&gt; pol
                    [description] =&gt; opis po polsku
                    [url] =&gt; urllllll
                    [name] =&gt; nazwa produktu po polsku
                )

             

            [ProductsDescriptions] =&gt; Array
                (
                    [0] =&gt; Array
                        (
                            [id] =&gt; 1
                            [locale] =&gt; pol
                            [model] =&gt; Product
                            [foreign_key] =&gt; 1
                            [field] =&gt; name
                            [content] =&gt; nazwa produktu po polsku
                        )

                    [1] =&gt; Array
                        (
                            [id] =&gt; 4
                            [locale] =&gt; eng
                            [model] =&gt; Product
                            [foreign_key] =&gt; 1
                            [field] =&gt; name
                            [content] =&gt; nazwa po angielsku
                        )

                    [2] =&gt; Array
                        (
                            [id] =&gt; 7
                            [locale] =&gt; rus
                            [model] =&gt; Product
                            [foreign_key] =&gt; 1
                            [field] =&gt; name
                            [content] =&gt; nazwa po rusku
                        )

                )</code></pre></div><p>Jak mam wyciągnąć description i opis skoro 3 razy by byla wartosc field oraz content?</p><p>Jeśli ktoś ma jakiś pomysł - proszę o odpowiedź.</p><p>pozdr.</p>]]></summary>
			<author>
				<name><![CDATA[gaw]]></name>
				<uri>http://forum.cakephp.org.pl/user/95/</uri>
			</author>
			<updated>2009-08-01T16:43:53Z</updated>
			<id>http://forum.cakephp.org.pl/topic/88/przetwarzanie-danych/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Zapis polskich znaków do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/80/zapis-polskich-znakow-do-bazy/new/posts/"/>
			<summary type="html"><![CDATA[<p>Chodzi o zapis imion i nazwisk do bazy danych MySQL. Wszystko jest oparte o kodowanie UTF-8.<br />Jednakże Cake nie zapisuje do bazy danych niczego co posiada polski znak.<br /></p><div class="codebox"><pre><code>var $validate = array(
        &#039;imie&#039; =&gt; array(
            //&#039;rule&#039; =&gt; array(&#039;custom&#039;, &#039;/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,15}$/i&#039;),
            &#039;rule&#039; =&gt; array(&#039;minLength&#039;, &#039;3&#039;),
            &#039;required&#039; =&gt; &#039;true&#039;,
            &#039;allowEmpty&#039; =&gt; &#039;false&#039;,
            &#039;message&#039; =&gt; &#039;Imie musi zawierać tylko litery i od 3 do 15 znaków!&#039;
        ), itd</code></pre></div><p>Powyższe rozwiązanie zapisze wszystko do pierwszej polskiej litery - resztę wycina.<br />&#039;rule&#039; =&gt; array(&#039;custom&#039;, &#039;/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,15}$/i&#039;), - nie działa - nie przechodzi walidacji...</p><p>Czy da się to zrobić zapis tych znaków? Nie wyobrażałem nawet sobie że z taką pierdółką są takie problemy.</p>]]></summary>
			<author>
				<name><![CDATA[Cookie]]></name>
				<uri>http://forum.cakephp.org.pl/user/214/</uri>
			</author>
			<updated>2009-06-27T17:50:32Z</updated>
			<id>http://forum.cakephp.org.pl/topic/80/zapis-polskich-znakow-do-bazy/new/posts/</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[i18n behavior]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/topic/26/i18n-behavior/new/posts/"/>
			<summary type="html"><![CDATA[<p>Obecnie kod wygląda tak<br /></p><div class="codebox"><pre><code>&lt;?php
class I18nBehavior extends ModelBehavior{

    public $fields = array();

    public $defaultLanguage = null;

    public function setup(&amp;$model, $config = array()){
        $this-&gt;defaultLanguage = Configure::read(&#039;App.defaultLanguage&#039;);
        if( !$this-&gt;defaultLanguage ){
            trigger_error(&quot;Add to core.php line: Configure::write(&#039;App.defaultLanguage&#039;, &#039;pol&#039;);&quot;);
        }
        if( !empty($config[&#039;fields&#039;]) ){
            $this-&gt;fields[$model-&gt;alias] = $config[&#039;fields&#039;];
        }
    }

    public function beforeFind(&amp;$model, $query){
        $locale = $this-&gt;getLocale($model);
        $recursive = empty($query[&#039;recursive&#039;]) ? 0 : $query[&#039;recursive&#039;];
        $this-&gt;_localizeScheme($model, $locale, $recursive);
        $this-&gt;localizeQuery($model, $query, $locale, $recursive);
        return $query;
    }

    protected function localize(&amp;$array, $alias, $locale){
        foreach($this-&gt;fields[$alias] as $field){
            if( !is_array($array) ) return false;
            foreach($array as $index =&gt; $value){
                $indexReplace = false;
                if( (string)$index == $alias.&#039;.&#039;.$field ){
                    $indexReplace = true;
                    $replace = $alias.&#039;.&#039;.$field.&#039;_&#039;.$locale;
                }
                if( (string)$index == $field ){
                    $indexReplace = true;
                    $replace = $field.&#039;_&#039;.$locale;
                }
                if( $indexReplace ){
                    $array[$replace] = $value;
                    unset($array[$index]);
                    $index = $replace;
                }
                if( is_array($value) ){
                    $this-&gt;localize($array[$index], $alias, $locale);
                }else{
                    if(substr($value,-(1+strlen($locale))) !== &#039;_&#039;.$locale){
                        $array[$index] = str_replace($field, $field.&#039;_&#039;.$locale, $array[$index]);
                    }
                }
            }
        }
    }

    protected function localizeQuery(&amp;$model, &amp;$query, $locale, $recusrsive){
        if( isset($model-&gt;Behaviors-&gt;I18n) &amp;&amp; isset($model-&gt;Behaviors-&gt;I18n-&gt;fields[$model-&gt;alias]) ){
            foreach(array(&#039;fields&#039;, &#039;conditions&#039;, &#039;order&#039;, &#039;contain&#039;) as $part){
                $this-&gt;localize($query[$part], $model-&gt;alias, $locale);
            }
        }
    }

    protected function getLocale(&amp;$model) {
        if(!isset($model-&gt;locale) || is_null($model-&gt;locale)) {
            if(!ClassRegistry::isKeySet(&#039;I18n&#039;)) {
                App::Import(&#039;Core&#039;, &#039;i18n&#039;);
            }
            $I18n =&amp; I18n::getInstance();
            $model-&gt;locale = $I18n-&gt;l10n-&gt;locale;
        }
        return $model-&gt;locale;
    }

}
?&gt;</code></pre></div><p>Teraz tak, powiedzmy ze mam dwa modele : Offer i RoomOFfer. Offer HABTM RoomOffer HABTM Offer.<br />Tak więc tabele przykladowo wyglądają tak<br />Offer<br />- id<br />- object_description_pol<br />- object_description_eng</p><p>RoomFeatore<br />- id<br />- name_pol<br />- name_eng</p><p>Przykladowa akcja w kontrolerze wygląda tak:<br /></p><div class="codebox"><pre><code>public function test(){
    $this-&gt;Offer-&gt;find(&#039;all&#039;, array(
        &#039;order&#039; =&gt; array(&#039;Offer.object_description&#039; =&gt; &#039;DESC&#039;),
        &#039;fields&#039; =&gt; array(&#039;object_description&#039;),
        &#039;contain&#039; =&gt; array(&#039;RoomFeature&#039; =&gt; array(&#039;fields&#039; =&gt; &#039;name&#039;))
    ));

}</code></pre></div><p>Konfiguracja modeli :<br />Offer<br /></p><div class="codebox"><pre><code>public $actsAs = array(&#039;I18n&#039; =&gt; array(&#039;fields&#039; =&gt; array(&#039;object_description&#039;, &#039;short_object_description&#039;)));</code></pre></div><p>RoomFeature<br /></p><div class="codebox"><pre><code>public $actsAs = array(&#039;I18n&#039; =&gt; array(&#039;fields&#039; =&gt; array(&#039;name&#039;)));</code></pre></div><p>Problem jest taki, że Behavior prawidłowo zmienia nazwy wszystkich zdefiniowanych kolumn dla modelu Offer ale tak jakby nie działała dla modelu RoomFeature, tzn dodastaje błąd że kolumna name w tabeli rooms_features nie istnieje ( co się zgadza ).<br />Wydaje mi się że muszę w metodzie localizeQuery dodać coś w tym stylu<br /></p><div class="codebox"><pre><code>if (isset($model-&gt;hasAndBelongsToMany)) {
    foreach ($model-&gt;hasAndBelongsToMany as $name =&gt; &amp;$relation) {
        if (isset($model-&gt;$name-&gt;Behaviors-&gt;I18n)) {
            // NIE WIEM CO TUTAJ WSTAWIĆ
        }
    }
}</code></pre></div><p>Ma ktoś jakiś pomysł jak &#039;odpalić&#039; ten behavior dla wszystkich modeli które zdefiniowane są w &#039;query&#039; ?</p>]]></summary>
			<author>
				<name><![CDATA[nookie]]></name>
				<uri>http://forum.cakephp.org.pl/user/7/</uri>
			</author>
			<updated>2008-12-09T12:07:04Z</updated>
			<id>http://forum.cakephp.org.pl/topic/26/i18n-behavior/new/posts/</id>
		</entry>
</feed>
