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.