Django:越南语 [英] Django: Slug in Vietnamese

查看:155
本文介绍了Django:越南语的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

越南语网站与英语几乎没有什么区别。但是,有一个问题是lug。。当我输入ư,ơ,á等字符时,没有识别出Django。这里的解决方法是替换不登录的字符。
例如:

A site in Vietnamese, it is virtually no different to English. However, there is a problem that is slug. When I type characters such as "ư", "ơ", "á",... Django is not identified. Solution here is to replace characters that do not sign into. Eg:

ư -> u 
ơ -> o 
á -> a 

những-viên-kẹo中的一个将成为nhung-vien-keo。
但是,我不知道该怎么做。谁来帮帮我。非常感谢!

One from "những-viên-kẹo" will become "nhung-vien-keo". However, I do not know how to do this. Someone help me. Thank you very much!

推荐答案

它返回,django的 django.template.defaultfilters.slugify()做你想要的,使用 unicodedata.normalize .encode('ascii','ignore')。只要你的字符串进入slugify就可以工作:

I take it back, django's django.template.defaultfilters.slugify() does what you want, using unicodedata.normalize and .encode('ascii', 'ignore'). Just feeding your string into slugify will work:

from django.template.defaultfilters import slugify
print slugify(u"những-viên-kẹo")

要自动执行此操作,请将其添加到方法:

To do this automatically, add this to the .save() method in your models:

from django.template.defaultfilters import slugify
MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug  = models.SlugField(blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super(MyModel, self).save(*args, **kwargs)

我写的ealier(下面)的slolution对于需要额外字符的语言仍然是有用的在他们的翻译中,例如德国的ü-> ue,ß-> ss等。

The slolution I wrote ealier (below) would still be useful for languages that require additional characters in their translation, eg German's ü->ue, ß->ss etc.

[原始帖子]

Python允许您使用翻译命令将字符映射到替换

Python allows you to use a translation dict to map characters to a replacement string.

一个简单的版本为您的案例将是:

A simple version for you case would be:

vietnamese_map = {
    ord(u'ư'): 'u',
    ord(u'ơ'): 'o',
    ord(u'á'): 'a',
    ord(u'n'): 'n',
    ord(u'h'): 'h',
    ord(u'ữ'): 'u',
    ord(u'n'): 'n',
    ord(u'g'): 'g',
    ord(u'v'): 'v',
    ord(u'i'): 'i',
    ord(u'ê'): 'e',
    ord(u'n'): 'n',
    ord(u'k'): 'k',
    ord(u'ẹ'): 'e',
    ord(u'o'): 'o',
}

然后你可以拨打:

print u"những-viên-kẹo".translate(vietnamese_map)

获取:

u"nhung-vien-keo"

对于更高级的使用(即动态dict),请参阅例如 http://effbot.org/zone/unicode-convert.htm

For more advanced use (ie a dynamic dict), see eg http://effbot.org/zone/unicode-convert.htm

请注意,以上只是为了向您展示地图需要什么看起来像这样,这不是一个特别方便的方式输入数据。一个更方便的方法来做同样的事情就是这样的:

Note that the above is just to show you what the map needs to look like, it's not a particularly convenient way of entering the data. A more convenient way to do the exact same thing is something like:

_map = u"nn hh ữu nn gg vv ii êe nn kk ẹe oo"
# Take the above string and generate a translation dict
vietnamese_map = dict((ord(m[0]), m[1:]) for m in _map.split())
print u"những-viên-kẹo".translate(vietnamese_map)

这篇关于Django:越南语的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆