Autor Zpráva
anonymní
Profil *
Ahoj,

řeším nyní problém na anglicky hovořícím webu, kde používám font bez podpory ruských znaků (azbuky). Vzhledem k tomu, že font nemá znaky z azbuky, potřebuji do objednávkového formuláře dát nahrazení těchto znaků za znaky (shluky) z latinky. A to ideálně po každém stisku (resp. puštění) klávesy, ne až při focusu), protože se jinak zobrazuje zástupný font a nevypadá to hezky.

Prozatím mám toto:
<input onkeyup="this.value = this.value.replace('znak', 'znak')">

Potřeboval bych ale místo jednotlivých znaků definovat celé pole špatných znaků a totéž pole platných znaků, podobně jako v PHP lze dodat funkci str_replace sada dvou seřazených polí.

Existuje podobná možnost i v JS?

Děkuji.


Vkládání pomocí Ctrl + V, myší, apod. nevadí, na tomto webu nehrozí. Pokud nastane v 1 případě z tisíce, holt se zobrazí jiný font.

Ale potřebuju ošetřit tu relativní většinu, která může mít jméno s nepodporovanými znaky nebo třeba napsat tak zprávu. Budou se používat i spřežky, tzn. ruské "ž" se nahradí za "anglické" "zh".
pako
Profil *
Napada ma pouzit objekt, kde si ku kazdemu klucu z azbuky das ako hodnotu znaky z latinky a pomocou operatora in zistovat, ci objekt ma takyto kluc a ak ano, prepisat hodnotu.
Chamurappi
Profil
Reaguji na anonymního:
protože se jinak zobrazuje zástupný font a nevypadá to hezky
To musí uživatele děsně štvát, že to, co sám úmyslně napsal, nevypadá hezky. Úplně vidím, jak ho rozveselí, když mu to pod rukama vyměníš…
Zástupný font je nečitelný?
anonymní
Profil *
Chamurappi:
Zástupný font je nečitelný
je čitelný, ale je jiný (= nehodí se mi do designu, nechci ho tam).

že to, co sám úmyslně napsal, nevypadá hezky.
nevím, jestli štve, neví o problému s těmito znaky. Požadavek zadavetele je ten, že písmo je dané (je koupené a stálo dost peněz) se mají znaky měnit, tak nechme, prosím, stranou teoretické otázky ohledně estetiky nebo uživatelského chování.

Půjde to nějak řešit? Něco načrtl pako, ale použití in na větší pole znaků mi nepřijde moc efektivní. Lepší řešení není?
Chamurappi
Profil
Reaguji na anonymního:
nechme, prosím, stranou teoretické otázky ohledně estetiky nebo uživatelského chování
Je to nadbytečná investice do toho, aby byl formulář méně použitelný. Otázka uživatelského chování mi připadá jako dost praktická. Žádná jiná není důležitější…
Když napíšu nějaký znak omylem, počítám s tím, že ho jedním stiskem klávesy backspace celý smažu — to také nějak doděláš?

použití in na větší pole znaků mi nepřijde moc efektivní
Můžeš ho použít jen na ten, který právě napsal.
Nepoužíval bych přímo in, rovnou bych si z objektu zkusil vytáhnout náhradu a buď bych dostal ji, nebo undefined.
_es
Profil
anonymní:
ruské "ž" se nahradí za "anglické" "zh".
Asi si nedomyslel všetky situácie. Čo trebárs ruský tvrdý znak a pod.?

potřebuji do objednávkového formuláře dát nahrazení těchto znaků za znaky (shluky) z latinky.
Len či v takom prípade nedôjde skôr k zrušeniu objednávky, ak budú formulárové polia hentak „spotvorené“ a návštevníkovi budeš jeho ručne písaný text meniť ihneď počas editácie.
anonymní
Profil *
_es:
Nevím, co mají všichni ve zvyku rýpat a odpovídat všude kolem mimo dotaz. Ten je jasně položený, důsledky a následky chtěného si plně uvědomuji a vím, co dělám. Také vím, že to, co dělám, je správné (programuji dlouhá léta, ne v JS, proto jsem se ptal na nejlepší možné řešení). Po Novém roce bude web spuštěn, tak Vám ho sem dám ke zhodnocení a uvidíme, kolika lidem bude tato záměna znaků "pod rukama" vadit (prozradím, že font nezná ani české znaky, ale to stejně jako u Azbuky nevadí, bavíme se o promile potenciálních zákazníků). Ve zdejší komunitě bude tento "problém" většinový, uvidíme, komu bude vadit záměna diskritických znaků za ty nediakritické.

Asi si nedomyslel všetky situácie. Čo trebárs ruský tvrdý znak a pod.?
Byl to jeden příklad za všechny. Nějakou logickou (v angličtině používanou) náhradu daného znaku (nebo sledu znaků) si ošetřím. Ve spolupráci s někým jazykově zdatným - já osobně se přiznám, že "ruský tvrdý znak" neznám, nejsem ruštinář.

Len či v takom prípade nedôjde skôr k zrušeniu objednávky, ak budú formulárové polia hentak ‚spotvorené‘
Nedojde. A i kdyby došlo, nebude to tvůj problém (nemyslím to nijak špatně nebo útočně). Cílová skupina je daná a tohle se bude týkat řádově <1% uživatelů (z nich většina žije v USA apod., jsou zvyklí psát svá jména v latince, takže ve skutečnosti se to týká jen zlomku z nich, včetně třeba spam robotů). Je to skupina, u které by tento problém někomu nestálo za to řešit, ale já si potrpím na maličkostech - v tomto případě je tou maličkostí zobrazení správného (latinkového, nediakritického) fontu na webu za každé situace.
Chamurappi
Profil
Reaguji na anonymního:
to stejně jako u Azbuky nevadí, bavíme se o promile potenciálních zákazníků
Je jedno, kolik jich je — zjevně jich je dost na to, abys to chtěl řešit.
Kdyby se úprava týkala dvou milionů lidí, jednomu milionu bys znaky pod rukama měnil a druhému ne, který milion by dokončil víc objednávek? Já bych si vsadil na ten druhý. Možná by rozdíl nebyl velký, ale pořád by to byl rozdíl. O co jiného jde, než o počet dokončených objednávek? Záleží na konzistentním vzhledu víc?

v tomto případě je tou maličkostí zobrazení správného (latinkového, nediakritického) fontu na webu za každé situace
Dynamicky načítané písmo se stejně části lidí nenačte.

Nevím, co mají všichni ve zvyku rýpat a odpovídat všude kolem mimo dotaz.
Přemýšlení nad smysluplností zadání je bonusová služba :-)
Já ti v příspěvku [#5] odpověděl i k dotazu.
anonymní
Profil *
Chamurappi:
Já ti v příspěvku [#5] odpověděl i k dotazu.
ano, všiml jsem si a děkuji. Vyzkouším, jakmile bude dostatek času.

Přemýšlení nad smysluplností zadání je bonusová služba :-)
nepotřebuji bonusové služby zdejších, třeba i stálých, diskutérů. Vím, co dělám. Obecně vzato je tento přístup třeba špatný, ale v této konkrétní situaci je správný. Nesuďte, když tuto situaci neznáte. Uvidíme po Novém roce.

zjevně jich je dost na to, abys to chtěl řešit.
je jich více než jeden. Ano, máš pravdu :-)

který milion by dokončil víc objednávek?
v milionech se nebavíme, ale budiž (poměr těch, kterým se nebude měnit nic a těch, kterým se bude "něco" měnit, bude tak 2000:1). Objednávek by bylo +- stejně, v tomto oboru nerozhoduje měnění pod rukama, ale jedinečnost produktu. Ten lidé potřebují, nemají nikde substitut a bude jim jedno, že se něco "přepsalo" z nelatinky do latinky.

Ale nechci tu obhajovat nic z toho, co zamýšlím. Vyzkouším radu v 5, pokud bude nějaký problém, ozvu se...
_es
Profil
anonymní:
V kóde v [#1] máš priamo odkaz na dokumentáciu Mozilly - všimni si použitie funkcie ako druhého argumentu.

Nějakou logickou (v angličtině používanou) náhradu daného znaku (nebo sledu znaků) si ošetřím. Ve spolupráci s někým jazykově zdatným - já osobně se přiznám, že "ruský tvrdý znak" neznám, nejsem ruštinář.
Viď: cs.wikipedia.org/wiki/%D0%AA, prípadne aj cs.wikipedia.org/wiki/%D0%AC. Tipol by som si, že všetky možné prípady aj tak „neošetríš“.

Prečo „riešiš“ takýmto pofidérnym spôsobom práve a len ruštinu? Čo ak tam niekto niečo napíše v gréčtine, čínštine či japončine?
Chamurappi
Profil
Reaguji na anonymního:
Objednávek by bylo +- stejně, v tomto oboru nerozhoduje měnění pod rukama, ale jedinečnost produktu.
Písmo pasující do designu hraje jak velkou roli? Jedinečnost a bezkonkurenčnost produktu je konstanta, půl promile ovlivněných také — nad tím nemá smysl uvažovat. Záleží tedy jen na tom, jestli má konzistence designu větší pozitivní efekt, než vyměňování napsaných znaků negativní. Nakonec je to vždy jednoduchá matematika a otázka priorit.

bude jim jedno, že se něco "přepsalo" z nelatinky do latinky
Stejně tak jim bude jedno, že se znaky azbuky píší jiným písmem, ne? (To jim nejspíš bude víc jedno.)
Pokud neošetříš, aby klávesy backspace a delete mazaly skupinu náhradních znaků, část lidí bude mít v adrese navíc zbytky smazaných překlepů, kterých si před odesláním nevšimnou.

Nesuďte, když tuto situaci neznáte.
Znám mnoho analogických situací, kdy se formulář zkrášlováním poškozuje. Nepředpokládám, že je tato jiná. Ale čiň, jak uznáš za vhodné…

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: