【问题标题】:Django Multi Language AppDjango 多语言应用程序
【发布时间】:2015-04-07 08:18:37
【问题描述】:

我正在构建具有多语言翻译功能的 django 管理应用程序。我已经用 django-transmetadjango-linguo 和几个库进行了测试。上述库的问题是,例如我使用 20 种语言,我有一个名为 Product 的模型,它包含 10 字段。现在的情况是,20 个语言 * 10 个字段 = 200 个字段 将显示在 add Product, edit Product 中。看起来很恶心。有没有其他的方法可以让翻译变得非常清晰和简单?

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

感谢提前!!

【问题讨论】:

  • 如果你想把你的模型翻译成不同的语言,你不能避免翻译所有的东西。我建议您查看Django-Rosetta 是一个非常有用的工具,有助于翻译。
  • @Liarez:你以前用过吗?因为,我仍然不清楚它是否符合我在问题中提到的标准。
  • 你不需要那个包来做翻译,那个包为你提供了一个有用的管理页面来创建你的翻译,但是是的,你必须自己翻译它

标签: django django-multilingual


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    第 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2012-03-21
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多