ベトナム語のサイトで、ほとんど英語と変わりません。ただし、スラッグという問題があります。「ư」、「ơ」、「á」などの文字を入力すると、Django が識別されません。ここでの解決策は、サインインしない文字を置き換えることです。例えば:
ư -> u
ơ -> o
á -> a
「những-viên-kẹo」の 1 つが「nhung-vien-keo」になります。しかし、これを行う方法がわかりません。誰か助けて。どうもありがとうございました!
ベトナム語のサイトで、ほとんど英語と変わりません。ただし、スラッグという問題があります。「ư」、「ơ」、「á」などの文字を入力すると、Django が識別されません。ここでの解決策は、サインインしない文字を置き換えることです。例えば:
ư -> u
ơ -> o
á -> a
「những-viên-kẹo」の 1 つが「nhung-vien-keo」になります。しかし、これを行う方法がわかりません。誰か助けて。どうもありがとうございました!
[編集]
私はそれを取り戻します.djangoはanddjango.template.defaultfilters.slugify()
を使用して、あなたが望むことを行います. 文字列を slugify に入力するだけで動作します:unicodedata.normalize
.encode('ascii', 'ignore')
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)
私が以前に書いたソリューション (以下) は、翻訳に追加の文字が必要な言語、たとえばドイツ語の ü->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)
そのためには、新しいフィルターまたはタグを作成する必要があります。
あなたはそれを正規化することができますPython - >
http://pyright.blogspot.com/2009/11/unicode-normalization-python-3x-unicode.html
これは、ベトナム語のアルファベットを ớ bờ cờ dờ đờ から再入力する代わりに役立ち、他の特殊なラテン文字の可能性を無視し、正規化機能を実行し、すべてがうまく機能するかどうかをテストします。単語「đ」をテストすることを忘れないでください。正規化関数が Đ - D を正規化しないという問題に遭遇しました。
がんばれ :P
または、このアプリを取り込んでそれを行うこともできます。
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)