wagtail 实现中英文

原创 2018年04月16日 16:20:24

1、在settings中设置使用本地自定义的语言

MIDDLEWARE = [
    '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',
    'django.middleware.security.SecurityMiddleware',

    'wagtail.core.middleware.SiteMiddleware',
    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
]

2、模板中使用翻译

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(PROJECT_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.template.context_processors.i18n',  # 添加
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

3、设置本地语言选项及模板翻译目录

from django.utils.translation import gettext_lazy as _

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

LANGUAGES =  WAGTAILADMIN_PERMITTED_LANGUAGES =[
                               ('en-us', _('English')),
                               ('zh-cn', _('Chinese')),
                            ]

4、model 编码方法

from django.db import models
from wagtail.core.fields import RichTextField
from wagtail.core.models import Page
from django.utils import translation
from wagtail.admin.edit_handlers import FieldPanel
from django.utils.translation import gettext_lazy as _


class TranslatedField:
    def __init__(self, en_field, zh_field):
        self.en_field = en_field
        self.zh_field = zh_field

    def __get__(self, instance, owner):
        if translation.get_language() == 'zh-cn':
            return getattr(instance, self.zh_field)
        else:
            return getattr(instance, self.en_field)
        
class BlogPage(Page):
    title_zh = models.CharField('标题(中文)', max_length=255)
    body_en = RichTextField('content')
    body_zh = RichTextField('详细内容')
    translated_title = TranslatedField(
        'title',
        'title_zh',
    )
    body = TranslatedField(
        'body_en',
        'body_zh',
    )

    content_panels = Page.content_panels + [
        FieldPanel('title_zh'),
        FieldPanel('body_en', classname="full"),
        FieldPanel('body_zh', classname="full"),
    ]

    class Meta:
        verbose_name = '测试'

5、模板使用方法

{% load wagtailcore_tags %}
{% load staticfiles %}
{% load i18n %}
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    {% trans "Simple Blog" as title %}
    <title>{{ title}}</title>
</head>
<body class="customize-support">
    <h1>{{title}}</h1>
    <h2>{{ page.translated_title }}</h2>
    <h3>{{ page.body|richtext }}</h3>
</body>
</html>

6、在模板中写完之后还要编译

python manage.py makemessages -l zh_CN   ----> processing locale zh_CN

手动翻译之后

python manage.py compilemessages  -----> processing file django.po in /path/to/locale/zh_CN/LC_MESSAGES

7、手动翻译部分

#: home/templates/home/blog_page.html:7
msgid "Simple Blog"
msgstr "博客"

#: lvjingiant/settings/base.py:175
msgid "English"
msgstr ""

#: lvjingiant/settings/base.py:176
msgid "Chinese"
msgstr ""

使用wagtail搭建cms的安装流程

wagtail基于django开发的cms系统
  • wxm6614
  • wxm6614
  • 2017-02-13 19:04:32
  • 1776

CMS系统搭建学习资料

http://www.jikexueyuan.com/course/2386_2.html
  • ritterliu
  • ritterliu
  • 2016-08-01 22:20:31
  • 1509

python 资源大全

转载地址:https://my.oschina.net/u/2306127/blog/639345 Awesome Python Environment Management    环境管...
  • yang889999888
  • yang889999888
  • 2017-07-12 17:09:49
  • 213

Javaweb切换中英文功能

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • trista95
  • trista95
  • 2017-12-10 21:18:26
  • 495

Anguarjs实现国际化,中英文切换Demo

目录结构 index.html Test Page ...
  • u014788227
  • u014788227
  • 2017-01-06 09:39:15
  • 1663

如何实现ASP.Net系统的中英文版

 如何实现ASP.Net系统的中英文版,在这里只提供一种方法,不过可以肯定的是Vs.net2005提供的皮肤肯定比这个方法先进和方便。首先设计一个数据表来存储控件的Text值,表结构如下:Text(程...
  • yjfuture
  • yjfuture
  • 2006-11-02 16:15:00
  • 762

Android 中英文切换的实现。

有的项目。需要英语。这时候就涉及了中英文的切换了 前提:字符串都在string 中写两份。 一份是在 values中的strings中定义汉字 另外一份,就是你要切...
  • qq_26841579
  • qq_26841579
  • 2017-04-16 00:22:30
  • 433

这可能是目前最方便的网站中英文切换(理论支持所有语言)

一、简述公司最近做的一个官网项目,要求把页面成国际化,实现中英文切换,为此,我在网上找了一些中英文切换的解决方案,大概为如下两种:1、使用谷歌整站翻译Api 优点:只须调用接口,即可轻松完成整站翻译,...
  • CSDN_LQR
  • CSDN_LQR
  • 2017-09-19 09:23:43
  • 5899

有用的Python库

环境管理管理 Python 版本和环境的工具p – 非常简单的交互式 python 版本管理工具。pyenv – 简单的 Python 版本管理工具。Vex – 可以在虚拟环境中执行命令。virtua...
  • huayucong
  • huayucong
  • 2017-12-19 11:14:57
  • 362

java web 项目实现手动中英文切换

java国际化实现思路     Java程序的国际化思路是将程序中的标签、提示信息等放在资源文件中,程序需要支持国家/语言环境,则必须提供对应的资源文件。资源文件是key-value对,每个资源文件中...
  • ldybing
  • ldybing
  • 2016-08-16 12:17:32
  • 6836
收藏助手
不良信息举报
您举报文章:wagtail 实现中英文
举报原因:
原因补充:

(最多只允许输入30个字)