为什么在 django 管理站点中没有翻译所有内容

why everything is not translated in django admin site

我将默认值 LANGUAGE_CODEen-us 更改为 fa-ir 在 settings.py 文件中,但有些句子和单词仍然是英文的,没有翻译(我在附图中有一些例子)

这是我的应用的 admin.py 文件:

from django.contrib import admin, messages
from django.utils.translation import ngettext

from .models import Product, Category, ProductImage


# Register your models here.


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('Name', 'Slug', 'Parent',)
    prepopulated_fields = {"Slug": ("Name",)}


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    fields = (('Title', 'Slug'), ('Description', 'IsExists'), 'Category', 'Created',)
    list_display = ('Title', 'Slug', 'Description', 'IsExists', 'Category', 'Created',)
    prepopulated_fields = {"Slug": ("Title",)}
    
    def save_form(self, request, form, change):
        super().save_form(request, form, change)


@admin.register(ProductImage)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('Product', 'Image',)
不幸的是,

i18n 比仅仅更改语言代码要复杂一些。您需要标记要翻译的字符串,生成一个 .po 文件,添加翻译,然后将它们编译成 .mo 个文件。

Django 有一些字符串已经被标记为翻译,这就是为什么你的一些文本在管理中被翻译的原因。其他文本,如模型上的字段名称、帮助文本或模板文本,则不会。要标记 models/fields 进行翻译,我通常会这样做:

...

from django.utils.translation import ugettext_lazy as _


class MyModel(models.Model):

    my_field = models.CharField(verbose_name=_('My Field'), max_length=123)
    
    class Meta:
        verbose_name = _('My Model')
        verbose_name_plural = _('My Models')

然后您可以使用 Django 管理命令 ./manage.py makemessages,这将在您的 locale 目录(在 settings.py 中定义)中生成消息文件 (.po)。

然后您可以进入并添加它生成的字符串的翻译版本。一旦你的翻译被添加到 .po 文件,你可以 运行 manage.py compilemessages - 这将生成一个 .mo 文件,这是 Django 用来显示翻译的二进制文件它遇到一个有翻译的字符串。

我建议您仔细阅读文档,因为其中有几个步骤 this stuff and if you have a lot of strings to translate, this 翻译工具包非常有用