[ toxi_programer @ 15.06.2008. 21:09 ] @
Hteo bih da napravim sajt koji će biti u oba srpska pisma, dakle da se sve stranice mogu videti na ćirilici i latinici. Sajt ima i bazu podataka.
Kako je to najbolje da uradim?

Verovatno postoji slična tema, koju ja i pored više pokušaja nisam našao, izvinjavam se, pa ako znate link ka takvoj temi, biće od pomoći!
[ mmix @ 15.06.2008. 22:29 ] @
Transkripcija iz cirilice u latinicu je jednoznacna, obrnuto ne vazi (zbog lj, nj, dj, itd). Iz tog razloga sadrzaj u bazi cuvaj u cirilici pa ga po potrebi konvertuj u latinicu pre ispisa.
[ Prokleta_Nedelja @ 16.06.2008. 06:57 ] @
moze li primjer konvertovanja npr rijeci "beograd" u latinicnu verziju?
[ deerbeer @ 16.06.2008. 11:01 ] @
Ako pravis visejezicni web sajt napravi satelite resource language DLL
(posebno za cirilicu i posebno za latinicu)
koji ce se ucitavati kad korisnik promeni izbor jezika
i u njemu drzis sve stringove vezane za izabrani jezik (npr. meniji ,labele ,tabele ,linkovi naslovi itd..)
http://www.codeproject.com/KB/aspnet/SatResourcesDemo.aspx
http://www.ondotnet.com/pub/a/dotnet/2002/10/14/local2.htm

Ovakav pristup je mnogo fleksibilniji i ne zahteva mnogo izmena u kodu kad je u pitanju dodavanje novih jezika ...
jednostavno napravis novi DLL i dodas jos jedan jezik u combo-box ili gde vec ...

Sto se tice baze mora ces da radis neko konvertovanje pisma pomocu Regular Expression-a ..

[ toxi_programer @ 17.06.2008. 17:46 ] @
Super što ste odgovorili.

@mmix, nije problem da preslovim text. Problem je kako to primeniti na veb stranicu. Na primer, ja sam kontao da je moguće uraditi ovako nešto:
U page_load vidim da li je korisnik izabrao ovo ili ono pismo. Ako je latinica, uzmem celu stranu i preslovim je u latinicu i to da dobije korisnik. Znači nešto što bi bilo "jednostavno" za mene, da implementiram.

@deerbeer, oke, thx za linkove, to je malo teži ( duži tj.) put pa mi za ovo nije odgovarajuće al' verovatno će biti za nešto drugo.

@Prokleta_Nedelja, ja sam preslovljivač TnT Ćirilica pravio tako što (uporošćeno govoreći) dicitionary klasu popunim latiničnim znacima i njihovim ćiriličnim "verzijama". Onda petljom ideš kroz sva slova teksta. Za svako slovo pogledaš u dict. objektu koji mu je "parnjak" i tog "parnjaka" dodaš u novi StringBuilder, onaj koji predstavlja preslovljen tekst.
[ Prokleta_Nedelja @ 18.06.2008. 06:45 ] @
@toxi
to bi znacilo da bi za pasus od 100 karaktera (sto je jako mali pasus) trebao da prodjem petlju 3000 puta (30 puta za svako slovo). Mozda bi trebalo na neki drugi, optimizovaniji nacin raditi.
[ toxi_programer @ 18.06.2008. 08:56 ] @
Pa vidi, nije to slovo uvek poslednje, tj. trideseto. Ako uzmem da bude prosek za nalaženje slova bude 15 prolaza kroz petlju (ili if-ova, jer mož' i jedno i drugo) onda je taj broj 1500, ne 3000.

Ja ne znam, a i realno ne zanima me, kako će dictionary klasa da nađe value za dati joj key. Ako je key ćirilično slovo, a value latinično i ako u reči ima 100 znakova, napišem petlju koja će prođi sto puta i svaki put pozvati funkciju iz dict. klase koja će da vrati "parnjaka" za dato slovo. Kako ona to radi ja ne znam.

Uglavnom, program koji sam pravio za preslovljavanje radi vrlo brzo( iako sam komp kupio kad sam pošao u srednju, sad polazim na fax ). Evo ga:


što je više od 1400 po milisekundi, a mož' i brže. xD

Bem li ga... Ja ne znam kako drugačije...?
[ mmix @ 18.06.2008. 13:09 ] @
Ok, ako hoces sa minimumom maltertiranja i ako znas da taj sajt nikad nece imati nista sem nase cirilice i latinice mozes da uradis sledece:

1. Ukljuci bufering strane (da ti sadrzaj ne bi odmah otisao klijentu)
2. Stranicu generisi po defaultu kao cirilicnu
2. Implementiraj PostRender event na Page-u, izvuci sadrzaj strane iz stream-a i preslovi ga ako je potrebno. Ako stranicu inicijalno generises kao cirilicnu neces imati problema jer se svi HTTP/HTML renderuju kao Latin pa ih preslovljavanje iz cirilice u latinicu nece dirati. Preslovljeno vrati nazad u stream (prvo ga resetuj). PS: Obrati paznju na encoding stranice, stream ja najverovatnije binary, encodovan u kod stranice (po defaultu UTF8 ), moraces da dekodiras taj stream u string i da posle da ga kodiras nazad u taj encoding.

Sto se tice samog preslovljavanja mozes slobodno da koristis new Dictionary<char, string>(30) (mora string kao value zbog dvoslovnih kombinacija u latinici lj, nj, itd). posto Dictionary koristi HashTable, a hash od Char je (int)c hashiranje je brzo, a posto nemas duplikata niti kolizije kljuceva (zato mora da se inicijalizuje na 30) indeksiranje dictionary-a je direktno i imaces dobr performanse. Za samo preslovljavanje ne koristi string. Operacije na stringovima su immutable tj svaka pojedinacna operacija generise potpuno novi string u CELOSTI. Umesto toga ucitaj string u StringBuilder i kroz njega radi replace za svaki element dictionary-a i na kraju izvuci string, garantovano od tih 1400ms bar 90% odlazi na alkaciju/dealokaciju i kopiranje stringova sto se resava stringbuilderom. To bi trebalo da ti da najoptimalnije rezultate sa najmanje zezanja.
[ toxi_programer @ 18.06.2008. 16:53 ] @
Hm... Hajd videću to tako da uradim, ako ne uspem eto me opet sa pitanjima.

Citat:

Umesto toga ucitaj string u StringBuilder i kroz njega radi replace za svaki element dictionary-a i na kraju izvuci string, garantovano od tih 1400ms bar 90% odlazi na alkaciju/dealokaciju i kopiranje stringova sto se resava stringbuilderom. To bi trebalo da ti da najoptimalnije rezultate sa najmanje zezanja.

Naravno, u programu i jesam koristio StringBuilder. Hihi, ne smem da pomislim koliko bi ovoj mojoj krntiji trebalo da preslovi onoliki tekst da sam koristio string

Nedelja, ako hoćeš, daću ti klasu koju sam koristio u mom programu, ima sve f-je za preslovljavanje (mada su imena promenljivih malo glupa, odavno sam to pisao pa valjda zbog toga ), ono da izuzima linkove, određene reči, html tagove i tako to...?