首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django:越南语中的弹头

Django:越南语中的弹头
EN

Stack Overflow用户
提问于 2009-10-22 12:37:18
回答 4查看 1.8K关注 0票数 4

一个越南语的网站,实际上和英语没有什么不同。但是,有一个问题就是slug。当我键入诸如“ư”,“ơ”、"á“、...无法识别Django。这里的解决方案是替换未登录的字符。例如:

代码语言:javascript
运行
复制
ư -> u 
ơ -> o 
á -> a 

“những-vièn-kẹo”中的一个将变成“nhung vien-keo”。然而,我不知道如何做到这一点。谁来帮帮我。非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-15 23:22:27

编辑

我收回我的话,django的django.template.defaultfilters.slugify()使用unicodedata.normalize.encode('ascii', 'ignore')做了你想做的事情。只需将字符串输入slugify即可:

代码语言:javascript
运行
复制
from django.template.defaultfilters import slugify
print slugify(u"những-viên-kẹo")

要自动执行此操作,请将以下代码添加到模型中的.save()方法:

代码语言:javascript
运行
复制
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)

我早些时候写的解决方案(下面)对于需要在翻译中添加额外字符的语言仍然有用,例如德语的ü->ue,«->ss等。

原文

Python允许您使用翻译字典将字符映射到替换字符串。

对于您的情况,一个简单的版本是:

代码语言:javascript
运行
复制
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',
}

然后你可以调用:

代码语言:javascript
运行
复制
print u"những-viên-kẹo".translate(vietnamese_map)

要获得以下信息:

代码语言:javascript
运行
复制
u"nhung-vien-keo"

有关更高级的用法(即动态字典),请参阅例如http://effbot.org/zone/unicode-convert.htm

请注意,上面只是为了向您展示地图需要的外观,这并不是输入数据的一种特别方便的方式。要做完全相同的事情,更方便的方法是:

代码语言:javascript
运行
复制
_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)
票数 7
EN

Stack Overflow用户

发布于 2010-01-15 22:47:42

您应该编写一个新的筛选器或标记来执行此操作。

票数 1
EN

Stack Overflow用户

发布于 2010-02-06 23:05:22

您可以尝试将其规范化Python ->

http://pyright.blogspot.com/2009/11/unicode-normalization-python-3x-unicode.html

这可能会有所帮助,而不是重新输入来自aáớbờcờDờđờ的越南语字母表,并忽略其他特殊拉丁字符的可能性,只需运行规范化函数并测试是否一切正常,记住测试单词"đ“,因为我遇到了规范化函数无法规范化Đ-D的问题。

祝你好运:P

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1605041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档