Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: jquery-i18n-properties

Request [29.12.2012 22:30:54]

#

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.

The Alchemist [29.12.2012 23:08:49]

#

Siis mitä? Luehan nyt tuota koodia. SelectLanguage-funkkarissa korruptoit kaikki divit, joilla on id-attribuutti. Älä copy-pastea paskaa lukematta sitä.

Request [29.12.2012 23:26:22]

#

miten se sitten pitäisi tehdä?? määritellä jokainen divi yksitellen $('#msg_welcome')? ei niin siistiä.

The Alchemist [29.12.2012 23:33:05]

#

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);
});

Request [29.12.2012 23:42:29]

#

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.

Metabolix [30.12.2012 12:40:04]

#

Jos ei halua käyttää HTML5:n data-attribuutteja, voi käyttää vaikka class-attribuuttia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta