2๐
โ
I have solved this problem. At first, I define a map that contain key value paired. Key is a character Vietnamese in UTF-8. Then I use this to convert some special character to relevant in English:
def vi_slug(data):
vietnamese_map = {
ord(u'o'): 'o', ord(u'รฒ'): 'o', ord(u'รณ'): 'o', ord(u'แป'): 'o', ord(u'รต'): 'o', ord(u'แป'): 'o',
ord(u'ฦก'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o', ord(u'แปก'): 'o', ord(u'แปฃ'): 'o',
ord(u'รด'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o', ord(u'แป'): 'o',
ord(u'ร '): 'a', ord(u'รก'): 'a', ord(u'รก'): 'a', ord(u'แบฃ'): 'a', ord(u'รฃ'): 'a', ord(u'แบก'): 'a',
ord(u'ฤ'): 'a', ord(u'แบฏ'): 'a', ord(u'แบฑ'): 'a', ord(u'แบณ'): 'a', ord(u'แบต'): 'a', ord(u'แบก'): 'a',
ord(u'รข'): 'a', ord(u'แบง'): 'a', ord(u'แบฅ'): 'a', ord(u'แบญ'): 'a', ord(u'แบซ'): 'a', ord(u'แบฉ'): 'a',
ord(u'ฤ'): 'd', ord(u'ฤ'): 'd',
ord(u'รจ'): 'e', ord(u'รฉ'): 'e', ord(u'แบป'): 'e', ord(u'แบฝ'): 'e', ord(u'แบน'): 'e',
ord(u'รช'): 'e', ord(u'แป'): 'e', ord(u'แบฟ'): 'e', ord(u'แป'): 'e', ord(u'แป
'): 'e', ord(u'แป'): 'e',
ord(u'รฌ'): 'i', ord(u'รญ'): 'i', ord(u'แป'): 'i', ord(u'ฤฉ'): 'i', ord(u'แป'): 'i',
ord(u'ฦฐ'): 'u', ord(u'แปซ'): 'u', ord(u'แปฉ'): 'u', ord(u'แปญ'): 'แปฏ', ord(u'แปฏ'): 'u', ord(u'แปฑ'): 'u',
ord(u'รฝ'): 'y', ord(u'แปณ'): 'y', ord(u'แปท'): 'y', ord(u'แปน'): 'y', ord(u'แปต'): 'y',
}
slug = slugify(unicode(data).translate(vietnamese_map))
return slug
Then you should override the save method for changing slug before it will be saved.
Note: the slug field has change to TextField.
def save(self, *args, **kwargs):
if not self.parent_category is None:
try:
parent_category = Category.objects.get(slug=self.parent_category)
parent_category.numberChild += 1
parent_category.save()
if self.slug == "":
self.slug = vi_slug(self.name)
else:
self.slug = vi_slug(self.slug)
except:
pass
super(Category, self).save()
Hope this can help you less comsuming time for solving the same problem.
๐คQuan Pham
Source:stackexchange.com