Autor Zpráva
alt64
Profil *
Ahoj, v jedne apliakci vyuzivajici JQM chci pouzit plugin (http://code.google.com/p/jquery-utils/wiki/I18N) pro preklad app do vice jazyku.

Narazil jsme ale na problem, pokud zapisi:

<div data-role="header">
    <h1><script  type="text/javascript">document.write($.i18n('appTranslate', 'footer')); </script></h1>
  </div>
Je vse O.K

Ale pokud pridam to same do a href tagu

<div data-role="content">
    <ul data-role="listview">
      <li><a href="#registerPage"><script  type="text/javascript">document.writeln('footer'); </script></a></li>
      <li><a href="#loginPage"><script  type="text/javascript">document.writeln('footer'); </script></a></li>

    </ul>
  </div>
Dostanu jen bilou obrazovky s dvema vypsanymi preklady, coz je spatne.

Debugger zadnou chybu nehlasi.




Otazka je:

Jak to ma byt spravne, nebo zda existuje nejakey jiny i18n plugin, ktery funguje dobre? (http://the-m-project.org jsem zkousel).

Diky moc za kazdou radu.
_es
Profil
alt64:
<a href="#registerPage"><script type="text/javascript">document.writeln('footer'); </script></a>
To bude, pri funkčnom JS, to isté ako:
<a href="#registerPage">footer
</a>
a teda nerozumiem tomu, čo čakáš, že by to malo robiť.
alt64
Profil *
Prave to bych cekal , ze by to melo byt to same jako
<a href="#registerPage">footer
</a>

Ale neni, vypise to jen a pouze text, zadny odkaz.
Alutom
Profil
Tak to nevím, já jsem si ten tvůj kód zkopíroval a funguje mi bez problému.
(tady to mám)
_es
Profil
alt64:
vypise to jen a pouze text, zadny odkaz.
Je to odkaz s textom footer na kotvu s názvom registerPage, čo iné by to malo byť?
Chamurappi
Profil
Reaguji na _es:
Je pravděpodobné, že jQuery Mobile tahá všechno AJAXem, a je asi možné, že oblíbený problém s nevyhodnocováním <script>ů v innerHTML přečůrávají tvůrci frameworku tím, že skripty najdou regulárem a evalují. Tím by šlo vysvětlit popisované symptomy.
alt64
Profil *
Chamurappi

Je nejaky zpusob, jak to osetrit? Nechce se mi smirit s tim ze by aplikace v JQM nemohla byt lokalizovana.
Chamurappi
Profil
Reaguji na alta64:
Je nějaký důvod, proč by se překládání mělo dělat na straně prohlížeče?
alt64
Profil *
Chamurappi:
Ano, je to mobilni aplikace, nema zadnou serverovou cast.
_es
Profil
Akosi stále nerozumiem, aký má význam dávať do kódu <script type="text/javascript">document.write('footer'); </script> namiesto obyčajného textu footer.
alt64
Profil *
_es:
Pac v realu tam bude neco k prekladu, viz
document.write($.i18n('appTranslate', 'string_k_prekladu'));

Jde o to , ze s document.write v <a> tagu se to rozsype...
_es
Profil
alt64:
Pac v realu tam bude neco k prekladu, viz
document.write($.i18n('appTranslate', 'string_k_prekladu'));
A ako sa to tam dostane? Ak to nebude normálne v kóde stránky, tak pôjde asi o tento problém, čo už bolo naznačené v [#6]. A ak ide o nejakú dynamickú hodnotu v JS po načítaní stránky, tak to treba do stránky pridať inak.
alt64
Profil *
Aha, takze jsem v cudu, jelikoz JQM pouziva urcite Ajax na vsechno co de.
Chamurappi
Profil
Reaguji na alta64:
Můžeš si JQM upravit, ne? Zaveď si vlastní formát zápisu překládaných řetězců, najdi si místo, kde se zpracovává AJAXem stažený vstup, a uprav ho tak, aby se navíc provedl nějaký replace zpracovávající ten tvůj formát.
alt64
Profil *
Chamurappi:
Na to se bohuzel necitim. Jen bych chtel podotknout, ze ten zapis :
document.write($.i18n('appTranslate', 'string_k_prekladu'));

JE natvrdo v kodu. Nedoplnuje se dynamicky, ma to na neco u me vliv?
Chamurappi
Profil
Reaguji na alta64:
ten zapis […] JE natvrdo v kodu
Upravit ho můžeš? Nebo už ho máš ve stovkách souborů?
Parametr 'appTranslate' tam máš fixně?

To, jestli se kód opravdu načítá AJAXem, bys mohl zjistit přidáním následujícího skriptu do hlavní stránky:
var backup = $.ajax;
$.ajax = function(param)
{
  alert("AJAX: " + param.url);
  return backup.apply(this, arguments);
};
alt64
Profil *
Chamurappi:
Upravit ho muzu, ono v JQM jso uvsechny obrazovky vpodstete soucast jednoho html souboru, misto odkazu page2.html se tam pouziva zapis a href="#page2"

Kod jsem vlozil pred jakykoliv predchozi kod a nic se nestalo.
joe
Profil
alt64:
Je to jen nápad a asi bys to musel upravit (pokud bys na to tak šel), ale já bych překlady možná řešil trochu jinak, než s použitím té knihovny, kde je potřeba psát document.write(...) a nebo si napsat zkratku (která je výhodnější).

<li><a href="#loginPage" data-i18n="footer">Výchozí text</a></li>

Po načtení bych prošel elementy, co používají atribut data-i18n (jeho hodnota je klíč k lokalizované hodnoty) a jim nastavil innerHTML. Jako výhodu vidím v tom, že je možné změnit jazyk v celé aplikaci okamžitě, což si u té knihovny, kterou používáš v tuhle chvíli nedovedu představit, ale třeba to také jde. Navíc není potřeba dalších knihoven a není nutné využívat document.write, tedy pokud tam není nějaký jiný problém. Ještě jsem se příliš s mobily nezabýval, ale pokud tam funguje jQuery, tak by v tom neměl být problém.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: