Django多语言应用程序

时间:2015-04-07 08:18:37

标签: django django-multilingual

我正在使用多语言翻译功能构建 django管理应用程序。我用 django-transmeta django-linguo 和几个库进行了测试。上述库的问题是,例如我使用 20种语言,我有一个名为产品的模型,它包含 10 领域即可。现在的情况是, 20种语言* 10个字段= 200个字段将显示在添加产品,编辑产品中。它看起来很讨厌。还有其他方法可以使翻译变得非常脆弱和简单吗?

还有一件事,我想在管理面板中翻译整个内容取决于语言选择。例如,以下屏幕截图提供了更多信息https://docs.google.com/file/d/0B6j95vYIfu8eem1OdkNVbXNudm8/edit

感谢Advance !!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

第1步:gettext

尽可能多地移动来获取文字。在您的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