python/django - html 选择列表中的 bidi 括号问题

标签 python django html-rendering bidi

我正在使用 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; 在 vi​​ew.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/

相关文章:

Python **kwargs 和 self 作为参数

python - Django url include 模块显示由空格分隔的 url

mysql - 在django中对表记录进行排序

python - 使用 Python 设置 TkHtml(一个 Tk 小部件)

javascript - DOM 渲染是否保证在单个(同步)函数执行期间阻塞?

python - 寻找基于 Python 的网络应用程序来提供文件

python - 如何在 ModelForm 中使用 forms.ChoiceField()?

python - 查找孤立子集的正确算法是什么

python - 使用 add_periodic_task 在 Celery (celerybeat) 中动态设置周期性任务

javascript - 将事件处理程序绑定(bind)到由 jQuery .html() 函数插入的元素上