我正在使用 django 1.4 运行 python2.7。
我的 views.py 页面中有以下代码,它返回选择列表中的语言名称:
python 代码:(views.py)
available_languages = []
for lv in language_versions:
language = LANGUAGES[lv.language_code]
if lv.language_code == user_language_code:
language_label = (lv.language_code, u"%s" % (language.name_native))
else:
language_label = (lv.language_code, u"%s / %s" % (language.name, language.name_native))
available_languages.append(language_label)
....
available_languages = sorted(available_languages, key=lambda x: x[1], cmp=compare)
return available_languages
HTML 代码:
{{ field }}
选择列表:
German / Deutsch
Polish / polski
Portuguese (Brasil) / português (Brasil)
Spanish (Latin America) / español (Latinoamérica)
Russian / pусский
问题是当以阿拉伯语等 rtl 语言查看页面时,选择列表呈现如下,其中 ltr 文本的括号位于错误的位置:
لألمانية / Deutsch
البولندية / polski
البرتغالية) لبرتغال) / português) Portugal)
لإسبانية أمريكا) اللاتينية) / español) Latinoamérica)
الروسية / pусский
如何在 view.py 文件中编写代码以正确显示双向括号?
我已经阅读了很多线程并尝试了很多不同的方法来解决这个问题,但我已经没有想法了。
一个失败的尝试是用 Unicode 控制(方向)字符 & #8236; & rlm; 在 view.py 文件中 - & #8234; & #8236; & rlm;呈现给页面中的选择列表。例如:
إسبانيوأمريكا) اللاتينية)/português (巴西) & rlm;
在 css 中添加以下内容也没有效果:
direction: rtl; unicode-bidi: embed
最佳答案
在您的阿拉伯文文本示例中,文本的主要方向已设置为从右到左。如果括号位于从右到左和从左到右的文本之间,则它采用流行语言的方向。因此,在您的示例中,如果您将文本更改为在括号后有一个词,问题就会消失。我建议您使用添加的单词对其进行测试以了解解决方案。
这很麻烦,对于您的生产代码,我会建议另一种解决方案。假设您知道括号只出现在您从左到右的语言中,您需要使用 unicode 控制字符 终止括号(尝试手动将其添加到您的测试中)。所以我在这种情况下的解决方案只是用括号和控制字符替换括号:
for lv in language_versions:
language = LANGUAGES[lv.language_code]
if lv.language_code == user_language_code:
language_label = (lv.language_code, u"%s" % (language.name_native))
else:
native = language.name_native.replace(u')', u')\u200E') # I haven't tested this and you might have to add the html character code ‎ here. please edit this if you find that to be the case.
language_label = (lv.language_code, u"%s / %s" % (language.name, native))
available_languages.append(language_label)
显然,如果您在从右到左的语言中有括号,则必须首先测试 use_language_code 的方向,然后仅在适当的情况下更新本地语言(在 rtl 中为 ltr,反之亦然)...
关于python/django - html 选择列表中的 bidi 括号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23606124/