Hogyan tudom megoldani, hogy a nyelvváltásnál a rádiógombot is váltsa a script?
Nem értek a javascripthez még eléggé. Egy jquery scriptet használok amivel a különféle tageknek megadhatom, hogy milyen alapnyelven vannak illetve felvehetek szótárakat amik konkrétan az adott tag-hez kapcsolt szöveget lefordítják (kicserélik) a szótárban szereplő szövegre.
A nyelvbeállító rádiógombokkal tudok közöttük váltani.
Ez a script alkalmas arra is, hogy az indításkor a böngésző alapértelmezett nyelvére állítsa az oldalt.
De azt hogyan tudom elérni, hogy az indításkor aktív nyelv beállítsa a szükséges rádió gombot is.
Jelenleg amit használok az egy elég egyszerű megoldás. Elhelyeztem egy saját kreálmány scriptet ami annyit csinál, hogy megváltoztatja a rádiógombok linkjeinek a class-át (aktív ileltve inaktívra) a grafikai sallang css-ben természetesen el van készítve a két classnak.
Ezzel az egyetlen gondom, hogy manuálisan történik. Vagyis amíg nem történt beavatkozás mindegyik rádiógomb sötét hacsak nem állítom valamelyik nyelvgombot alapból class="aktiv" -ra ami ugye egy elég slendrián megoldás és pont a lényeg veszik el (angol böngészőn is angol nyelven a magyar link lesz az aktív gombon amíg nem állítja).
Tud valaki egy böngésző nyelv ellenőrző scriptet mutatni nekem ami állítja a rádió gombokat is hogy tanulmányozhassam? Esetleg rávezetne a helyes útra?
Köszönöm a segítséget
Gondolom valahol el van tárolva az, hogy mi az aktuális nyelv. Egy változóban js-ben pl.
A dokumentum végén meghívott js funkcióval vizsgáld le ezt a változót, és ennek megfelelően állítsd át a megfelelő radiobutton class-át aktívra. Célszerű mindegyik radiobuttonnak egyedi a nyelvre jellemző id-t adni, és a class változtatást ehhez az id-hez célozni.
pl.:
if (aktual_lang == "hu") {
document.getElementById("radio_hu").className = "aktiv";
}
vagy jQueryvel:
if (aktual_lang == "hu") {
$("#radio_hu").addClass("aktiv");
}
Persze php-vel egy kicsit egyszerűbb lenne ez a megoldás. Célszerű lenne session változóba, vagy superglobal-ba tárolni a nyelv változót, és kijelzéskor eleve "aktiv" class-on létrehozni a megfelelő radiobuttont.
igen. itt jön be hogy a hello world bonyolultságú scripteket tudok jelenleg írni. Ezért nem tudom a jquery modulból se kiolvasni mit kellene néznem :)
Köszönöm a segítséget de ha tudnál még egy kicsit írni nekem erről nagyon hálás lennék.
Egy ilyen scriptem van a nyelv rádiógombjának az állítására. Itt a link_1 jelenti az első rádiógombot (pl a hu nyelvet).
var activelink = "link_1";
function csere(linkid)
{
document.getElementById(activelink).className = "inaktiv";
document.getElementById(linkid).className = "aktiv";
activelink = linkid;
}
Ez ahogy látod igazából nem vizsgál semmit az elején. Egyszerűen beállítja a rádió class-t aktivra ha rákattintottál illetve az előzőt inaktivra. AMíg nem volt egy klikk se az összes inaktiv (kivétel ha a html-en belül alapból aktiv classal nyit ami nem megoldás)
Próbálkoztam egy ilyen összerakásával:
function changeClass(){
if (lang == "hu") {
document.getElementById("link_1").setAttribute("class", "aktiv");
document.getElementById("link_2").setAttribute("class", "inaktiv");
document.getElementById("link_3").setAttribute("class", "inaktiv");
}
else (lang == "en") {
document.getElementById("link_1").setAttribute("class", "inaktiv");
document.getElementById("link_2").setAttribute("class", "aktiv");
document.getElementById("link_3").setAttribute("class", "inaktiv");
}
else (lang == "nl") {
document.getElementById("link_1").setAttribute("class", "inaktiv");
document.getElementById("link_2").setAttribute("class", "inaktiv");
document.getElementById("link_3").setAttribute("class", "aktiv");
}
Ez azonban nem dobott semmit. Valószínűleg rosszat vizsgálok.
Jó lesz az a changeClass függvény, csak ne a lang változót vizsgáld, mert olyan nincs, hanem az activelink változót, és az értékei a radiobuttonok id-i lehetnek, vagyis "link_1" (ez valszeg a magyar), "link_2", és "link_3".
Arra ügyelj, hogy a csere függvény a radiobuttonok előtt legyen implementálva (főként az activelink változó), a changeClass függvény pedig a radiobuttonok kiíratása után legyen meghívva (de legyen meghívva mindig)!
Így működni fog.
Maga az alap függvény már teszi a dolgát. Ezt hiába egészítem ki. A jquerrynek kéne átadnom a rádióváltás képességet is.
A saját függvényem amit csinál az nem sok. Ha rákattintok valamelyik gombra akkor beállítja azt kezdőnek és meghívja a jquerry scriptet ami szintén teszi a dolgát és beállítja az adott oldalt a megfelelő nyelvre (ahogy néztem ez általában az amivel bezártam :P vagyis a böngésző nyelvvizsgáló nem működik a jqueryben sem valami jól, de ezt nem panaszkodásnak szánom mert nagyon jó kis script :) tisztelet a fejlesztőjének)
Valahogy így néz ki a html linekm
<a id="link_1" onclick="csere('link_1');" class="inaktiv" href="javascript:window.lang.change('en');" title="Angol/English">Eng</a>
Itt az onclick meghívja a saját rádióváltó scriptem csere funkcióját és beállítja aktívra a classt a másik hátom hasonló gombét pedig inaktívra cseréli. A herf pedig a jquery scriptet hívja meg ami lefutva kicseréli az adott oldalon a jelölt szövegeket egy külön fájlban szereplőkre :) Nagyon egyszerű eddig.
Ami az igazi lenne ha a saját scriptemet kihagyhatnám. Nem kell. Felesleges. A rádió váltás pedig ahhoz a nyelvi beállításhoz lenne kapcsolva amivel az oldal éppen él. Vagyis a jquery a nyelv átváltásán kívül átváltaná az adott gomb class-át is.
Nem akarok vele tolakodni ezért csak ha megengeded átküldeném a plugin kódját privátba (vagy ha valakit érdekel itt esetleg így is) és ha rámutatnál nekem mit kellene vizsgálnom és miért abból nagyon sokat tanulhatnék :). Addig is kísérletezem persze mert nagyon izgalmas. Sajnos a jquerry scriptbe belebirizgálással még csak annyit értem el hogy nem működött az egész utána :D Hú de ahogy ezeket leírtam lett is egy ötletem :)
Lehet PHP-háza táján kéne nézelődnöm tényleg de most még ez is nagyon bonyolult :D.
Nem tudom, hogy pontosan nálad hogyan működik a nyelvváltás, de a window.lang.change('en') változtatás biztosan nem fog végrehajtódni, hiszen az onclick esemény már elhappolta a href végrehajtási módját, ezért ezt a váltási metódust a csere függvény végébe kellene beágyazni. Vagy egy extra nyelvre utaló paraméter átadásával, vagy a váltás értékének vizsgálatának függvényében.
Igazából nem tudom biztosan mire is kell neked ez a sor "window.lang.change('en')", mert erre a metódusra utaló részt nem írtál le.
Egyébként ezek a függvények nem jquery hívások, csak egyszerű javascript dom metódus hívásokkal.
Előbb utóbb a nyelvváltást php-val kellene megoldani, hiszen egy dinamikus oldal a legtöbb adatot adatbázisban a szerveren tárolja, ahhoz pedig csak szerveroldali programozással férsz hozzá (mint pl a php). Így a dinamikus oldal nyelvi verzióit is adatbázisban tárolja, amit csak php segítségével olvashatsz majd ki. Mivel a javascript kliensoldali script-nyelv, a látogató böngészőjében fut, így nem fog tudni hozzáférni a szerver adataihoz (pl adatbázis). Erre persze megoldás lehet valamelyik ajax library, de az még bonyolultabb, mint a php, ezért inkább azt javasolnám, hogy méllyedj el a php rejtelmeiben. Rakj fel a gépedre egy wampp vagy xampp szervert, és próbálkozz. Sok tutorial van a neten, ha kitartó vagy jó dolgokat összehozhatsz.
Sok sikert!
A jelenlegi kód működik, evvel gond nincsen. Úgy váltja a nyelvet mint a kisangyal :). A problémám a béna rádiógombokkal van. Azokkal is csak azért mert kéne jelezniük hogy milyen nyelven vagyunk éppen.
Ezt ha már váltottunk meg is teszik de ha nem váltogatunk csak indítjuk a lapot, akkor csak
a.) azt jelzi amire manuálisan beállítottam (például ha a classt eleve aktívnak vettem fel az egyik nyelvnél induláskor. Ez jó lenne ha mindig azon a nyelven indulna, de elvileg a script a böngésző nyelvén jeleníti meg automatikusan az egész lapot, ez gyakorlatban annyit tesz, hogy az utoljára használt nyelven indul az oldal (gondolom a gyorsítótárazás miatt))
b.) mindegyiket inaktívként jelenít meg az elején, addig amíg nem kattintok valamelyikre. Ide volt egy ötletem hogy az adott nyelvi fájlba (ezek is js fájlok) rakom be azt a sort is ami beállítja a rádiógombokat, így azok is lefutnak a gyorsítótárból a lap betöltésekor, és mindenki boldog (bár még mindig kicsit slendrián megoldás :D de már közelít ahhoz amit szeretnék). De ez nem jött össze eddig :) A problémám megint az hogy valamivel meg kellene csinálnom a vizsgálatot hogy miylen nyelven is vagyunk. Ezt azonban nem tdtam még kihámozni a fő jquery fájlból (magából a nyelvváltó pluginból). Valószínűleg egyértelmű de én nem látom. Nagyon sok az üres feltételes váltós mittoménmicsoda benne :D (egyébként erről a pluginról van szó: [link]
De fel nem adtam szóval előbb utóbb meglesz. De lehet hogy nekem egy hétbe telik amire más rá tud bökni: "te! Nem szúrja ki a szemed?" :)
Az onclick átváltja a class-t mást nem csinál. A class változtat a felirat stílusán.
Ezeknek semmi köze a nyelvhez. A href meghívja a jquery plugint amelyik átváltja a nyelvet. Most csináltam egy olyan változatot ahol az onclicket ki is töröltem és a href két functiont is meghív. De ez kopp ugyanaz a megoldás csak pepitában.
És a problémám ezzel van csak :) sajnos nem értem ezt a scriptet. Rengeteg feltételes dolog van benne ugyanis ami nem csoda, hiszen szabadon vehetsz bele új nyelveket (akármennyit), és sok féle szöveget (gombok, magyarázó rész stb) át tud írni.
Köszönöm az eddigi tanácsokat. Sajnos nem sokan vannak a környezetemben akiket akár csak minimálisan érdekelne.
Végeztem rajta közben egy kisebb átalakítást. Ahogy nézem nem képes a böngésző nyelvét detektálni. Ezt valaki elírhatta a fórumon. Csak abból gondolom ezt hogy default languaget használ (amit egy másik fórumozó segítségével már átírtam úgy hogy nem is létezik ilyen többé :) vagyis még az általuk használt angolt is lecserélhetem.)
Azt hiszem most azonnal elkezdek ismerkedni a PHP-vel :)
Most van már egy ilyenem:
<script type="text/javascript">
window.lang = new jquery_lang_js();
$().ready(function () {
window.lang.run("en");
document.getElementById("link_1").setAttribute("class", "aktiv");
document.getElementById("link_2").setAttribute("class", "inaktiv");
document.getElementById("link_3").setAttribute("class", "inaktiv");
});
Itt az "en" helyére amit megadok azzal indít az oldal és az inaktív rádiógombok közül is beállítja szépen az en (a link1) mint aktívat :). Ez nagyon szép de nem veszi komolyan a javascriptet az elején. Friss indításnál ugyanis továbbra is az utolsó gyorsítótáras megoldást rángatja elő. (vagyis hollandul indít ha azzal zártad be de természetesen angolt jelez amit nem értek miért (illetve sejtem de ááááááá)... -_- elvileg most működnie kéne neki mert magában az alap scriptet meghívóban szerepel minden már.)
Lehet valami egyébbel erőltetni még ennél is jobban hogy az angollal indítson?
Valószínűleg magában a jquery scriptben van ilyenkor a gond, amit a chrome begyorsítótáraz magának. Mivel abban a scriptben már semmi nyelvfüggő rész nem maradt. Nincs már default languege se benne (igaz amíg volt addig se törődött vele :D).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!