diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/package.json | 3 | ||||
-rw-r--r-- | ui/src/components/comment-form.tsx | 18 | ||||
-rw-r--r-- | ui/src/components/community.tsx | 11 | ||||
-rw-r--r-- | ui/src/components/inbox.tsx | 4 | ||||
-rw-r--r-- | ui/src/components/navbar.tsx | 2 | ||||
-rw-r--r-- | ui/src/components/post-form.tsx | 18 | ||||
-rw-r--r-- | ui/src/components/post.tsx | 25 | ||||
-rw-r--r-- | ui/src/env.ts | 11 | ||||
-rw-r--r-- | ui/src/i18next.ts | 15 | ||||
-rw-r--r-- | ui/src/interfaces.ts | 55 | ||||
-rw-r--r-- | ui/src/services/WebSocketService.ts | 28 | ||||
-rw-r--r-- | ui/src/translations/ca.ts | 239 | ||||
-rw-r--r-- | ui/src/translations/de.ts | 70 | ||||
-rw-r--r-- | ui/src/translations/en.ts | 1 | ||||
-rw-r--r-- | ui/src/translations/es.ts | 81 | ||||
-rw-r--r-- | ui/src/translations/fa.ts | 169 | ||||
-rw-r--r-- | ui/src/translations/fi.ts | 236 | ||||
-rw-r--r-- | ui/src/translations/zh.ts | 30 | ||||
-rw-r--r-- | ui/src/utils.ts | 12 | ||||
-rw-r--r-- | ui/src/version.ts | 2 | ||||
-rw-r--r-- | ui/translation_report.ts | 78 | ||||
-rw-r--r-- | ui/yarn.lock | 33 |
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 |