使用 Django 4.0.2 和 GAE 標準,選擇語言時站點文本不會更改。主要語言是英語。第二語言是荷蘭語。如果我切換語言,則 url 會更改并包含/nl
而不是en/
,但英文文本仍然存在。在 localhost 上,英文文本將替換為荷蘭文文本。
我正在使用django-rosetta,在 GAE 上,它的儀表板找到了我的應用程式的兩個實體,稱為workspace/
和srv/
。每個都.mo
在相同的位置包含相同的檔案/workspace/locale/nl/LC_MESSAGES/django.po
。我不知道為什么有兩個應用程式,或者這是否相關。在 localhost 上,我在預期位置有一個應用程式。
沒有錯誤,檢查.mo
檔案是否存在回傳True
。
我的locale
目錄位于專案根目錄中。在本地,這是我的專案名稱,在 GAE 上,專案根目錄的名稱是workspace
. 這應該沒問題,因為使用構建檔案路徑ROOT_DIR
對于語言環境設定和所有其他設定仍然可以正常作業。
相關設定如下:
ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
_locale_dir = ROOT_DIR / "locale"
_locale_file = _locale_dir / "nl/LC_MESSAGES/django.po"
print(f"--- {_locale_file.is_file() = }")
LOCALE_PATHS = [ROOT_DIR / "locale", "/workspace/locale", "/srv/locale"]
APPS_DIR = ROOT_DIR / "lettergun"
TIME_ZONE = "CET"
LANGUAGE_CODE = "en"
USE_I18N = True
# USE_L10N = True # Deprecated in Django 4
USE_TZ = True
LOCALE_PATHS = [ROOT_DIR / "locale", "/workspace/locale", "/srv/locale"]
LANGUAGES = (
("en", _("English")),
("nl", _("Dutch")),
)
MIDDLEWARE = [
...
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
...
]
# TRANSLATION USING ROSETTA
# ------------------------------------------------------------------------------
ROSETTA_MESSAGES_PER_PAGE = 20
ROSETTA_ENABLE_TRANSLATION_SUGGESTIONS = True
DEEPL_AUTH_KEY = "e3b5c854-f059-2f86-6ebb-5eeafc3c57a6"
ROSETTA_LANGUAGE_GROUPS = True
ROSETTA_SHOW_AT_ADMIN_PANEL = True
網址配置
from django.conf.urls.i18n import i18n_patterns
urlpatterns: URLList = i18n_patterns(
# base app
path("", include("lettergun.apps.base.urls", namespace="base")),
path("blog/", include(wagtail_urls)),
... etc
) static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns = [
# API base url
path("api/", include("config.api_router")),
# DRF auth token
path("auth-token/", obtain_auth_token),
]
模板示例
{% load i18n %}
...
{% get_current_language as CURRENT_LANGUAGE %}
{% get_available_languages as AVAILABLE_LANGUAGES %}
{% get_language_info_list for AVAILABLE_LANGUAGES as languages %}
...
{% for language in languages %}
<span class="inline-block">
<a class=" {% if language.code == CURRENT_LANGUAGE %} font-bold {% endif %} px-1" href="/{{ language.code }}/">
{% if language.name_local == "English" %} EN {% elif language.name_local == "Nederlands" %} NL {% endif %}
</a>
</span>
{% endfor %}
uj5u.com熱心網友回復:
該問題是由.gcloudignore
包含檔案的自動生成檔案引起的.mo
。
如果目錄檔案丟失,Django 不會引發錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507773.html
標籤:Google Cloud Collective python-3.x django 谷歌应用引擎 谷歌应用引擎 pytho