summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md8
-rw-r--r--ansible/VERSION2
-rw-r--r--ansible/templates/docker-compose.yml2
-rw-r--r--ansible/templates/nginx.conf4
-rw-r--r--docker/dev/docker-compose.yml2
-rwxr-xr-xdocker/dev/test_deploy.sh4
-rw-r--r--docker/federation/docker-compose.yml2
-rw-r--r--docker/prod/docker-compose.yml4
-rw-r--r--docs/src/administration_install_ansible.md3
-rw-r--r--docs/src/lemmy_council.md5
-rw-r--r--server/src/api/user.rs3
-rw-r--r--server/src/lib.rs2
-rw-r--r--server/src/version.rs2
-rw-r--r--ui/src/components/comment-form.tsx1
-rw-r--r--ui/src/components/community.tsx1
-rw-r--r--ui/src/components/iframely-card.tsx8
-rw-r--r--ui/src/components/inbox.tsx1
-rw-r--r--ui/src/components/main.tsx2
-rw-r--r--ui/src/components/post-form.tsx2
-rw-r--r--ui/src/components/post-listing.tsx4
-rw-r--r--ui/src/components/private-message-form.tsx2
-rw-r--r--ui/src/components/sort-select.tsx1
-rw-r--r--ui/src/components/sponsors.tsx5
-rw-r--r--ui/src/components/user.tsx8
-rw-r--r--ui/src/env.ts2
-rw-r--r--ui/src/version.ts2
-rw-r--r--ui/translations/de.json13
-rw-r--r--ui/translations/el.json261
-rw-r--r--ui/translations/es.json2
-rw-r--r--ui/translations/eu.json223
-rw-r--r--ui/translations/it.json6
-rw-r--r--ui/translations/nl.json17
-rw-r--r--ui/translations/pt_BR.json20
-rw-r--r--ui/translations/tr.json261
-rw-r--r--ui/translations/uk.json270
35 files changed, 1097 insertions, 58 deletions
diff --git a/README.md b/README.md
index 41ba4809..3668d147 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
<h3 align="center"><a href="https://dev.lemmy.ml">Lemmy</a></h3>
<p align="center">
- A link aggregator / reddit clone for the fediverse.
+ A link aggregator / Reddit clone for the fediverse.
<br />
<br />
<a href="https://dev.lemmy.ml">View Site</a>
@@ -40,9 +40,9 @@ Front Page|Post
For a link aggregator, this means a user registered on one server can subscribe to forums on any other server, and can have discussions with users registered elsewhere.
-The overall goal is to create an easily self-hostable, decentralized alternative to reddit and other link aggregators, outside of their corporate control and meddling.
+The overall goal is to create an easily self-hostable, decentralized alternative to Reddit and other link aggregators, outside of their corporate control and meddling.
-Each lemmy server can set its own moderation policy; appointing site-wide admins, and community moderators to keep out the trolls, and foster a healthy, non-toxic environment where all can feel comfortable contributing.
+Each Lemmy server can set its own moderation policy; appointing site-wide admins, and community moderators to keep out the trolls, and foster a healthy, non-toxic environment where all can feel comfortable contributing.
*Note: Federation is still in active development and the WebSocket, as well as, HTTP API are currently unstable*
@@ -70,7 +70,7 @@ Each lemmy server can set its own moderation policy; appointing site-wide admins
- Only a minimum of a username and password is required to sign up!
- User avatar support.
- Live-updating Comment threads.
- - Full vote scores `(+/-)` like old reddit.
+ - Full vote scores `(+/-)` like old Reddit.
- Themes, including light, dark, and solarized.
- Emojis with autocomplete support. Start typing `:`
- User tagging using `@`, Community tagging using `!`.
diff --git a/ansible/VERSION b/ansible/VERSION
index 2c0a9c7b..378c127d 100644
--- a/ansible/VERSION
+++ b/ansible/VERSION
@@ -1 +1 @@
-v0.7.2
+v0.7.6
diff --git a/ansible/templates/docker-compose.yml b/ansible/templates/docker-compose.yml
index f4c94fd7..76c53463 100644
--- a/ansible/templates/docker-compose.yml
+++ b/ansible/templates/docker-compose.yml
@@ -35,7 +35,7 @@ services:
restart: always
iframely:
- image: dogbin/iframely:latest
+ image: jolt/iframely:v1.4.3
ports:
- "127.0.0.1:8061:80"
volumes:
diff --git a/ansible/templates/nginx.conf b/ansible/templates/nginx.conf
index b710fdb3..5847bad0 100644
--- a/ansible/templates/nginx.conf
+++ b/ansible/templates/nginx.conf
@@ -1,4 +1,5 @@
proxy_cache_path /var/cache/lemmy_frontend levels=1:2 keys_zone=lemmy_frontend_cache:10m max_size=100m use_temp_path=off;
+limit_req_zone $binary_remote_addr zone=lemmy_ratelimit:10m rate=1r/s;
server {
listen 80;
@@ -51,6 +52,9 @@ server {
# Upload limit for pictrs
client_max_body_size 20M;
+ # Rate limit
+ limit_req zone=lemmy_ratelimit burst=30 nodelay;
+
location / {
proxy_pass http://0.0.0.0:8536;
proxy_set_header X-Real-IP $remote_addr;
diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml
index 51a3ecda..fc6e2105 100644
--- a/docker/dev/docker-compose.yml
+++ b/docker/dev/docker-compose.yml
@@ -40,7 +40,7 @@ services:
restart: always
iframely:
- image: dogbin/iframely:latest
+ image: jolt/iframely:v1.4.3
ports:
- "127.0.0.1:8061:80"
volumes:
diff --git a/docker/dev/test_deploy.sh b/docker/dev/test_deploy.sh
index c2ecc0c8..7641c940 100755
--- a/docker/dev/test_deploy.sh
+++ b/docker/dev/test_deploy.sh
@@ -9,10 +9,10 @@ export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1
# Rebuilding dev docker
-sudo docker build . -f "docker/dev/Dockerfile" -t "dessalines/lemmy:$BRANCH"
+sudo docker build ../../ -f . -t "dessalines/lemmy:$BRANCH"
sudo docker push "dessalines/lemmy:$BRANCH"
# Run the playbook
-pushd ../lemmy-ansible
+pushd ../../../lemmy-ansible
ansible-playbook -i test playbooks/site.yml
popd
diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml
index cbc648e6..51a37b91 100644
--- a/docker/federation/docker-compose.yml
+++ b/docker/federation/docker-compose.yml
@@ -107,6 +107,6 @@ services:
- ./volumes/postgres_gamma:/var/lib/postgresql/data
iframely:
- image: dogbin/iframely:latest
+ image: jolt/iframely:v1.4.3
volumes:
- ../iframely.config.local.js:/iframely/config.local.js:ro
diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml
index ef3d6975..cd364a3c 100644
--- a/docker/prod/docker-compose.yml
+++ b/docker/prod/docker-compose.yml
@@ -12,7 +12,7 @@ services:
restart: always
lemmy:
- image: dessalines/lemmy:v0.7.2
+ image: dessalines/lemmy:v0.7.6
ports:
- "127.0.0.1:8536:8536"
restart: always
@@ -35,7 +35,7 @@ services:
restart: always
iframely:
- image: dogbin/iframely:latest
+ image: jolt/iframely:v1.4.3
ports:
- "127.0.0.1:8061:80"
volumes:
diff --git a/docs/src/administration_install_ansible.md b/docs/src/administration_install_ansible.md
index 77d901b3..4676f47d 100644
--- a/docs/src/administration_install_ansible.md
+++ b/docs/src/administration_install_ansible.md
@@ -11,6 +11,9 @@ git clone https://github.com/LemmyNet/lemmy.git
cd lemmy/ansible/
cp inventory.example inventory
nano inventory # enter your server, domain, contact email
+# If the command below fails, you may need to comment out this line
+# In the ansible.cfg file:
+# interpreter_python=/usr/bin/python3
ansible-playbook lemmy.yml --become
```
diff --git a/docs/src/lemmy_council.md b/docs/src/lemmy_council.md
index 08c25fb8..9b24522a 100644
--- a/docs/src/lemmy_council.md
+++ b/docs/src/lemmy_council.md
@@ -1,6 +1,7 @@
# Lemmy Council
-- A group of lemmy developers and users that use a well-defined democratic process to steer the project in a positive direction, keep it aligned to community goals, and resolve conflicts.
+- A group of lemmy developers and users that use a well-defined democratic process to steer the project in a positive direction, keep it aligned to community goals, and resolve conflicts.
+- Council members are also added as administrators to any official Lemmy instances.
## Voting / Decision-Making
@@ -52,4 +53,4 @@ General Contact [@LemmyDev Mastodon](https://mastodon.social/@LemmyDev)
- [Dessalines](https://dev.lemmy.ml/u/dessalines)
- [Nutomic](https://dev.lemmy.ml/u/nutomic)
- [AgreeableLandscape](https://dev.lemmy.ml/u/AgreeableLandscape)
-- [fruechtchen](https://dev.lemmy.ml/u/fruechtchen) \ No newline at end of file
+- [fruechtchen](https://dev.lemmy.ml/u/fruechtchen)
diff --git a/server/src/api/user.rs b/server/src/api/user.rs
index e7c27def..a4e47e41 100644
--- a/server/src/api/user.rs
+++ b/server/src/api/user.rs
@@ -739,7 +739,8 @@ impl Perform for Oper<BanUser> {
}
let ban = data.ban;
- let ban_user = move |conn: &'_ _| User_::ban_user(conn, user_id, ban);
+ let banned_user_id = data.user_id;
+ let ban_user = move |conn: &'_ _| User_::ban_user(conn, banned_user_id, ban);
if blocking(pool, ban_user).await?.is_err() {
return Err(APIError::err("couldnt_update_user").into());
}
diff --git a/server/src/lib.rs b/server/src/lib.rs
index 3657b4a2..3d09b25d 100644
--- a/server/src/lib.rs
+++ b/server/src/lib.rs
@@ -480,7 +480,7 @@ mod tests {
lazy_static! {
static ref EMAIL_REGEX: Regex = Regex::new(r"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$").unwrap();
- static ref SLUR_REGEX: Regex = RegexBuilder::new(r"(fag(g|got|tard)?|maricos?|cock\s?sucker(s|ing)?|nig(\b|g?(a|er)?(s|z)?)\b|dindu(s?)|mudslime?s?|kikes?|mongoloids?|towel\s*heads?|\bspi(c|k)s?\b|\bchinks?|niglets?|beaners?|\bnips?\b|\bcoons?\b|jungle\s*bunn(y|ies?)|jigg?aboo?s?|\bpakis?\b|rag\s*heads?|gooks?|cunts?|bitch(es|ing|y)?|puss(y|ies?)|twats?|feminazis?|whor(es?|ing)|\bslut(s|t?y)?|\btrann?(y|ies?)|ladyboy(s?)|\b(b|re|r)tard(ed)?s?)").case_insensitive(true).build().unwrap();
+ static ref SLUR_REGEX: Regex = RegexBuilder::new(r"(fag(g|got|tard)?|maricos?|cock\s?sucker(s|ing)?|n(i|1)g(\b|g?(a|er)?(s|z)?)\b|dindu(s?)|mudslime?s?|kikes?|mongoloids?|towel\s*heads?|\bspi(c|k)s?\b|\bchinks?|niglets?|beaners?|\bnips?\b|\bcoons?\b|jungle\s*bunn(y|ies?)|jigg?aboo?s?|\bpakis?\b|rag\s*heads?|gooks?|cunts?|bitch(es|ing|y)?|puss(y|ies?)|twats?|feminazis?|whor(es?|ing)|\bslut(s|t?y)?|\btr(a|@)nn?(y|ies?)|ladyboy(s?)|\b(b|re|r)tard(ed)?s?)").case_insensitive(true).build().unwrap();
static ref USERNAME_MATCHES_REGEX: Regex = Regex::new(r"/u/[a-zA-Z][0-9a-zA-Z_]*").unwrap();
// TODO keep this old one, it didn't work with port well tho
// static ref WEBFINGER_USER_REGEX: Regex = Regex::new(r"@(?P<name>[\w.]+)@(?P<domain>[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)").unwrap();
diff --git a/server/src/version.rs b/server/src/version.rs
index b49db803..b72c8198 100644
--- a/server/src/version.rs
+++ b/server/src/version.rs
@@ -1 +1 @@
-pub const VERSION: &str = "v0.7.2";
+pub const VERSION: &str = "v0.7.6";
diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx
index 45974cc0..72a604b9 100644
--- a/ui/src/components/comment-form.tsx
+++ b/ui/src/components/comment-form.tsx
@@ -185,6 +185,7 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
target="_blank"
class="d-inline-block float-right text-muted font-weight-bold"
title={i18n.t('formatting_help')}
+ rel="noopener"
>
<svg class="icon icon-inline">
<use xlinkHref="#icon-help-circle"></use>
diff --git a/ui/src/components/community.tsx b/ui/src/components/community.tsx
index 373d8f80..c193532b 100644
--- a/ui/src/components/community.tsx
+++ b/ui/src/components/community.tsx
@@ -217,6 +217,7 @@ export class Community extends Component<any, State> {
}`}
target="_blank"
title="RSS"
+ rel="noopener"
>
<svg class="icon text-muted small">
<use xlinkHref="#icon-rss">#</use>
diff --git a/ui/src/components/iframely-card.tsx b/ui/src/components/iframely-card.tsx
index 3a89023f..0d3f43f6 100644
--- a/ui/src/components/iframely-card.tsx
+++ b/ui/src/components/iframely-card.tsx
@@ -44,7 +44,12 @@ export class IFramelyCard extends Component<
</span>
) : (
<span>
- <a class="text-body" target="_blank" href={post.url}>
+ <a
+ class="text-body"
+ target="_blank"
+ href={post.url}
+ rel="noopener"
+ >
{post.embed_title}
</a>
</span>
@@ -55,6 +60,7 @@ export class IFramelyCard extends Component<
class="text-muted font-italic"
target="_blank"
href={post.url}
+ rel="noopener"
>
{new URL(post.url).hostname}
<svg class="ml-1 icon">
diff --git a/ui/src/components/inbox.tsx b/ui/src/components/inbox.tsx
index edbacd51..3b963a79 100644
--- a/ui/src/components/inbox.tsx
+++ b/ui/src/components/inbox.tsx
@@ -109,6 +109,7 @@ export class Inbox extends Component<any, InboxState> {
href={`/feeds/inbox/${UserService.Instance.auth}.xml`}
target="_blank"
title="RSS"
+ rel="noopener"
>
<svg class="icon ml-2 text-muted small">
<use xlinkHref="#icon-rss">#</use>
diff --git a/ui/src/components/main.tsx b/ui/src/components/main.tsx
index c168feb0..4e04fe48 100644
--- a/ui/src/components/main.tsx
+++ b/ui/src/components/main.tsx
@@ -452,6 +452,7 @@ export class Main extends Component<any, MainState> {
<a
href={`/feeds/all.xml?sort=${SortType[this.state.sort]}`}
target="_blank"
+ rel="noopener"
title="RSS"
>
<svg class="icon text-muted small">
@@ -467,6 +468,7 @@ export class Main extends Component<any, MainState> {
}`}
target="_blank"
title="RSS"
+ rel="noopener"
>
<svg class="icon text-muted small">
<use xlinkHref="#icon-rss">#</use>
diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx
index 9f5aa363..fdf6ebe4 100644
--- a/ui/src/components/post-form.tsx
+++ b/ui/src/components/post-form.tsx
@@ -222,6 +222,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
)}`}
target="_blank"
class="mr-2 d-inline-block float-right text-muted small font-weight-bold"
+ rel="noopener"
>
{i18n.t('archive_link')}
</a>
@@ -302,6 +303,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
<a
href={markdownHelpUrl}
target="_blank"
+ rel="noopener"
class="d-inline-block float-right text-muted font-weight-bold"
title={i18n.t('formatting_help')}
>
diff --git a/ui/src/components/post-listing.tsx b/ui/src/components/post-listing.tsx
index b4cc4f92..3d608842 100644
--- a/ui/src/components/post-listing.tsx
+++ b/ui/src/components/post-listing.tsx
@@ -197,6 +197,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
className="text-body"
href={post.url}
target="_blank"
+ rel="noopener"
title={post.url}
>
{this.imgThumb(this.getImage(true))}
@@ -227,6 +228,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
href={post.url}
target="_blank"
title={post.url}
+ rel="noopener"
>
<svg class="icon thumbnail">
<use xlinkHref="#icon-external-link"></use>
@@ -303,6 +305,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
href={post.url}
target="_blank"
title={post.url}
+ rel="noopener"
>
{post.name}
</a>
@@ -323,6 +326,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
href={post.url}
target="_blank"
title={post.url}
+ rel="noopener"
>
{hostname(post.url)}
<svg class="ml-1 icon icon-inline">
diff --git a/ui/src/components/private-message-form.tsx b/ui/src/components/private-message-form.tsx
index 8cb7590e..10782361 100644
--- a/ui/src/components/private-message-form.tsx
+++ b/ui/src/components/private-message-form.tsx
@@ -175,6 +175,7 @@ export class PrivateMessageForm extends Component<
<a
class="alert-link"
target="_blank"
+ rel="noopener"
href="https://about.riot.im/"
>
#
@@ -236,6 +237,7 @@ export class PrivateMessageForm extends Component<
<a
href={markdownHelpUrl}
target="_blank"
+ rel="noopener"
class="text-muted"
title={i18n.t('formatting_help')}
>
diff --git a/ui/src/components/sort-select.tsx b/ui/src/components/sort-select.tsx
index a6ce2ea9..05abdb20 100644
--- a/ui/src/components/sort-select.tsx
+++ b/ui/src/components/sort-select.tsx
@@ -47,6 +47,7 @@ export class SortSelect extends Component<SortSelectProps, SortSelectState> {
className="text-muted"
href={sortingHelpUrl}
target="_blank"
+ rel="noopener"
title={i18n.t('sorting_help')}
>
<svg class={`icon icon-inline`}>
diff --git a/ui/src/components/sponsors.tsx b/ui/src/components/sponsors.tsx
index 35ec7635..06e13524 100644
--- a/ui/src/components/sponsors.tsx
+++ b/ui/src/components/sponsors.tsx
@@ -10,6 +10,9 @@ interface SilverUser {
}
let general = [
+ 'Andrew Plaza',
+ 'Jonathan Cremin',
+ 'Arthur Nieuwland',
'Ernest Wiśniewski',
'HN',
'Forrest Weghorst',
@@ -86,7 +89,7 @@ export class Sponsors extends Component<any, any> {
{silver.map(s => (
<div class="card col-12 col-md-2">
<div>
- <a href={s.link} target="_blank">
+ <a href={s.link} target="_blank" rel="noopener">
💎 {s.name}
</a>
</div>
diff --git a/ui/src/components/user.tsx b/ui/src/components/user.tsx
index f635a1cd..69914fd3 100644
--- a/ui/src/components/user.tsx
+++ b/ui/src/components/user.tsx
@@ -317,6 +317,7 @@ export class User extends Component<any, UserState> {
SortType[this.state.sort]
}`}
target="_blank"
+ rel="noopener"
title="RSS"
>
<svg class="icon mx-2 text-muted small">
@@ -463,6 +464,7 @@ export class User extends Component<any, UserState> {
!this.state.user.matrix_user_id && 'disabled'
}`}
target="_blank"
+ rel="noopener"
href={`https://matrix.to/#/${this.state.user.matrix_user_id}`}
>
{i18n.t('send_secure_message')}
@@ -586,7 +588,11 @@ export class User extends Component<any, UserState> {
</div>
<div class="form-group row">
<label class="col-lg-5 col-form-label">
- <a href="https://about.riot.im/" target="_blank">
+ <a
+ href="https://about.riot.im/"
+ target="_blank"
+ rel="noopener"
+ >
{i18n.t('matrix_user_id')}
</a>
</label>
diff --git a/ui/src/env.ts b/ui/src/env.ts
index a57b9349..5003986b 100644
--- a/ui/src/env.ts
+++ b/ui/src/env.ts
@@ -1,6 +1,6 @@
const host = `${window.location.hostname}`;
const port = `${
- window.location.port == '4444' ? '8540' : window.location.port
+ window.location.port == '4444' ? '8536' : window.location.port
}`;
const endpoint = `${host}:${port}`;
diff --git a/ui/src/version.ts b/ui/src/version.ts
index 92d18546..8ad27e7c 100644
--- a/ui/src/version.ts
+++ b/ui/src/version.ts
@@ -1 +1 @@
-export const version: string = 'v0.7.2';
+export const version: string = 'v0.7.6';
diff --git a/ui/translations/de.json b/ui/translations/de.json
index ef42d418..3199bc7a 100644
--- a/ui/translations/de.json
+++ b/ui/translations/de.json
@@ -50,14 +50,14 @@
"remove_as_admin": "Als Administrator entfernen",
"appoint_as_admin": "Zum Administrator ernennen",
"remove": "entfernen",
- "removed": "entfernt",
+ "removed": "entfernt durch die Moderation",
"locked": "gesperrt",
"stickied": "angeheftet",
"reason": "Grund",
"mark_as_read": "als gelesen markieren",
"mark_as_unread": "als ungelesen markieren",
"delete": "löschen",
- "deleted": "gelöscht",
+ "deleted": "vom Ersteller gelöscht",
"delete_account": "Konto löschen",
"delete_account_confirm": "Achtung: Dadurch werden alle Ihre Daten dauerhaft gelöscht. Geben Sie zur Bestätigung Ihr Passwort ein.",
"restore": "wiederherstellen",
@@ -150,7 +150,7 @@
"theme": "Aussehen",
"sponsors": "Sponsoren",
"sponsors_of_lemmy": "Sponsoren von Lemmy",
- "sponsor_message": "Lemmy ist freie <1>Open-Source</1> Software, also ohne Werbung, Monetarisierung oder Venturekapital, Punkt. Deine Spenden gehen direkt an die Vollzeit Entwicklung des Projekts. Vielen Dank an die folgenden Personen:",
+ "sponsor_message": "Lemmy ist freie <1>Open-Source</1> Software, ohne Werbung, Monetarisierung oder Venturekapital, Punkt. Deine Spenden gehen direkt an die Vollzeit Entwicklung des Projekts. Vielen Dank an die folgenden Personen:",
"support_on_patreon": "Auf Patreon unterstützen",
"support_on_liberapay": "Auf Liberapay unterstützen",
"general_sponsors": "Allgemeine Sponsoren sind die, die zwischen $10 und $39 zu Lemmy beitragen.",
@@ -251,5 +251,10 @@
"number_of_upvotes": "{{count}} Stimme",
"number_of_upvotes_plural": "{{count}} Stimmen",
"number_of_downvotes": "{{count}} Gegenstimme",
- "number_of_downvotes_plural": "{{count}} Gegenstimmen"
+ "number_of_downvotes_plural": "{{count}} Gegenstimmen",
+ "invalid_community_name": "Ungültiger Name.",
+ "click_to_delete_picture": "Klicke, um das Bild zu löschen.",
+ "picture_deleted": "Bild gelöscht.",
+ "select_a_community": "Wähle eine Community aus",
+ "invalid_username": "Ungültiger Benutzername."
}
diff --git a/ui/translations/el.json b/ui/translations/el.json
index 0967ef42..4dab7c88 100644
--- a/ui/translations/el.json
+++ b/ui/translations/el.json
@@ -1 +1,260 @@
-{}
+{
+ "invalid_community_name": "Άκυρο όνομα.",
+ "click_to_delete_picture": "Κλικ για διαγραφή εικόνας.",
+ "picture_deleted": "Η φωτογραφία διαγράφηκε.",
+ "cross_posts": "Αυτός ο σύνδεσμος έχει επίσης δημοσιευτεί σε:",
+ "create_post": "Δημιουργία δημοσίευσης",
+ "create_a_post": "Δημιουργία μιας δημοσίευσης",
+ "number_of_posts": "{{count}} Δημοσίευση",
+ "number_of_posts_plural": "{{count}} Δημοσιεύσεις",
+ "posts": "Δημοσιεύσεις",
+ "related_posts": "Αυτές οι δημοσιεύσεις μπορεί να σχετίζονται",
+ "cross_post": "Επαναδημοσίευση",
+ "cross_posted_to": "Επαναδημοσιευμένο σε: ",
+ "comments": "Σχόλια",
+ "number_of_comments": "{{count}} Σχόλιο",
+ "number_of_comments_plural": "{{count}} Σχόλια",
+ "post": "δημοσίευση",
+ "remove_post": "Αφαίρεση δημοσίευσης",
+ "no_posts": "Δεν υπάρχουν δημοσιεύσεις.",
+ "remove_comment": "Αφαίρεση σχολίου",
+ "communities": "Κοινότητες",
+ "users": "Χρήστες",
+ "create_a_community": "Δημιουργία μιας κοινότητας",
+ "create_community": "Δημιουργία κοινότητας",
+ "remove_community": "Αφαίρεση κοινότητας",
+ "subscribed_to_communities": "Εγγεγραμμένος σε <1>κοινότητες</1>",
+ "trending_communities": "Τάση σε <1>κοινότητες</1>",
+ "list_of_communities": "Κατάλογος κοινοτήτων",
+ "number_of_communities": "{{count}} Κοινότητα",
+ "number_of_communities_plural": "{{count}} Κοινότητες",
+ "community_reqs": "πεζά (μικρά) γράμματα, υπογραμμίσεις, και χωρίς κενά.",
+ "create_private_message": "Δημιουργία προσωπικού μηνύματος",
+ "send_secure_message": "Αποστολή ασφαλούς μηνύματος",
+ "send_message": "Αποστολή μηνύματος",
+ "message": "Μήνυμα",
+ "edit": "επεξεργασία",
+ "reply": "απάντηση",
+ "more": "περισσότερα",
+ "cancel": "Ακύρωση",
+ "preview": "Προεπισκόπηση",
+ "upload_image": "φόρτωση εικόνας",
+ "avatar": "Άβαταρ",
+ "upload_avatar": "Φόρτωση άβαταρ",
+ "show_avatars": "Εμφάνιση των άβαταρς",
+ "show_context": "Εμφάνιση συμφραζόμενων",
+ "formatting_help": "βοήθεια μορφοποίησης",
+ "sorting_help": "βοήθεια ταξινόμησης",
+ "view_source": "προβολή πηγής",
+ "unlock": "ξεκλείδωμα",
+ "lock": "κλείδωμα",
+ "sticky": "καρφίτσωμα",
+ "unsticky": "ξεκαρφίτσωμα",
+ "link": "σύνδεσμος",
+ "archive_link": "αρχειοθέτηση συνδέσμου",
+ "mod": "συντονιστής",
+ "mods": "συντονιστές",
+ "moderates": "Συντονίζει",
+ "settings": "Ρυθμίσεις",
+ "admin_settings": "Ρυθμίσεις διαχειριστή",
+ "appoint_as_mod": "διορισμός ως συντονιστής",
+ "site_config": "Διαμόρφωση ιστότοπου",
+ "remove_as_mod": "αφαίρεση ως συντονιστής",
+ "modlog": "Ιστορικό συντονισμού",
+ "admin": "διαχειριστής",
+ "admins": "διαχειριστές",
+ "remove_as_admin": "αφαίρεση ως διαχειριστής",
+ "appoint_as_admin": "διορισμός ως διαχειριστής",
+ "remove": "αφαίρεση",
+ "removed": "αφαιρέθηκε από συντονιστή",
+ "locked": "κλειδωμένο",
+ "stickied": "καρφιτσωμένο",
+ "reason": "Λόγος",
+ "mark_as_read": "επισήμανση ως διαβασμένο",
+ "mark_as_unread": "επισήμανση ως μη διαβασμένο",
+ "delete": "διαγραφή",
+ "deleted": "διαγράφηκε από τον δημιουργό",
+ "delete_account": "Διαγραφή λογαριασμού",
+ "delete_account_confirm": "Προσοχή: αυτό θα διαγράψει όλα τα δεδομένα σας. Είσαγετε τον κωδικό σας για επιβεβαίωση.",
+ "restore": "επαναφορά",
+ "ban": "απαγόρευση",
+ "ban_from_site": "απαγόρευση εισόδου στον ιστότοπο",
+ "unban": "άρση απαγόρευσης",
+ "unban_from_site": "άρση απαγόρευσης εισόδου στον ιστότοπο",
+ "banned": "αποβεβλημένος",
+ "banned_users": "Αποβεβλημένοι χρήστες",
+ "save": "αποθήκευση",
+ "unsave": "αναίρεση αποθήκευσης",
+ "create": "δημιουργία",
+ "creator": "δημιουργός",
+ "username": "Όνομα χρήστη",
+ "email_or_username": "Διεύθυνση ηλεκτρονικού ταχυδρομείου ή όνομα χρήστη",
+ "number_of_users": "{{count}} Χρήστης",
+ "number_of_users_plural": "{{count}} Χρήστες",
+ "number_of_subscribers": "{{count}} Εγγεγραμμένος",
+ "number_of_subscribers_plural": "{{count}} Εγγεγραμμένοι",
+ "number_of_points": "{{count}} Βαθμός",
+ "number_of_points_plural": "{{count}} Βαθμοί",
+ "number_online": "{{count}} Ενεργός χρήστης",
+ "number_online_plural": "{{count}} Ενεργοί χρήστες",
+ "name": "Όνομα",
+ "title": "Επικεφαλίδα",
+ "category": "Κατηγορία",
+ "subscribers": "Εγγεγραμμένοι",
+ "both": "Και οι δύο",
+ "saved": "Αποθηκευμένα",
+ "prev": "Προηγούμενο",
+ "next": "Επόμενο",
+ "sidebar": "Πλευρικό μενού",
+ "sort_type": "Ταξινόμηση κατά",
+ "hot": "Δημοφιλή",
+ "new": "Νέα",
+ "old": "Παλιά",
+ "unsubscribe": "Απεγγραφή",
+ "subscribe": "Εγγραφή",
+ "inbox_for": "Εισερχόμενα για <1>{{user}}</1>",
+ "mark_all_as_read": "επισήμανση όλων ως διαβασμένα",
+ "type": "Είδος",
+ "unread": "Μη διαβασμένα",
+ "url": "URL",
+ "subscribed": "Εγγεγραμμένος",
+ "week": "Εβδομάδα",
+ "month": "Μήνας",
+ "year"