Skip to content

Commit 308bfb4

Browse files
authored
Merge pull request #230 from hughrun/v0.7.5
update v0.7.5 locales
2 parents 650a14d + f2b5cea commit 308bfb4

File tree

914 files changed

+84830
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

914 files changed

+84830
-0
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
msgid ""
2+
msgstr ""
3+
"Project-Id-Version: bookwyrm\n"
4+
"Report-Msgid-Bugs-To: \n"
5+
"POT-Creation-Date: 2025-09-08 05:35+0000\n"
6+
"PO-Revision-Date: 2025-09-08 07:09\n"
7+
"Last-Translator: \n"
8+
"Language-Team: Afrikaans\n"
9+
"Language: af_ZA\n"
10+
"MIME-Version: 1.0\n"
11+
"Content-Type: text/plain; charset=UTF-8\n"
12+
"Content-Transfer-Encoding: 8bit\n"
13+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
14+
"X-Crowdin-Project: bookwyrm\n"
15+
"X-Crowdin-Project-ID: 479239\n"
16+
"X-Crowdin-Language: af\n"
17+
"X-Crowdin-File: /[bookwyrm-social.documentation] main/locale/en_US/LC_MESSAGES/messages.po\n"
18+
"X-Crowdin-File-ID: 1636\n"
19+
20+
#: templates/index.html:5 templates/layout.html:6
21+
msgid "BookWyrm Documentation"
22+
msgstr ""
23+
24+
#: templates/index.html:6
25+
msgid "Your guide to using and contributing to BookWyrm"
26+
msgstr ""
27+
28+
#: templates/index.html:6
29+
msgid "How to Use and Contribute"
30+
msgstr ""
31+
32+
#: templates/layout.html:4
33+
msgid "BookWyrm: Social Reading and Reviewing"
34+
msgstr ""
35+
36+
#: templates/layout.html:35 templates/layout.html:39 templates/layout.html:40
37+
#: templates/layout.html:48
38+
msgid "Join"
39+
msgstr ""
40+
41+
#: templates/layout.html:38 templates/layout.html:42 templates/layout.html:43
42+
#: templates/layout.html:51
43+
msgid "Get involved"
44+
msgstr ""
45+
46+
#: templates/layout.html:41 templates/layout.html:45 templates/layout.html:46
47+
#: templates/layout.html:54
48+
msgid "Support"
49+
msgstr ""
50+
51+
#: templates/layout.html:44 templates/layout.html:48 templates/layout.html:49
52+
#: templates/layout.html:57
53+
msgid "Code"
54+
msgstr ""
55+
56+
#: templates/layout.html:47 templates/layout.html:124 templates/layout.html:51
57+
#: templates/layout.html:130 templates/layout.html:52 templates/layout.html:131
58+
#: templates/layout.html:137 templates/layout.html:35 templates/layout.html:138
59+
#: templates/layout.html:145 templates/layout.html:146
60+
msgid "Documentation"
61+
msgstr ""
62+
63+
#: templates/layout.html:95 templates/layout.html:101 templates/layout.html:102
64+
#: templates/layout.html:108 templates/layout.html:109
65+
#: templates/layout.html:116 templates/layout.html:117
66+
msgid "<strong>BookWyrm</strong> is collaborative, anti-corporate software maintained by <a href='https://www.mousereeve.com/'>Mouse Reeve</a>."
67+
msgstr ""
68+
69+
#: templates/layout.html:98 templates/layout.html:104 templates/layout.html:105
70+
#: templates/layout.html:111 templates/layout.html:112
71+
#: templates/layout.html:119 templates/layout.html:120
72+
msgid "Support BookWyrm on <a href='https://www.patreon.com/bookwyrm' target='_blank'>Patreon</a>."
73+
msgstr ""
74+
75+
#: templates/layout.html:102 templates/layout.html:108
76+
#: templates/layout.html:109 templates/layout.html:115
77+
#: templates/layout.html:116 templates/layout.html:123
78+
#: templates/layout.html:124
79+
msgid "Get Involved"
80+
msgstr ""
81+
82+
#: templates/layout.html:104 templates/layout.html:110
83+
#: templates/layout.html:111 templates/layout.html:117
84+
#: templates/layout.html:118 templates/layout.html:125
85+
#: templates/layout.html:126
86+
msgid "BookWyrm on GitHub"
87+
msgstr ""
88+
89+
#: templates/layout.html:107 templates/layout.html:113
90+
#: templates/layout.html:114 templates/layout.html:120
91+
#: templates/layout.html:121 templates/layout.html:128
92+
#: templates/layout.html:129
93+
msgid "Contribute to this page"
94+
msgstr ""
95+
96+
#: templates/layout.html:122 templates/layout.html:128
97+
#: templates/layout.html:129 templates/layout.html:135
98+
#: templates/layout.html:136 templates/layout.html:143
99+
#: templates/layout.html:144
100+
msgid "Learn more"
101+
msgstr ""
102+
103+
#: templates/layout.html:127 templates/layout.html:133
104+
#: templates/layout.html:134 templates/layout.html:140
105+
#: templates/layout.html:141 templates/layout.html:148
106+
#: templates/layout.html:149
107+
msgid "Contact maintainer"
108+
msgstr ""
109+
110+
#: templates/layout.html:130 templates/layout.html:136
111+
#: templates/layout.html:137 templates/layout.html:143
112+
#: templates/layout.html:144 templates/layout.html:151
113+
#: templates/layout.html:152
114+
msgid "License"
115+
msgstr ""
116+
117+
#: templates/layout.html:65
118+
msgid "This is the documentation for the current development code. Choose a version from the menu to see documentation for released versions since"
119+
msgstr ""
120+
121+
#: templates/page.html:16
122+
msgid "Page Contents"
123+
msgstr ""
124+
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
- - -
2+
Title: ActivityPub Date: 2025-04-21 Order: 1
3+
- - -
4+
5+
BookWyrm uses the [ActivityPub](http://activitypub.rocks/) protocol to send and receive user activity between other BookWyrm instances and other services that implement ActivityPub, like [Mastodon](https://joinmastodon.org/). To handle book data, BookWyrm has a handful of extended Activity types which are not part of the standard, but are legible to other BookWyrm instances.
6+
7+
To view the ActivityPub data for a BookWyrm entity (user, book, list, etc) you can usually add `.json` to the end of the URL. e.g. `https://www.example.com/user/sam.json` and see the JSON in your web browser or via an http request (e.g. using `curl`).
8+
9+
## Activities and Objects
10+
11+
### Users and relationships
12+
User relationship interactions follow the standard ActivityPub spec.
13+
14+
- `Follow`: request to receive statuses from a user, and view their statuses that have followers-only privacy
15+
- `Accept`: approves a `Follow` and finalizes the relationship
16+
- `Reject`: denies a `Follow`
17+
- `Block`: prevent users from seeing one another's statuses, and prevents the blocked user from viewing the actor's profile
18+
- `Update`: updates a user's profile and settings
19+
- `Delete`: deactivates a user
20+
- `Undo`: reverses a `Follow` or `Block`
21+
- `Move`: communicate that a user has changed their ID and has moved to a new server. Most ActivityPub software will "follow" the user to the new identity. BookWyrm sends a notification to followers and requires them to confirm they want to follow the user to their new identity.
22+
23+
### Statuses
24+
#### Object types
25+
26+
- `Note`: On services like Mastodon, `Note`s are the primary type of status. They contain a message body, attachments, can mention users, and be replies to statuses of any type. Within BookWyrm, `Note`s can only be created as direct messages or as replies to other statuses.
27+
- `Review`: A review is a status in response to a book (indicated by the `inReplyToBook` field), which has a title, body, and numerical rating between 0 (not rated) and 5.
28+
- `Comment`: A comment on a book mentions a book and has a message body.
29+
- `Quotation`: A quote has a message body, an excerpt from a book, and mentions a book.
30+
31+
#### Activities
32+
33+
- `Create`: saves a new status in the database.
34+
35+
**Note**: BookWyrm only accepts `Create` activities if they are:
36+
37+
- Direct messages (i.e., `Note`s with the privacy level `direct`, which mention a local user),
38+
- Related to a book (of a custom status type that includes the field `inReplyToBook`),
39+
- Replies to existing statuses saved in the database
40+
41+
- `Delete`: Removes a status
42+
- `Like`: Creates a favorite on the status
43+
- `Announce`: Boosts the status into the actor's timeline
44+
- `Undo`: Reverses a `Like` or `Announce`
45+
46+
### Collections
47+
User's books and lists are represented by [`OrderedCollection`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-orderedcollection)
48+
49+
#### Objects
50+
51+
- `Shelf`: A user's book collection. By default, every user has a `to-read`, `reading`, `stop-reading` and `read` shelf which are used to track reading progress.
52+
- `List`: A collection of books that may have items contributed by users other than the one who created the list.
53+
54+
#### Activities
55+
56+
- `Create`: Adds a shelf or list to the database.
57+
- `Delete`: Removes a shelf or list.
58+
- `Add`: Adds a book to a shelf or list.
59+
- `Remove`: Removes a book from a shelf or list.
60+
61+
## Alternative Serialization
62+
Because BookWyrm uses custom object types (`Review`, `Comment`, `Quotation`) that aren't supported by ActivityPub, statuses are transformed into standard types when sent to or viewed by non-BookWyrm services. `Review`s are converted into `Article`s, and `Comment`s and `Quotation`s are converted into `Note`s, with a link to the book and the cover image attached.
63+
64+
This may change in future in favor of the more ActivityPub-compliant [extended Object types](https://www.w3.org/TR/activitystreams-core/#fig-following-is-an-example-object-that-uses-the-id-and-type-properties-to-express-the-global-identifier-and-object-type) listed alongside core ActivityPub types.
65+
66+
## Making ActivityPub-aware models
67+
68+
The way BookWyrm sends and receives ActivityPub objects can be confusing for developers who are new to BookWyrm. It is mostly controlled by:
69+
70+
* Functions and [data classes](https://docs.python.org/3/library/dataclasses.html) outlined in the [activitypub](https://github.com/bookwyrm-social/bookwyrm/tree/main/bookwyrm/activitypub) directory
71+
* The [ActivitypubMixin](https://github.com/bookwyrm-social/bookwyrm/blob/c458cdcb992a36f3c4a06752499461c3dd991e07/bookwyrm/models/activitypub_mixin.py#L40) and its children for models that are serializable for ActivityPub requests
72+
73+
### Serializing data to and from ActivityPub JSON
74+
75+
BookWyrm needs to know how to _serialize_ the data from the model into an ActivityPub JSON-LD object.
76+
77+
The `/activitypub/base_activity.py` file provides the core functions that turn ActivityPub JSON-LD strings into usable Django model objects, and vice-versa. We do this by creating a data class in `bookwyrm/activitypub`, and defining how the model should be serialized by providing an `activity_serializer` value in the model, which points to the relevant data class. From `ActivityObject` we inherit `id` and `type`, and two _class methods_:
78+
79+
**`to_model`**
80+
81+
This method takes an ActivityPub JSON string and tries to turn it into a BookWyrm model object, finding an existing object wherever possible. This is how we process **incoming** ActivityPub objects.
82+
83+
**`serialize`**
84+
85+
This method takes a BookWyrm model object, and turns it into a valid ActivityPub JSON string using the dataclass definitions. This is how we process **outgoing** ActivityPub objects.
86+
87+
### Example - Users
88+
89+
A BookWyrm user [is defined in `models/user.py`](https://github.com/bookwyrm-social/bookwyrm/blob/main/bookwyrm/models/user.py):
90+
91+
```py
92+
class User(OrderedCollectionPageMixin, AbstractUser):
93+
"""a user who wants to read books"""
94+
```
95+
Notice that we are inheriting from ("subclassing") `OrderedCollectionPageMixin`. This in turn inherits from `ObjectMixin`, which inherits from `ActivitypubMixin`. This may seem convoluted, but this inheritence chain allows us to avoid duplicating code as our ActivityPub objects become more specific. `AbstractUser` is [a Django model intended to be subclassed](https://docs.djangoproject.com/en/5.1/topics/auth/customizing/#specifying-custom-user-model), giving us things like hashed password logins and permission levels "out of the box".
96+
97+
Because `User` inherits from [`ObjectMixin`](https://github.com/bookwyrm-social/bookwyrm/blob/c458cdcb992a36f3c4a06752499461c3dd991e07/bookwyrm/models/activitypub_mixin.py#L213), when we `save()` a `User` object we will send a `Create` activity (if this is the first time the user was saved) or an `Update` activity (if we're just saving a change – e.g. to the user description or avatar). Any other model you add to BookWyrm will have the same capability if it inherits from `ObjectMixin`.
98+
99+
For BookWyrm users, the `activity_serializer` is defined in the `User` model:
100+
101+
```py
102+
activity_serializer = activitypub.Person
103+
```
104+
105+
The data class definition for `activitypub.Person` is at `/activitypub/person.py`:
106+
107+
```py
108+
@dataclass(init=False)
109+
class Person(ActivityObject):
110+
"""actor activitypub json"""
111+
112+
preferredUsername: str
113+
inbox: str
114+
publicKey: PublicKey
115+
followers: str = None
116+
following: str = None
117+
outbox: str = None
118+
endpoints: Dict = None
119+
name: str = None
120+
summary: str = None
121+
icon: Image = None
122+
bookwyrmUser: bool = False
123+
manuallyApprovesFollowers: str = False
124+
discoverable: str = False
125+
hideFollows: str = False
126+
movedTo: str = None
127+
alsoKnownAs: dict[str] = None
128+
type: str = "Person"
129+
```
130+
131+
You might notice that some of these fields are not a perfect match to the fields in the `User` model. If you have a field name in your model that needs to be called something different in the ActivityPub object (e.g. to comply with Python naming conventions in the model but JSON naming conventions in JSON string), you can define an `activitypub_field` in the model field definition:
132+
133+
```py
134+
followers_url = fields.CharField(max_length=255, activitypub_field="followers")
135+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
- - -
2+
Title: Permissions Date: 2021-04-18 Order: 2
3+
- - -
4+
5+
User access to different features is controlled using Django's [built-in authentication system](https://docs.djangoproject.com/en/3.2/topics/auth/default/). When an instance is created, the `initdb` script creates a set of permissions, which are assinged to groups. By default, all new users are assigned the `editor` group, which allows them to edit book metadata.
6+
7+
The instance administrator should have `superuser` status, which gives them access to Django admin (`/admin`) and confers all permissions to that user.
8+
9+
## Permissions and groups
10+
This table shows the four groups (admin, moderator, editor, and user) and what permissions users in that group have:
11+
12+
| | admin | moderator | editor | user |
13+
| ---------------------- | ----- | --------- | ------ | ---- |
14+
| edit instance settings | ✔️ | - | - | - |
15+
| change user level | ✔️ | - | - | - |
16+
| manage federation | ✔️ | ✔️ | - | - |
17+
| issue invites | ✔️ | ✔️ | - | - |
18+
| deactivate users | ✔️ | ✔️ | - | - |
19+
| delete posts | ✔️ | ✔️ | - | - |
20+
| edit books | ✔️ | ✔️ | ✔️ | - |
21+
upload covers | ✔️ | ✔️ | ✔️ | ✔️
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
- - -
2+
Title: How to Contribute Date: 2021-04-12 Order: 1
3+
- - -
4+
5+
There are many ways you can contribute to this project, regardless of your level of technical expertise.
6+
7+
## Feedback and feature requests
8+
Please feel encouraged and welcome to point out bugs, suggestions, feature requests, and ideas for how things ought to work using [GitHub issues](https://github.com/bookwyrm-social/bookwyrm/issues).
9+
10+
## Code contributions
11+
Code contributions are gladly welcomed! If you're not sure where to start, take a look at the ["Good first issue"](https://github.com/bookwyrm-social/bookwyrm/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) tag. Because BookWyrm is a small project, there isn't a lot of formal structure, but there is a huge capacity for one-on-one support, which can look like asking questions as you go, pair programming, video chats, et cetera, so please feel free to reach out.
12+
13+
If you have questions about the project or contributing, you can join the [BookWyrm matrix chat](https://app.element.io/#/room/#bookwyrm:matrix.org).
14+
15+
## Translation
16+
Do you speak a language besides English? BookWyrm needs localization! You can add and edit translations at [translate.joinbookwyrm.com](http://translate.joinbookwyrm.com/)
17+
18+
## Financial Support
19+
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 become a sustaining contributor via [Patreon](https://www.patreon.com/bookwyrm) or [OpenCollective](https://opencollective.com/bookwyrm), or make a one time gift via [PayPal](https://paypal.me/oulipo).
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
- - -
2+
Title: Django Debug Toolbar Date: 2022-05-16 Order: 5
3+
- - -
4+
5+
BookWyrm has a branch that is configured to run [Django Debug Toolbar](https://django-debug-toolbar.readthedocs.io/en/latest/). This branch will never get merged into `main` and has a few tweaks that make it work with the toolbar, but unsafe to use in anything resembling a production environment. To use this branch, you will need to go through a few steps to get it running.
6+
7+
## Set up
8+
9+
- Using git, checkout out the [`debug-toolbar`](https://github.com/bookwyrm-social/bookwyrm/tree/debug-toolbar) branch
10+
- Update the branch relative to `main` using `git merge main`. The branch is updated periodically but will likely be behind latest.
11+
- Re-build the Docker images using `docker-compose up --build` to ensure that the Debug Toolbar library is installed from `requirements.txt`
12+
- Access the application `web` image directly (instead of via `nginx`) using port `8000`

0 commit comments

Comments
 (0)