Prekladaci makro {_ …} a helpery
- wdolek
- Člen | 331
Zcela opatrne bych se zeptal na soucasnou implementaci kolem makra
{_ ...}
– tedy neceho, co vola nejake prekladatko. Uz nejakou
dobu koukam, jak se mi na jednom webu nepreklada retezec. Celou dobu jsem to
povazoval za chybu gettextu a vubec to neresil. Byl jsem ale donucen se tim
zaobirat, a zjistil jsem prekvapivou vec:
{_"Ahoj svete"|magic}
vyprodukovalo:
echo $template->translate(magic("Ahoj svete"));
misto pozadovaneho:
echo magic($template->translate("Ahoj svete"));
Tedy nejprve se na retezec aplikoval helper, a vysledek se poslal do
translatoru. Takto by to s makrem pro vypis a helperem melo fungovat obecne,
ale v pripade {_ ...}
toto makro povazuji za identicke k
{ }
s tim rozdilem, ze se retezec prelozi. Logicky je to ale pro
mne to same (vypis hodnoty). Proto me toto chovani prekvapilo.
Workaround byl napsat do sablony:
{$template->translate("Ahoj Svete")|magic}
Takove reseni ale zapricini to, ze az budu priste zjistovat vyskyty
_( )
, tak zrovna v tomto pripade silne „utru“.
Zajimalo by mne tedy, jak si stoji Nette 2.0 v tomto pripade :) Nemam ted zrovna silu stavajici web prepisovat do dvojky.
A abych byl konkretni a bylo zcela jasne, o co mi jde: mel jsem retezec,
ktery obsahoval znacky rikajici, ze jde o odkaz. Napriklad text
„Toto je [odkaz]:[https://www.nette.org]
“. Helper
link
pak mel na starost z retezce udelat
„<a href="...">odkaz</a>
“.
V gettext je definovano, ze:
msgid "Toto je [odkaz]:[https://www.nette.org]"
msgstr "This is [link]:[https://www.nette.org]"
:) do gettextu ale byl poslan jiz retezec, ktery prolezl helperem
link
– tedy
„Toto je <a href="...">odkaz</a>
“ ke kteremu
samozrejme nebyl definovan msgid
.
Pouziti:
{_"Toto je [odkaz]:[https://www.nette.org]"|link}
Editoval wdolek (22. 11. 2011 19:52)
- voda
- Člen | 561
Nevím v čem je rozdíl, ale mně se to chová v Nette 0.9 i 2.0 správně. V obou případech se to přeloží na
$template->magic($template->translate("Ahoj svete"))
OT: nebylo by lepší mít v gettextu jen první část textu a odkaz jako parametr helperu?
{_"Toto je [odkaz]"|link:'https://www.nette.org'}
- wdolek
- Člen | 331
voda napsal(a):
Verze Nette, jaký používáš překladač, jak ho nastavuješ, nějaká vlastní makra, …?
Take nemam kristalovou kouli po ruce – do libs
jsem si
nenahral zadne readme.txt
ani version.txt
a
v hlavickach souboru je rok 2008/2009… ale hle! Nasel jsem:
final class Framework {
...
const VERSION = '0.9';
const REVISION = 'c82239a released on 2009-08-17';
const PACKAGE = 'PHP 5.2';
...
}
Horsi je to ale s Translatorem – ten nema v sobe lautr zadnou informaci. Ale dost mozna je to nejaky pra-predek tohoto: https://componette.org/search/?… …
Nemyslim si ale, ze je to zalezitost Translatoru jako takoveho – ten ma
jen metodu translate
a par vecicek kolem. Registrace translatoru
v sablone take neni nic extra sloziteho. To podstatne je ve zpracovani sablony
frameworkem.
Web uz si tak nejak zahniva tretim rokem – je dost mozne, ze jsem nekde necou vystoural a nepoznacil si co sem presne udelal :) kdo vi. Chtel jsem se jen ujistit, ze se soucasne Nette chova ocekavatelne – coz bylo potvrzeno.