Terve,
Yritän tehdä automaattista kielivalintaa käyttäen apuna jquery.i18n.properties-1.0.9.js -tiedostoa, mutta ongelmana vastaan tulee [object HTMLDivElement].
Tekstit haetaan messages_fi-FI.properties-tiedostosta, joka näyttää tältä:
msg_welcome = Tervetuloa
ja koodi näyttää tältä:
$(document).ready(function() { loadBundles((navigator.language) ? navigator.language : navigator.userLanguage); }); function loadBundles(lang) { $.i18n.properties({ name: 'Messages', path: 'languages/', mode: 'both', language: lang, callback: function() { selectLanguage(); } }); } function selectLanguage() { $('div[id]').append(function(){ var idString = $(this).attr('id'); $(this).text(eval(idString)); }); }
<body > <div id="page"> <div id="msg_welcome"></div> </div> </body>
[object HTMLDivElement] Ilmoitus tulee nyt siitä, että id="page" :lle ei löydy omaa tekstiä .properties-tiedostosta, koska se on vain css-määritysten takia siinä, kun taas id="msg_welcome" pitäisi tulla testi. Miten tämän saisi siten, että jos id:lle ei löydy tekstiä, niin se vain ohittaisi sen ja koko ohjelma ei kaatuisi siihen. Yritin tuolta jquery.i18n.properties-1.0.9.js -tiedostosta katsoa koodin toimintaa, mutta huonolla menestyksellä... Tämä toimii kyllä jos id="page":n poistaa, mutta se ei ole vaihtoehto.
Siis mitä? Luehan nyt tuota koodia. SelectLanguage-funkkarissa korruptoit kaikki divit, joilla on id-attribuutti. Älä copy-pastea paskaa lukematta sitä.
miten se sitten pitäisi tehdä?? määritellä jokainen divi yksitellen $('#msg_welcome')? ei niin siistiä.
No voihan sen tehdä vaikka millä tavoin. Tuommoinen id:llä purkkaaminen on joka tapauksessa väärin. Käyttäisin ennemmin html5:n data-attribuutteja.
<div data-i18n="foo"></div> <div data-i18n="bar"></div>
$('[data-i18n]').each(function() { var key = $(this).data('i18n'); var string = $.i18n.prop(key); $(this).text(string); });
noinhan se toimii, eli kiitoksia. ajattelin koko ajan, että pääsen helpommalla, jos saan ne suoraan valmiisiin id:n määriteltyä, mutta ehkäpä se oli vähän väärä ajattelutapa. pitää lisäillä nyt noi data-attribuutit.
Jos ei halua käyttää HTML5:n data-attribuutteja, voi käyttää vaikka class-attribuuttia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.