0

I am building django admin application with multi language translation feature. I have tested with django-transmeta, django-linguo and a couple of libraries. The problem with the above libraries is, for instance i am using 20 languages and I have a model called Product and it contains 10 fields. Now the situation is, 20 languages * 10 fields = 200 fields will be shown in add Product, edit Product. It looks nasty. Is there any other alternative to make translation very crispy and simple ?

One more thing, I wanna to translate the whole content in the admin panel depends on the language choose. For example, the following screenshot gives more information https://docs.google.com/file/d/0B6j95vYIfu8eem1OdkNVbXNudm8/edit

Thanks for Advance !!

4

2 回答 2

0

关于翻译的额外字段导致您的应用程序“添加产品”管理页面上的混乱,我认为您可以使用django-modeltranslationbootstrap-modeltranslation解决它。

bootstrap-modeltranslation包是为django-admin-bootstrapped制作的,它需要它。但是,看看它的代码。他解决问题的方法是在 django admin 上使用 javascript 将额外的翻译字段组织到选项卡上。也许您可以根据您的需要调整此解决方案。

对于翻译模板,最好使用 gettext 方法和django-rosettadjango-translation-manager等工具。您可以在django docs上获得有关 Django 国际化功能的更多信息。

于 2016-11-15T22:47:19.493 回答
0

第 1 步:获取文本

尽可能多地移动以获取文本。在 PO 文件中包含来自不同产品的重复数据将使您的应用程序更快、更干且更易于翻译。

第 2 步:Django 管理员编辑/添加

根据您的需要自定义您的 Django Admin。

我建议您为每种语言创建一个字段集。

class FlatPageAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Advanced options', {
            'classes': ('collapse',),
            'fields': ('product_name', 'product_description'),
        }),
    )

它将使您的添加产品和编辑产品更清洁。或者,您也可以为每种语言使用一个选项卡,而不是 ModelAdmin 字段集。

https://pypi.python.org/pypi/django-tabbed-admin/0.0.3

第 3 步:对字段小部件进行广泛更改

django-transmeta 允许您一次更改所有相关语言字段的小部件。请参阅文档。

from transmeta import canonical_fieldname

class BookAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        field = super(BookAdmin, self).formfield_for_dbfield(db_field, **kwargs)
        db_fieldname = canonical_fieldname(db_field)
        if db_fieldname == 'description':
            # this applies to all description_* fields
            field.widget = MyCustomWidget()
        elif field.name == 'body_es':
            # this applies only to body_es field
            field.widget = MyCustomWidget()
        return field
于 2016-11-16T00:32:27.583 回答