Python Django国际化/翻译不适用于动态生成的URL

Python Django国际化/翻译不适用于动态生成的URL,python,django,internationalization,translation,django-urls,Python,Django,Internationalization,Translation,Django Urls,我遇到了一个双语网站的问题,我在其他问题中找不到答案。因此,我建立了一个表单和显示系统,它严重依赖于为每个模型提供的详细名称。详细的名称是经过翻译的,所以我们的想法是一切都可以从这个基础上进行。例如,我的产品/models.py中有一个模型: from django.utils.translation import ugettext_lazy as _ class ProductType(models.Model): description = models.CharField(max

我遇到了一个双语网站的问题,我在其他问题中找不到答案。因此,我建立了一个表单和显示系统,它严重依赖于为每个模型提供的详细名称。详细的名称是经过翻译的,所以我们的想法是一切都可以从这个基础上进行。例如,我的产品/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')
从那里,我创建了基于类的表单和视图。然后,我通过导入视图并在url.py中循环来创建url(本例中我只关注一个url):

如您所见,url和url名称都来自模型详细名称的slagified版本,该版本经过翻译。当网站设置为英语时,一切正常。但当设置为土耳其语时,系统无法找到翻译后的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/$>
product-type/list/$
但是很明显,详细的名称翻译是有效的,因为我们在模板的{%url%}标记中打印了urun-tipi列表,但没有找到它

我将提供一些关于国际化设置的更一般的信息,以防它有所帮助

在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文件具有以下特定详细名称:

/嗯

/tr


如果你问我的话,我会很神秘的,但是任何帮助都会很感激的

可能
ugettext\u lazy
会将字符串的转换推迟到实际需要时。你有没有试着用他热切的弟弟ugettext来代替?顺便说一句,每次你导入
urls.py
,你都会填充
编辑模式
,因此
urlpatterns
,我认为这不是你想要做的。
slug=slugify(ugettext(list\u view.model.\u meta.verbose\u name))
@ozgur-我想你可能有什么想法,但是,当我尝试使用普通的ugettext时,它似乎根本不进行任何翻译:/maybuly
ugettext\u lazy
将字符串的翻译推迟到实际需要时。你有没有试着用他热切的弟弟ugettext来代替?顺便说一句,每次你导入
urls.py
,你都会填充
编辑模式
,因此
urlpatterns
,我认为这不是你想要做的。
slug=slugify(ugettext(list\u view.model.\u meta.verbose\u name))
@ozgur-我想你可能有什么想法,但当我尝试使用纯ugettext时,它似乎根本无法进行任何翻译:/
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',
)
#: products/models.py:14
msgid "Ürün Tipi"
msgstr "Product Type"
#: products/models.py:14
msgid "Ürün Tipi"
msgstr "Ürün Tipi"