我遇到了双语网站的问题,我无法在任何其他问题中找到答案。所以,我已经连接了一个表单和显示系统,它严重依赖于给每个模型的详细名称。详细的名称已被翻译,因此我们的想法是,所有内容都可以在该基础上运行。所以,例如,我的产品/ models.py中有一个模型:
from django.utils.translation import ugettext_lazy as _
class ProductType(models.Model):
description = models.CharField(max_length=250)
...
class Meta:
verbose_name = _('Ürün Tipi')
verbose_name_plural = _('Ürün Tipleri')
从那里,我创建基于类的表单和视图。然后,我通过导入视图并在urls.py中循环遍历来创建URL(我将只关注此示例中的一个URL):
from django.conf.urls import patterns, url
from .views import editing_views
editing_patterns = []
for view in editing_views:
list_view = view['list']
slug = slugify(list_view.model._meta.verbose_name)
editing_patterns.append(
url(_(r'{0}/list/$').format(slug), list_view.as_view(), name='{0}-list'.format(slug))
)
...
urlpatterns = patterns('products.views',
*editing_patterns
)
正如您所看到的,url和url名称都来自模型的详细版本的详细名称,该名称已被翻译。当网站设置为英语时,一切正常。但是当它设置为土耳其语时,系统找不到翻译的网址:
Reverse for 'urun-tipi-list' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
现在奇怪的是,当我将此文件中的url模式导入django shell时,无论网站设置的语言是什么,我都会获得土耳其语名称:
<RegexURLPattern urun-tipi-list urun-tipi/list/$>
现在,也许这只是Django shell的一些奇怪,但我也在urls.py文件的末尾将模式打印到控制台,主要问题似乎是运行时的url是英文的,无论网站设置为什么:
product-type/list/$
但很明显,verbose_name转换工作正常,因为这是我们将urun-tipi-list打印在模板的{%url%}标签中的位置。
如果它有用,我会提供一些关于国际化设置的更一般的信息。
在settings.py中:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.i18n',
...
)
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
...
)
USE_I18N = True
LANGUAGES = [
('tr', _('Turkish')),
('en', _('English')),
]
LOCALE_PATHS = (
'locale',
)
在运行命令行之后,生成的.po文件对于这个特定的详细名称具有以下内容:
/ EN
#: products/models.py:14
msgid "Ürün Tipi"
msgstr "Product Type"
/ TR
#: products/models.py:14
msgid "Ürün Tipi"
msgstr "Ürün Tipi"
如果你问我很神秘,但任何帮助都会受到赞赏。