[Unicode]   Common Locale Data Repository : Bug Tracking Home | Site Map | Search
 
Modify

CLDR Ticket #4201(closed defect: fixed)

Opened 4 years ago

Last modified 4 years ago

Bad delimiters

Reported by: mark Owned by: mark
Component: main Data Locale:
Phase: Review: chrish
Weeks: 0.5 Data Xpath:
Xref:

Description (last modified by mark) (diff)

Delimiters must never be the generic ' or ". Change the existing data and add a test to prevent it in the future.

(Some of the following are from inheritance.)

agq	Bad delimiters: ''''
agq_CM	Bad delimiters: ''''
asa	Bad delimiters: ''''
asa_TZ	Bad delimiters: ''''
bem	Bad delimiters: ''''
bem_ZM	Bad delimiters: ''''
brx	Bad delimiters: ''''
brx_IN	Bad delimiters: ''''
cgg	Bad delimiters: ''''
cgg_UG	Bad delimiters: ''''
dav	Bad delimiters: ''''
dav_KE	Bad delimiters: ''''
ebu	Bad delimiters: ''''
ebu_KE	Bad delimiters: ''''
ee	Bad delimiters: ''''
ee_GH	Bad delimiters: ''''
ee_TG	Bad delimiters: ''''
gu	Bad delimiters: ''''
gu_IN	Bad delimiters: ''''
guz	Bad delimiters: ''''
guz_KE	Bad delimiters: ''''
ha	Bad delimiters: ''''
ha_Latn	Bad delimiters: ''''
ha_Latn_GH	Bad delimiters: ''''
ha_Latn_NE	Bad delimiters: ''''
ha_Latn_NG	Bad delimiters: ''''
hi	Bad delimiters: ''''
hi_IN	Bad delimiters: ''''
ig	Bad delimiters: ''''
ig_NG	Bad delimiters: ''''
jmc	Bad delimiters: ''''
jmc_TZ	Bad delimiters: ''''
kam	Bad delimiters: ''''
kam_KE	Bad delimiters: ''''
kde	Bad delimiters: ''''
kde_TZ	Bad delimiters: ''''
ki	Bad delimiters: ''''
ki_KE	Bad delimiters: ''''
kln	Bad delimiters: ''''
kln_KE	Bad delimiters: ''''
ksb	Bad delimiters: ''''
ksb_TZ	Bad delimiters: ''''
ksf	Bad delimiters: ''''
ksf_CM	Bad delimiters: ''''
lg	Bad delimiters: ''''
lg_UG	Bad delimiters: ''''
ln	Bad delimiters: ''''
ln_CD	Bad delimiters: ''''
ln_CG	Bad delimiters: ''''
luy	Bad delimiters: ''''
luy_KE	Bad delimiters: ''''
mas	Bad delimiters: ''''
mas_KE	Bad delimiters: ''''
mas_TZ	Bad delimiters: ''''
mer	Bad delimiters: ''''
mer_KE	Bad delimiters: ''''
mr	Bad delimiters: ''''
mr_IN	Bad delimiters: ''''
naq	Bad delimiters: ''''
naq_NA	Bad delimiters: ''''
nd	Bad delimiters: ''''
nd_ZW	Bad delimiters: ''''
ne	Bad delimiters: ''''
ne_IN	Bad delimiters: ''''
ne_NP	Bad delimiters: ''''
nyn	Bad delimiters: ''''
nyn_UG	Bad delimiters: ''''
rn	Bad delimiters: ''''
rn_BI	Bad delimiters: ''''
rof	Bad delimiters: ''''
rof_TZ	Bad delimiters: ''''
rwk	Bad delimiters: ''''
rwk_TZ	Bad delimiters: ''''
saq	Bad delimiters: ''''
saq_KE	Bad delimiters: ''''
sbp	Bad delimiters: ''''
sbp_TZ	Bad delimiters: ''''
seh	Bad delimiters: ''''
seh_MZ	Bad delimiters: ''''
sn	Bad delimiters: ''''
sn_ZW	Bad delimiters: ''''
sw	Bad delimiters: ''''
sw_KE	Bad delimiters: ''''
sw_TZ	Bad delimiters: ''''
swc	Bad delimiters: ''''
swc_CD	Bad delimiters: ''''
teo	Bad delimiters: ''''
teo_KE	Bad delimiters: ''''
teo_UG	Bad delimiters: ''''
ur	Bad delimiters: """"
ur_IN	Bad delimiters: """"
ur_PK	Bad delimiters: """"
vun	Bad delimiters: ''''
vun_TZ	Bad delimiters: ''''
xog	Bad delimiters: ''''
xog_UG	Bad delimiters: ''''
yo	Bad delimiters: ''''
yo_NG	Bad delimiters: ''''

Attachments

Change History

comment:1 Changed 4 years ago by mark

  • Description modified (diff)

comment:2 Changed 4 years ago by kent.karlsson14@…

There are other errors as well in the quotation delimiters.
Here is my take:

:root            	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(af)        	{ quotes: '\201c' '\201d' '\2018' '\201d'; } /* “ ” ‘ ” */ this one is surely very wrong
:lang(agq)       	{ quotes: '\0027' '\0027' '\201e' '\201d'; } /* ' ' „ ” */ this one is surely wrong
:lang(ak)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(am)        	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(ar)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(asa)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(az)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(bas)       	{ quotes: '\00ab' '\00bb' '\201c' '\201e'; } /* « » “ „ */ this one is probably a misunderstanding
:lang(be)        	{ quotes: '\201e' '\201d' '\00ab' '\00bb'; } /* „ ” « » */ this one is probably a misunderstanding
:lang(bem)       	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(bez)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(bg)        	{ quotes: '\201e' '\201c' '\2018' '\2019'; } /* „ “ ‘ ’ */ this one is surely wrong
:lang(bm)        	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(bn)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(brx)       	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(bs)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(ca)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(cgg)       	{ quotes: '\0027' '\0027' '\201c' '\201e'; } /* ' ' “ „ */ this one is surely wrong
:lang(chr)       	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(cs)        	{ quotes: '\201e' '\201c' '\201a' '\2018'; } /* „ “ ‚ ‘ */
:lang(cy)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(da)        	{ quotes: '\201d' '\201d' '\201d' '\201d'; } /* ” ” ” ” */ this one is surely wrong
:lang(dav)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(de)        	{ quotes: '\201e' '\201c' '\201a' '\2018'; } /* „ “ ‚ ‘ */
:lang(de-CH)     	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(dje)       	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(dua)       	{ quotes: '\00ab' '\00bb' '\0027' '\0027'; } /* « » ' ' */ this one is surely wrong
:lang(dyo)       	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(dz)        	{ quotes: '\0022' '\0022' '\0027' '\0027'; } /* " " ' ' */ this one is surely wrong
:lang(ebu)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(ee)        	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(el)        	{ quotes: '\00ab' '\00bb' '\2018' '\2019'; } /* « » ‘ ’ */ this one is probably a misunderstanding
:lang(el-POLYTON)	{ quotes: '\00ab' '\00bb' '\201b' '\2019'; } /* « » ‛ ’ */ this one is surely wrong
:lang(en)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(en-GB)     	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(es)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(et)        	{ quotes: '\201e' '\201c' '\201e' '\201c'; } /* „ “ „ “ */ this one is surely wrong
:lang(eu)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ewo)       	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(fa)        	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(ff)        	{ quotes: '\201e' '\201d' '\0027' '\0027'; } /* „ ” ' ' */ this one is surely wrong
:lang(fi)        	{ quotes: '\201d' '\201d' '\2019' '\2019'; } /* ” ” ’ ’ */
:lang(fil)       	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(fo)        	{ quotes: '\201d' '\201d' '\2019' '\2019'; } /* ” ” ’ ’ */
:lang(fr)        	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding (and wrong)
:lang(fr-CH)     	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */ nearly right for French (but missing NNBSPs)
:lang(fur)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(gaa)       	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(gd)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(gl)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(gsw)       	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(gu)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(guz)       	{ quotes: '\0027' '\2018' '\201c' '\201c'; } /* ' ‘ “ “ */ this one is surely wrong
:lang(ha)        	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(he)        	{ quotes: '\201c' '\201d' '\0022' '\0022'; } /* “ ” " " */ this one is surely wrong
:lang(hi)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(hr)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(hu)        	{ quotes: '\201e' '\201d' '\201e' '\201d'; } /* „ ” „ ” */ this one is surely wrong
:lang(ia)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(id)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ig)        	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(is)        	{ quotes: '\201e' '\201c' '\201a' '\2018'; } /* „ “ ‚ ‘ */
:lang(it)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(it-CH)     	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(ja)        	{ quotes: '\300c' '\300d' '\300e' '\300f'; } /* 「 」 『 』 */
:lang(jmc)       	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(ka)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(kab)       	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(kam)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(kde)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(kea)       	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(khq)       	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(ki)        	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(kl)        	{ quotes: '\00bb' '\00ab' '\203a' '\2039'; } /* » « › ‹ */
:lang(kln)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(km)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(kn)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ko)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(ksb)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(ksf)       	{ quotes: '\0027' '\0027' '\00ab' '\00bb'; } /* ' ' « » */ this one is surely wrong
:lang(ksh)       	{ quotes: '\201e' '\201c' '\201a' '\2018'; } /* „ “ ‚ ‘ */
:lang(lag)       	{ quotes: '\201d' '\201d' '\0027' '\0027'; } /* ” ” ' ' */ this one is surely wrong
:lang(lg)        	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(ln)        	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(lo)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(lt)        	{ quotes: '\201e' '\201c' '\201e' '\201c'; } /* „ “ „ “ */ this one is surely wrong
:lang(lu)        	{ quotes: '\2018' '\2018' '\201c' '\201c'; } /* ‘ ‘ “ “ */ this one is surely wrong
:lang(luo)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(luy)       	{ quotes: '\0027' '\0027' '\201e' '\201c'; } /* ' ' „ “ */ this one is surely wrong
:lang(lv)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(mas)       	{ quotes: '\0027' '\0027' '\201d' '\201c'; } /* ' ' ” “ */ this one is surely wrong
:lang(mer)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(mfe)       	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(mg)        	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(ml)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(mn)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(mr)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(ms)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(mt)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(mua)       	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(my)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(naq)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(nb)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */ this one is surely wrong
:lang(nd)        	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(nds)       	{ quotes: '\201e' '\201c' '\201a' '\2018'; } /* „ “ ‚ ‘ */
:lang(ne)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(nl)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(nmg)       	{ quotes: '\201c' '\201e' '\00ab' '\00bb'; } /* “ „ « » */ this one is probably a misunderstanding
:lang(nn)        	{ quotes: '\00ab' '\00bb' '\201c' '\201d'; } /* « » “ ” */ this one is probably a misunderstanding
:lang(nr)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(nso)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(nus)       	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(nyn)       	{ quotes: '\0027' '\0027' '\201c' '\201e'; } /* ' ' “ „ */ this one is surely wrong
:lang(pa)        	{ quotes: '\0027' '\0027' '\0022' '\0022'; } /* ' ' " " */ this one is surely wrong
:lang(pl)        	{ quotes: '\2018' '\2019' '\201e' '\201d'; } /* ‘ ’ „ ” */ this one is surely wrong
:lang(pt)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(rm)        	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(rn)        	{ quotes: '\0027' '\0027' '\201d' '\201d'; } /* ' ' ” ” */ this one is surely wrong
:lang(ro)        	{ quotes: '\201e' '\201d' '\00ab' '\00bb'; } /* „ ” « » */ this one is probably a misunderstanding
:lang(rof)       	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(ru)        	{ quotes: '\00ab' '\00bb' '\201e' '\201c'; } /* « » „ “ */ this one is probably a misunderstanding
:lang(rw)        	{ quotes: '\2018' '\2019' '\00ab' '\00bb'; } /* ‘ ’ « » */ this one is surely wrong
:lang(rwk)       	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(saq)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(sbp)       	{ quotes: '\0027' '\0027' '\201c' '\201d'; } /* ' ' “ ” */ this one is surely wrong
:lang(se)        	{ quotes: '\201d' '\201d' '\2019' '\2019'; } /* ” ” ’ ’ */
:lang(seh)       	{ quotes: '\0027' '\0027' '\0027' '\0027'; } /* ' ' ' ' */ this one is surely wrong
:lang(ses)       	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(sg)        	{ quotes: '\00ab' '\00bb' '\201c' '\2019'; } /* « » “ ’ */ this one is surely wrong
:lang(shi)       	{ quotes: '\00ab' '\00bb' '\201e' '\201d'; } /* « » „ ” */ this one is probably a misunderstanding
:lang(shi-Tfng)  	{ quotes: '\00ab' '\00bb' '\201e' '\201d'; } /* « » „ ” */ this one is probably a misunderstanding (and same as for shi)
:lang(sk)        	{ quotes: '\201a' '\2018' '\201e' '\201c'; } /* ‚ ‘ „ “ */ this one is surely wrong
:lang(sl)        	{ quotes: '\00bb' '\00ab' '\201e' '\201c'; } /* » « „ “ */ this one is probably a misunderstanding
:lang(sn)        	{ quotes: '\0027' '\0027' '\201d' '\201d'; } /* ' ' ” ” */ this one is surely wrong
:lang(so)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(sr)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ss)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(st)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(sv)        	{ quotes: '\201d' '\201d' '\2019' '\2019'; } /* ” ” ’ ’ */
:lang(sw)        	{ quotes: '\0027' '\0027' '\0027' '\0027'; } /* ' ' ' ' */ this one is surely wrong
:lang(swc)       	{ quotes: '\0027' '\0027' '\201d' '\201c'; } /* ' ' ” “ */ this one is surely wrong
:lang(ta)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(te)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(teo)       	{ quotes: '\0027' '\2019' '\201c' '\201d'; } /* ' ’ “ ” */ this one is surely wrong
:lang(tg)        	{ quotes: '\00ab' '\00bb' '\00ab' '\201e'; } /* « » « „ */ this one is surely wrong
:lang(th)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ti-ER)     	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong (missing entry for ti...)
:lang(tn)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(to)        	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(tr)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(trv)       	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(ts)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(twq)       	{ quotes: '\201c' '\201d' '\00ab' '\00bb'; } /* “ ” « » */ this one is probably a misunderstanding
:lang(tzm)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(uk)        	{ quotes: '\00ab' '\00bb' '\201e' '\201c'; } /* « » „ “ */ this one is probably a misunderstanding
:lang(ur)        	{ quotes: '\0022' '\0022' '\0027' '\0027'; } /* " " ' ' */ this one is surely wrong
:lang(vai)       	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(vai-Latn)  	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(ve)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(vi)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(vun)       	{ quotes: '\0027' '\0027' '\201c' '\201c'; } /* ' ' “ “ */ this one is surely wrong
:lang(wae)       	{ quotes: '\00ab' '\00bb' '\2039' '\203a'; } /* « » ‹ › */
:lang(xh)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
:lang(xog)       	{ quotes: '\0027' '\0027' '\201c' '\201e'; } /* ' ' “ „ */ this one is surely wrong
:lang(yav)       	{ quotes: '\00ab' '\00bb' '\00ab' '\00bb'; } /* « » « » */ this one is surely wrong
:lang(yo)        	{ quotes: '\0027' '\0027' '\0027' '\0027'; } /* ' ' ' ' */ this one is surely wrong
:lang(zh)        	{ quotes: '\201c' '\201d' '\2018' '\2019'; } /* “ ” ‘ ’ */
:lang(zh-Hant)   	{ quotes: '\300c' '\300d' '\300e' '\300f'; } /* 「 」 『 』 */
:lang(zu)        	{ quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong

(I took the base list from http://dev.w3.org/html5/spec/rendering.html#quotes).

See also http://lists.w3.org/Archives/Public/www-international/2011OctDec/0037.html.

comment:3 Changed 4 years ago by mark

My code (for ICU rather than CLDR, but same principle)

        UnicodeSet badExemplars = new UnicodeSet("[\"']").freeze();
        for (ULocale ulocale : ULocale.getAvailableLocales()) {
            LocaleData data = LocaleData.getInstance(ulocale);
            String items = "";
            for (int i = 0; i < LocaleData.DELIMITER_COUNT; ++i) {
                String start = data.getDelimiter(LocaleData.QUOTATION_START);
                items += start;
            }
            if (badExemplars.containsSome(items)) {
                System.out.println(ulocale + "\tBad delimiters: " + items);
            }
        }

comment:4 Changed 4 years ago by mark

There is a related report from Richard Ishida, that should be looked at in the same context.

[2] The arabic entry has the following:

'\201c' '\201d' '\2018' '\2019'

ie.

“ ‎U+201C LEFT DOUBLE QUOTATION MARK
” ‎U+201D RIGHT DOUBLE QUOTATION MARK
‘ ‎U+2018 LEFT SINGLE QUOTATION MARK
’ ‎U+2019 RIGHT SINGLE QUOTATION MARK

which corresponds to

quotationStart quotationEnd alternateQuotationStart alternateQuotationEnd

I think this is wrong. Since these are not mirrored characters in
Unicode, surely the order should be

” ‎U+201D RIGHT DOUBLE QUOTATION MARK
“ ‎U+201C LEFT DOUBLE QUOTATION MARK
’ ‎U+2019 RIGHT SINGLE QUOTATION MARK
‘ ‎U+2018 LEFT SINGLE QUOTATION MARK

Same applies for Hebrew and i assume other languages when they are
written in rtl scripts.

There was then a report from Mati:

Here is feedback that I received from 2 colleagues about the quotes used in Hebrew. 

================================================================= 

According to late discussions on keyboard, Hebrew quotation marks should be paired in what foreigners would find a surprising way: 

201e 201d 201a 2019 

(right-low-9-quotes, right-quotes) 

The current row reads 

:lang(he) { quotes: '\201c' '\201d' '\0022' '\0022'; } 

For sure, the use of 0022 (ANSI quotes) as secondary quotes in Hebrew is wrong. 


Shai. 

================================================================= 


The current definition for Hebrew is probably wrong.

The source is the CLDR. CLDR listing for Hebrew says that the values
for quotationEnd and quotationStart are "draft=contributed" and i
wonder who contributed them.

To the best of my understanding, the Hebrew Language Academy
best-practice recommendation [1] is:
quotationStart: „ (201e)
quotationEnd: ” (201d)

The recommended characters for a quotation inside a quotation are:
opening: ‚ (201a)
closing: ’ (2019)

(Sorry, i'm not sure about the correct CLDR names for this.)

That's what i suggested for the keyboard standard, too.

These quotation marks were actually used quite frequently in older
printed books in Hebrew and the Academy still defines this as the best
practice.

Of course, the most common practice for daily writing (emails etc.) is
to use " and ' for both opening and closing quotation marks. Most
professionally printed books and journals probably use ” (201d) and ’
(2019) for both opening and closing, but occasionally i see the use of
lower quotation marks, too (and not just in my own blog!). Using “
(201c) anywhere is neither common nor recommended by the Academy.

Another comment is that Apple devices such as iPhone use ׳ (geresh,
05f3) and ״ (gershayim, 05f4) for quotation marks, which is
interesting, but not quite right. They should be used for acronyms and
pronunciation marks (like in ג׳ורג׳ and מנכ״ל). Again, the most common
practice in other consumer devices is to use " and ', because that's
what most keyboards have. I'm not even sure that geresh and gershayim
these should be anywhere in the CLDR.

Please correct me if i'm mistaken about anything.

Richard also asked about Arabic typography. I'm quite sure that the
current is wrong about Arabic, but an Arabic typography expert should
be consulted on that matter.

[1] http://hebrew-academy.huji.ac.il/hahlatot/Punctuation/Pages/P31.aspx

comment:5 Changed 4 years ago by pedberg

Curly quotes in bidi languages are often a problem, especially for text that does not match the paragraph direction, or text of different directions on either side of a quote. To address these problems (and unless a better way of handling this developed with the UBA) the simplest of best practice is probably to use straight quotes for ar, he, etc.

comment:6 Changed 4 years ago by mark

Kent, thanks for the work you did. Can you separate out more of the reasons you had, eg

:lang(af) { quotes: '\201c' '\201d' '\2018' '\201d'; } /* “ ” ‘ ” */ this one is surely very wrong
The reason is that there is an obvious mismatch between elements of a pair.

:lang(zu) { quotes: '\2018' '\2019' '\201c' '\201d'; } /* ‘ ’ “ ” */ this one is surely wrong
Guessing that you think this is linguistically wrong?

comment:7 Changed 4 years ago by mark

  • Owner changed from somebody to mark
  • Status changed from new to assigned
  • Milestone changed from UNSCH to 21

comment:8 Changed 4 years ago by mark

  • Priority changed from assess to major

comment:9 Changed 4 years ago by pedberg

  • Cc pedberg, chrish added

comment:11 Changed 4 years ago by mark

  • Keywords google added
  • Weeks set to 0.5
  • Component changed from unknown to data

comment:12 Changed 4 years ago by mark

  • Review set to chrish

Just committed the delimiter changes. Assigned chrish as reviewer, but others are welcome to review.

comment:13 Changed 4 years ago by chrish

  • Status changed from assigned to closed
  • Resolution set to fixed
View

Add a comment

Modify Ticket

Action
as closed
The ticket will be disowned. The resolution will be deleted. Next status will be 'new'
Next status will be 'closed'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.