Hazi feladat

york képe

Itt a hetvege igy feladok egy kis hazit.

Szerintetek miert a hibas az alabbi sor:

if ($transition->state_name != t('(creation)')) {

Segitsegkent ez a sor a workflow modul stabil verziojaban fordul elo.

Jo szorakozast!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
york képe

Vegetert a hetvege, akinek van megfejtese ne tartsa magaban.

3
0
Bálint képe

Megpróbálkozom a megfejtéssel. Szerintem az idézett kódsorral két probléma is van, egy kisebb és egy nagyobb.

Kezdem a nagyobbal. Az feltételben szereplő != operátor jobb oldalán a t() függvény meghívódik az operátor kiértékelése előtt. Ez lefordítja a paraméterként kapott stringet az aktuális nyelvre. Ez pedig nyelvenként változó lesz, hiszen minden nyelven más és más lesz az érték. Így az összehasonlítás tulajdonképpen nem áll valami stabil lábakon, hiszen egy állandóan változó, a felhasználó által könnyen, a fordítási felületről megváltoztatható értékről van szó.

A kisebbik gond pedig a string megválasztása — ami persze nem ebben a kódsorban történik valószínűleg, de mégis érdemes megemlíteni. A zárójeleket nem célszerű belefoglalni a lefordítható szövegbe, mert így a fordítást végző felhasználó kezébe adjuk a lehetőséget, hogy elhagyja azokat, ez pedig nem egy olyan döntés, amit fordítás közben kell meghozni. Ha a modul fejlesztője úgy dönt, hogy a szöveg megjelenítésénél a zárójeleknek szerepe van, akkor azokat konkatenációval célszerű megjeleníteni, tehát valahogy így:

$output = '(' . t('creation') . ')';
5
0
york képe

Nagyon jo megfejtes, gratulalok :) !
A $transition->state_name egy workflow konfiguracioban tartol neve, minden workflow letrehozasakor letrejon egy t('(creation)') status is, es ez a hiba oka (az adatot elmento felhasznalo nyelvere forditja a szoveget).
A t() fuggvenyt arra hasznaljuk, hogy a feluletre szant angol szovegeket forditsuk le a megfelelo nyelvre. Arra nem hasznalhato, hogy a felhasznaloi feluletrol erkezo stringeket ezzel forditsuk le, es itt egy ehhez nagyon hasonlo szituacio van, nem a kimenetre szant adatot forditjuk le hanem a "bejovo" adatot alakitjuk at.
A hiba egy tobbnyelvu oldalnal konnyen okozhat kellemetlen meglepeteseket, mivel a t() nyelvenkent eltero szoveget fog visszaaddni :).
A dev verzioban a hiba mar javitva van.
Szoval a tanulsag konfiguracioba nem mentunk t()-vel leforditott szoveget.

0
0