我正在使用多语言翻译功能构建 django管理应用程序。我用 django-transmeta , django-linguo 和几个库进行了测试。上述库的问题是,例如我使用 20种语言,我有一个名为产品的模型,它包含 10 领域即可。现在的情况是, 20种语言* 10个字段= 200个字段将显示在添加产品,编辑产品中。它看起来很讨厌。还有其他方法可以使翻译变得非常脆弱和简单吗?
还有一件事,我想在管理面板中翻译整个内容取决于语言选择。例如,以下屏幕截图提供了更多信息https://docs.google.com/file/d/0B6j95vYIfu8eem1OdkNVbXNudm8/edit
感谢Advance !!
答案 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