【问题标题】:Django: Slug in Vietnamese姜戈:越南语中的蛞蝓
【发布时间】:2010-12-08 23:15:17
【问题描述】:

越南语网站,与英语几乎没有什么不同。但是,有一个问题是蛞蝓。当我输入“ư”、“ơ”、“á”等字符时,无法识别 Django。此处的解决方案是替换未登录的字符。 例如:

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

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

【问题讨论】:

    标签: django django-urls slug


    【解决方案1】:

    你应该编写一个新的过滤器或标签来做到这一点。

    【讨论】:

      【解决方案2】:

      或者你可以直接拉入这个应用程序为你做这件事。

      https://github.com/un33k/django-uslug

      它还保证了唯一性。

      from uslug import uSlug
      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 = uSlug(self.title)
              super(MyModel, self).save(*args, **kwargs)
      

      【讨论】:

        【解决方案3】:

        你可以尝试规范化它 Python ->

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

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

        祝你好运:P

        【讨论】:

        • 哈哈,这个时候,我们可以在Django ver. 中使用规范化库。 1.2.x。但我仍然看到字符 Đ 的问题:D
        • 唯一的问题是字母Đ,只需将其替换为 D. Anh cứ replace hết cả string thay từ Đ sang D là ok :P
        • slugify 可以将 d 更改为 đ 但它不能保存到我的项目中的数据库,例如 mySQL 所以我做了一个技巧,用 d 替换 đ 之后我 slugify 并替换 d 到 d 并保存到数据库,它就可以工作了。
        【解决方案4】:

        [编辑]

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

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

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

        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)
        

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

        [原帖]

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

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

        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"
        

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

        请注意,以上只是向您展示地图需要的样子,并不是一种特别方便的输入数据的方式。做同样事情的更方便的方法是:

        _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)
        

        【讨论】:

          猜你喜欢
          • 2017-02-25
          • 2013-12-18
          • 1970-01-01
          • 1970-01-01
          • 2018-04-22
          • 2020-02-21
          • 2018-02-27
          • 2020-08-17
          • 2014-09-20
          相关资源
          最近更新 更多