python - 如何向 Django 项目添加多种语言?
问题描述
我正在向我的 Django 网站添加第二种语言,但是当我选择第二种语言时,没有任何变化。
设置.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'login_required.middleware.LoginRequiredMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# provide a list of language which your site support
LANGUAGE_CODE = 'en-us'
LANGUAGES = [
('en', 'English'),
('ar', 'Arabic'),
]
# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# List where django should look into for django.po
LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale'), ]
网址.py
from django.conf.urls.i18n import set_language
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
path('', include('company.urls')),
path('', include('core.urls')),
path('', include('movement.urls')),
path('', include('warehouse.urls')),
path('setlang/', set_language, name='set_language'),
path('', include('maintenance.urls')),
path('', include('reporters.urls')),
path('', include('accounts.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
索引.html
{% load i18n static %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<div class="btn-group">
<button type="button" class="btn dropdown-toggle dropdown-icon" data-toggle="dropdown">
<i class="fa fa-language"></i>
</button>
<div class="dropdown-menu" role="menu">
{% for language in languages %}
{% if language.code != LANGUAGE_CODE %}
<a class="dropdown-item" href="{% url 'set_language' %}" class="dropdown-item"
data-language-code="{{ language.code }}"> {{ language.name_local }}
</a>
{% endif %}
{% endfor %}
</div>
</div>
我也运行这些命令
- py manage.py makemessages -l ar
- django-admin 编译消息
并翻译 django.po 文件中的所有字符串。但是当我选择另一种语言时,什么都没有改变。
解决方案
我发现我的代码问题它在模板 indes.html 中
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<div class="input-group">
<div class="input-group-prepend">
<button type="submit" class="btn btn-default" value="Go">{% trans 'Save' %}</button>
</div>
<!-- /btn-group -->
<input name="next" type="hidden" value="{{ redirect_to }}">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<select class="custom-select" name="language">
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %}
selected{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
</div>
</form>
我刚刚添加了一个标签并将 action 属性设置为 set_language url,一切正常。
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
推荐阅读
- python - 在 Django 中使用 For 循环和 If 条件在 Bootstrap Carousel 中显示图像
- python - 索引列表的值
- c++ - 从共享库加载 Qt SQL 驱动程序插件
- python - yfinance 给出错误的数字
- ios - iOS:只有 Airpods 直接连接接听电话。其他公司耳机,接听后需选择蓝牙
- javascript - CSS z-index 渲染
- r - R processx包错误无法写入连接(系统错误32,管道损坏)
- java - Android studio IDE 更改波斯语注释字体
- c# - 优化以 Json 形式返回 200K 行的 API 的性能
- rust - 在 Rust 构造函数中取得所有权并借用