| Autor | Správa |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Ut 14.06.11 10:19 |   |
cawte chcem sa spytat ludi ktory sa mozno vyznaju lepsie v php ako ja a maju nejaku skusenost s codeigniter...serie ma ze robim na jednom velkom webe a pouzivanie jazyka cez uz vytvorenu funkciu je podla mna totalne neprehladne....ak mam prelozit stovky slov a mam 5 priecinkov v language s 5 jazykmi....tak sa v tom totalne stracam co uz prelozene mam a co nie...preto som si spravil nieco taketo:
do application/config/konstants.php som doplnil toto:
| kód: |
$lang = array();
include_once('lang.php');
$GLOBALS['lang'] = $lang;
|
dalej v application/config/lang.php mam subor s prekladmi (nemiesto 5 mam vsetko v jednom)
| kód: |
$lang["preklad_1"] = array("sk"=>"preklad 1 sk", "en"=>"preklad 1 en", "pl"=>"preklad 1 pl");
$lang["preklad_2"] = array("sk"=>"preklad 2 sk", "en"=>"preklad 2 en", "pl"=>"preklad 2 pl");
|
dalej mam v system/plugins/functions.php funkciu
| kód: |
function language($index){
$CI =& get_instance();
$return = NULL;
if(array_key_exists($index, $GLOBALS['lang'])){
$return = $GLOBALS['lang'][$index][$CI->lang->lang()];
}
return $return;
}
|
$CI->lang->lang() = vrati aktualny jazyk ("sk", "en", "pl")
takze namiesto lang() ktora uz bola napisana pouzivam fciu language() ...
a otazka: Myslite ze to system spomaly? alebo to je nejak zle napisane zla funcnost alebo nejake vyhrady k tomu? |
| |
  |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Ut 14.06.11 12:21 |   |
no je zbytocne nacitavat vsetky jazyky, ak itak pouzijes iba jeden. pokial to nie je velky objem dat, tak to nejaku velku vychylku nespravi.
ja to mam spravene podobne, s tym, ze jazyky mam rozdelene do priecinkov napriklad
| kód: | languages/sk/basic.php
languages/sk/blog.php
languages/en/basic.php
languages/en/blog.php |
pricom kazdy obsahuje pole napr (pre blog.php)
| kód: |
#sk/blog.php
array(
'pocet_clankov' => 'tato kategoria obsahuje %d clankov'
)
#en/blog.php
array(
'pocet_clankov' => 'there are %d articles in this category'
) |
(pre basic.php)
| kód: | array(
'uvitanie' => 'Vitajte na mojej stranke'
) |
a na zaciatku si loadujem subory, ktore budem pouzivat
automaticky loadujem basic.php, kde su retazce pouzivane na celej stranke bez ohladu na controller
a dalsie v __construct() daneho controlleru (napriklad controller pre blog)
toto mi nacita subor blog.php pre dany jazyk, takze funcia spravi nieco taketo
| kód: | | $lang = require 'languages/sk/blog.php'; //alebo z priecinku EN, uz zalezi od zvoleneho jazyku, tak ako to mas spravene ty) |
vo viewoch potom volam napr
| kód: | | lang::get('pocet_clankov', 5); //vrati "tato kategoria obsahuje 5 clankov" |
popripadne textovou verziou (toto pouzivam ak nevkladam do jazykoveho retazca dalsie parametre, ako v hornom prikalde som tam vlozil cislo 5)
vyhoda je, ze nemusim nacitavat zbytocne texty, ktore pouzivat nebudem a je to prehladnejsie, teda si mozes subory rozdelit podla vyuzitia (ako som uviedol priklad basic.php a blog.php). naco nacitavat jazyky pre blog, ked bol nie je zobrazeny pri "renderovani" stranky
a pritom metodu lang::load() mozes pouzit kolko chces, takze texty pre blog si mozes rozdelit aj do viacerych suborov |
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
TommyHot
 Užívateľ
 Založený: 20.10.2008 Príspevky: 2528 Bydlisko: Bratislava Vek: 23
 | Zaslal: Ut 14.06.11 12:45 |   |
Tiez to mam rozdelene do zvlast suborov a 1 hlavny volam vzdy a ten dalsi podla controlleru..
Mam potom vytvoreny MY_Controller (extends CI_Controller), v ktorom sa deju vsetky dolezite veci na stranke ako pridelenie hlavnych CSS a JS do viewu (cez moju vlastnu kniznicu external), nacitanie niektorych kniznic a modelov v zavislosti od URL (teda ci sa nachadzame v administracii, alebo vo frontende), nastavenie public vlastnosti, ktore sa potom mozu pouzivat kdekolvek v systeme a kopu dalsich veci a samozrejme aj jazyky:
| kód: | if( !defined('NO_LANG') )
{
$this->lang->load('default', $language);
$this->lang->load('admin_' . $this->router->class, $language); // language fajly pre administracne rozhranie
} |
A potom v konkretnom controllery nededim objekty a vlastnosti CI_Controller, ale MY_Controller.
Btw DeeJay3 to tvoje riesenie je urcite pomalsie, kedze mas definicie vsetkych prekladov v jednom poli, dalej si vytvaras globalne pole lang a metodu lang() "zaobalujes" este aj do metody language(). Nic v zlom, ale je to prasacina  |
_________________ Desktop: CPU: AMD Phenom II x4 BE 955 3.2@3.6GHz 1.35@1.30V CPU Cooler: Gelid Tranquillo rev.2 MB: Gigabyte 880GM-UD2H RAM: 2x2 GB Kingston 1333MHz GPU: MSI HD 6850 Cyclone 1GB PSU: Seasonic S12II-620 620W HDD: Seagate Barracuda 7200.12 1TB Case: CoolerMaster Elite 333 LCD: 22" LG flatron W2261VP Keyboard: Microsoft Comfort Curve 2000 Mouse: Microsoft Wireless Mobile Mouse 4000 OS: Windows 7 x64 Ultimate
Notebook: Macbook Pro 13" CPU: i5 2.4GHz RAM: 4 GB DDR3 1333MHz GPU: Intel HD Graphics 3000 384MB RAM HDD: 500GB 5400 rpm OS: Mac OS X Lion Notebook: Toshiba Satellite A210-19J CPU: AMD Turion 64 x2 2.0GHz RAM: 2 GB DDR2 667MHz GPU: ATI mobility radeon HD 2600 256MB RAM HDD: 200GB 5400 rpm Mouse: Microsoft Comfort Optical Mouse 3000 OS: Windows 7 x64 Ultimate
Phone: HTC Desire S Phone: iPhone 8GB | |
   |
 |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Ut 14.06.11 13:32 |   |
tak ako to spravit omg aby tie preklady boli pri sebe? nie v jednolivych suboroch...neskutocny bordel v tom je lebo je toho vela...a nieco sa prelozi hned nieco neskor a potom uz absolutne v tom prehlad nieje...a nemam preco to rozdelovat do priecinkov..admin mam od stranky osobitne...takze vsetko je dolezite...ako to inak spravit?..
| kód: | | $lang["slovo"] = array("sk"=>"Slovo", "en"=>"Word", "ua"=>"слово"); |
toto je best of ze vsetko spolu  |
| |
  |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Ut 14.06.11 13:38 |   |
best of? to je prehľadné, keď máš všetko pokope halabala a nevyzná sa v tom ani nik ?
ved si sprav
sk/subor.php
| kód: | array(
'slovo' => 'Slovo',
'ine_slovo' => 'iné slovo',
'cervene_auto' => 'červené auto'
) |
potom súbor skopíruješ na subor.php, preložíš čo potrebuješ a ostatné ti zostane slovensky, môžeš sa k tomu vrátiť neskôr
en/subor.php
| kód: | array(
'slovo' => 'word',
'ine_slovo' => 'iné slovo', #
'cervene_auto' => 'red car'
) |
popripadne si za nepreložené frázy daj mriežku a budeš aj bez študovania vedieť, čo nie je preložené (editor ti mriežku farebne odlíši od zvyšku) |
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Ut 14.06.11 15:00 |   |
lenze to neprekladam ja....chces povedat ze neje prehladnejsie ked to mas pri sebe ?...a vidis presne v poli ktore slovo je ako prelozene...podla mna to prehladnejsie je..ja to mam podobne spravene ako vy..nemam to rozdelene..ale chcel som to mat pokope lebo hladat jedno slovo v jednom subore potom v druhom...potom v tretom..stvrtom...piatom a opravit ked je nieco zle...tak ma ide drbnut...a tak si najdes riadok a hned tam mas vsetko |
| |
  |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Ut 14.06.11 15:12 |   |
nemas editor, kde mozes mat viac suborov otvorenych v taboch?
ved preto subor kopiruj ako som ti pisal, hladas jedno slovo, vidis ze v SK subore je na riadku 27, tak poreskocis na EN subor, hned vies ze mas pozret na riadok 27
urcite je to hentak prehladnejsie (ale zase sto ludi - sto chuti) a navyse nebudes zbytocne loadovat nepotrebne data. ak robis maly staticky webik, budes to cachovat a pod, tak ta to nemusi trapit. ale pri vacsom projekte to bude naskodu |
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Ut 14.06.11 16:41 |   |
tak okey ...maly webik to neni ..jasne ze mam netbeans pouzivam...tak to necham takto..aj ked nerad...ale predsa len neskor tam ma byt velka navstevnost a nemozem si dovolit stracat cas na loadovani stranky na tomto...a dikes
// pridané po 1 hodine 21 minútach od posledného príspevku
este by ma zaujimalo...ako si znacite niektore veci napriklad potrebujem mat v prekladoch
$lang['od']='Od';
$lang['od']='od';
aj jedno aj druhe...ako si to oznacujete vy?..vsimni velke pismeno
'od_1'
'od_2' ??? |
| |
  |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Ut 14.06.11 16:47 |   |
kapitalizaciu riesim "inline", funkciami.
ty volas napr
| kód: | | language('od'); #vrati "od" |
tak zavolas
| kód: | | ucwords(language('od')); #vrati "Od" |
podobny priklad si mohol vidiet, ked som napisal priklad suboru "blog", kde vkladam hodnotu do frazy. to preto, aby som nemusel rozdelovat jednu frazu na viac. |
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
TommyHot
 Užívateľ
 Založený: 20.10.2008 Príspevky: 2528 Bydlisko: Bratislava Vek: 23
 | Zaslal: Ut 14.06.11 16:47 |   |
dam malym.. a potom ak potrebujem velkym, ta niekde v kode
| kód: | | lcfirst($this->lang->line('od')); |
alebo naopak dam prve velke a potom ked treba tak zmenim cez ucfirst() na male...
//emer skor |
_________________ Desktop: CPU: AMD Phenom II x4 BE 955 3.2@3.6GHz 1.35@1.30V CPU Cooler: Gelid Tranquillo rev.2 MB: Gigabyte 880GM-UD2H RAM: 2x2 GB Kingston 1333MHz GPU: MSI HD 6850 Cyclone 1GB PSU: Seasonic S12II-620 620W HDD: Seagate Barracuda 7200.12 1TB Case: CoolerMaster Elite 333 LCD: 22" LG flatron W2261VP Keyboard: Microsoft Comfort Curve 2000 Mouse: Microsoft Wireless Mobile Mouse 4000 OS: Windows 7 x64 Ultimate
Notebook: Macbook Pro 13" CPU: i5 2.4GHz RAM: 4 GB DDR3 1333MHz GPU: Intel HD Graphics 3000 384MB RAM HDD: 500GB 5400 rpm OS: Mac OS X Lion Notebook: Toshiba Satellite A210-19J CPU: AMD Turion 64 x2 2.0GHz RAM: 2 GB DDR2 667MHz GPU: ATI mobility radeon HD 2600 256MB RAM HDD: 200GB 5400 rpm Mouse: Microsoft Comfort Optical Mouse 3000 OS: Windows 7 x64 Ultimate
Phone: HTC Desire S Phone: iPhone 8GB | |
   |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Ut 14.06.11 16:49 |   |
tommyhot, pomylil si si lcfirst s ucfirst, je to presne naopak ako pises...
btw, lepsie pouzit ucfirst ako to co som pisal ja "ucwords", ak sa vo fraze nachadza viac slov |
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Ut 14.06.11 16:50 |   |
to aby som nerozdeloval riesim rovnako...lenze funguju tie funkcie na pismena s diakritikou?...alebo na azbuku?...idem to skusit ale zda sa mi ze som s tym uz problem mal tak nvm teraz |
| |
  |
 |
TommyHot
 Užívateľ
 Založený: 20.10.2008 Príspevky: 2528 Bydlisko: Bratislava Vek: 23
 | Zaslal: Ut 14.06.11 16:59 |   |
| emer napísal: | tommyhot, pomylil si si lcfirst s ucfirst, je to presne naopak ako pises...
btw, lepsie pouzit ucfirst ako to co som pisal ja "ucwords", ak sa vo fraze nachadza viac slov |
ano ano mas pravdu, napisal som to opacne... |
_________________ Desktop: CPU: AMD Phenom II x4 BE 955 3.2@3.6GHz 1.35@1.30V CPU Cooler: Gelid Tranquillo rev.2 MB: Gigabyte 880GM-UD2H RAM: 2x2 GB Kingston 1333MHz GPU: MSI HD 6850 Cyclone 1GB PSU: Seasonic S12II-620 620W HDD: Seagate Barracuda 7200.12 1TB Case: CoolerMaster Elite 333 LCD: 22" LG flatron W2261VP Keyboard: Microsoft Comfort Curve 2000 Mouse: Microsoft Wireless Mobile Mouse 4000 OS: Windows 7 x64 Ultimate
Notebook: Macbook Pro 13" CPU: i5 2.4GHz RAM: 4 GB DDR3 1333MHz GPU: Intel HD Graphics 3000 384MB RAM HDD: 500GB 5400 rpm OS: Mac OS X Lion Notebook: Toshiba Satellite A210-19J CPU: AMD Turion 64 x2 2.0GHz RAM: 2 GB DDR2 667MHz GPU: ATI mobility radeon HD 2600 256MB RAM HDD: 200GB 5400 rpm Mouse: Microsoft Comfort Optical Mouse 3000 OS: Windows 7 x64 Ultimate
Phone: HTC Desire S Phone: iPhone 8GB | |
   |
 |
DeeJay3
 Užívateľ
 Založený: 28.02.2009 Príspevky: 196
 | Zaslal: Pi 17.06.11 15:40 |   |
no teraz som prisiel na to ked som chcel pouzit lcfirst ze taku fciu nepozna...ucfirst je pre 4,5 php....lcfirst je pre 5.3 a viac...a na servery je 5.2.17..  |
| |
  |
 |
emer
 Užívateľ
 Založený: 26.12.2006 Príspevky: 3683 Bydlisko: Nitra Vek: 18
 | Zaslal: Pi 17.06.11 22:15 |   |
je problem si taku funkciu vytvorit?
// pridané po 6 hodinách 12 minútach od posledného príspevku
vratil som sa dnes/vcera k CI, trosku pobadat. hend som riesil aj jazyky. vyriesil som si to tak, ze pouzivam klasicku strukturu a vstavanu Language kniznicu, s touto funkciou (namiesto original helperu)
| kód: | function lang($key){
$args = is_array($key) ? $key : func_get_args();
$CI = &get_instance();
$S = $CI->lang->line($args[0]);
if(empty($S)) $S = '{lang_'.$args[0].'}'; //pri neexistujucej polozke vypise {lang_key}, ak chces prazdny string, zakomentuj riadok (alebo zmaz)
if(count($args) == 0) return NULL;
if(count($args) == 1) return $S;
unset($args[0]);
return vsprintf($S, $args);
} |
pouzitie:
http://codeigniter.com/user_guide/libraries/language.html
+
| kód: | views/welcome.php:
<h2><?=lang('welcome', 'Mirec', 5)?></h2>
languages/slovak/general.php:
$lang['welcome'] = '%s, vitaj na stranke po %d dnoch';
|
vrati
| kód: | | <h2>Mirec, vitaj na stranke po 5 dnoch</h2> |
|
_________________ Pocity popi*i, keď víš že všetko hrá jak má, vychádza to všetko pekne, tak jak má, hovorim si ná ne, musíš vedeť plánovať | |
    |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|