summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-07-03 21:51:42 -0400
committerDessalines <tyhou13@gmx.com>2020-07-03 21:51:42 -0400
commitb1b755713ef791f777fb138ff9c9392e17c3529a (patch)
tree6606127efdf08fa12d7bc22d589a0119e03c6464 /ui
parent4822a53f063586dc7226011e6342b42961d42b3b (diff)
parentaab68f0bafacb88f6c542a98d2a0f3cdb0de20b3 (diff)
Merge branch 'master' into arrudaricardo-issue-#814
Diffstat (limited to 'ui')
-rw-r--r--ui/src/api_tests/api.spec.ts18
-rw-r--r--ui/src/components/comment-form.tsx4
-rw-r--r--ui/src/components/login.tsx49
-rw-r--r--ui/src/components/sponsors.tsx16
-rw-r--r--ui/src/i18next.ts2
-rw-r--r--ui/src/utils.ts4
-rw-r--r--ui/src/version.ts2
-rw-r--r--ui/translations/de.json13
-rw-r--r--ui/translations/el.json10
-rw-r--r--ui/translations/en.json3
-rw-r--r--ui/translations/eo.json239
-rw-r--r--ui/translations/it.json6
-rw-r--r--ui/translations/sq.json108
13 files changed, 365 insertions, 109 deletions
diff --git a/ui/src/api_tests/api.spec.ts b/ui/src/api_tests/api.spec.ts
index 7337201c..41710e11 100644
--- a/ui/src/api_tests/api.spec.ts
+++ b/ui/src/api_tests/api.spec.ts
@@ -124,10 +124,10 @@ describe('main', () => {
});
describe('follow_accept', () => {
- test('/u/lemmy_alpha follows and accepts lemmy_beta/c/main', async () => {
- // Make sure lemmy_beta/c/main is cached on lemmy_alpha
+ test('/u/lemmy_alpha follows and accepts lemmy-beta/c/main', async () => {
+ // Make sure lemmy-beta/c/main is cached on lemmy_alpha
// Use short-hand search url
- let searchUrl = `${lemmyAlphaApiUrl}/search?q=!main@lemmy_beta:8550&type_=All&sort=TopAll`;
+ let searchUrl = `${lemmyAlphaApiUrl}/search?q=!main@lemmy-beta:8550&type_=All&sort=TopAll`;
let searchResponse: SearchResponse = await fetch(searchUrl, {
method: 'GET',
@@ -215,7 +215,7 @@ describe('main', () => {
// Also make G follow B
// Use short-hand search url
- let searchUrlG = `${lemmyGammaApiUrl}/search?q=!main@lemmy_beta:8550&type_=All&sort=TopAll`;
+ let searchUrlG = `${lemmyGammaApiUrl}/search?q=!main@lemmy-beta:8550&type_=All&sort=TopAll`;
let searchResponseG: SearchResponse = await fetch(searchUrlG, {
method: 'GET',
@@ -449,7 +449,7 @@ describe('main', () => {
// Lemmy alpha responds to their own comment, but mentions lemmy beta.
// Make sure lemmy beta gets that in their inbox.
- let mentionContent = 'A test mention of @lemmy_beta@lemmy_beta:8550';
+ let mentionContent = 'A test mention of @lemmy_beta@lemmy-beta:8550';
let mentionCommentForm: CommentForm = {
content: mentionContent,
post_id: 2,
@@ -550,7 +550,7 @@ describe('main', () => {
expect(createCommunityRes.community.name).toBe(communityName);
// Cache it on lemmy_alpha
- let searchUrl = `${lemmyAlphaApiUrl}/search?q=http://lemmy_beta:8550/c/${communityName}&type_=All&sort=TopAll`;
+ let searchUrl = `${lemmyAlphaApiUrl}/search?q=http://lemmy-beta:8550/c/${communityName}&type_=All&sort=TopAll`;
let searchResponse: SearchResponse = await fetch(searchUrl, {
method: 'GET',
}).then(d => d.json());
@@ -826,7 +826,7 @@ describe('main', () => {
expect(createCommunityRes.community.name).toBe(communityName);
// Cache it on lemmy_alpha
- let searchUrl = `${lemmyAlphaApiUrl}/search?q=http://lemmy_beta:8550/c/${communityName}&type_=All&sort=TopAll`;
+ let searchUrl = `${lemmyAlphaApiUrl}/search?q=http://lemmy-beta:8550/c/${communityName}&type_=All&sort=TopAll`;
let searchResponse: SearchResponse = await fetch(searchUrl, {
method: 'GET',
}).then(d => d.json());
@@ -1278,7 +1278,7 @@ describe('main', () => {
// Create a test comment on Gamma, make sure it gets announced to alpha
let commentContent =
- 'A jest test federated comment announce, lets mention @lemmy_beta@lemmy_beta:8550';
+ 'A jest test federated comment announce, lets mention @lemmy_beta@lemmy-beta:8550';
let commentForm: CommentForm = {
content: commentContent,
@@ -1417,7 +1417,7 @@ describe('main', () => {
expect(createChildCommentRes.comment.content).toBe(childCommentContent);
// Follow again, for other tests
- let searchUrl = `${lemmyAlphaApiUrl}/search?q=!main@lemmy_beta:8550&type_=All&sort=TopAll`;
+ let searchUrl = `${lemmyAlphaApiUrl}/search?q=!main@lemmy-beta:8550&type_=All&sort=TopAll`;
let searchResponse: SearchResponse = await fetch(searchUrl, {
method: 'GET',
diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx
index 72a604b9..61ee3d77 100644
--- a/ui/src/components/comment-form.tsx
+++ b/ui/src/components/comment-form.tsx
@@ -263,7 +263,9 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
// If its a comment edit, only check that its from your user, and that its a
// text edit only
- (op == UserOperation.EditComment && data.comment.content)
+ (data.comment.creator_id == UserService.Instance.user.id &&
+ op == UserOperation.EditComment &&
+ data.comment.content)
) {
this.state.previewMode = false;
this.state.loading = false;
diff --git a/ui/src/components/login.tsx b/ui/src/components/login.tsx
index ce04d0d4..97899345 100644
--- a/ui/src/components/login.tsx
+++ b/ui/src/components/login.tsx
@@ -20,6 +20,11 @@ interface State {
loginLoading: boolean;
registerLoading: boolean;
enable_nsfw: boolean;
+ mathQuestion: {
+ a: number;
+ b: number;
+ answer: number;
+ };
}
export class Login extends Component<any, State> {
@@ -40,6 +45,11 @@ export class Login extends Component<any, State> {
loginLoading: false,
registerLoading: false,
enable_nsfw: undefined,
+ mathQuestion: {
+ a: Math.floor(Math.random() * 10) + 1,
+ b: Math.floor(Math.random() * 10) + 1,
+ answer: undefined,
+ },
};
constructor(props: any, context: any) {
@@ -215,6 +225,23 @@ export class Login extends Component<any, State> {
/>
</div>
</div>
+ <div class="form-group row">
+ <label class="col-sm-10 col-form-label" htmlFor="register-math">
+ {i18n.t('what_is')}{' '}
+ {`${this.state.mathQuestion.a} + ${this.state.mathQuestion.b}?`}
+ </label>
+
+ <div class="col-sm-2">
+ <input
+ type="number"
+ id="register-math"
+ class="form-control"
+ value={this.state.mathQuestion.answer}
+ onInput={linkEvent(this, this.handleMathAnswerChange)}
+ required
+ />
+ </div>
+ </div>
{this.state.enable_nsfw && (
<div class="form-group row">
<div class="col-sm-10">
@@ -235,7 +262,11 @@ export class Login extends Component<any, State> {
)}
<div class="form-group row">
<div class="col-sm-10">
- <button type="submit" class="btn btn-secondary">
+ <button
+ type="submit"
+ class="btn btn-secondary"
+ disabled={this.mathCheck}
+ >
{this.state.registerLoading ? (
<svg class="icon icon-spinner spin">
<use xlinkHref="#icon-spinner"></use>
@@ -272,7 +303,9 @@ export class Login extends Component<any, State> {
i.state.registerLoading = true;
i.setState(i.state);
- WebSocketService.Instance.register(i.state.registerForm);
+ if (!i.mathCheck) {
+ WebSocketService.Instance.register(i.state.registerForm);
+ }
}
handleRegisterUsernameChange(i: Login, event: any) {
@@ -303,6 +336,11 @@ export class Login extends Component<any, State> {
i.setState(i.state);
}
+ handleMathAnswerChange(i: Login, event: any) {
+ i.state.mathQuestion.answer = event.target.value;
+ i.setState(i.state);
+ }
+
handlePasswordReset(i: Login) {
event.preventDefault();
let resetForm: PasswordResetForm = {
@@ -311,6 +349,13 @@ export class Login extends Component<any, State> {
WebSocketService.Instance.passwordReset(resetForm);
}
+ get mathCheck(): boolean {
+ return (
+ this.state.mathQuestion.answer !=
+ this.state.mathQuestion.a + this.state.mathQuestion.b
+ );
+ }
+
parseMessage(msg: WebSocketJsonResponse) {
let res = wsJsonToRes(msg);
if (msg.error) {
diff --git a/ui/src/components/sponsors.tsx b/ui/src/components/sponsors.tsx
index 06e13524..31a4ee5e 100644
--- a/ui/src/components/sponsors.tsx
+++ b/ui/src/components/sponsors.tsx
@@ -6,10 +6,12 @@ import { repoUrl } from '../utils';
interface SilverUser {
name: string;
- link: string;
+ link?: string;
}
let general = [
+ 'dude in phx',
+ 'twilight loki',
'Andrew Plaza',
'Jonathan Cremin',
'Arthur Nieuwland',
@@ -19,7 +21,7 @@ let general = [
'Andre Vallestero',
'NotTooHighToHack',
];
-let highlighted = ['Oskenso Kashi', 'Alex Benishek'];
+let highlighted = ['DiscountFuneral', 'Oskenso Kashi', 'Alex Benishek'];
let silver: Array<SilverUser> = [
{
name: 'Redjoker',
@@ -89,9 +91,13 @@ 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" rel="noopener">
- 💎 {s.name}
- </a>
+ {s.link ? (
+ <a href={s.link} target="_blank" rel="noopener">
+ 💎 {s.name}
+ </a>
+ ) : (
+ <div>💎 {s.name}</div>
+ )}
</div>
</div>
))}
diff --git a/ui/src/i18next.ts b/ui/src/i18next.ts
index 5fa8f4e8..7a341cea 100644
--- a/ui/src/i18next.ts
+++ b/ui/src/i18next.ts
@@ -24,6 +24,7 @@ import { gl } from './translations/gl';
import { tr } from './translations/tr';
import { hu } from './translations/hu';
import { uk } from './translations/uk';
+import { sq } from './translations/sq';
// https://github.com/nimbusec-oss/inferno-i18next/blob/master/tests/T.test.js#L66
const resources = {
@@ -51,6 +52,7 @@ const resources = {
tr,
hu,
uk,
+ sq,
};
function format(value: any, format: any, lng: any): any {
diff --git a/ui/src/utils.ts b/ui/src/utils.ts
index 7bf6fdd1..48d2095d 100644
--- a/ui/src/utils.ts
+++ b/ui/src/utils.ts
@@ -21,6 +21,7 @@ import 'moment/locale/gl';
import 'moment/locale/tr';
import 'moment/locale/hu';
import 'moment/locale/uk';
+import 'moment/locale/sq';
import {
UserOperation,
@@ -83,6 +84,7 @@ export const languages = [
{ code: 'fi', name: 'Suomi' },
{ code: 'fr', name: 'Français' },
{ code: 'sv', name: 'Svenska' },
+ { code: 'sq', name: 'Shqip' },
{ code: 'tr', name: 'Türkçe' },
{ code: 'uk', name: 'українська мова' },
{ code: 'ru', name: 'Русский' },
@@ -414,6 +416,8 @@ export function getMomentLanguage(): string {
lang = 'hu';
} else if (lang.startsWith('uk')) {
lang = 'uk';
+ } else if (lang.startsWith('sq')) {
+ lang = 'sq';
} else {
lang = 'en';
}
diff --git a/ui/src/version.ts b/ui/src/version.ts
index 01d3be81..709137ef 100644
--- a/ui/src/version.ts
+++ b/ui/src/version.ts
@@ -1 +1 @@
-export const version: string = 'v0.7.5';
+export const version: string = 'v0.7.8';
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 7d7d1497..4dab7c88 100644
--- a/ui/translations/el.json
+++ b/ui/translations/el.json
@@ -102,7 +102,7 @@
"category": "Κατηγορία",
"subscribers": "Εγγεγραμμένοι",
"both": "Και οι δύο",
- "saved": "Αποθηκεύτηκε",
+ "saved": "Αποθηκευμένα",
"prev": "Προηγούμενο",
"next": "Επόμενο",
"sidebar": "Πλευρικό μενού",
@@ -116,7 +116,7 @@
"mark_all_as_read": "επισήμανση όλων ως διαβασμένα",
"type": "Είδος",
"unread": "Μη διαβασμένα",
- "url": "Ενιαίος Εντοπιστής Πόρων (URL)",
+ "url": "URL",
"subscribed": "Εγγεγραμμένος",
"week": "Εβδομάδα",
"month": "Μήνας",
@@ -151,8 +151,8 @@
"reset_password_mail_sent": "Μόλις στάλθηκε ένα μήνυμα ηλεκτρονικού ταχυδρομείου για την επαναφορά του κωδικού σας.",
"password_change": "Αλλαγή κωδικού",
"new_password": "Νέος κωδικός",
- "no_email_setup": "Αυτός ο διακομιστής δεν έχει εγκαταστήσει σωστά το ηλεκτρονικό ταχυδρομείο.",
- "email": "Ηλεκτρονικό ταχυδρομείο",
+ "no_email_setup": "Αυτός ο διακομιστής δεν έχει εγκαταστήσει σωστά το email.",
+ "email": "Email",
"matrix_user_id": "Χρήστης Matrix",
"private_message_disclaimer": "Προσοχή: τα προσωπικά μηνύματα στο Lemmy δεν είναι ασφαλή. Παρακαλούμε δημιουργήστε έναν λογαριασμό στο <1>Riot.im</1> για ασφαλή επικοινωνία.",
"send_notifications_to_email": "Αποστολή ειδοποιήσεων στη διεύθυνση ηλεκτρονικού ταχυδρομείου",
@@ -200,7 +200,7 @@
"monero": "Monero",
"code": "Κώδικας",
"by": "από",
- "to": "μέχρι",
+ "to": "προς",
"from": "από",
"transfer_community": "μεταφορά κοινότητας",
"transfer_site": "μεταφορά ιστότοπου",
diff --git a/ui/translations/en.json b/ui/translations/en.json
index 6d2d1c5d..62b11ce4 100644
--- a/ui/translations/en.json
+++ b/ui/translations/en.json
@@ -264,5 +264,6 @@
"time": "Time",
"action": "Action",
"emoji_picker": "Emoji Picker",
- "block_leaving": "Are you sure you want to leave?"
+ "block_leaving": "Are you sure you want to leave?",
+ "what_is": "What is"
}
diff --git a/ui/translations/eo.json b/ui/translations/eo.json
index 5bde84f4..78821bf0 100644
--- a/ui/translations/eo.json
+++ b/ui/translations/eo.json
@@ -1,33 +1,34 @@
{
- "post": "Poŝti",
- "remove_post": "Fortiri Poŝton",
- "no_posts": "Ne Poŝtoj.",
- "create_a_post": "Verki Poŝton",
- "create_post": "Verki Poŝton",
- "number_of_posts": "{{count}} Poŝtoj",
- "posts": "Poŝtoj",
- "related_posts": "Tiuj poŝtoj eble rilatas",
- "cross_posts": "Tiuj ligilo ankaŭ estas poŝtinta al:",
- "cross_post": "laŭapoŝto",
+ "post": "Afiŝi",
+ "remove_post": "Forigi afiŝon",
+ "no_posts": "Neniuj afiŝoj.",
+ "create_a_post": "Verki afiŝon",
+ "create_post": "Verki afiŝon",
+ "number_of_posts": "{{count}} afiŝo",
+ "number_of_posts_plural": "{{count}} afiŝoj",
+ "posts": "Afiŝoj",
+ "related_posts": "Ĉi tiuj afiŝoj eble rilatas",
+ "cross_posts": "Tiu ligilo ankaŭ estas afiŝita al:",
+ "cross_post": "transafiŝo",
"comments": "Komentoj",
- "number_of_comments": "{{count}} Komento",
- "number_of_comments_plural": "{{count}} Komentoj",
- "remove_comment": "Fortiri Komentojn",
+ "number_of_comments": "{{count}} komento",
+ "number_of_comments_plural": "{{count}} komentoj",
+ "remove_comment": "Forigi komenton",
"communities": "Komunumoj",
"users": "Uzantoj",
"create_a_community": "Krei komunumon",
- "create_community": "Krei Komunumon",
- "remove_community": "Forigi Komunumon",
- "subscribed_to_communities": "Abonita al <1>komunumoj</1>",
- "trending_communities": "Furora <1>komunumoj</1>",
+ "create_community": "Krei komunumon",
+ "remove_community": "Forigi komunumon",
+ "subscribed_to_communities": "Abonanta <1>komunumojn</1>",
+ "trending_communities": "Furoraj <1>komunumoj</1>",
"list_of_communities": "Listo de komunumoj",
- "community_reqs": "minusklaj leteroj, substrekoj, kaj ne spacetoj.",
+ "community_reqs": "minusklaj literoj, substrekoj, kaj neniuj spacetoj.",
"edit": "redakti",
- "reply": "repliki",
- "cancel": "nuligi",
+ "reply": "respondi",
+ "cancel": "Nuligi",
"unlock": "malŝlosi",
"lock": "ŝlosi",
- "link": "ligi",
+ "link": "ligilo",
"mod": "moderanto",
"mods": "moderantoj",
"moderates": "Moderigas",
@@ -37,17 +38,17 @@
"modlog": "Moderlogo",
"admin": "administranto",
"admins": "administrantoj",
- "remove_as_admin": "forigi per administranto",
- "appoint_as_admin": "nomumi per administranto",
- "remove": "fortiri",
+ "remove_as_admin": "forigi kiel administranto",
+ "appoint_as_admin": "nomumi administranto",
+ "remove": "forigi",
"removed": "fortirita",
"locked": "ŝlosita",
"reason": "Kialo",
- "mark_as_read": "marki kiel legita",
- "mark_as_unread": "marki kiel nelegita",
+ "mark_as_read": "marki legita",
+ "mark_as_unread": "marki nelegita",
"delete": "forigi",
- "deleted": "forigita",
- "restore": "restaŭri",
+ "deleted": "forigita de la kreinto",
+ "restore": "revenigi",
"ban": "forbari",
"ban_from_site": "forbari de retejo",
"unban": "malforbari",
@@ -55,11 +56,14 @@
"save": "konservi",
"unsave": "malkonservi",
"create": "krei",
- "username": "Uzantnomo",
- "email_or_username": "Retadreso aŭ Uzantnomo",
- "number_of_users": "{{count}} Uzantoj",
- "number_of_subscribers": "{{count}} Abonantoj",
- "number_of_points": "{{count}} Voĉdonoj",
+ "username": "Uzantonomo",
+ "email_or_username": "Retpoŝtadreso aŭ uzantonomo",
+ "number_of_users": "{{count}} uzanto",
+ "number_of_users_plural": "{{count}} uzantoj",
+ "number_of_subscribers": "{{count}} abonanto",
+ "number_of_subscribers_plural": "{{count}} abonantoj",
+ "number_of_points": "{{count}} voĉdono",
+ "number_of_points_plural": "{{count}} voĉdonoj",
"name": "Nomo",
"title": "Titolo",
"category": "Kategorio",
@@ -69,10 +73,10 @@
"unsubscribe": "Malaboni",
"subscribe": "Aboni",
"subscribed": "Abonita",
- "prev": "Antaŭe",
- "next": "Poste",
- "sidebar": "Flankstango",
- "sort_type": "Klasi per kia",
+ "prev": "Malpluen",
+ "next": "Pluen",
+ "sidebar": "Flankobreto",
+ "sort_type": "Ordigilo",
"hot": "Varmaj",
"new": "Novaj",
"top_day": "Supraj tagaj",
@@ -84,46 +88,46 @@
"api": "API",
"inbox": "Ricevujo",
"inbox_for": "Ricevujo de <1>{{user}}</1>",
- "mark_all_as_read": "marki ĉiujn kiel legitaj",
+ "mark_all_as_read": "marki ĉiujn legitaj",
"type": "Tipo",
"unread": "Nelegitaj",
- "reply_sent": "Repliko sendis",
+ "reply_sent": "Respondo sendiĝis",
"search": "Serĉi",
"overview": "Resumo",
"view": "Rigardi",
- "logout": "Elsaluti",
- "login_sign_up": "Ensaluti / Registriĝi",
- "login": "Ensaluti",
+ "logout": "Adiaŭi",
+ "login_sign_up": "Saluti / Registriĝi",
+ "login": "Saluti",
"sign_up": "Registriĝi",
- "notifications_error": "Labortablaj avizoj estas nehavebla en via retumilo. Provu Firefox-on aŭ Chrome-on.",
- "unread_messages": "Nelegitaj Mesaĝoj",
+ "notifications_error": "Labortablaj avizoj estas nehaveblaj en via foliumilo. Provu foliumilojn Firefox aŭ Chrome.",
+ "unread_messages": "Nelegitaj mesaĝoj",
"password": "Pasvorto",
- "verify_password": "Konfirmu Vian Pasvorton",
- "email": "Retadreso",
- "optional": "Fakultativa",
+ "verify_password": "Konfirmu vian pasvorton",
+ "email": "Retpoŝtadreso",
+ "optional": "Malnepra",
"expires": "Finiĝos",
"url": "URL",
"body": "Ĉefparto",
- "copy_suggested_title": "kopii la sugestiitan titolon: {{title}}",
+ "copy_suggested_title": "kopii la proponitan titolon: {{title}}",
"community": "Komunumo",
- "expand_here": "Ekspansii ĉi tie",
+ "expand_here": "Etendi ĉi tie",
"subscribe_to_communities": "Aboni al iuj <1>komunumoj</1>.",
"chat": "Babilo",
- "recent_comments": "Freŝaj Komentoj",
- "no_results": "Ne rezultoj.",
+ "recent_comments": "Freŝaj komentoj",
+ "no_results": "Neniuj rezultoj.",
"setup": "Agordi",
- "lemmy_instance_setup": "Agordi Instancon de Lemmy",
- "setup_admin": "Agordi Retejan Administranton",
+ "lemmy_instance_setup": "Agordi nodon de Lemmy",
+ "setup_admin": "Agordi administranton de retejo",
"your_site": "via retejo",
"modified": "modifita",
- "nsfw": "NSFW",
- "show_nsfw": "Vidigi NSFW-an enhavon",
+ "nsfw": "Konsterna",
+ "show_nsfw": "Montri konsternan enhavon",
"sponsors": "Subtenantoj",
"sponsors_of_lemmy": "Subtenantoj de Lemmy",
- "sponsor_message": "Lemmy estas senpaga, <1>liberkoda</1> programaro. Tio signifas ne reklami, pagigi, aŭ riska kapitalo, ĉiam. Viaj donacoj rekte subtenas plentempan evoluon de la projekto. Dankon al tiuj homoj:",
+ "sponsor_message": "Lemmy estas senpaga, <1>liberkoda</1> programaro, sen reklamoj, pagigado, aŭ riska kapitalo, ĉiam ajn. Viaj donacoj rekte subtenas plentempan evoluigadon de la projekto. Dankon al tiuj homoj:",
"support_on_patreon": "Subteni per Patreon",
- "general_sponsors": "Ĝeneralaj Subtenantoj estas tiuj ke donacis inter $10 kaj $39 al Lemmy.",
- "crypto": "Crypto",
+ "general_sponsors": "Ĝeneralaj subtenantoj estas tiuj, kiuj donacis inter $10 kaj $39 al Lemmy.",
+ "crypto": "Ĉifroteĥnikaro",
"bitcoin": "Bitcoin",
"ethereum": "Ethereum",
"monero": "Monero",
@@ -133,45 +137,124 @@
"to": "al",
"transfer_community": "transdoni la komunumon",
"transfer_site": "transdoni la retejon",
- "powered_by": "Konstruis per",
- "landing_0": "Lemmy estas <1>ligila agregatilo</1> / Reddit anstataŭo ke intenciĝas funkci en la <2>federacio-universo</2>.<3></3>ĝi estas mem-gastigebla, havas nuna-ĝisdatigajn komentarojn, kaj estas malgrandega (<4>~80kB</4>). Federacio en la ActivityPub-an reton estas planizita. <5></5>Estas <6>fruega beta versio</6>, kaj multaj trajtoj estas nune difektaj aŭ mankaj. <7></7>Sugestias novajn trajtojn aŭ raportas cimojn <8>ĉi tie.</8><9></9>Faris per <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.",
- "not_logged_in": "Ne estas ensalutinta.",
+ "powered_by": "Konstruita per",
+ "landing": "Lemmy estas <1>amasigilo de ligiloj</1> / alternativo de Reddit, intencita funkcii en la <2>federuniverso</2>.<3></3>ĝi estas mem-gastigebla, havas tuj-ĝisdatigojn de komentaroj, kaj estas malgrandega (<4>~80kB</4>). Federado en la reto de ActivityPub estas planita. <5></5>Ĉi tio estas <6>tre frua beta-versio</6>, kaj multaj funkcioj estas nune difektaj aŭ mankaj. <7></7>Proponu novajn funkciojn aŭ raportu erarojn <8>ĉi tie.</8><9></9>Konstruita per <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.",
+ "not_logged_in": "Nesalutinta.",
"community_ban": "Vi estas forbarita de la komunumo.",
"site_ban": "Vi estas forbarita de la retejo",
"couldnt_create_comment": "Ne povis krei la komenton.",
"couldnt_like_comment": "Ne povis ŝati la komenton.",
- "couldnt_update_comment": "Ne povis ĝisdatigi komenton.",
- "couldnt_save_comment": "Ne povis konservi komenton.",
+ "couldnt_update_comment": "Ne povis ĝisdatigi la komenton.",
+ "couldnt_save_comment": "Ne povis konservi la komenton.",
"no_comment_edit_allowed": "Ne rajtas redakti la komenton.",
- "no_post_edit_allowed": "Ne rajtas redakti la poŝton.",
+ "no_post_edit_allowed": "Ne rajtas redakti la afiŝon.",
"no_community_edit_allowed": "Ne rajtas redakti la komunumon.",
"couldnt_find_community": "Ne povis trovi la komunumon.",
"couldnt_update_community": "Ne povis ĝisdatigi la komunumon.",
"community_already_exists": "Komunumo jam ekzistas.",
"community_moderator_already_exists": "Komunuma moderanto jam ekzistas.",
- "community_follower_already_exists": "Komunuma sekvanto.",
- "community_user_already_banned": "Komunuma uzanto jam estas forbarita.",
- "couldnt_create_post": "Ne povis krei la poŝton.",
- "couldnt_like_post": "Ne povis ŝati la poŝton.",
- "couldnt_find_post": "Ne povis trovi la poŝton.",
- "couldnt_get_posts": "Ne povis irpreni poŝtojn",
- "couldnt_update_post": "Ne povis ĝisdatigi la poŝton",
- "couldnt_save_post": "Ne povis konservi la poŝton.",
- "no_slurs": "Ne bigotaj vortoj.",
+ "community_follower_already_exists": "Abonanto de komunumo jam ekzistas.",
+ "community_user_already_banned": "Uzanto de komunumo jam estas forbarita.",
+ "couldnt_create_post": "Ne povis krei la afiŝon.",
+ "couldnt_like_post": "Ne povis ŝati la afiŝon.",
+ "couldnt_find_post": "Ne povis trovi la afiŝon.",
+ "couldnt_get_posts": "Ne povis akiri afiŝojn",
+ "couldnt_update_post": "Ne povis ĝisdatigi la afiŝon",
+ "couldnt_save_post": "Ne povis konservi la afiŝon.",
+ "no_slurs": "Neniuj fivortoj.",
"not_an_admin": "Ne estas administranto.",
"site_already_exists": "Retejo jam ekzistas.",
"couldnt_update_site": "Ne povis ĝisdatigi la retejon.",
- "couldnt_find_that_username_or_email": "Ne povis trovi tiun uzantnomon aŭ retadreson.",
+ "couldnt_find_that_username_or_email": "Ne povis trovi tiun uzantonomon aŭ retpoŝtadreson.",
"password_incorrect": "Pasvorto malĝustas.",
"passwords_dont_match": "Pasvortoj ne samas.",
"admin_already_created": "Pardonu, jam estas administranto.",
"user_already_exists": "Uzanto jam ekzistas.",
"couldnt_update_user": "Ne povis ĝisdatigi la uzanton.",
- "system_err_login": "Sistema eraro. Provu elsaluti kaj ensaluti.",
+ "system_err_login": "Sistema eraro. Provu adiaŭi kaj resaluti.",
"send_message": "Sendi mesaĝon",
"message": "Mesaĝo",
- "number_of_communities": "{{count}} Komunumo",
- "number_of_communities_plural": "{{count}} Komunumoj",
+ "number_of_communities": "{{count}} komunumo",
+ "number_of_communities_plural": "{{count}} komunumoj",
"more": "pli",
- "select_a_community": "Elekti komunumon"
+ "select_a_community": "Elekti komunumon",
+ "click_to_delete_picture": "Klaku por forigi bildon.",
+ "cross_posted_to": "transafiŝita al: ",
+ "invalid_community_name": "Nevalida nomo.",
+ "picture_deleted": "Bildo foriĝis.",
+ "create_private_message": "Krei privatan mesaĝon",
+ "send_secure_message": "Sendi sekuran mesaĝon",
+ "avatar": "Profilbildo",
+ "show_avatars": "Montri profilbildojn",
+ "formatting_help": "helpo pri formatado",
+ "sorting_help": "helpo pri ordigado",
+ "sticky": "pingli",
+ "unsticky": "malpingli",
+ "stickied": "pinglita",
+ "delete_account": "Forigi konton",
+ "delete_account_confirm": "Averto: ĉi tio por ĉiam forigos ĉiujn viajn datumojn. Enigu pasvorton por konfirmi.",
+ "preview": "Antaŭrigardo",
+ "upload_image": "alŝuti bildon",
+ "upload_avatar": "Alŝuti profilbildon",
+ "banned": "forbarita",
+ "creator": "kreinto",
+ "number_online": "{{count}} uzanto enreta",
+ "number_online_plural": "{{count}} uzantoj enretaj",
+ "old": "Malnovaj",
+ "docs": "Dokumentaĵo",
+ "view_source": "montri fonton",
+ "show_context": "Montri kuntekston",
+ "admin_settings": "Agordoj de agministranto",
+ "site_config": "Agordaro de retejo",
+ "banned_users": "Forbaritaj uzantoj",
+ "donate": "Donaci",
+ "archive_link": "arĥiva ligilo",
+ "replies": "Respondoj",
+ "mentions": "Mencioj",
+ "message_sent": "Mesaĝo sendiĝis",
+ "post_title_too_long": "Titolo de afiŝo estas tro longa.",
+ "messages": "Mesaĝoj",
+ "old_password": "Malnova pasvorto",
+ "forgot_password": "forgesita pasvorto",
+ "reset_password_mail_sent": "Retletero sendiĝis por restarigi vian pasvorton.",
+ "password_change": "Ŝanĝo de pasvorto",
+ "new_password": "Nova pasvorto",
+ "no_email_setup": "Ĉi tiu servilo ne agordis ĝuste retpoŝton.",
+ "matrix_user_id": "Uzanto de Matrix",
+ "private_message_disclaimer": "Averto: Privataj mesaĝoj en Lemmy ne estas sekuraj. Bonvolu krei konton je <1>Riot.im</1> por sekura mesaĝado.",
+ "send_notifications_to_email": "Sendi sciigojn al retpoŝtadreso",
+ "language": "Lingvo",
+ "browser_default": "Laŭ foliumilo",
+ "downvotes_disabled": "Kontraŭvoĉoj malŝaltiĝis",
+ "enable_downvotes": "Ŝalti kontraŭvoĉojn",
+ "open_registration": "Ebligi registradon",
+ "registration_closed": "Registrado malebliĝis",
+ "enable_nsfw": "Ŝalti konsternajn",
+ "support_on_open_collective": "Subteni per OpenCollective",
+ "theme": "Haŭto",
+ "support_on_liberapay": "Subteni per Liberapay",
+ "donate_to_lemmy": "Donaci al Lemmy",
+ "silver_sponsors": "Arĝentaj subtenantoj estas tiuj, kiuj donacis $40 al Lemmy.",
+ "are_you_sure": "ĉu vi certas?",
+ "yes": "jes",
+ "no": "ne",
+ "logged_in": "Salutinta.",
+ "site_saved": "Retejo konserviĝis.",
+ "couldnt_get_comments": "Ne povis akiri la komentojn.",
+ "email_already_exists": "Retpoŝtadreso jam ekzistas.",
+ "couldnt_create_private_message": "Ne povis krei privatan mesaĝon.",
+ "no_private_message_edit_allowed": "Ne rajtas redakti la privatan mesaĝon.",
+ "couldnt_update_private_message": "Ne povis ĝisdatigi la privatan mesaĝon.",
+ "time": "Tempo",
+ "action": "Ago",
+ "emoji_picker": "Elektilo de bildsignoj",
+ "block_leaving": "Ĉu vi certe volas foriri?",
+ "from": "de",
+ "invalid_username": "Nevalida uzantonomo.",
+ "upvote": "Porvoĉi",
+ "number_of_upvotes": "{{count}} porvoĉo",
+ "number_of_upvotes_plural": "{{count}} porvoĉoj",
+ "downvote": "Kontraŭvoĉi",
+ "number_of_downvotes": "{{count}} kontraŭvoĉo",
+ "number_of_downvotes_plural": "{{count}} kontraŭvoĉoj"
}
diff --git a/ui/translations/it.json b/ui/translations/it.json
index 2e9a48d8..cf8c0ea6 100644
--- a/ui/translations/it.json
+++ b/ui/translations/it.json
@@ -56,7 +56,7 @@
"mark_as_read": "segna come letto",
"mark_as_unread": "segna come non letto",
"delete": "cancella",
- "deleted": "eliminato dall'autore del commento",
+ "deleted": "eliminato dal creatore",
"delete_account": "Cancella Account",
"delete_account_confirm": "Attenzione: stai per cancellare permanentemente tutti i tuoi dati. Inserisci la tua password per confermare questa azione.",
"restore": "ripristina",
@@ -151,7 +151,7 @@
"ethereum": "Ethereum",
"monero": "Monero",
"code": "Codice",
- "joined": "Iscritto da",
+ "joined": "Iscritto",
"by": "di",
"to": "su",
"transfer_community": "trasferisci comunità",
@@ -175,7 +175,7 @@
"couldnt_update_community": "Impossibile aggiornare la comunità.",
"community_already_exists": "La comunità esiste già.",
"community_moderator_already_exists": "Questo utente è già moderatore della comunità.",
- "community_follower_already_exists": "Questo utente è già moderatore della comunità.",
+ "community_follower_already_exists": "Questo utente è già membro della comunità.",
"community_user_already_banned": "L'utente della comunità è già stato espulso.",
"couldnt_create_post": "Impossibile creare la pubblicazione.",
"couldnt_like_post": "Impossibile apprezzare la pubblicazione.",
diff --git a/ui/translations/sq.json b/ui/translations/sq.json
new file mode 100644
index 00000000..0526fa26
--- /dev/null
+++ b/ui/translations/sq.json
@@ -0,0 +1,108 @@
+{
+ "remove_post": "Hiqe Postimin",
+ "no_posts": "Nuk ka Postime.",
+ "create_a_post": "Krijo një postim",
+ "create_post": "Krijo Postimin",
+ "posts": "Postime",
+ "related_posts": "Këto postime mund të jenë të lidhura",
+ "cross_posts": "Ky link është postuar edhe te:",
+ "cross_post": "shumë-postim",
+ "cross_posted_to": "shumë-postuar në: ",
+ "comments": "Komentet",
+ "remove_comment": "Fshije Komentin",
+ "communities": "Komunitetet",
+ "users": "Përdoruesit",
+ "create_a_community": "Krijo një komunitet",
+ "select_a_community": "Përzgjedh një komunitet",
+ "create_community": "Krijo komunitetin",
+ "remove_community": "Fshije Komunitetin",
+ "subscribed_to_communities": "I abonuar në",
+ "trending_communities": "Trendi",
+ "list_of_communities": "Lista e komuniteteve",
+ "community_reqs": "gërma të vogla, nënvizim, dhe pa hapësira.",
+ "invalid_community_name": "Emër invalid.",
+ "create_private_message": "Krijo Mesazh Privat",
+ "send_secure_message": "Dërgo Mesazh të Sigurtë",
+ "send_message": "Dërgo Mesazh",
+ "message": "Mesazh",
+ "edit": "redakto",
+ "reply": "përgjigju",
+ "mor