summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/package.json3
-rw-r--r--ui/src/components/comment-form.tsx18
-rw-r--r--ui/src/components/community.tsx11
-rw-r--r--ui/src/components/inbox.tsx4
-rw-r--r--ui/src/components/navbar.tsx2
-rw-r--r--ui/src/components/post-form.tsx18
-rw-r--r--ui/src/components/post.tsx25
-rw-r--r--ui/src/env.ts11
-rw-r--r--ui/src/i18next.ts15
-rw-r--r--ui/src/interfaces.ts55
-rw-r--r--ui/src/services/WebSocketService.ts28
-rw-r--r--ui/src/translations/ca.ts239
-rw-r--r--ui/src/translations/de.ts70
-rw-r--r--ui/src/translations/en.ts1
-rw-r--r--ui/src/translations/es.ts81
-rw-r--r--ui/src/translations/fa.ts169
-rw-r--r--ui/src/translations/fi.ts236
-rw-r--r--ui/src/translations/zh.ts30
-rw-r--r--ui/src/utils.ts12
-rw-r--r--ui/src/version.ts2
-rw-r--r--ui/translation_report.ts78
-rw-r--r--ui/yarn.lock33
22 files changed, 993 insertions, 148 deletions
diff --git a/ui/package.json b/ui/package.json
index d3085650..7e75052b 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -49,6 +49,7 @@
"fuse-box": "^3.1.3",
"lint-staged": "^10.0.2",
"sortpack": "^2.0.1",
+ "ts-node": "^8.6.2",
"ts-transform-classcat": "^0.0.2",
"ts-transform-inferno": "^4.0.2",
"typescript": "^3.7.5"
@@ -59,7 +60,7 @@
"engineStrict": true,
"husky": {
"hooks": {
- "pre-commit": "ts-node translation_report.ts && git add ../README.md && cargo clippy --manifest-path ../server/Cargo.toml --all-targets --all-features -- -D warnings && lint-staged"
+ "pre-commit": "yarn run ts-node translation_report.ts && git add ../README.md && cargo clippy --manifest-path ../server/Cargo.toml --all-targets --all-features -- -D warnings && lint-staged"
}
},
"lint-staged": {
diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx
index e4543d66..7eb30f50 100644
--- a/ui/src/components/comment-form.tsx
+++ b/ui/src/components/comment-form.tsx
@@ -96,6 +96,7 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
className={`form-control ${this.state.previewMode && 'd-none'}`}
value={this.state.commentForm.content}
onInput={linkEvent(this, this.handleCommentContentChange)}
+ onPaste={linkEvent(this, this.handleImageUploadPaste)}
required
disabled={this.props.disabled}
rows={2}
@@ -208,9 +209,22 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
i.props.onReplyCancel();
}
+ handleImageUploadPaste(i: CommentForm, event: any) {
+ let image = event.clipboardData.files[0];
+ if (image) {
+ i.handleImageUpload(i, image);
+ }
+ }
+
handleImageUpload(i: CommentForm, event: any) {
- event.preventDefault();
- let file = event.target.files[0];
+ let file: any;
+ if (event.target) {
+ event.preventDefault();
+ file = event.target.files[0];
+ } else {
+ file = event;
+ }
+
const imageUploadUrl = `/pictshare/api/upload.php`;
const formData = new FormData();
formData.append('file', file);
diff --git a/ui/src/components/community.tsx b/ui/src/components/community.tsx
index 221c9211..3c5f6890 100644
--- a/ui/src/components/community.tsx
+++ b/ui/src/components/community.tsx
@@ -11,6 +11,7 @@ import {
SortType,
Post,
GetPostsForm,
+ GetCommunityForm,
ListingType,
GetPostsResponse,
CreatePostLikeResponse,
@@ -98,11 +99,11 @@ export class Community extends Component<any, State> {
() => console.log('complete')
);
- if (this.state.communityId) {
- WebSocketService.Instance.getCommunity(this.state.communityId);
- } else if (this.state.communityName) {
- WebSocketService.Instance.getCommunityByName(this.state.communityName);
- }
+ let form: GetCommunityForm = {
+ id: this.state.communityId ? this.state.communityId : null,
+ name: this.state.communityName ? this.state.communityName : null,
+ };
+ WebSocketService.Instance.getCommunity(form);
}
componentWillUnmount() {
diff --git a/ui/src/components/inbox.tsx b/ui/src/components/inbox.tsx
index ba5cc6ad..41c1ce60 100644
--- a/ui/src/components/inbox.tsx
+++ b/ui/src/components/inbox.tsx
@@ -38,6 +38,8 @@ enum UnreadType {
Messages,
}
+type ReplyType = Comment | PrivateMessageI;
+
interface InboxState {
unreadOrAll: UnreadOrAll;
unreadType: UnreadType;
@@ -186,7 +188,7 @@ export class Inbox extends Component<any, InboxState> {
}
all() {
- let combined: Array<Comment | PrivateMessageI> = [];
+ let combined: Array<ReplyType> = [];
combined.push(...this.state.replies);
combined.push(...this.state.mentions);
diff --git a/ui/src/components/navbar.tsx b/ui/src/components/navbar.tsx
index 18ba98c9..1828fce9 100644
--- a/ui/src/components/navbar.tsx
+++ b/ui/src/components/navbar.tsx
@@ -138,7 +138,7 @@ export class Navbar extends Component<any, NavbarState> {
</li>
<li className="nav-item">
<Link
- class="nav-link ml-2"
+ class="nav-link"
to="/sponsors"
title={i18n.t('donate_to_lemmy')}
>
diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx
index ebc7d7b7..57d9a964 100644
--- a/ui/src/components/post-form.tsx
+++ b/ui/src/components/post-form.tsx
@@ -160,6 +160,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
class="form-control"
value={this.state.postForm.url}
onInput={linkEvent(this, this.handlePostUrlChange)}
+ onPaste={linkEvent(this, this.handleImageUploadPaste)}
/>
{this.state.suggestedTitle && (
<div
@@ -442,9 +443,22 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
i.setState(i.state);
}
+ handleImageUploadPaste(i: PostForm, event: any) {
+ let image = event.clipboardData.files[0];
+ if (image) {
+ i.handleImageUpload(i, image);
+ }
+ }
+
handleImageUpload(i: PostForm, event: any) {
- event.preventDefault();
- let file = event.target.files[0];
+ let file: any;
+ if (event.target) {
+ event.preventDefault();
+ file = event.target.files[0];
+ } else {
+ file = event;
+ }
+
const imageUploadUrl = `/pictshare/api/upload.php`;
const formData = new FormData();
formData.append('file', file);
diff --git a/ui/src/components/post.tsx b/ui/src/components/post.tsx
index f57d8913..36621248 100644
--- a/ui/src/components/post.tsx
+++ b/ui/src/components/post.tsx
@@ -23,6 +23,7 @@ import {
SearchType,
SortType,
SearchForm,
+ GetPostForm,
SearchResponse,
GetSiteResponse,
GetCommunityResponse,
@@ -84,7 +85,10 @@ export class Post extends Component<any, PostState> {
() => console.log('complete')
);
- WebSocketService.Instance.getPost(postId);
+ let form: GetPostForm = {
+ id: postId,
+ };
+ WebSocketService.Instance.getPost(form);
}
componentWillUnmount() {
@@ -231,6 +235,18 @@ export class Post extends Component<any, PostState> {
onChange={linkEvent(this, this.handleCommentSortChange)}
/>
</label>
+ <label
+ className={`btn btn-sm btn-secondary pointer ${this.state
+ .commentSort === CommentSortType.Old && 'active'}`}
+ >
+ {i18n.t('old')}
+ <input
+ type="radio"
+ value={CommentSortType.Old}
+ checked={this.state.commentSort === CommentSortType.Old}
+ onChange={linkEvent(this, this.handleCommentSortChange)}
+ />
+ </label>
</div>
);
}
@@ -313,6 +329,13 @@ export class Post extends Component<any, PostState> {
+a.comment.deleted - +b.comment.deleted ||
b.comment.published.localeCompare(a.comment.published)
);
+ } else if (this.state.commentSort == CommentSortType.Old) {
+ tree.sort(
+ (a, b) =>
+ +a.comment.removed - +b.comment.removed ||
+ +a.comment.deleted - +b.comment.deleted ||
+ a.comment.published.localeCompare(b.comment.published)
+ );
} else if (this.state.commentSort == CommentSortType.Hot) {
tree.sort(
(a, b) =>
diff --git a/ui/src/env.ts b/ui/src/env.ts
index 82377415..5003986b 100644
--- a/ui/src/env.ts
+++ b/ui/src/env.ts
@@ -1,6 +1,9 @@
-let host = `${window.location.hostname}`;
-let port = `${window.location.port == '4444' ? '8536' : window.location.port}`;
-let endpoint = `${host}:${port}`;
-export let wsUri = `${
+const host = `${window.location.hostname}`;
+const port = `${
+ window.location.port == '4444' ? '8536' : window.location.port
+}`;
+const endpoint = `${host}:${port}`;
+
+export const wsUri = `${
window.location.protocol == 'https:' ? 'wss://' : 'ws://'
}${endpoint}/api/v1/ws`;
diff --git a/ui/src/i18next.ts b/ui/src/i18next.ts
index aaaecd04..0d3ab177 100644
--- a/ui/src/i18next.ts
+++ b/ui/src/i18next.ts
@@ -10,6 +10,9 @@ import { ru } from './translations/ru';
import { zh } from './translations/zh';
import { nl } from './translations/nl';
import { it } from './translations/it';
+import { fi } from './translations/fi';
+import { ca } from './translations/ca';
+import { fa } from './translations/fa';
// https://github.com/nimbusec-oss/inferno-i18next/blob/master/tests/T.test.js#L66
const resources = {
@@ -23,11 +26,13 @@ const resources = {
ru,
nl,
it,
+ fi,
+ ca,
+ fa,
};
-function format(value: any, format: any, lng: any) {
- if (format === 'uppercase') return value.toUpperCase();
- return value;
+function format(value: any, format: any, lng: any): any {
+ return format === 'uppercase' ? value.toUpperCase() : value;
}
i18next.init({
@@ -38,9 +43,7 @@ i18next.init({
lng: getLanguage(),
fallbackLng: 'en',
resources,
- interpolation: {
- format: format,
- },
+ interpolation: { format },
});
export { i18next as i18n, resources };
diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts
index 5022d817..bc4b8972 100644
--- a/ui/src/interfaces.ts
+++ b/ui/src/interfaces.ts
@@ -48,6 +48,7 @@ export enum CommentSortType {
Hot,
Top,
New,
+ Old,
}
export enum ListingType {
@@ -249,6 +250,10 @@ export interface FollowCommunityForm {
auth?: string;
}
+export interface GetFollowedCommunitiesForm {
+ auth: string;
+}
+
export interface GetFollowedCommunitiesResponse {
communities: Array<CommunityUser>;
}
@@ -524,6 +529,12 @@ export interface CommunityForm {
auth?: string;
}
+export interface GetCommunityForm {
+ id?: number;
+ name?: string;
+ auth?: string;
+}
+
export interface GetCommunityResponse {
community: Community;
moderators: Array<CommunityUser>;
@@ -573,6 +584,11 @@ export interface PostFormParams {
community?: string;
}
+export interface GetPostForm {
+ id: number;
+ auth?: string;
+}
+
export interface GetPostResponse {
post: Post;
comments: Array<Comment>;
@@ -760,6 +776,45 @@ export interface PrivateMessageResponse {
message: PrivateMessage;
}
+export type MessageType =
+ | EditPrivateMessageForm
+ | LoginForm
+ | RegisterForm
+ | CommunityForm
+ | FollowCommunityForm
+ | ListCommunitiesForm
+ | GetFollowedCommunitiesForm
+ | PostForm
+ | GetPostForm
+ | GetPostsForm
+ | GetCommunityForm
+ | CommentForm
+ | CommentLikeForm
+ | SaveCommentForm
+ | CreatePostLikeForm
+ | BanFromCommunityForm
+ | AddAdminForm
+ | AddModToCommunityForm
+ | TransferCommunityForm
+ | TransferSiteForm
+ | SaveCommentForm
+ | BanUserForm
+ | AddAdminForm
+ | GetUserDetailsForm
+ | GetRepliesForm
+ | GetUserMentionsForm
+ | EditUserMentionForm
+ | GetModlogForm
+ | SiteForm
+ | SearchForm
+ | UserSettingsForm
+ | DeleteAccountForm
+ | PasswordResetForm
+ | PasswordChangeForm
+ | PrivateMessageForm
+ | EditPrivateMessageForm
+ | GetPrivateMessagesForm;
+
type ResponseType =
| SiteResponse
| GetFollowedCommunitiesResponse
diff --git a/ui/src/services/WebSocketService.ts b/ui/src/services/WebSocketService.ts
index 7b338c60..3ad0de44 100644
--- a/ui/src/services/WebSocketService.ts
+++ b/ui/src/services/WebSocketService.ts
@@ -9,9 +9,12 @@ import {
CommentForm,
SaveCommentForm,
CommentLikeForm,
+ GetPostForm,
GetPostsForm,
CreatePostLikeForm,
+ GetCommunityForm,
FollowCommunityForm,
+ GetFollowedCommunitiesForm,
GetUserDetailsForm,
ListCommunitiesForm,
GetModlogForm,
@@ -35,6 +38,7 @@ import {
PrivateMessageForm,
EditPrivateMessageForm,
GetPrivateMessagesForm,
+ MessageType,
} from '../interfaces';
import { webSocket } from 'rxjs/webSocket';
import { Subject } from 'rxjs';
@@ -115,9 +119,9 @@ export class WebSocketService {
}
public getFollowedCommunities() {
- let data = { auth: UserService.Instance.auth };
+ let form: GetFollowedCommunitiesForm = { auth: UserService.Instance.auth };
this.subject.next(
- this.wsSendWrapper(UserOperation.GetFollowedCommunities, data)
+ this.wsSendWrapper(UserOperation.GetFollowedCommunities, form)
);
}
@@ -132,20 +136,14 @@ export class WebSocketService {
this.subject.next(this.wsSendWrapper(UserOperation.CreatePost, postForm));
}
- // TODO strictly type these
- public getPost(postId: number) {
- let data = { id: postId, auth: UserService.Instance.auth };
- this.subject.next(this.wsSendWrapper(UserOperation.GetPost, data));
- }
-
- public getCommunity(communityId: number) {
- let data = { id: communityId, auth: UserService.Instance.auth };
- this.subject.next(this.wsSendWrapper(UserOperation.GetCommunity, data));
+ public getPost(form: GetPostForm) {
+ this.setAuth(form, false);
+ this.subject.next(this.wsSendWrapper(UserOperation.GetPost, form));
}
- public getCommunityByName(name: string) {
- let data = { name: name, auth: UserService.Instance.auth };
- this.subject.next(this.wsSendWrapper(UserOperation.GetCommunity, data));
+ public getCommunity(form: GetCommunityForm) {
+ this.setAuth(form, false);
+ this.subject.next(this.wsSendWrapper(UserOperation.GetCommunity, form));
}
public createComment(commentForm: CommentForm) {
@@ -318,7 +316,7 @@ export class WebSocketService {
);
}
- private wsSendWrapper(op: UserOperation, data: any) {
+ private wsSendWrapper(op: UserOperation, data: MessageType) {
let send = { op: UserOperation[op], data: data };
console.log(send);
return send;
diff --git a/ui/src/translations/ca.ts b/ui/src/translations/ca.ts
new file mode 100644
index 00000000..790a3f9d
--- /dev/null
+++ b/ui/src/translations/ca.ts
@@ -0,0 +1,239 @@
+export const ca = {
+ translation: {
+ post: 'Publicar',
+ remove_post: 'Eliminar publicació',
+ no_posts: 'Sense publicacions.',
+ create_a_post: 'Crear una publicació',
+ create_post: 'Crear Publicació',
+ number_of_posts: '{{count}} Publicacions',
+ posts: 'Publicacions',
+ related_posts: 'Aquestes publicacions podrien estar relacionades',
+ cross_posts: 'Aquest link també ha sigut publicat en:',
+ cross_post: 'cross-post',
+ comments: 'Comentaris',
+ number_of_comments: '{{count}} Comentaris',
+ remove_comment: 'Eliminar Comentaris',
+ communities: 'Comunitats',
+ users: 'Usuaris',
+ create_a_community: 'Crear una comunitat',
+ create_community: 'Crear Comunitat',
+ remove_community: 'Eliminar Comunitat',
+ subscribed_to_communities: 'Subscrit a <1>comunitats</1>',
+ trending_communities: '<1>Comunitats</1> en tendència',
+ list_of_communities: 'Llista de comunitats',
+ number_of_communities: '{{count}} Comunitats',
+ community_reqs: 'minúscules, guió baix, i sense espais.',
+ create_private_message: 'Crear Missatge Privat',
+ send_secure_message: 'Enviar Missatge Segur',
+ send_message: 'Enviar Missatge',
+ message: 'Missatge',
+ edit: 'editar',
+ reply: 'respondre',
+ cancel: 'Cancelar',
+ preview: 'Previsualitzar',
+ upload_image: 'pujar imatge',
+ avatar: 'Avatar',
+ upload_avatar: 'Pujar Avatar',
+ show_avatars: 'Veure Avatares',
+ formatting_help: 'Ajuda de format',
+ view_source: 'veure font',
+ unlock: 'desbloquejar',
+ lock: 'bloquejar',
+ sticky: 'fijat',
+ unsticky: 'no fijat',
+ link: 'link',
+ archive_link: 'arxivar link',
+ mod: 'moderador',
+ mods: 'moderadores',
+ moderates: 'Modera',
+ settings: 'Configuració',
+ remove_as_mod: 'eliminar com moderador',
+ appoint_as_mod: 'designar com moderador',
+ modlog: 'Historial de moderació',
+ admin: 'administrador',
+ admins: 'administradors',
+ remove_as_admin: 'eliminar com administrador',
+ appoint_as_admin: 'designar com administrador',
+ remove: 'eliminar',
+ removed: 'eliminat',
+ locked: 'bloquejat',
+ stickied: 'fijat',
+ reason: 'Raó',
+ mark_as_read: 'marcar com llegit',
+ mark_as_unread: 'marcar com no llegit',
+ delete: 'eliminar',
+ deleted: 'eliminat',
+ delete_account: 'Eliminar Compte',
+ delete_account_confirm:
+ 'Avís: aquesta acció eliminarà permanentment la teva informació. Introdueix la teva contrasenya per a continuar',
+ restore: 'restaurar',
+ ban: 'expulsar',
+ ban_from_site: 'expulsar del lloc',
+ unban: 'admetre',
+ unban_from_site: 'admetre al lloc',
+ banned: 'expulsat',
+ save: 'guardar',
+ unsave: 'descartar',
+ create: 'crear',
+ creator: 'creador',
+ username: "Nom d'Usuari",
+ email_or_username: 'Correu o Usuari',
+ number_of_users: '{{count}} Usuaris',
+ number_of_subscribers: '{{count}} Subscriptors',
+ number_of_points: '{{count}} Punts',
+ number_online: '{{count}} Usauris En Línia',
+ name: 'Nom',
+ title: 'Titol',
+ category: 'Categoria',
+ subscribers: 'Suscriptors',
+ both: 'Ambdos',
+ saved: 'Guardat',
+ unsubscribe: "Desubscriure's",
+ subscribe: "Subscriure's",
+ subscribed: 'Subscrit',
+ prev: 'Anterior',
+ next: 'Següent',
+ sidebar: 'Descripció de la comunitat',
+ sort_type: "Tipus d'orden",
+ hot: 'Popular',
+ new: 'Nou',
+ top_day: 'El millor del dia',
+ week: 'Setmana',
+ month: 'Mes',
+ year: 'Any',
+ all: 'Tot',
+ top: 'Millor',
+ api: 'API',
+ docs: 'Docs',
+ inbox: "Bústia d'entrada",
+ inbox_for: "Bústia d'entrada per a <1>{{user}}</1>",
+ mark_all_as_read: 'marcar tot com llegit',
+ type: 'Tipus',
+ unread: 'No llegit',
+ replies: 'Respostes',
+ mentions: 'Menciones',
+ reply_sent: 'Resposta enviada',
+ message_sent: 'Missatge enviado',
+ search: 'Buscar',
+ overview: 'Resum',
+ view: 'Vista',
+ logout: 'Tancar sessió',
+ login_sign_up: 'Iniciar sessió / Crear compte',
+ login: 'Iniciar sessió',
+ sign_up: 'Crear compte',
+ notifications_error:
+ "Notificacions d'escriptori no disponibles al teu navegador. Prova amb Firefox o Chrome.",
+ unread_messages: 'Missatges no llegits',
+ messages: 'Missatges',
+ password: 'Contrasenya',
+ verify_password: 'Verificar Contrasenya',
+ old_password: 'Antiga Contrasenya',
+ forgot_password: 'oblidí la meva contrasenya',
+ reset_password_mail_sent: 'Enviar correu per a restablir la contrasenya.',
+ password_change: 'Canvi de Contrasenya',
+ new_password: 'Nueva Contrasenya',
+ no_email_setup: 'Aquest servidor no ha activat correctament el correu.',
+ email: 'Correu electrònic',
+ matrix_user_id: 'Usuari Matricial',
+ private_message_disclaimer:
+ 'Avís: Els missatges privats en Lemmy no són segurs. Sisplau creu un compte en <1>Riot.im</1> per a mensajeria segura.',
+ send_notifications_to_email: 'Enviar notificacions al correu',
+ optional: 'Opcional',
+ expires: 'Expira',
+ language: 'Llenguatge',
+ browser_default: 'Per defecte del navegador',
+ downvotes_disabled: 'Vots negatius deshabilitats',
+ enable_downvotes: 'Habilitar vots negatius',
+ open_registration: 'Obrir registre',
+ registration_closed: 'Registre tancat',
+ enable_nsfw: 'Habilitar NSFW',
+ url: 'URL',
+ body: 'Descripció',
+ copy_suggested_title: 'Copiar el títol sugerido: {{title}}',
+ community: 'Comunitat',
+ expand_here: 'Expandir ací',
+ subscribe_to_communities: "Subscriure's a algunes <1>comunitats</1>.",
+ chat: 'Chat',
+ recent_comments: 'Comentaris recients',
+ no_results: 'Sense resultats.',
+ setup: 'Configurar',
+ lemmy_instance_setup: "Configuració d'instancia de Lemmy",
+ setup_admin: 'Configurar administrador del Lloc',
+ your_site: 'el teu lloc',
+ modified: 'modificat',
+ nsfw: 'NSFW',
+ show_nsfw: 'Mostrar contingut NSFW',
+ theme: 'Tema',
+ sponsors: 'Patrocinadors',
+ sponsors_of_lemmy: 'Patrocinadors de Lemmy',
+ sponsor_message:
+ 'Lemmy és programari lliure i de <1>codi obert</1>, la qual cosa significa que no tindrà publicitats, monetització, ni capitals emprenedors, mai. Les teves donacions secunden directament el desenvolupament a temps complet del projecte. Moltes gràcies a les següents persones:',
+ support_on_patreon: 'Suport a Patreon',
+ donate_to_lemmy: 'Donar a Lemmy',
+ donate: 'Donar',
+ general_sponsors:
+ 'Los Patrocinadores Generales son aquellos que señaron entre $10 y $39 a Lemmy.',
+ crypto: 'Crypto',
+ bitcoin: 'Bitcoin',
+ ethereum: 'Ethereum',
+ monero: 'Monero',
+ code: 'Codi',
+ joined: 'Es va unir',
+ by: 'per',
+ to: 'a',
+ from: 'des de',
+ transfer_community: 'transferir comunitat',
+ transfer_site: 'transferir lloc',
+ are_you_sure: 'Ets segur?',
+ yes: 'sí',
+ no: 'no',
+ powered_by: 'Impulsat per',
+ landing_0:
+ 'Lemmy és un <1>agregador de links</1> / alternativa a reddit, amb la intenció de funcionar al <2>fedivers</2>.<3></3>És allotjable per un mateix (sense necessitat de grans companyies), té actualització en directe de cadenes de comentaris, i és petit (<4>~80kB</4>). Federar amb el sistema de xarxes ActivityPub forma part dels objectius del projecte. <5></5>Aquesta és una <6>versió beta molt prematura</6>, i actualment moltes de les característiques són trencades o falten. <7></7>Suggereix noves característiques o reporta errors <8>aquí</8>.<9></9>Fet amb <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
+ not_logged_in: 'No has iniciat sessió.',
+ logged_in: 'Has iniciat sessió.',
+ community_ban: "Has sigut expulsat d'aquesta comunitat.",
+ site_ban: "Has sigut expulsat d'aquest lloc.",
+ couldnt_create_comment: "No s'ha pogut crear el comentari.",
+ couldnt_like_comment: "No s'ha pogut donar m'agrada al comentari.",
+ couldnt_update_comment: "No s'ha pogut actualitzar el comentari.",
+ couldnt_save_comment: "No s'ha pogut guardar el comentari.",
+ no_comment_edit_allowed: 'No tens permisos per a editar el comentari.',
+ no_post_edit_allowed: 'No tens permisos per a editar la publicació.',
+ no_community_edit_allowed: 'No tens permisos per a editar la comunitat.',
+ couldnt_find_community: "No s'ha pogut trobar la comunitat.",
+ couldnt_update_community: "No s'ha pogut actualitzar la comunitat.",
+ community_already_exists: 'Aquesta comunitat ja existeix.',
+ community_moderator_already_exists:
+ 'Aquest moderador de la comunitat ja existeix.',
+ community_follower_already_exists:
+ 'Aquest seguidor de la comunitat ja existeix.',
+ community_user_already_banned:
+ 'Aquest usuari de la comunitat ja fou expulsat.',
+ couldnt_create_post: "No s'ha pogut crear la publicació.",
+ couldnt_like_post: "No s'ha pogut donar m'agrada a la publicació.",
+ couldnt_find_post: "No s'ha pogut trobar la publicació.",
+ couldnt_get_posts: "No s'han pogut obtindre les publicacions.",
+ couldnt_update_post: "No s'ha pogut actualitzar la publicació.",
+ couldnt_save_post: "No s'ha pogut guardar la publicació.",
+ no_slurs: 'Prohibit insultar.',
+ not_an_admin: 'No és un administrador.',
+ site_already_exists: 'El lloc ja existeix.',
+ couldnt_update_site: "No s'ha pogut actualitzar el lloc.",
+ couldnt_find_that_username_or_email:
+ "No s'ha pogut trobar aquest nom de usuari o correu electrònic.",
+ password_incorrect: 'Contrasenya incorrecta.',
+ passwords_dont_match: 'Les contrasenyes no coincideixen.',
+ admin_already_created: 'Ho sentim, ja hi ha un adminisitrador.',
+ user_already_exists: "L'usuari ja existeix.",
+ email_already_exists: 'El correu ja és en ús.',
+ couldnt_update_user: "No s'ha pogut actualitzar l'usuari.",
+ system_err_login:
+ 'Error del sistema. Intenti tancar sessió i ingressar de nou.',
+ couldnt_create_private_message: "No s'ha pogut crear el missatge privat.",
+ no_private_message_edit_allowed:
+ 'Sense permisos per a editar el missatge privat.',
+ couldnt_update_private_message:
+ "No s'ha pogut actualitzar el missatge privat.",
+ },
+};
diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts
index 1ecaadaf..7a1b0f5d 100644
--- a/ui/src/translations/de.ts
+++ b/ui/src/translations/de.ts
@@ -15,9 +15,9 @@ export const de = {
remove_comment: 'Kommentar löschen',
communities: 'Communities',
users: 'Benutzer',
- create_a_community: 'Eine community anlegen',
- create_community: 'Community anlegen',
- remove_community: 'Community entfernen',
+ create_a_community: 'Eine Gemeinschaft anlegen',
+ create_community: 'Gemeinschaft anlegen',
+ remove_community: 'Gemeinschaft entfernen',
subscribed_to_communities: 'Abonnierte <1>communities</1>',
trending_communities: 'Trending <1>communities</1>',
list_of_communities: 'Liste von communities',
@@ -36,17 +36,17 @@ export const de = {
unsticky: 'nicht haftend',
link: 'link',
archive_link: 'Archiv-Link',
- mod: 'mod',
- mods: 'mods',
+ mod: 'Moderator',
+ mods: 'Moderatoren',
moderates: 'Moderiert',
settings: 'Einstellungen',
- remove_as_mod: 'Als mod entfernen',
- appoint_as_mod: 'Zum mod ernennen',
+ remove_as_mod: 'Als Moderator entfernen',
+ appoint_as_mod: 'Zum Moderator ernennen',
modlog: 'Modlog',
- admin: 'admin',
- admins: 'admins',
- remove_as_admin: 'Als admin entfernen',
- appoint_as_admin: 'Zum admin ernennen',
+ admin: 'Administrator',
+ admins: 'Administratoren',
+ remove_as_admin: 'Als Administrator entfernen',
+ appoint_as_admin: 'Zum Administrator ernennen',
remove: 'entfernen',
removed: 'entfernt',
locked: 'gesperrt',
@@ -66,11 +66,11 @@ export const de = {
unban_from_site: 'Von der Seite entbannen',
banned: 'gesperrt',
save: 'speichern',
- unsave: 'unsave',
+ unsave: 'nicht speichern',
create: 'anlegen',
creator: 'Ersteller',
- username: 'Username',
- email_or_username: 'Email oder Username',
+ username: 'Benutzername',
+ email_or_username: 'E-mail oder Username',
number_of_users: '{{count}} Benutzer',
number_of_subscribers: '{{count}} Abonnenten',
number_of_points: '{{count}} Punkte',
@@ -86,7 +86,7 @@ export const de = {
subscribed: 'Abonniert',
prev: 'Zurück',
next: 'Weiter',
- sidebar: 'Sidebar',
+ sidebar: 'Seitenleiste',
sort_type: 'Sortieren nach',
hot: 'Hot',
new: 'Neu',
@@ -116,28 +116,29 @@ export const de = {
password: 'Passwort',
verify_password: 'Passwort überprüfen',
forgot_password: 'Passwort vergessen',
- reset_password_mail_sent: 'Eine E-Mail wurde geschickt, um dein Passwort zurückzusetzen.',
+ reset_password_mail_sent:
+ 'Eine E-Mail wurde geschickt, um dein Passwort zurückzusetzen.',
password_change: 'Passwort geändert',
new_password: 'neues Passwort',
- no_email_setup: "Dieser Server hat E-Mails nicht korrekt eingerichtet.",
+ no_email_setup: 'Dieser Server hat E-Mails nicht korrekt eingerichtet.',
login: 'Einloggen',
sign_up: 'Registrieren',
- email: 'Email',
- optional: 'Optional',
+ email: 'E-Mail',
+ optional: 'optional',
expires: 'Ablaufdatum',
language: 'Sprache',
browser_default: 'Standard-Browser',
url: 'URL',
body: 'Text',
copy_suggested_title: 'Vorgeschlagenen Titel übernehmen: {{title}}',
- community: 'Community',
- expand_here: 'Expand here',
+ community: 'Gemeinschaft',
+ expand_here: 'hier erweitern',
subscribe_to_communities: 'Abonniere ein paar <1>communities</1>.',
chat: 'Chat',
recent_comments: 'Neueste Kommentare',
no_results: 'Keine Ergebnisse.',
- setup: 'Setup',
- lemmy_instance_setup: 'Lemmy Instanz Setup',
+ setup: 'Einrichten',
+ lemmy_instance_setup: 'Lemmy Instanz Einrichten',
setup_admin: 'Seiten Administrator konfigurieren',
your_site: 'deine Seite',
modified: 'verändert',
@@ -151,7 +152,7 @@ export const de = {
support_on_patreon: 'Auf Patreon unterstützen',
general_sponsors:
'Allgemeine Sponsoren sind die, die zwischen $10 und $39 zu Lemmy beitragen.',
- crypto: 'Crypto',
+ crypto: 'Kryptowährung',
bitcoin: 'Bitcoin',
ethereum: 'Ethereum',
monero: 'Monero',
@@ -159,16 +160,16 @@ export const de = {
joined: 'beigetreten',
by: 'von',
to: 'bis',
- transfer_community: 'Transfer-Community',
+ transfer_community: 'Gemeinschaft übertragen',
transfer_site: 'Transferseite',
are_you_sure: 'Bist du sicher?',
yes: 'Ja',
no: 'Nein',
powered_by: 'Bereitgestellt durch',
landing_0:
- 'Lemmy ist ein <1>Link Aggregator</1> / Reddit Alternative im <2>Fediverse</2>.<3></3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB</4>). Federation in das ActivityPub Netzwerk ist geplant. <5></5>Dies ist eine <6>sehr frühe Beta Version</6>, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7></7>Schlage neue Features vor oder melde Bugs <8>hier.</8><9></9>Gebaut mit <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
+ 'Lemmy ist ein <1>Link-Aggregator</1> / Reddit Alternative im <2>Fediverse</2>.<3></3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB</4>). Federation in das ActivityPub Netzwerk ist geplant. <5></5>Dies ist eine <6>sehr frühe Beta Version</6>, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7></7>Schlage neue Features vor oder melde Bugs <8>hier.</8><9></9>Gebaut mit <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
not_logged_in: 'Nicht eingeloggt.',
- community_ban: 'Du wurdest von dieser Community gebannt.',
+ community_ban: 'Du wurdest von dieser Gemeinschaft gebannt.',
site_ban: 'Du wurdest von dieser Seite gebannt',
couldnt_create_comment: 'Konnte Kommentar nicht anlegen.',
couldnt_like_comment: 'Konnte nicht liken.',
@@ -176,14 +177,15 @@ export const de = {
couldnt_save_comment: 'Konnte Kommentar nicht speichern.',
no_comment_edit_allowed: 'Keine Erlaubnis Kommentar zu editieren.',
no_post_edit_allowed: 'Keine Erlaubnis Beitrag zu editieren.',
- no_community_edit_allowed: 'Keine Erlaubnis Community zu editieren.',
- couldnt_find_community: 'Konnte Community nicht finden.',
- couldnt_update_community: 'Konnte Community nicht aktualisieren.',
- community_already_exists: 'Community existiert bereits.',
+ no_community_edit_allowed: 'Keine Erlaubnis Gemeinschaft zu editieren.',
+ couldnt_find_community: 'Konnte Gemeinschaft nicht finden.',
+ couldnt_update_community: 'Konnte Gemeinschaft nicht aktualisieren.',
+ community_already_exists: 'Gemeinschaft existiert bereits.',
community_moderator_already_exists:
- 'Community Moderator existi