0

在尝试实现网站的翻译版本时,我遇到了以下问题:

假设我有一个这样定义的模型:

class Model(models.model)
    name=models.CharField(max_length=10)
    ...

为了创建一些数据(稍后显示在网页上),我使用了一个特殊的视图,其中包括以下行:

Model.objects.create(name = "testName",...)

我尝试使用以下代码实现翻译:

Model.objects.create(name = _("testName"),...)

如果我 import ugettextas _,它只是将“testName”的翻译值放入数据库中。如果我导入ugettext_lazy_,我有一个InterfaceError(更准确地说是Error binding parameter X - probably unsupported type.

我想知道如果我必须找到一些解决方法,是否可以进行这样的初始化。

提前致谢。

4

3 回答 3

2

只需将英文版本存储在数据库中,并且仅在输出期间调用 ugettext/_lazy。这显然只有在存在这些字符串的翻译时才有效,否则它将以任何方式显示英文版本......</p>

于 2012-04-22T14:33:35.423 回答
1

ugettextugettext_lazy用于静态 I18N 翻译。它们应用于代码中的可翻译文本,以将文本收集到.po文件中,最后收集到文件中.mo
通常对于动态文本,您需要通过 Django ORM 在 DB 中创建翻译模式,并在 Django Admin 等视图中编辑翻译。然后在您看来,根据请求的语言显示正确的翻译版本。
您可以通过酸洗将其“存储”ugettext_lazy __proxy__到数据库中,并且可以解开并应用unicode它以获取翻译。但是,IMO,将文字从代码存储到数据库毫无意义。

如果您想要通过 Web 界面管理的基于 po 的翻译解决方案,请参考https://github.com/mbi/django-rosetta

于 2012-04-22T13:39:47.757 回答
0

只需添加它以防有人需要它。

这是我发现实现 Florian 解决方案并避免_每次都需要添加/删除函数的最佳方式。您将在包含字符串的文件中定义一个虚拟函数:

def _(input):
     return input

这样,您的字符串将以原始语言存储,但makemessages仍将像需要翻译的字符串一样处理它们,从而将它们放入.po文件中。你只需要{% trans %}在 html 中使用块。

于 2012-08-12T16:53:15.920 回答