Closes #13102: Establish initial translation support in templates

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
Arthur Hanson
2023-07-29 03:30:25 +07:00
committed by GitHub
parent cf1b1a83eb
commit 7c17d2e932
257 changed files with 2056 additions and 1762 deletions

View File

@@ -2,19 +2,20 @@
{% load helpers %}
{% load form_helpers %}
{% load render_table from django_tables2 %}
{% load i18n %}
{% block title %}Add {{ model_name|title }}{% endblock %}
{% block title %}{% blocktrans %}Add {{ model_name|title }}{% endblocktrans %}{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="component-form-tab" data-bs-toggle="tab" data-bs-target="#component-form" type="button" role="tab" aria-controls="component-form" aria-selected="true">
Bulk Creation
{% trans "Bulk Creation" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="object-list-tab" data-bs-toggle="tab" data-bs-target="#object-list" type="button" role="tab" aria-controls="object-list" aria-selected="false">
Selected Objects
{% trans "Selected Objects" %}
{% badge table.rows|length %}
</button>
</li>
@@ -40,7 +41,7 @@
<div class="row">
<div class="col col-md-12 col-lg-10 offset-lg-1">
<div class="card">
<h5 class="card-header">{{ model_name|title }} to Add</h5>
<h5 class="card-header">{{ model_name|title }} {% trans "to Add" %}</h5>
<div class="card-body">
{% for field in form.visible_fields %}
{% render_field field %}
@@ -49,8 +50,8 @@
</div>
<div class="form-group text-end">
<div class="col col-md-12">
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<a href="{{ return_url }}" class="btn btn-outline-danger">{% trans "Cancel" %}</a>
<button type="submit" name="_create" class="btn btn-primary">{% trans "Create" %}</button>
</div>
</div>
</div>

View File

@@ -1,6 +1,7 @@
{% extends 'base/layout.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% load i18n %}
{% comment %}
Blocks:
@@ -13,15 +14,18 @@ Context:
return_url: The URL to which the user is redirected after submitting the form
{% endcomment %}
{% block title %}Delete {{ table.rows|length }} {{ model|meta:"verbose_name_plural"|bettertitle }}?{% endblock %}
{% block title %}{% blocktrans %}Delete {{ table.rows|length }} {{ model|meta:"verbose_name_plural"|bettertitle }}?{% endblocktrans %}{% endblock %}
{% block content %}
<div class="container-md px-0">
<div class="alert alert-danger mb-3" role="alert">
<h4 class="alert-heading">Confirm Bulk Deletion</h4>
<h4 class="alert-heading">{% trans "Confirm Bulk Deletion" %}</h4>
<hr />
<strong>Warning:</strong> The following operation will delete <strong>{{ table.rows|length }}</strong>
{{ model|meta:"verbose_name_plural" }}. Please carefully review the objects to be deleted and confirm below.
<strong>{% trans "Warning" context "Noun" %}:</strong>
{% blocktrans with count=table.rows|length type_plural=model|meta:"verbose_name_plural" %}
The following operation will delete <strong>{{ count }}</strong> {{ type_plural }}. Please
carefully review the objects to be deleted and confirm below.
{% endblocktrans %}
{% block message_extra %}{% endblock %}
</div>
</div>
@@ -36,8 +40,8 @@ Context:
{{ field }}
{% endfor %}
<div class="text-end">
<button type="submit" name="_confirm" class="btn btn-danger">Delete {{ table.rows|length }} {{ model|meta:"verbose_name_plural" }}</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">Cancel</a>
<button type="submit" name="_confirm" class="btn btn-danger">{% trans "Delete" %} {{ table.rows|length }} {{ model|meta:"verbose_name_plural" }}</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">{% trans "Cancel" %}</a>
</div>
</form>
</div>

View File

@@ -2,6 +2,7 @@
{% load helpers %}
{% load form_helpers %}
{% load render_table from django_tables2 %}
{% load i18n %}
{% comment %}
Context:
@@ -11,18 +12,18 @@ Context:
return_url: The URL to which the user is redirected after submitting the form
{% endcomment %}
{% block title %}Editing {{ table.rows|length }} {{ model|meta:"verbose_name_plural"|bettertitle }}{% endblock %}
{% block title %}{% blocktrans %}Editing {{ table.rows|length }} {{ model|meta:"verbose_name_plural"|bettertitle }}{% endblocktrans %}{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="edit-form-tab" data-bs-toggle="tab" data-bs-target="#edit-form" type="button" role="tab" aria-controls="edit-form" aria-selected="true">
Bulk Edit
{% trans "Bulk Edit" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="object-list-tab" data-bs-toggle="tab" data-bs-target="#object-list" type="button" role="tab" aria-controls="object-list" aria-selected="false">
Selected Objects
{% trans "Selected Objects" %}
{% badge table.rows|length %}
</button>
</li>
@@ -75,7 +76,7 @@ Context:
{% if form.add_tags and form.remove_tags %}
<div class="field-group mb-5">
<div class="row mb-2">
<h5 class="offset-sm-3">Tags</h5>
<h5 class="offset-sm-3">{% trans "Tags" %}</h5>
</div>
{% render_field form.add_tags %}
{% render_field form.remove_tags %}
@@ -86,7 +87,7 @@ Context:
{% if form.custom_fields %}
<div class="field-group mb-5">
<div class="row mb-2">
<h5 class="offset-sm-3">Custom Fields</h5>
<h5 class="offset-sm-3">{% trans "Custom Fields" %}</h5>
</div>
{% render_custom_fields form %}
</div>
@@ -96,7 +97,7 @@ Context:
{% if form.comments %}
<div class="field-group mb-5">
<div class="row mb-2">
<h5 class="offset-sm-3">Comments</h5>
<h5 class="offset-sm-3">{% trans "Comments" %}</h5>
</div>
{% render_field form.comments bulk_nullable=True %}
</div>
@@ -118,8 +119,8 @@ Context:
</div>
<div class="text-end">
<button type="submit" name="_apply" class="btn btn-sm btn-primary">Apply</button>
<a href="{{ return_url }}" class="btn btn-sm btn-outline-danger">Cancel</a>
<button type="submit" name="_apply" class="btn btn-sm btn-primary">{% trans "Apply" %}</button>
<a href="{{ return_url }}" class="btn btn-sm btn-outline-danger">{% trans "Cancel" %}</a>
</div>
</div>
</div>

View File

@@ -1,6 +1,7 @@
{% extends 'base/layout.html' %}
{% load helpers %}
{% load form_helpers %}
{% load i18n %}
{% comment %}
Context:
@@ -10,23 +11,23 @@ Context:
return_url: The URL to which the user is redirected after submitting the form
{% endcomment %}
{% block title %}{{ model|meta:"verbose_name"|bettertitle }} Bulk Import{% endblock %}
{% block title %}{{ model|meta:"verbose_name"|bettertitle }} {% trans "Bulk Import" %}{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="import-form-tab" data-bs-toggle="tab" data-bs-target="#import-form" data-href="#tab_import-form" type="button" role="tab" aria-controls="import-form" aria-selected="true">
Direct Import
{% trans "Direct Import" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="upload-form-tab" data-bs-toggle="tab" data-bs-target="#upload-form" data-href="#tab_upload-form" type="button" role="tab" aria-controls="upload-form" aria-selected="false">
Upload File
{% trans "Upload File" %}
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="datafile-form-tab" data-bs-toggle="tab" data-bs-target="#datafile-form" data-href="#tab_datafile-form" type="button" role="tab" aria-controls="datafile-form" aria-selected="false">
Data File
{% trans "Data File" %}
</button>
</li>
</ul>
@@ -46,9 +47,9 @@ Context:
{% render_field form.format %}
<div class="form-group">
<div class="col col-md-12 text-end">
<button type="submit" name="data_submit" class="btn btn-primary">Submit</button>
<button type="submit" name="data_submit" class="btn btn-primary">{% trans "Submit" %}</button>
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<a href="{{ return_url }}" class="btn btn-outline-danger">{% trans "Cancel" %}</a>
{% endif %}
</div>
</div>
@@ -67,9 +68,9 @@ Context:
{% render_field form.format %}
<div class="form-group">
<div class="col col-md-12 text-end">
<button type="submit" name="file_submit" class="btn btn-primary">Submit</button>
<button type="submit" name="file_submit" class="btn btn-primary">{% trans "Submit" %}</button>
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<a href="{{ return_url }}" class="btn btn-outline-danger">{% trans "Cancel" %}</a>
{% endif %}
</div>
</div>
@@ -88,9 +89,9 @@ Context:
{% render_field form.format %}
<div class="form-group">
<div class="col col-md-12 text-end">
<button type="submit" name="file_submit" class="btn btn-primary">Submit</button>
<button type="submit" name="file_submit" class="btn btn-primary">{% trans "Submit" %}</button>
{% if return_url %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<a href="{{ return_url }}" class="btn btn-outline-danger">{% trans "Cancel" %}</a>
{% endif %}
</div>
</div>
@@ -103,15 +104,15 @@ Context:
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Field Options
{% trans "Field Options" %}
</h5>
<div class="card-body">
<table class="table">
<tr>
<th>Field</th>
<th>Required</th>
<th>Accessor</th>
<th>Description</th>
<th>{% trans "Field" %}</th>
<th>{% trans "Required" %}</th>
<th>{% trans "Accessor" %}</th>
<th>{% trans "Description" %}</th>
</tr>
{% for name, field in fields.items %}
<tr>
@@ -141,14 +142,14 @@ Context:
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><code>{{ name }}</code> Choices</h5>
<h5 class="modal-title"><code>{{ name }}</code> {% trans "Choices" %}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<table class="table table-striped">
<tr>
<th>Import Value</th>
<th>Label</th>
<th>{% trans "Import Value" %}</th>
<th>{% trans "Label" %}</th>
</tr>
{% for value, label in field.choices %}
{% if value %}
@@ -174,9 +175,9 @@ Context:
{{ field.label }}<br />
{% endif %}
{% if field|widget_type == 'dateinput' %}
<small class="text-muted">Format: YYYY-MM-DD</small>
<small class="text-muted">{% trans "Format: YYYY-MM-DD" %}</small>
{% elif field|widget_type == 'checkboxinput' %}
<small class="text-muted">Specify "true" or "false"</small>
<small class="text-muted">{% trans "Specify \"true\" or \"false" %}"</small>
{% endif %}
</td>
</tr>
@@ -187,12 +188,12 @@ Context:
</div>
</div>
<p class="small text-muted">
<i class="mdi mdi-check-bold text-success"></i> Required fields <strong>must</strong> be specified for all
objects.
<i class="mdi mdi-check-bold text-success"></i>
{% blocktrans %}Required fields <strong>must</strong> be specified for all objects.{% endblocktrans %}
</p>
<p class="small text-muted">
<i class="mdi mdi-information-outline"></i> Related objects may be referenced by any unique attribute.
For example, <code>vrf.rd</code> would identify a VRF by its route distinguisher.
<i class="mdi mdi-information-outline"></i>
{% blocktrans with example="vrf.rd" %}Related objects may be referenced by any unique attribute. For example, <code>{{ example }}</code> would identify a VRF by its route distinguisher.{% endblocktrans %}
</p>
{% endif %}

View File

@@ -1,16 +1,17 @@
{% extends 'base/layout.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% load i18n %}
{% block title %}Remove {{ table.rows|length }} {{ obj_type_plural|bettertitle }}?{% endblock %}
{% block title %}{% blocktrans %}Remove {{ table.rows|length }} {{ obj_type_plural|bettertitle }}?{% endblocktrans %}{% endblock %}
{% block content %}
<div class="container-md px-0">
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">Confirm Bulk Removal</h4>
<p><strong>Warning:</strong> The following operation will remove {{ table.rows|length }} {{ obj_type_plural }} from {{ parent_obj }}.</p>
<h4 class="alert-heading">{% trans "Confirm Bulk Removal" %}</h4>
<p><strong>{% blocktrans %}Warning:</strong> The following operation will remove {{ table.rows|length }} {{ obj_type_plural }} from {{ parent_obj }}.{% endblocktrans %}</p>
<hr />
<p class="mb-0">Please carefully review the {{ obj_type_plural }} to be removed and confirm below.</p>
<p class="mb-0">{% blocktrans %}Please carefully review the {{ obj_type_plural }} to be removed and confirm below.{% endblocktrans %}</p>
</div>
</div>
<div class="container-xl px-0">
@@ -23,8 +24,8 @@
{{ field }}
{% endfor %}
<div class="text-center">
<button type="submit" name="_confirm" class="btn btn-danger">Delete these {{ table.rows|length }} {{ obj_type_plural }}</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">Cancel</a>
<button type="submit" name="_confirm" class="btn btn-danger">{% blocktrans %}Delete these {{ table.rows|length }} {{ obj_type_plural }}{% endblocktrans %}</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">{% trans "Cancel" %}</a>
</div>
</form>
</div>

View File

@@ -1,8 +1,9 @@
{% extends 'base/layout.html' %}
{% load helpers %}
{% load form_helpers %}
{% load i18n %}
{% block title %}Renaming {{ selected_objects|length }} {{ obj_type_plural|bettertitle }}{% endblock %}
{% block title %}{% blocktrans %}Renaming {{ selected_objects|length }} {{ obj_type_plural|bettertitle }}{% endblocktrans %}{% endblock %}
{% block content %}
<div class="row mb-3">
@@ -10,8 +11,8 @@
<table class="table">
<thead>
<tr>
<th>Current Name</th>
<th>New Name</th>
<th>{% trans "Current Name" %}</th>
<th>{% trans "New Name" %}</th>
</tr>
</thead>
<tbody>
@@ -28,17 +29,17 @@
<form action="" method="post" class="form form-horizontal">
{% csrf_token %}
<div class="card">
<h5 class="card-header">Rename</h5>
<h5 class="card-header">{% trans "Rename" %}</h5>
<div class="card-body">
{% render_form form %}
</div>
</div>
<div class="col col-md-12 my-3 text-end">
<button type="submit" name="_preview" class="btn btn-primary">Preview</button>
<button type="submit" name="_preview" class="btn btn-primary">{% trans "Preview" %}</button>
{% if '_preview' in request.POST and not form.errors %}
<button type="submit" name="_apply" class="btn btn-primary">Apply</button>
<button type="submit" name="_apply" class="btn btn-primary">{% trans "Apply" %}</button>
{% endif %}
<a href="{{ return_url }}" class="btn btn-outline-danger">Cancel</a>
<a href="{{ return_url }}" class="btn btn-outline-danger">{% trans "Cancel" %}</a>
</div>
</form>
</div>

View File

@@ -1,5 +1,6 @@
{% extends 'base/layout.html' %}
{% load form_helpers %}
{% load i18n %}
{% block content %}
<div class="row mt-5">
@@ -12,11 +13,11 @@
<div class="card border-danger">
<h5 class="card-header">{% block confirmation_title %}{% endblock %}</h5>
<div class="card-body">
{% block message %}<p>Are you sure?</p>{% endblock %}
{% block message %}<p>{% trans "Are you sure" %}?</p>{% endblock %}
</div>
<div class="card-footer text-end">
<button type="submit" name="_confirm" class="btn btn-{{ button_class|default:"danger" }}">Confirm</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">Cancel</a>
<button type="submit" name="_confirm" class="btn btn-{{ button_class|default:"danger" }}">{% trans "Confirm" %}</button>
<a href="{{ return_url }}" class="btn btn-outline-dark">{% trans "Cancel" %}</a>
</div>
</div>
</form>

View File

@@ -5,6 +5,7 @@
{% load perms %}
{% load plugins %}
{% load tabs %}
{% load i18n %}
{% comment %}
Blocks:
@@ -44,9 +45,9 @@ Context:
{% block subtitle %}
<div class="object-subtitle">
<span>Created {{ object.created|annotated_date }}</span>
<span>{% trans "Created" %} {{ object.created|annotated_date }}</span>
<span class="separator">&middot;</span>
<span>Updated <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> ago</span>
<span>{% trans "Updated" %} <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> {% trans "ago" %}</span>
</div>
{% endblock subtitle %}

View File

@@ -1,6 +1,7 @@
{% extends 'base/layout.html' %}
{% load helpers %}
{% load form_helpers %}
{% load i18n %}
{% comment %}
Context:
@@ -10,7 +11,7 @@ Context:
return_url: The URL to which the user is redirected after submitting the form
{% endcomment %}
{% block title %}Delete {{ object|meta:"verbose_name" }}?{% endblock %}
{% block title %}{% blocktrans %}Delete {{ object|meta:"verbose_name" }}?{% endblocktrans %}{% endblock %}
{% block header %}{% endblock %}

View File

@@ -1,4 +1,5 @@
{% extends 'base/layout.html' %}
{% load i18n %}
{% comment %}
Blocks:
@@ -12,14 +13,14 @@ Context:
{% endcomment %}
{% block title %}
{% if object.pk %}Editing {{ object|meta:"verbose_name" }} {{ object }}{% else %}Add a new {{ object|meta:"verbose_name" }}{% endif %}
{% if object.pk %}{% blocktrans %}Editing {{ object|meta:"verbose_name" }} {{ object }}{% endblocktrans %}{% else %}{% blocktrans %}Add a new {{ object|meta:"verbose_name" }}{% endblocktrans %}{% endif %}
{% endblock title %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="edit-form-tab" data-bs-toggle="tab" data-bs-target="#edit-form" type="button" role="tab" aria-controls="edit-form" aria-selected="true">
{% if object.pk %}Edit{% else %}Create{% endif %}
{% if object.pk %}{% trans "Edit" %}{% else %}{% trans "Create" %}{% endif %}
</button>
</li>
</ul>
@@ -37,8 +38,8 @@ Context:
{# Link to model documentation #}
{% if settings.DOCS_ROOT and object.docs_url %}
<div class="float-end">
<a href="{{ object.docs_url }}" target="_blank" class="btn btn-sm btn-outline-secondary" title="View model documentation">
<i class="mdi mdi-help-circle"></i> Help
<a href="{{ object.docs_url }}" target="_blank" class="btn btn-sm btn-outline-secondary" title="{% trans "View model documentation" %}">
<i class="mdi mdi-help-circle"></i> {% trans "Help" %}
</a>
</div>
{% endif %}
@@ -56,17 +57,17 @@ Context:
{% block buttons %}
{% if object.pk %}
<button type="submit" name="_update" class="btn btn-primary">
Save
{% trans "Save" %}
</button>
{% else %}
<button type="submit" name="_create" class="btn btn-primary">
Create
{% trans "Create" %}
</button>
<button type="submit" name="_addanother" class="btn btn-outline-primary">
Create & Add Another
{% trans "Create & Add Another" %}
</button>
{% endif %}
<a class="btn btn-outline-danger" href="{{ return_url }}">Cancel</a>
<a class="btn btn-outline-danger" href="{{ return_url }}">{% trans "Cancel" %}</a>
{% endblock buttons %}
</div>
</form>

View File

@@ -4,6 +4,7 @@
{% load plugins %}
{% load render_table from django_tables2 %}
{% load static %}
{% load i18n %}
{% comment %}
Blocks:
@@ -44,13 +45,13 @@ Context:
<ul class="nav nav-tabs px-3">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="object-list-tab" data-bs-toggle="tab" data-bs-target="#object-list" type="button" role="tab" aria-controls="edit-form" aria-selected="true">
Results {% badge table.page.paginator.count %}
{% trans "Results" %} {% badge table.page.paginator.count %}
</button>
</li>
{% if filter_form %}
<li class="nav-item" role="presentation">
<button class="nav-link" id="filters-form-tab" data-bs-toggle="tab" data-bs-target="#filters-form" type="button" role="tab" aria-controls="object-list" aria-selected="false">
Filters
{% trans "Filters" %}
{% if filter_form %}{% badge filter_form.changed_data|length bg_color="primary" %}{% endif %}
</button>
</li>
@@ -90,7 +91,7 @@ Context:
<div class="form-check">
<input type="checkbox" id="select-all" name="_all" class="form-check-input" />
<label for="select-all" class="form-check-label">
Select <strong>all {{ table.rows|length }} {{ table.data.verbose_name_plural }}</strong> matching query
{% blocktrans %}Select <strong>all {{ table.rows|length }} {{ table.data.verbose_name_plural }}</strong> matching query{% endblocktrans %}
</label>
</div>
</div>