Перевод шаблонов магазина

Отредактируйте шаблон shop/base.html приложения shop. Убедитесь, что в верхней части шаблона загружен тег i18n и пометьте строки для перевода следующим образом:

{% load i18n %}
{% load static %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>
        {% block title %}{% trans "My shop" %}{% endblock %}
    </title>
    <link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
<div id="header">
    <a href="/" class="logo">{% trans "My shop" %}</a>
</div>
<div id="subheader">
    <div class="cart">
        {% with total_items=cart|length %}
            {% if cart|length > 0 %}
                {% trans "Your cart" %}:
                <a href="{% url "cart:cart_detail" %}">
                    {% blocktrans with total_items_plural=total_items|pluralize total_price=cart.get_total_price %}
                        {{ total_items }} item{{ total_items_plural }},
                        ${{ total_price }}
                    {% endblocktrans %}
                </a>
            {% else %}
                {% trans "Your cart is empty." %}
            {% endif %}
        {% endwith %}
    </div>
</div>
<div id="content">
    {% block content %}
    {% endblock %}
</div>
</body>
</html>

Обратите внимание на тег {% blocktrans %} для отображения общей суммы корзины. Ранее он отображалась следующим образом:

{{ total_items }} item{{ total_items|pluralize }},
${{ cart.get_total_price }}

Мы использовали {% blocktrans with ... %} чтобы использовать placeholders для total_items|pluralize (тег шаблона, примененный здесь) и cart.get_total_price (метод объекта, доступ к которому был получен), в результате чего:

{% blocktrans with total_items_plural=total_items|pluralize
total_price=cart.get_total_price %}
    {{ total_items }} item{{ total_items_plural }},
    ${{ total_price }}
{% endblocktrans %}

Теперь отредактируйте шаблон shop/product/detail.html приложения shop и загрузите теги i18n, но после тега {% extends %}, который всегда должен быть первым тегом в шаблоне:

{% load i18n %}

Затем найдите следующую строку:

<input type="submit" value="Add to cart">

И замените ее на следующий код:

<input type="submit" value="{% trans "Add to cart" %}">

Теперь давайте переведем шаблоны приложения orders. Измените шаблон orders/order/create.html приложения orders:

{% extends "shop/base.html" %}
{% load i18n %}

{% block title %}
    {% trans "Checkout" %}
{% endblock %}

{% block content %}
    <h1>{% trans "Checkout" %}</h1>

    <div class="order-info">
        <h3>{% trans "Your order" %}</h3>
        <ul>
            {% for item in cart %}
                <li>{{ item.quantity }}x {{ item.product.name }} <span>${{ item.total_price }}</span></li>
            {% endfor %}
            {% if cart.coupon %}
                <li>
                    {% blocktrans with code=cart.coupon.code discount=cart.coupon.discount %}
                        "{{ code }}" ({{ discount }}% off)
                    {% endblocktrans %}
                    <span>- ${{ cart.get_discount|floatformat:"2" }}</span>
                </li>
            {% endif %}
        </ul>
        <p>{% trans "Total" %}: ${{ cart.get_total_price_after_discount|floatformat:"2" }}</p>
    </div>

    <form action="." method="post" class="order-form">
        {{ form.as_p }}
        <p><input type="submit" value="{% trans "Place order" %}"></p>
        {% csrf_token %}
    </form>
{% endblock %}

Посмотрите на следующие файлы, которые предоставляются вместе с этой главой, чтобы увидеть, как строки помечаются для перевода:

  • Приложение shop, шаблон shop/product/list.html
  • Приложение orders, шаблон orders/order/created.html
  • Приложение cart, шаблон cart/detail.html

Давайте обновим файлы сообщений, чтобы включить новые строки перевода. Откройте терминал и выполните следующую команду:

django-admin makemessages --all

Загляните в файлы .po в каталоге locale проекта myshop, и вы увидите, что приложение orders теперь содержит все строки, которые были помечены для перевода.

Отредактируйте файлы перевода .po проекта и приложения orders и включите перевод на Испанский язык. В исходном коде, поставляемом вместе с данной главой, можно ссылаться на переведенные файлы .po.

Откройте терминал из каталога проекта и выполните следующие команды:

cd orders/
django-admin compilemessages
cd ../

Мы скомпилировали файлы перевода для приложения order.

Выполните следующую команду, чтобы переводы для приложений, не содержащих каталога locale, включились в файл сообщений проекта:

django-admin compilemessages

results matching ""

    No results matching ""