首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django国际化(I18N)不更改文本

Django国际化(I18N)不更改文本
EN

Stack Overflow用户
提问于 2016-09-03 20:52:44
回答 2查看 1.1K关注 0票数 0

我创建了一个简单的网站来测试国际化,但我无法让它按照我想要的方式工作。我想在不检查request.LANGUAGE_CODE (正确显示)的情况下更改views.py中的消息。

我可以访问前缀为/en//pt-br/的urls,但它们不会更改模板中的文本。

我试着跑

代码语言:javascript
复制
django-admin makemessages --locale=pt_BR

我换了台词

代码语言:javascript
复制
#: mytest/views.py:7
msgid "Welcome to my site."
msgstr "Bem vindo ao meu site."

范围

代码语言:javascript
复制
django-admin compilemessages --locale=pt_BR

PS:(尽管这是错误的,我也尝试了django-admin makemessages/编译程序--locale=pt-br )

我在settings.py中更改了什么(添加了我的应用程序,添加了地区中间件,增加了一些内部化设置)

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'mytest'
]
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',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale/translations/'),
]

LANGUAGE_CODE = 'en-us'

from django.utils.translation import ugettext_lazy as _
LANGUAGES = [
  ('pt-br', _('Portuguese')),
  ('en', _('English')),
]

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

views.py

代码语言:javascript
复制
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _

def index(request):
    print(request.LANGUAGE_CODE) #this shows correctly the prefix in the url
    output = _("Welcome to my site.")
    context = {"test_translate": output}
    return render(request, "mytest/index.html", context)

urls.py

代码语言:javascript
复制
from django.conf.urls.i18n import i18n_patterns
from mytest import views

urlpatterns = [
]
urlpatterns += i18n_patterns(
    url(r'^$', views.index, name='index'),
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-04 04:13:02

我觉得我的路不对。我认为额外的斜线是错误的..。我从LOCALE_PATH中删除/翻译/它现在正在工作。

代码语言:javascript
复制
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]

然后我跑了

代码语言:javascript
复制
django-admin compilemessages -l pt_BR

修改生成的*.po并运行

代码语言:javascript
复制
django-admin compilemessages -l pt_BR

我还将en-us更名为en in LANGUAGE_CODE = 'en-us'

票数 1
EN

Stack Overflow用户

发布于 2019-11-08 06:38:21

请遵循以下步骤。

1)在根目录中创建文件夹'locale'

2)增加中间设备

代码语言:javascript
复制
.....
'django.middleware.common.CommonMiddleware',
'django.middleware.locale.LocaleMiddleware',
....

3)在settings.py集中

代码语言:javascript
复制
USE_L10N = True

LANGUAGE_CODE = 'pt-BR'

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

LANGUAGES = (
    ('pt_BR', 'Portuguese'),
)

4)运行以下命令

代码语言:javascript
复制
$ django-admin makemessages -l pt_BR -i env
$ django-admin compilemessages -l pt_BR

5)然后在locale > pt_BR > LC_MESSAGES > django.po中更新所需的翻译文本,然后再次运行

代码语言:javascript
复制
$ django-admin compilemessages -l pt_BR
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39311230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档