为什么在 django 管理站点中没有翻译所有内容
why everything is not translated in django admin site
我将默认值 LANGUAGE_CODE 从 en-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 翻译工具包非常有用
我将默认值 LANGUAGE_CODE 从 en-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 翻译工具包非常有用