Django 静态文件的多语言支持

2023-04-11 00:00:00 支持 静态 多语言

在 Django 中,静态文件指的是 CSS、JavaScript、图片等不需要动态生成的文件。在多语言网站中,我们需要为不同语言版本的页面提供相应的静态文件。

首先,我们需要在项目的 settings.py 文件中设置静态文件的目录:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

然后,在模板中使用静态文件时,我们需要使用 Django 提供的静态文件模板标签。例如,使用以下代码引入静态文件:

{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">

为了支持多语言,我们需要在静态文件的文件名中包含语言代码。例如,我们可以在文件名中添加语言代码作为前缀,如“en_style.css”、“zh_style.css”。

可是这种做法不够优雅,我们可以使用 Django 提供的 i18n URL 标志来实现更简洁的多语言静态文件管理。我们可以在 URLs 中使用 i18n URL 标志来匹配带有语言代码前缀的静态文件 URL。例如:

from django.urls import path, re_path, i18n_patterns

...

urlpatterns += i18n_patterns(
    ...
    re_path(r'^static/(?P<lang>[a-z]{2})/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
    ...
)

其中,“lang”是语言代码,而“path”则是静态文件的路径。我们可以在模板中使用以下代码引入静态文件:

{% load i18n static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}?{% language %}">

这样,系统会自动根据当前语言版本为静态文件生成带有语言代码前缀的 URL,避免了手动添加语言代码的麻烦。

相关文章