如何将一个字符串从西里尔语翻译成拉丁语

2024-05-23 23:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个故事模型。用户可以用俄语输入标题,我需要保存别名,它将从西里尔文转换为拉丁文(不是翻译)。例如,“ПриееТ”将是“女贞”,而不是“嗨”。你知道吗

class Story(models.Model):
    title = models.CharField(max_length=255)
    alias = models.CharField(max_length=255, null=True, blank=True)

Tags: 用户模型true标题modeltitlemodelsalias
2条回答

要进行实际的别名处理,您可以使用python-slugify进行翻译。这将把它变成一个URL安全的ascii版本,处理西里尔文、中文、德语等

>>> from slugify import slugify
>>> slugify('привет')
'privet'
>>> slugify('привет, привет', separator=' ')
'privet privet'

至于如何做到这一点,你的模型,有很多方法。这里有一个使用DRF序列化程序。我建议对create和get/list等使用不同的序列化程序

class StoryCreateSerializer(serializers.ModelSerializer):
    other_field = CharField(required=False)

    class Meta:
        model = Story
        fields = ['title', 'other_field']

    def validate(self, attrs):
        attrs['alias'] = slugify(attrs['title'])
        return attrs


ser = StoryCreateSerializer(request.data)
ser.is_valid(raise_exception=True)
print(ser.validated_data)
    { "title", "My Title", "alias": "my-title", "other_field": "x" }

可以重写model's save method

class Story(models.Model):
    title = models.CharField(max_length=255)
    alias = models.CharField(max_length=255, null=True, blank=True)

    def save(self, *args, **kwargs):
        if not self.alias:
            self.alias = your_transliteration_function(self.title)
        super().save(*args, **kwargs)

相关问题 更多 >