Sziasztok,
A helyzet az, hogy a t()
függvénynek magyar nyelvű szöveget akarok megadni, mivel a későbbiek során szeretném elkészíteni az angol változatot.
A probléma az, hogy a Drupal-nak nem tudom megadni, hogy a forrás nyelv (amit megadtam a kódban) magyar nyelvű, így a megadott szöveget angolnak veszi. Magyar szöveget magyarra fordítani ügye értelmetlen.. e helyett ez kellene: magyar szöveget angolra.
Végignéztem a függvényről szóló dokumentációt is, de igazából nem találtam rá konkrét megoldást.
Jelenleg ezt a megoldást próbáltam alkalmazni, sajnos sikertelenül:
Elvileg a langcode
lenne rá a megoldás kulcsa, de ahogy szerintem értelmezem ez csak a megjelenítést változtatja, úgy hogy a t()
angol szövegét x nyelven mutatja (ha van).
Fordítva
Erre nincs megoldás, a
t()
függvény mindig angol nyelvű szöveget vár. Fordítva kell eljárnod, először mindent angolul írj meg, majd a fordítási felületen fordítsd magyarra.Ez jól is van így, ha belegondolsz, a forráskódban semmi keresnivalója nem angol szövegnek. :)
Végülis jogos
Jogos a dolog, sajnos nem vagyok perfect angol tudású. De hát, akkor elengedhetetlen lesz megtanulni.
Köszönöm a választ!
format_string
Ha egyáltalán nincs szükség az angolra, akkor elvileg ki lehet íratni t() nélkül. Viszont erre nem jó rászokni, mert mindig át kell gondolni, honnan jön a karakterlánc, biztonságos-e, és az ember előbb-utóbb hibázik.
A Drupal 7.8-as verziója óta ilyen esetekben a format_string() használata javasolt – ugyanazokat a biztonsági és helyettesítési szolgáltatásokat nyújtja, mint a t(), fordítás nélkül.
köszönöm
Köszönöm, ma is tanultam valamit. :)
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Én is köszönöm!
Köszönöm, már alkalmazom is. A cél csak az volt, hogy ne kerüljön magyar szöveg a fordítási felületre úgy, hogy magyar fordításra vár (tehát fordítatlan karakterlánc), pedig már magyar a szöveg. Amint lesz egy kis időm neki esek az angolosításnak.
Bár érdekes szerintem, hogy nincs Drupal-os megoldás az általam felhozott problémára.
Azert mert nics is ilyen problema
Az elottem szolok mar megirtak hogy a Drupalban az az elkepzeles hogy a szovegeket angolul viszed be es a t() forditja a megfelelo nyelvre. Ez az elvaras, ehhez kell tartani magunkat.
Na most ha te megis egy magyar szoveget viszel be akkor a t() mivel nincs ra forditas valtozatlanul ugyanazt fogja kiadni is.
Nem ertem igazan miert gond ez neked. Ha angolul bevined szepen, es csinalsz hozza forditast akkor megkapod magyarul es ha kell masik nyelveken is. Ha meg eleve magyarul viszed be akkor ugyabar nem csinalsz forditast es ugyanugy megkapod magyarul. Na es ha idokozben az eredeti szoveget atirod angolra akkor meg egyszeruen csinalsz hozza forditast es minden frankon mukodik tovabb. Miert kell ezt ennyire tulbonyolitani?
Ha most mindenhova a format_string() kerul ahol magyar szovegeket viszel be akkor azt is figyelembe kell venned hogy amikor atirod angolra akkor azokat is vissza kell majd irni t() -re. Szerintem ha nincs valami nagyon fontos oka annak hogy a t() nem jo akkor inkabb ne csereld le.
extra csavar
Sőt a Drupal 8-ban lesz egy extra csavar, mert az oldalon használt nyelvek közül törölhető lesz az angol, de a modulokban a szövegeket továbbra angolul kell beírni.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Azért, mert hülyeséget rögzít a fordítási adatbázis.
More -1 please.
Kedves -1 ezők:
Kedves -1 ezők, azt is elmondjátok mi baj a hozzászólással? :-) Csak szeretném tudni, mert nem hinném, hogy ezért "kár volt koptatni a billentyűzetet". Bár Ti tudjátok.
Elolvasod egyaltalan amit irunk?
Elolvasod egyaltalan amit irunk?
Miert nem lehet ezt megerteni hogy a t() nem ugy van kitalava, megirva ahogy te elkepzeled? Sot ahogy irjak meg a Drupal 8 ban sem lessz ugy ahogy te szeretned.
Amennyiben ez szerinted igy nem jo akkor ahelyett hogy itt "kovetelozdesz" meg hitetlenkedsz hogy miert nem ugy van hogy szeretned, hozz fel ertelmes erveket miert is lenne jo ugy ahogy te elkepzeled, es akkor (persze mindent sorjaban ahogy a fejlesztes mukodik) majd a Drupal 9 ben lehet hogy pontosan ugy lessz ahogy te szeretned.
Addig meg marad vagy a t() vagy az a masik fuggveny. En meg mindeg nem latom mi a bajod a t-vel. Ja nem akaord teleszemtelni az adatbazist mert majd ha beirod szepen angolul oket akkor ott lessz a magyar is? Erre az admin/config/regional/translate/i18n_string a megoldas ...
Azert van az auton a sofor felul ajto hogy ne a hatso ajton keresztul maszunk be, a Drupalban meg az van hogy a szovegeket angolul viszuk be, na most ha ez neked nem jo akkor mongyam azt hogy magadra vess ... Persze beirhatod magyarul is de o angolt var es kesz.
Megismetlem onmagam: beirod magyarul a szovegekt ha mar nincs meg az angol (igy igaz plussz munkat csinalsz mintha egybol angolul vinned be de te igy akarod.) A forditasokat nem viszed be mivel azok eleve nincsennek meg, tehat keszen is vagy. Majd valamikor amikor meglessz az angol akkor szepen kicsereled a magyar szovegekt angolra (plussz munkaval) es kipucolod az adatbazist. Ezt admin/config/regional/translate/i18n_string lattad mar?
Na most ebol szerinted mi a jo es mi a rossz na es mi nem ertehto?
Utoirat:
"Lehet, hogy nem probléma, de engem zavar: Ha a t()-nek megadom a magyar szöveget, akkor azt úgy veszi, hogy fordítatlan karakterlánc ergo azt mondja, hogy még nincs magyar fordítása. No ügyebár, ezt kellene megoldani, hogy ne így legyen."
Ha zavar akkor ird be angolul, mert a t() mindeg angolt var. Vagy mint irtam bekapcsolodsz a fejlesztesbe ervekkel megtamogatod es a 9-ben mar Borg nyelven is beviheted majd ... :D
Nem értem ezen miért kell
Nem értem ezen miért kell felkapni a vizet.. F*szságot kérdeztem? Már bocsánat... Az i18n_string jónak bizonyul, megnézem... Köszönöm. Nem kukacoskodni akarok, meg semmi de ezt is most látom ebben a hozzászólásban először...
Mellesleg a
t()
függvényt nyilván nem írják át a kérésemre, nem is EZT akarom.. (mert itt már felmerült a Drupal 8,9,23,23543 stb..) lehet sokan félreétettek... hanem megoldást a problémára. Bár látom, hogy az okoskodáson kívül konkrét megoldás a magyar közösségben nem fog születni (már bocsánat és tisztelet a kivételnek).Innentől a téma részemről lezárva, köszönöm a válaszokat.
Bár érdekes szerintem, hogy
Van, illetve eddig is volt: megadod, hogy 'en'-re fordítson, és akkor, roppant intelligensen, nem fordít. :)
Feleslegesen nem kell fordítani, az is terheli a gyorstárat.
Köszönöm!
Ezt fogom alkalmazni annak érdekében, hogy a fordítási adatbázisba ne kerüljön be az adott string fölöslegesen, persze todo-val feltüntetem, hogy fordítani kell.
Majd, ha szükség lesz angol fordításra átírom a modulban lévő
t()
-ket, elkészítem a magyar fordítást és eltávolítom az utolsó paramétert (array('langcode' => 'en')
).Mielőtt sokan a fejüket csapkodnák és a -1 eket nyomkodnák, saját fejlesztésről van szó. :-)
Nem kell tulbonyolitani
Mivel magad is irod hogy a kesobbiek folyaman lessz angol nyelvu valtozat is. Igy en sima egyszeruseggel hagynam a most beirt magyar szovegeket es mivel nincs ra forditas a t() nem is forditja le. Ez igy mig felkesz a termek siman elmukodik.
Kesobbiekben meg amikor melgsznek az angol szovegek akkor csak kicserelem a magyart az angolra es a magyar szoveget meg beviszem forditaskent es mar keszen is van ...
Szerintem ennyire egyszeru az egesz. En meg mindeg nem igazan latom hol itt a gond vagy problema.
Megnehezítheti a dolgod azért...
Megnehezítheti a dolgod azért egy fejlesztésben, ha a szövegek először magyarul állnak elő.
Folyamatosan megkeseríti az életünket egy 2 éves fejlesztésben az, hogy először minden szöveg magyarul áll elő és csak amikor magyarul megvan (ez is sokszor két-háromszor változik, mire a végleges formába kerül), akkor fordítjuk angolra.
Ez pedig a t() esetében azt jelenti, hogy az első verziót megírjuk angolul, extract, majd poedittel fordítás, végül import. Ha megváltozik a magyar szöveg, akkor magyar szöveg módosítás plusz import.
A legvégén pedig az angol szöveg változik (a végleges magyar szöveget fordítják), na itt van baj, mert ezt varázslat összehozni a régi magyar szöveggel :( a po fájlokban.
Ha a t() nem lenne angolra hardcode-olva, sokkal egyszerűbb lenne az élet... de hát ez van :) egyébként nagyon kreatív és jó ötlet "trükkösen" használni a t()-t és a fejlesztés végén helyrehozni, ahogy írtad!
Ilyenkor csináljatok egy
Ilyenkor csináljatok egy saját fv-t, ami lekezeli az egész problémátokat.
Figyelem, nem kipróbált, csak begépelt ötletelés jön:
Mindenütt a kódban, ahol eddig t()-t kellene használnotok, használjatok my_t()-t; Egy helyen van az összes fordításotok, tudjátok kezelni az összepárosítást. Nincs export/import. A $t feltöltés mehet csv-ből is akár.
Majd mikor ha véglegesek a stringjeitek, ki lehet cserélni vagy minden my_t() hívást t()-re, vagy a my_t()-ben a format_stringet() t()-re;
1 koncepciónak ez is elmegy…
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
Magyar nyelven működő t() függvény
A forrás szövegben érdemes elkülöníteni a magyar t és az angol t() függvényeket, mert egyébként egy több ezer soros modulban, nem tudjuk kézben tartani a fordítás állapotát.
Először elkészítjük a modult a hun_t() függvénnyel, majd ha szükséges lesz akkor rákeresünk a hun_t-re és átírjuk angolra a szöveget és sima t()-re.
Íme egy egyszerű példa d6-ban:
Csak az en kellett hu-ra módosítani.
Ezzel a hun_t()-vel megadott szöveget lehet fordítani bármilyen nyelvre a drupal adminisztrációs felületén többek között angolra is.
-------------------------------
http://www.realdream.hu
Nagyon jó!
Frappáns, elegáns, gazdaságos.
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.