Django JavaScript翻译:gettext未定义

5

我的JavaScript函数包含以下内容:

document.getElementById("example").innerHTML = gettext("This is an example");

我的urls.py看起来像这样:

urlpatterns = [
    url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    url(r'^admin/', admin.site.urls),
    url(r'^', include('project.urls')),
    url(r'^login/$', auth_views.login, {'template_name': 'login.html', 'authentication_form': LoginForm}, name = 'login'),
    url(r'^logout/$', auth_views.logout, {'next_page': '/login'}),
    url(r'^i18n/', include('django.conf.urls.i18n')),
]

在我的模板中,我有:

<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>

上面使用gettext()的翻译无法工作。出现了一个引用错误,显示gettext()未定义。然而,在同一个javascript文件中,我有:

var monthNames =  [gettext("January"), gettext("February"), gettext("March"), gettext("April"), gettext("May"), gettext("June"), gettext("July"), gettext("August"), gettext("September"), gettext("October"), gettext("November"), gettext("December")];

这不会引发参考错误。月份翻译可以正常工作,但示例却不能。

4个回答

4

我不确定,但是请检查您脚本的顺序。如果您在加载javascript-catalog的脚本标记之前使用gettext()函数,则可能会出现上面示例的问题。


好的发现!但它并没有解决问题。错误仍然出现。不过还是谢谢! - ALUW
通过删除 document.getElementById("example").innerHTML = gettext("This is an example"); 行检查其他gettext()函数调用是否不会抛出ReferenceError。如果它们正常工作,那么很可能是脚本在您的函数调用后加载或任何其他范围问题导致的问题。 - Kishu Agarwal
更改脚本被调用的位置并没有任何作用。相同的错误仍然存在。 - ALUW
有一件事情你可以做。尝试在这一行上设置断点,当断点发生时,从您的开发工具中检查javascript目录文件是否已加载。如果没有加载,则必须将包含此行的函数移动到加载javascript目录的行下方。 - Kishu Agarwal
否则,您可以将此行代码移动到您的月份调用正常工作的位置。 - Kishu Agarwal
显示剩余2条评论

0
我确实遇到了完全相同的问题,即使我在 gettext() 之前插入了脚本标签也是如此。 简单的解决方法是确保在 urlpatterns 中目录位于应用程序之前:
urlpatterns = [

    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
     ...
    <your app>
]

0

这里提供了完整的指南,教你如何在前端添加管理员日期选择器。

forms.py

from django.contrib.admin import widgets
from django import forms
from .models import Student

class StudentForm(forms.ModelForm):

    class Media:
        css = {
            'all': (
                '/static/admin/css/widgets.css',
            )
        }
        js = [
            # '/admin/jsi18n/',
            '/static/admin/js/core.js',
        ]
    
    class Meta:
        model = Student
        fields = [
            "first_name",  
            "last_name", 
            "birth_date", 
        ]
        widgets = {
            'birth_date': widgets.AdminDateWidget()
        }

urls.py

from django.views.i18n import JavaScriptCatalog
from django.urls import path

urlpatterns = [
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
]

add_student.html

<form action="{% url 'some_url' %}" method="post">
    {% csrf_token %}
    <table>
        {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
</form>

<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
{{ form.media }}

-5
<script src="/jsi18n/"></script> 

在 jQuery 代码块之前添加这个。希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接