diff --git a/README.md b/README.md
index 3db6dd92..2564d7af 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,9 @@ Code contributions are gladly welcomed! If you're not sure where to start, take
If you have questions about the project or contributing, you can set up a video call during BookWyrm ["office hours"](https://calendly.com/mouse-reeve/30min).
+### Translation
+Do you speak a language besides English? BookWyrm needs localization! If you're comfortable using git and want to get into the code, there are [instructions](#workin-with-translations-and-locale-files) on how to create and edit localization files. If you feel more comfortable working in a regular text editor and would prefer not to run the application, get in touch directly and we can figure out a system, like emailing a text file, that works best.
+
### Financial Support
BookWyrm is an ad-free passion project with no intentions of seeking out venture funding or corporate financial relationships. If you want to help keep the project going, you can donate to the [Patreon](https://www.patreon.com/bookwyrm), or make a one time gift via [PayPal](https://paypal.me/oulipo).
@@ -68,7 +71,7 @@ Since the project is still in its early stages, the features are growing every d
- Private, followers-only, and public privacy levels for posting, shelves, and lists
- Option for users to manually approve followers
- Allow blocking and flagging for moderation
-
+
### The Tech Stack
Web backend
- [Django](https://www.djangoproject.com/) web server
@@ -76,12 +79,12 @@ Web backend
- [ActivityPub](http://activitypub.rocks/) federation
- [Celery](http://celeryproject.org/) task queuing
- [Redis](https://redis.io/) task backend
-
+
Front end
- Django templates
- [Bulma.io](https://bulma.io/) css framework
- Vanilla JavaScript, in moderation
-
+
Deployment
- [Docker](https://www.docker.com/) and docker-compose
- [Gunicorn](https://gunicorn.org/) web runner
@@ -109,6 +112,33 @@ docker-compose up
Once the build is complete, you can access the instance at `localhost:1333`
+### Editing static files
+If you edit the CSS or JavaScript, you will need to run Django's `collectstatic` command in order for your changes to have effect. You can do this by running:
+``` bash
+./bw-dev collectstatic
+```
+
+### Workin with translations and locale files
+Text in the html files are wrapped in translation tags (`{% trans %}` and `{% blocktrans %}`), and Django generates locale files for all the strings in which you can add translations for the text. You can find existing translations in the `locale/` directory.
+
+The application's language is set by a request header sent by your browser to the application, so to change the language of the application, you can change the default language requested by your browser.
+
+#### Adding a locale
+To start translation into a language which is currently supported, run the django-admin `makemessages` command with the language code for the language you want to add (like `de` for German, or `en-gb` for British English):
+``` bash
+./bw-dev makemessages -l
+```
+
+#### Editing a locale
+When you have a locale file, open the `django.po` in the directory for the language (for example, if you were adding German, `locale/de/LC_MESSAGES/django.po`. All the the text in the application will be shown in paired strings, with `msgid` as the original text, and `msgstr` as the translation (by default, this is set to an empty string, and will display the original text).
+
+Add you translations to the `msgstr` strings, and when you're ready, compile the locale by running:
+``` bash
+./bw-dev compilemessages
+```
+
+You can add the `-l ` to only compile one language. When you refresh the application, you should see your translations at work.
+
## Installing in Production
This project is still young and isn't, at the moment, very stable, so please proceed with caution when running in production.
diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py
index 46c38b5a..9446b09c 100644
--- a/bookwyrm/settings.py
+++ b/bookwyrm/settings.py
@@ -1,9 +1,10 @@
''' bookwyrm settings and configuration '''
import os
-
from environs import Env
import requests
+from django.utils.translation import gettext_lazy as _
+
env = Env()
DOMAIN = env('DOMAIN')
@@ -27,6 +28,7 @@ EMAIL_USE_TLS = env('EMAIL_USE_TLS', True)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale'),]
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
@@ -58,6 +60,7 @@ INSTALLED_APPS = [
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',
@@ -135,6 +138,10 @@ AUTH_PASSWORD_VALIDATORS = [
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
+LANGUAGES = [
+ ('en-us', _('English')),
+]
+
TIME_ZONE = 'UTC'
diff --git a/bookwyrm/templates/author.html b/bookwyrm/templates/author.html
index 9f2054d0..9dd83189 100644
--- a/bookwyrm/templates/author.html
+++ b/bookwyrm/templates/author.html
@@ -1,4 +1,5 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% block content %}
@@ -9,8 +10,8 @@
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
@@ -25,12 +26,12 @@
{% endif %}
{% if author.wikipedia_link %}
-
Wikipedia
+
{% trans "Wikipedia" %}
{% endif %}
-
Books by {{ author.name }}
+ {% blocktrans with name=author.name %}Books by {{ name }}{% endblocktrans %}
{% include 'snippets/book_tiles.html' with books=books %}
{% endblock %}
diff --git a/bookwyrm/templates/book.html b/bookwyrm/templates/book.html
index dc7d4ce8..35ddba37 100644
--- a/bookwyrm/templates/book.html
+++ b/bookwyrm/templates/book.html
@@ -1,4 +1,5 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% load humanize %}
{% block content %}
@@ -23,8 +24,8 @@
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
@@ -39,13 +40,13 @@
{% if request.user.is_authenticated and not book.cover %}
-
Add cover
+ {% trans "Add cover" %}
{% endif %}
@@ -54,21 +55,21 @@
{% if book.isbn_13 %}
-
ISBN:
+ {% trans "ISBN:" %}
{{ book.isbn_13 }}
{% endif %}
{% if book.oclc_number %}
-
OCLC Number:
+ {% trans "OCLC Number:" %}
{{ book.oclc_number }}
{% endif %}
{% if book.asin %}
-
ASIN:
+ {% trans "ASIN:" %}
{{ book.asin }}
{% endif %}
@@ -80,7 +81,7 @@
{% if book.openlibrary_key %}
- View on OpenLibrary
+ {% trans "View on OpenLibrary" %}
{% endif %}
@@ -98,11 +99,11 @@
@@ -134,20 +135,20 @@
{% if request.user.is_authenticated %}
{% if not readthroughs.exists %}
- You don't have any reading activity for this book.
+ {% trans "You don't have any reading activity for this book." %}
{% endif %}
{% include 'snippets/readthrough_form.html' with readthrough=None %}
- Create
+ {% trans "Create" %}
{% include 'snippets/toggle/close_button.html' with text="Cancel" controls_text="add-readthrough" %}
@@ -168,11 +169,11 @@
{% endif %}
@@ -189,7 +190,7 @@
{% if book.subjects %}
- Subjects
+ {% trans "Subjects" %}
{% for subject in book.subjects %}
{{ subject }}
@@ -200,7 +201,7 @@
{% if book.subject_places %}
- Places
+ {% trans "Places" %}
{% for place in book.subject_placess %}
{{ place }}
@@ -211,7 +212,7 @@
{% if lists.exists %}
- Lists
+ {% trans "Lists" %}
{% for list in lists %}
{{ list.name }}
@@ -240,7 +241,7 @@
{% include 'snippets/username.html' with user=rating.user %}
-
rated it
+
{% trans "rated it" %}
{% include 'snippets/stars.html' with rating=rating.rating %}
@@ -257,4 +258,3 @@
{% endblock %}
-
diff --git a/bookwyrm/templates/discover/about.html b/bookwyrm/templates/discover/about.html
index 9d3f66dc..dd0a8129 100644
--- a/bookwyrm/templates/discover/about.html
+++ b/bookwyrm/templates/discover/about.html
@@ -1,4 +1,5 @@
{% extends 'discover/landing_layout.html' %}
+{% load i18n %}
{% block panel %}
@@ -6,17 +7,17 @@
-
Code of Conduct
+
{% trans "Code of Conduct" %}
{{ site.code_of_conduct | safe }}
@@ -25,7 +26,7 @@
-
Privacy Policy
+
{% trans "Privacy Policy" %}
{{ site.privacy_policy | safe }}
diff --git a/bookwyrm/templates/discover/discover.html b/bookwyrm/templates/discover/discover.html
index 289e30d9..d553c368 100644
--- a/bookwyrm/templates/discover/discover.html
+++ b/bookwyrm/templates/discover/discover.html
@@ -1,8 +1,9 @@
{% extends 'discover/landing_layout.html' %}
+{% load i18n %}
{% block panel %}
-
Recent Books
+ {% trans "Recent Books" %}
diff --git a/bookwyrm/templates/discover/icons.html b/bookwyrm/templates/discover/icons.html
deleted file mode 100644
index a4086282..00000000
--- a/bookwyrm/templates/discover/icons.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
diff --git a/bookwyrm/templates/discover/landing_layout.html b/bookwyrm/templates/discover/landing_layout.html
index 2123ee98..f6b86009 100644
--- a/bookwyrm/templates/discover/landing_layout.html
+++ b/bookwyrm/templates/discover/landing_layout.html
@@ -1,5 +1,5 @@
{% extends 'layout.html' %}
-{% load humanize %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% block content %}
@@ -8,7 +8,26 @@
{{ site.instance_tagline }}
-{% include 'discover/icons.html' %}
+
+
+
+
+
{% trans "Decentralized" %}
+
+
+
+
+
+
{% trans "Friendly" %}
+
+
+
+
+
+
{% trans "Anti-Corporate" %}
+
+
+
@@ -20,37 +39,22 @@
{% if not request.user.is_authenticated %}
{% if site.allow_registration %}
-
Join {{ site.name }}
+
{% blocktrans with name=site.name %}Join {{ name }}{% endblocktrans %}
{% include 'snippets/register_form.html' %}
{% else %}
-
This instance is closed
+
{% trans "This instance is closed" %}
{{ site.registration_closed_text | safe}}
{% endif %}
{% else %}
-
Your Account
-
+
{% trans "Your Account" %}
+ {% include 'user/user_preview.html' with user=request.user %}
- {% if user.summary %}
- {{ user.summary | to_markdown | safe }}
+ {% if request.user.summary %}
+ {{ request.user.summary | to_markdown | safe }}
{% endif %}
diff --git a/bookwyrm/templates/edit_author.html b/bookwyrm/templates/edit_author.html
index e007e69b..ab59cc2d 100644
--- a/bookwyrm/templates/edit_author.html
+++ b/bookwyrm/templates/edit_author.html
@@ -1,4 +1,5 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load humanize %}
{% block content %}
@@ -6,9 +7,9 @@
Edit "{{ author.name }}"
@@ -24,45 +25,45 @@
-
Metadata
-
Name: {{ form.name }}
+
{% trans "Metadata" %}
+
{% trans "Name:" %} {{ form.name }}
{% for error in form.name.errors %}
{{ error | escape }}
{% endfor %}
-
Bio: {{ form.bio }}
+
{% trans "Bio:" %} {{ form.bio }}
{% for error in form.bio.errors %}
{{ error | escape }}
{% endfor %}
-
Wikipedia link: {{ form.wikipedia_link }}
+
{% trans "Wikipedia link:" %} {{ form.wikipedia_link }}
{% for error in form.wikipedia_link.errors %}
{{ error | escape }}
{% endfor %}
-
Birth date: {{ form.born }}
+
{% trans "Birth date:" %} {{ form.born }}
{% for error in form.born.errors %}
{{ error | escape }}
{% endfor %}
-
Death date: {{ form.died }}
+
{% trans "Death date:" %} {{ form.died }}
{% for error in form.died.errors %}
{{ error | escape }}
{% endfor %}
-
Author Identifiers
-
Openlibrary key: {{ form.openlibrary_key }}
+
{% trans "Author Identifiers" %}
+
{% trans "Openlibrary key:" %} {{ form.openlibrary_key }}
{% for error in form.openlibrary_key.errors %}
{{ error | escape }}
{% endfor %}
-
Librarything key: {{ form.librarything_key }}
+
{% trans "Librarything key:" %} {{ form.librarything_key }}
{% for error in form.librarything_key.errors %}
{{ error | escape }}
{% endfor %}
-
Goodreads key: {{ form.goodreads_key }}
+
{% trans "Goodreads key:" %} {{ form.goodreads_key }}
{% for error in form.goodreads_key.errors %}
{{ error | escape }}
{% endfor %}
@@ -71,10 +72,9 @@
{% endblock %}
-
diff --git a/bookwyrm/templates/edit_book.html b/bookwyrm/templates/edit_book.html
index fb0bb81c..15c7b878 100644
--- a/bookwyrm/templates/edit_book.html
+++ b/bookwyrm/templates/edit_book.html
@@ -1,4 +1,5 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load humanize %}
{% block content %}
@@ -6,9 +7,9 @@
Edit "{{ book.title }}"
@@ -23,32 +24,32 @@
-
Metadata
-
Title: {{ form.title }}
+
{% trans "Metadata" %}
+
{% trans "Title:" %} {{ form.title }}
{% for error in form.title.errors %}
{{ error | escape }}
{% endfor %}
-
Subtitle: {{ form.subtitle }}
+
{% trans "Subtitle:" %} {{ form.subtitle }}
{% for error in form.subtitle.errors %}
{{ error | escape }}
{% endfor %}
-
Description: {{ form.description }}
+
{% trans "Description:" %} {{ form.description }}
{% for error in form.description.errors %}
{{ error | escape }}
{% endfor %}
-
Series: {{ form.series }}
+
{% trans "Series:" %} {{ form.series }}
{% for error in form.series.errors %}
{{ error | escape }}
{% endfor %}
-
Series number: {{ form.series_number }}
+
{% trans "Series number:" %} {{ form.series_number }}
{% for error in form.series_number.errors %}
{{ error | escape }}
{% endfor %}
-
First published date: {{ form.first_published_date }}
+
{% trans "First published date:" %} {{ form.first_published_date }}
{% for error in form.first_published_date.errors %}
{{ error | escape }}
{% endfor %}
-
Published date: {{ form.published_date }}
+
{% trans "Published date:" %} {{ form.published_date }}
{% for error in form.published_date.errors %}
{{ error | escape }}
{% endfor %}
@@ -61,7 +62,7 @@
-
Cover
+
{% trans "Cover" %}
{{ form.cover }}
{% for error in form.cover.errors %}
{{ error | escape }}
@@ -71,8 +72,8 @@
-
Physical Properties
-
Format: {{ form.physical_format }}
+
{% trans "Physical Properties" %}
+
{% trans "Format:" %} {{ form.physical_format }}
{% for error in form.physical_format.errors %}
{{ error | escape }}
{% endfor %}
@@ -80,31 +81,31 @@
{{ error | escape }}
{% endfor %}
-
Pages: {{ form.pages }}
+
{% trans "Pages:" %} {{ form.pages }}
{% for error in form.pages.errors %}
{{ error | escape }}
{% endfor %}
-
Book Identifiers
-
ISBN 13: {{ form.isbn_13 }}
+
{% trans "Book Identifiers" %}
+
{% trans "ISBN 13:" %} {{ form.isbn_13 }}
{% for error in form.isbn_13.errors %}
{{ error | escape }}
{% endfor %}
-
ISBN 10: {{ form.isbn_10 }}
+
{% trans "ISBN 10:" %} {{ form.isbn_10 }}
{% for error in form.isbn_10.errors %}
{{ error | escape }}
{% endfor %}
-
Openlibrary key: {{ form.openlibrary_key }}
+
{% trans "Openlibrary key:" %} {{ form.openlibrary_key }}
{% for error in form.openlibrary_key.errors %}
{{ error | escape }}
{% endfor %}
-
OCLC Number: {{ form.oclc_number }}
+
{% trans "OCLC Number:" %} {{ form.oclc_number }}
{% for error in form.oclc_number.errors %}
{{ error | escape }}
{% endfor %}
-
ASIN: {{ form.asin }}
+
{% trans "ASIN:" %} {{ form.asin }}
{% for error in form.ASIN.errors %}
{{ error | escape }}
{% endfor %}
@@ -113,8 +114,8 @@
diff --git a/bookwyrm/templates/editions.html b/bookwyrm/templates/editions.html
index 619ceafb..7dfabc93 100644
--- a/bookwyrm/templates/editions.html
+++ b/bookwyrm/templates/editions.html
@@ -1,8 +1,9 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% block content %}
-
+
{% blocktrans with path=work.local_path work_title=work.title %}Editions of "{{ work_title }}" {% endblocktrans %}
{% include 'snippets/book_tiles.html' with books=editions %}
diff --git a/bookwyrm/templates/error.html b/bookwyrm/templates/error.html
index 6405dc5a..99a9a624 100644
--- a/bookwyrm/templates/error.html
+++ b/bookwyrm/templates/error.html
@@ -1,9 +1,10 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% block content %}
-
Server Error
-
Something went wrong! Sorry about that.
+
{% trans "Server Error" %}
+
{% trans "Something went wrong! Sorry about that." %}
{% endblock %}
diff --git a/bookwyrm/templates/feed/direct_messages.html b/bookwyrm/templates/feed/direct_messages.html
index f3102ee7..12eaeb0b 100644
--- a/bookwyrm/templates/feed/direct_messages.html
+++ b/bookwyrm/templates/feed/direct_messages.html
@@ -1,9 +1,10 @@
{% extends 'feed/feed_layout.html' %}
+{% load i18n %}
{% block panel %}
@@ -12,7 +13,7 @@
{% if not activities %}
- You have no messages right now.
+ {% trans "You have no messages right now." %}
{% endif %}
{% for activity in activities %}
diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html
index 7029fd69..71b59cc1 100644
--- a/bookwyrm/templates/feed/feed.html
+++ b/bookwyrm/templates/feed/feed.html
@@ -1,18 +1,19 @@
{% extends 'feed/feed_layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% block panel %}
-
{{ tab | title }} Timeline
+
{% blocktrans with tab_title=tab|title %}{{ tab_title }} Timeline{% endblocktrans %}
@@ -20,7 +21,7 @@
{# announcements and system messages #}
{% if not goal and tab == 'home' %}
{% now 'Y' as year %}
-
+
{% include 'snippets/goal_card.html' with year=year %}
@@ -28,7 +29,7 @@
{# activity feed #}
{% if not activities %}
-There aren't any activities right now! Try following a user to get started
+{% trans "There aren't any activities right now! Try following a user to get started" %}
{% endif %}
{% for activity in activities %}
diff --git a/bookwyrm/templates/feed/feed_layout.html b/bookwyrm/templates/feed/feed_layout.html
index 00ac4ab8..2d8937bf 100644
--- a/bookwyrm/templates/feed/feed_layout.html
+++ b/bookwyrm/templates/feed/feed_layout.html
@@ -1,13 +1,14 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% block content %}
{% if user.is_authenticated %}
-
Your books
+
{% trans "Your books" %}
{% if not suggested_books %}
-
There are no books here right now! Try searching for a book to get started
+
{% trans "There are no books here right now! Try searching for a book to get started" %}
{% else %}
@@ -64,7 +65,7 @@
{% if goal %}
-
{{ goal.year }} Reading Goal
+ {% blocktrans with yar=goal.year %}{{ year }} Reading Goal{% endblocktrans %}
{% include 'snippets/goal_progress.html' with goal=goal %}
diff --git a/bookwyrm/templates/feed/status.html b/bookwyrm/templates/feed/status.html
index eb848993..06d536fc 100644
--- a/bookwyrm/templates/feed/status.html
+++ b/bookwyrm/templates/feed/status.html
@@ -1,9 +1,10 @@
{% extends 'feed/feed_layout.html' %}
+{% load i18n %}
{% block panel %}
diff --git a/bookwyrm/templates/goal.html b/bookwyrm/templates/goal.html
index 0dc0aef8..4a16ccb6 100644
--- a/bookwyrm/templates/goal.html
+++ b/bookwyrm/templates/goal.html
@@ -1,9 +1,10 @@
{% extends 'user/user_layout.html' %}
+{% load i18n %}
{% block header %}
-
{{ year }} Reading Progress
+ {% blocktrans %}{{ year }} Reading Progress{% endblocktrans %}
{% if is_self and goal %}
@@ -25,7 +26,7 @@
- Set a goal for how many books you'll finish reading in {{ year }}, and track your progress throughout the year.
+ {% blocktrans %}Set a goal for how many books you'll finish reading in {{ year }}, and track your progress throughout the year.{% endblocktrans %}
{% include 'snippets/goal_form.html' with goal=goal year=year %}
@@ -34,7 +35,7 @@
{% endif %}
{% if not goal and user != request.user %}
-
{{ user.display_name }} hasn't set a reading goal for {{ year }}.
+
{% blocktrans with name=user.display_name %}{{ name }} hasn't set a reading goal for {{ year }}.{% endblocktrans %}
{% endif %}
{% if goal %}
diff --git a/bookwyrm/templates/import.html b/bookwyrm/templates/import.html
index a7fde76d..ea62ac55 100644
--- a/bookwyrm/templates/import.html
+++ b/bookwyrm/templates/import.html
@@ -1,13 +1,14 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load humanize %}
{% block content %}
-
Import Books
+
{% trans "Import Books" %}
{% csrf_token %}
- Data source
+ {% trans "Data source" %}
@@ -25,23 +26,23 @@
- Include reviews
+ {% trans "Include reviews" %}
- Privacy setting for imported reviews:
+ {% trans "Privacy setting for imported reviews:" %}
{% include 'snippets/privacy_select.html' with no_label=True %}
- Import
+ {% trans "Import" %}
-
Recent Imports
+
{% trans "Recent Imports" %}
{% if not jobs %}
-
No recent imports
+
{% trans "No recent imports" %}
{% endif %}
{% for job in jobs %}
diff --git a/bookwyrm/templates/import_status.html b/bookwyrm/templates/import_status.html
index 66b3fb67..ca87113f 100644
--- a/bookwyrm/templates/import_status.html
+++ b/bookwyrm/templates/import_status.html
@@ -1,34 +1,35 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% load bookwyrm_tags %}
{% load humanize %}
{% block content %}
-
Import Status
+
{% trans "Import Status" %}
- Import started: {{ job.created_date | naturaltime }}
+ {% trans "Import started: " %}{{ job.created_date | naturaltime }}
{% if job.complete %}
- Import completed: {{ task.date_done | naturaltime }}
+ {% trans "Import completed: " %}{{ task.date_done | naturaltime }}
{% elif task.failed %}
-
TASK FAILED
+
{% trans "TASK FAILED" %}
{% endif %}
{% if not job.complete %}
- Import still in progress.
+ {% trans "Import still in progress." %}
- (Hit reload to update!)
+ {% trans "(Hit reload to update!)" %}
{% endif %}
{% if failed_items %}
-
Failed to load
+
{% trans "Failed to load" %}
{% if not job.retry %}
{% csrf_token %}
@@ -52,10 +53,10 @@
- Select all
+ {% trans "Select all" %}
- Retry items
+ {% trans "Retry items" %}
{% else %}
{% for item in failed_items %}
@@ -77,17 +78,17 @@
{% endif %}
-
Successfully imported
+
{% trans "Successfully imported" %}
- Book
+ {% trans "Book" %}
- Title
+ {% trans "Title" %}
- Author
+ {% trans "Author" %}
@@ -110,7 +111,7 @@
{% if item.book %}
- Imported
+ {% trans "Imported" %}
{% endif %}
diff --git a/bookwyrm/templates/invite.html b/bookwyrm/templates/invite.html
index 3345424c..2ee15972 100644
--- a/bookwyrm/templates/invite.html
+++ b/bookwyrm/templates/invite.html
@@ -1,11 +1,12 @@
{% extends 'layout.html' %}
+{% load i18n %}
{% block content %}
{% if valid %}
-
Create an Account
+
{% trans "Create an Account" %}
@@ -14,8 +15,8 @@
{% else %}
-
Permission Denied
-
Sorry! This invite code is no longer valid.
+
{% trans "Permission Denied" %}
+
{% trans "Sorry! This invite code is no longer valid." %}
{% endif %}
diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html
index fe8a7509..39b78196 100644
--- a/bookwyrm/templates/layout.html
+++ b/bookwyrm/templates/layout.html
@@ -1,4 +1,5 @@
{% load bookwyrm_tags %}
+{% load i18n %}
@@ -33,8 +34,8 @@
-
- search
+
+ {% trans "search" %}
@@ -43,8 +44,8 @@