Add some feedback when performing some actions (#552)

* Add a way to display flash messages

* Make the flash messages look nice

* Add actual feedback messages

* cargo fmt

* Move flash messages to PlumeRocket

And add trait to convert PlumeRocket to BaseContext

* Remove useless lifetime
This commit is contained in:
Baptiste Gelez 2019-04-30 11:04:25 +01:00 committed by GitHub
parent 18ae6e26b3
commit 8f1ab3485e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 3255 additions and 445 deletions

View file

@ -6,7 +6,7 @@ mod module {
use crate::search; use crate::search;
use crate::users; use crate::users;
use rocket::{ use rocket::{
request::{self, FromRequest, Request}, request::{self, FlashMessage, FromRequest, Request},
Outcome, State, Outcome, State,
}; };
use scheduled_thread_pool::ScheduledThreadPool; use scheduled_thread_pool::ScheduledThreadPool;
@ -19,6 +19,7 @@ mod module {
pub user: Option<users::User>, pub user: Option<users::User>,
pub searcher: Arc<search::Searcher>, pub searcher: Arc<search::Searcher>,
pub worker: Arc<ScheduledThreadPool>, pub worker: Arc<ScheduledThreadPool>,
pub flash_msg: Option<(String, String)>,
} }
impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket { impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket {
@ -30,10 +31,12 @@ mod module {
let user = request.guard::<users::User>().succeeded(); let user = request.guard::<users::User>().succeeded();
let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?; let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?;
let searcher = request.guard::<State<Arc<search::Searcher>>>()?; let searcher = request.guard::<State<Arc<search::Searcher>>>()?;
let flash_msg = request.guard::<FlashMessage>().succeeded();
Outcome::Success(PlumeRocket { Outcome::Success(PlumeRocket {
conn, conn,
intl, intl,
user, user,
flash_msg: flash_msg.map(|f| (f.name().into(), f.msg().into())),
worker: worker.clone(), worker: worker.clone(),
searcher: searcher.clone(), searcher: searcher.clone(),
}) })

View file

@ -49,6 +49,15 @@ msgstr "لإنشاء مدونة جديدة، تحتاج إلى تسجيل الد
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "تمت إعادة تعيين كلمتك السرية بنجاح."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "لا يسمح لك بحذف هذه المدونة." msgstr "لا يسمح لك بحذف هذه المدونة."
@ -65,10 +74,56 @@ msgstr "لا يمكنك استخدام هذه الوسائط كأيقونة لل
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "لا يمكنك استخدام هذه الوسائط كشعار للمدونة." msgstr "لا يمكنك استخدام هذه الوسائط كشعار للمدونة."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "ليس لديك أية وسائط بعد."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "ليس لديك أية وسائط بعد."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا للإعجاب بهذا المقال" msgstr "يجب عليك تسجيل الدخول أولا للإعجاب بهذا المقال"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "لا يسمح لك بحذف هذه المدونة."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "لا يسمح لك بتعديل هذه المدونة."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا لعرض الإشعارات" msgstr "يجب عليك تسجيل الدخول أولا لعرض الإشعارات"
@ -93,6 +148,34 @@ msgstr "منشور جديد"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "تعديل {0}" msgstr "تعديل {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "لا يسمح لك بتعديل هذه المدونة."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "ليس لديك أية وسائط بعد."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "لا يسمح لك بحذف هذه المدونة."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -103,6 +186,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
#, fuzzy
msgid "You are now connected."
msgstr "ليست لديك التصريحات اللازمة للقيام بذلك."
#, fuzzy
msgid "You are now logged off."
msgstr "ليست لديك التصريحات اللازمة للقيام بذلك."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "إعادة تعيين كلمة المرور" msgstr "إعادة تعيين كلمة المرور"
@ -123,6 +214,14 @@ msgstr "عذراً، ولكن انتهت مدة صلاحية الرابط. حا
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولاللنفاذ إلى لوح المراقبة" msgstr "يجب عليك تسجيل الدخول أولاللنفاذ إلى لوح المراقبة"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -131,6 +230,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "ليس لديك أية وسائط بعد."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Вече съществува блог със същото име." msgstr "Вече съществува блог със същото име."
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -64,10 +72,56 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Вие не сте автор на този блог."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Вие не сте автор на този блог."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -92,6 +146,34 @@ msgstr "Нова публикация"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Вие не сте автор на този блог."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Вие не сте автор на този блог."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +184,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
#, fuzzy
msgid "You are now connected."
msgstr "Не сте упълномощени."
#, fuzzy
msgid "You are now logged off."
msgstr "Не сте упълномощени."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
@ -122,6 +212,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -130,6 +228,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Pluma" msgstr "Pluma"

View file

@ -48,6 +48,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -64,10 +72,54 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:145
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/medias.rs:156
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -92,6 +144,32 @@ msgstr "Apunt nou"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/posts.rs:264
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:565
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +180,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Reinicialització de contrasenya" msgstr "Reinicialització de contrasenya"
@ -122,6 +208,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -130,6 +224,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -48,6 +48,15 @@ msgstr "Pro vytvoření nového blogu musíte být přihlášeni"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Blog s rovnakým názvem již existuje." msgstr "Blog s rovnakým názvem již existuje."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Vaše heslo bylo úspěšně obnoveno."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Nemáte oprávnění zmazat tento blog." msgstr "Nemáte oprávnění zmazat tento blog."
@ -64,10 +73,56 @@ msgstr "Toto médium nelze použít jako ikonu blogu."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Toto médium nelze použít jako banner blogu." msgstr "Toto médium nelze použít jako banner blogu."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Zatím nemáte nahrané žádné média."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Zatím nemáte nahrané žádné média."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Pro oblíbení příspěvku musíte být přihlášen/a" msgstr "Pro oblíbení příspěvku musíte být přihlášen/a"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Nemáte oprávnění zmazat tento blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Nemáte oprávnění upravovat tento blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Pokud chcete vidět vaše notifikace, musíte být přihlášeni" msgstr "Pokud chcete vidět vaše notifikace, musíte být přihlášeni"
@ -92,6 +147,34 @@ msgstr "Nový příspěvek"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Upravit {0}" msgstr "Upravit {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Nemáte oprávnění upravovat tento blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Zatím nemáte nahrané žádné média."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Nemáte oprávnění zmazat tento blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +187,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Pro sdílení příspěvku musíte být přihlášeni" msgstr "Pro sdílení příspěvku musíte být přihlášeni"
#, fuzzy
msgid "You are now connected."
msgstr "Nemáte oprávnění."
#, fuzzy
msgid "You are now logged off."
msgstr "Nemáte oprávnění."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Obnovit heslo" msgstr "Obnovit heslo"
@ -124,6 +215,14 @@ msgstr "Omlouváme se, ale odkaz vypršel. Zkuste to znovu"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Pro přístup k vaší nástěnce musíte být přihlášen/a" msgstr "Pro přístup k vaší nástěnce musíte být přihlášen/a"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Chcete-li někoho odebírat, musíte být přihlášeni" msgstr "Chcete-li někoho odebírat, musíte být přihlášeni"
@ -132,6 +231,27 @@ msgstr "Chcete-li někoho odebírat, musíte být přihlášeni"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Pro úpravu vášho profilu musíte být přihlášeni" msgstr "Pro úpravu vášho profilu musíte být přihlášeni"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Zatím nemáte nahrané žádné média."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "Um einen neuen Blog zu erstellen, müssen Sie angemeldet sein"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Dein Passwort wurde erfolgreich zurückgesetzt."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Sie dürfen diesen Blog nicht löschen." msgstr "Sie dürfen diesen Blog nicht löschen."
@ -64,10 +73,56 @@ msgstr "Sie können dieses Medium nicht als ein Blog-Icon verwenden."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Sie können dieses Medium nicht als einen Blog-Banner verwenden." msgstr "Sie können dieses Medium nicht als einen Blog-Banner verwenden."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Du hast noch keine Medien."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Du hast noch keine Medien."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Um einen Beitrag zu liken, musst du angemeldet sein" msgstr "Um einen Beitrag zu liken, musst du angemeldet sein"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Sie dürfen diesen Blog nicht löschen."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Ihnen fehlt die Berechtigung, um diesen Blog zu bearbeiten."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Um Ihre Benachrichtigungen zu sehen, müssen Sie angemeldet sein" msgstr "Um Ihre Benachrichtigungen zu sehen, müssen Sie angemeldet sein"
@ -92,6 +147,34 @@ msgstr "Neuer Beitrag"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Bearbeite {0}" msgstr "Bearbeite {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Ihnen fehlt die Berechtigung, um diesen Blog zu bearbeiten."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Du hast noch keine Medien."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Sie dürfen diesen Blog nicht löschen."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Um einen Beitrag zu wiederholen, musst du angemeldet sein" msgstr "Um einen Beitrag zu wiederholen, musst du angemeldet sein"
#, fuzzy
msgid "You are now connected."
msgstr "Nicht berechtigt."
#, fuzzy
msgid "You are now logged off."
msgstr "Nicht berechtigt."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Passwort zurücksetzen" msgstr "Passwort zurücksetzen"
@ -122,6 +213,14 @@ msgstr "Entschuldigung, der Link ist abgelaufen. Versuche es erneut"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Um auf dein Dashboard zuzugreifen, musst du angemeldet sein" msgstr "Um auf dein Dashboard zuzugreifen, musst du angemeldet sein"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Um jemanden zu abonnieren, musst du angemeldet sein" msgstr "Um jemanden zu abonnieren, musst du angemeldet sein"
@ -130,6 +229,27 @@ msgstr "Um jemanden zu abonnieren, musst du angemeldet sein"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Um dein Profil zu bearbeiten, musst du angemeldet sein" msgstr "Um dein Profil zu bearbeiten, musst du angemeldet sein"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Du hast noch keine Medien."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -64,10 +72,54 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:145
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/medias.rs:156
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -92,6 +144,32 @@ msgstr ""
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/posts.rs:264
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:565
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +180,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
@ -122,6 +208,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -130,6 +224,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -48,6 +48,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -64,10 +72,56 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -92,6 +146,34 @@ msgstr "Nova skribaĵo"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +184,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
@ -122,6 +212,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -130,6 +228,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -48,6 +48,15 @@ msgstr "Para crear un nuevo blog, necesita estar logueado"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Su contraseña se ha restablecido correctamente."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "No está autorizado a eliminar este registro." msgstr "No está autorizado a eliminar este registro."
@ -64,10 +73,56 @@ msgstr "No puede usar este medio como icono del blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "No puede usar este medio como bandera del blog." msgstr "No puede usar este medio como bandera del blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Todavía no tiene ningún medio."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Todavía no tiene ningún medio."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Para darle un Me Gusta a un artículo, necesita estar conectado" msgstr "Para darle un Me Gusta a un artículo, necesita estar conectado"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "No está autorizado a eliminar este registro."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "No tiene permiso para editar este blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Para ver tus notificaciones, necesitas estar conectado" msgstr "Para ver tus notificaciones, necesitas estar conectado"
@ -92,6 +147,34 @@ msgstr "Nueva publicación"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Editar {0}" msgstr "Editar {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "No tiene permiso para editar este blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Todavía no tiene ningún medio."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "No está autorizado a eliminar este registro."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Para compartir un artículo, necesita estar logueado" msgstr "Para compartir un artículo, necesita estar logueado"
#, fuzzy
msgid "You are now connected."
msgstr "No está autorizado."
#, fuzzy
msgid "You are now logged off."
msgstr "No está autorizado."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Reiniciar contraseña" msgstr "Reiniciar contraseña"
@ -122,6 +213,14 @@ msgstr "Lo sentimos, pero el enlace expiró. Inténtalo de nuevo"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Para acceder a su panel de control, necesita estar conectado" msgstr "Para acceder a su panel de control, necesita estar conectado"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Para suscribirse a alguien, necesita estar conectado" msgstr "Para suscribirse a alguien, necesita estar conectado"
@ -130,6 +229,27 @@ msgstr "Para suscribirse a alguien, necesita estar conectado"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Para editar su perfil, necesita estar conectado" msgstr "Para editar su perfil, necesita estar conectado"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Todavía no tiene ningún medio."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "Vous devez vous connecter pour créer un nouveau blog"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Un blog avec le même nom existe déjà." msgstr "Un blog avec le même nom existe déjà."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Votre mot de passe a été réinitialisé avec succès."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Vous n'êtes pas autorisé⋅e à supprimer ce blog." msgstr "Vous n'êtes pas autorisé⋅e à supprimer ce blog."
@ -64,10 +73,56 @@ msgstr "Vous ne pouvez pas utiliser ce media comme icône de blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Vous ne pouvez pas utiliser ce media comme illustration de blog." msgstr "Vous ne pouvez pas utiliser ce media comme illustration de blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Vous n'avez pas encore de média."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Vous n'avez pas encore de média."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Vous devez vous connecter pour aimer un article" msgstr "Vous devez vous connecter pour aimer un article"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Vous n'êtes pas autorisé⋅e à supprimer ce blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Vous n'êtes pas autorisé à éditer ce blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Vous devez vous connecter pour voir vos notifications" msgstr "Vous devez vous connecter pour voir vos notifications"
@ -92,6 +147,34 @@ msgstr "Nouvel article"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Modifier {0}" msgstr "Modifier {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Vous n'êtes pas autorisé à éditer ce blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Vous n'avez pas encore de média."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Vous n'êtes pas autorisé⋅e à supprimer ce blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Vous devez vous connecter pour partager un article" msgstr "Vous devez vous connecter pour partager un article"
#, fuzzy
msgid "You are now connected."
msgstr "Vous navez pas les droits."
#, fuzzy
msgid "You are now logged off."
msgstr "Vous navez pas les droits."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Réinitialisation du mot de passe" msgstr "Réinitialisation du mot de passe"
@ -122,6 +213,14 @@ msgstr "Désolé, mais le lien a expiré. Réessayez"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Vous devez vous connecter pour accéder à votre tableau de bord" msgstr "Vous devez vous connecter pour accéder à votre tableau de bord"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Vous devez vous connecter pour vous abonner à quelqu'un" msgstr "Vous devez vous connecter pour vous abonner à quelqu'un"
@ -130,6 +229,27 @@ msgstr "Vous devez vous connecter pour vous abonner à quelqu'un"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Vous devez vous connecter pour pour modifier votre profil" msgstr "Vous devez vous connecter pour pour modifier votre profil"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Vous n'avez pas encore de média."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "Para crear un novo blog debe estar conectada"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "O contrasinal restableceuse correctamente."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Vostede non ten permiso para eliminar este blog." msgstr "Vostede non ten permiso para eliminar este blog."
@ -64,10 +73,56 @@ msgstr "Vostede non pode utilizar este medio como icona do blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Vostede non pode utilizar este medio como banner do blog." msgstr "Vostede non pode utilizar este medio como banner do blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Aínda non subeu ficheiros de medios."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Aínda non subeu ficheiros de medios."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Para darlle a gústame, debe estar conectada" msgstr "Para darlle a gústame, debe estar conectada"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Vostede non ten permiso para eliminar este blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Vostede non pode editar este blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Para ver as súas notificacións, debe estar conectada" msgstr "Para ver as súas notificacións, debe estar conectada"
@ -92,6 +147,34 @@ msgstr "Nova entrada"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Editar {0}" msgstr "Editar {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Vostede non pode editar este blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Aínda non subeu ficheiros de medios."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Vostede non ten permiso para eliminar este blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Para compartir un artigo, debe estar conectada" msgstr "Para compartir un artigo, debe estar conectada"
#, fuzzy
msgid "You are now connected."
msgstr "Non ten permiso."
#, fuzzy
msgid "You are now logged off."
msgstr "Non ten permiso."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Restablecer contrasinal" msgstr "Restablecer contrasinal"
@ -122,6 +213,14 @@ msgstr "Lamentámolo, a ligazón caducou. Inténteo de novo"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Para acceder ao taboleiro, debe estar conectada" msgstr "Para acceder ao taboleiro, debe estar conectada"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Para suscribirse a un blog, debe estar conectada" msgstr "Para suscribirse a un blog, debe estar conectada"
@ -130,6 +229,27 @@ msgstr "Para suscribirse a un blog, debe estar conectada"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Para editar o seu perfil, debe estar conectada" msgstr "Para editar o seu perfil, debe estar conectada"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Aínda non subeu ficheiros de medios."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "नया ब्लॉग बनाने के लिए आपको
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "ये नाम से पहले ही एक ब्लॉग है" msgstr "ये नाम से पहले ही एक ब्लॉग है"
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "आपका पासवर्ड रिसेट कर दिया गया है"
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "आपको ये ब्लॉग डिलीट करने की अनुमति नहीं है" msgstr "आपको ये ब्लॉग डिलीट करने की अनुमति नहीं है"
@ -64,10 +73,56 @@ msgstr "इस फोटो को ब्लॉग आइकॉन के लि
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "इस media को blog banner के लिए इस्तेमाल नहीं कर सकते" msgstr "इस media को blog banner के लिए इस्तेमाल नहीं कर सकते"
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Post को like करने के लिए आपको log in करना होगा" msgstr "Post को like करने के लिए आपको log in करना होगा"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "आपको ये ब्लॉग डिलीट करने की अनुमति नहीं है"
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "आपको ये ब्लॉग में बदलाव करने की अनुमति नहीं है"
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Notifications देखने के लिए आपको log in करना होगा" msgstr "Notifications देखने के लिए आपको log in करना होगा"
@ -92,6 +147,34 @@ msgstr "नया post"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Edit करें {0}" msgstr "Edit करें {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "आपको ये ब्लॉग में बदलाव करने की अनुमति नहीं है"
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "आपको ये ब्लॉग डिलीट करने की अनुमति नहीं है"
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +187,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Post reshare करने के लिए आपको log in करना होगा" msgstr "Post reshare करने के लिए आपको log in करना होगा"
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "पासवर्ड रीसेट करें" msgstr "पासवर्ड रीसेट करें"
@ -124,6 +215,14 @@ msgstr "क्षमा करें, लेकिन लिंक इस्त
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "डैशबोर्ड पर जाने के लिए, लोग इन करें" msgstr "डैशबोर्ड पर जाने के लिए, लोग इन करें"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "सब्सक्राइब करने के लिए, लोग इन करें" msgstr "सब्सक्राइब करने के लिए, लोग इन करें"
@ -132,6 +231,27 @@ msgstr "सब्सक्राइब करने के लिए, लोग
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "प्रोफाइल में बदलाव करने के लिए, लोग इन करें" msgstr "प्रोफाइल में बदलाव करने के लिए, लोग इन करें"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "प्लूम" msgstr "प्लूम"

View file

@ -49,6 +49,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -65,10 +73,56 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Ti ne autor ovog bloga."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Ti ne autor ovog bloga."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -93,6 +147,34 @@ msgstr "Novi članak"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Uredi {0}" msgstr "Uredi {0}"
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Ti ne autor ovog bloga."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:140
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Ti ne autor ovog bloga."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -103,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Poništavanje zaporke" msgstr "Poništavanje zaporke"
@ -123,6 +213,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -131,6 +229,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "Per creare un nuovo blog, devi avere effettuato l'accesso"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Un blog con lo stesso nome esiste già." msgstr "Un blog con lo stesso nome esiste già."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "La tua password è stata reimpostata con successo."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Non ti è consentito di eliminare questo blog." msgstr "Non ti è consentito di eliminare questo blog."
@ -64,10 +73,56 @@ msgstr "Non puoi utilizzare questo media come icona del blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Non puoi utilizzare questo media come copertina del blog." msgstr "Non puoi utilizzare questo media come copertina del blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Non hai ancora nessun media."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Non hai ancora nessun media."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Per mettere mi piace ad un post, devi avere effettuato l'accesso" msgstr "Per mettere mi piace ad un post, devi avere effettuato l'accesso"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Non ti è consentito di eliminare questo blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Non ti è consentito modificare questo blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Per vedere le tue notifiche, devi avere effettuato l'accesso" msgstr "Per vedere le tue notifiche, devi avere effettuato l'accesso"
@ -92,6 +147,34 @@ msgstr "Nuovo post"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Modifica {0}" msgstr "Modifica {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Non ti è consentito modificare questo blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Non hai ancora nessun media."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Non ti è consentito di eliminare questo blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Per ricondividere un post, devi avere effettuato l'accesso" msgstr "Per ricondividere un post, devi avere effettuato l'accesso"
#, fuzzy
msgid "You are now connected."
msgstr "Non sei autorizzato."
#, fuzzy
msgid "You are now logged off."
msgstr "Non sei autorizzato."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Reimposta password" msgstr "Reimposta password"
@ -122,6 +213,14 @@ msgstr "Spiacente, ma il collegamento è scaduto. Riprova"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Per accedere al tuo pannello, devi avere effettuato l'accesso" msgstr "Per accedere al tuo pannello, devi avere effettuato l'accesso"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Per iscriverti a qualcuno, devi avere effettuato l'accesso" msgstr "Per iscriverti a qualcuno, devi avere effettuato l'accesso"
@ -130,6 +229,27 @@ msgstr "Per iscriverti a qualcuno, devi avere effettuato l'accesso"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Per modificare il tuo profilo, devi avere effettuato l'accesso" msgstr "Per modificare il tuo profilo, devi avere effettuato l'accesso"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Non hai ancora nessun media."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -48,6 +48,15 @@ msgstr "新しいブログを作成するにはログインが必要です"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "パスワードが正常にリセットされました。"
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "このブログを削除する権限がありません。" msgstr "このブログを削除する権限がありません。"
@ -64,10 +73,56 @@ msgstr "このメディアはブログアイコンに使用できません。"
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "このメディアはブログバナーに使用できません。" msgstr "このメディアはブログバナーに使用できません。"
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "メディアがまだありません。"
#, fuzzy
msgid "Your comment have been deleted."
msgstr "メディアがまだありません。"
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "投稿をいいねするにはログインが必要です" msgstr "投稿をいいねするにはログインが必要です"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "このブログを削除する権限がありません。"
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "このブログを編集する権限がありません。"
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "通知を表示するにはログインが必要です" msgstr "通知を表示するにはログインが必要です"
@ -92,6 +147,34 @@ msgstr "新しい投稿"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "{0} を編集" msgstr "{0} を編集"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "このブログを編集する権限がありません。"
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "メディアがまだありません。"
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "このブログを削除する権限がありません。"
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +185,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "投稿を再共有するにはログインが必要です" msgstr "投稿を再共有するにはログインが必要です"
#, fuzzy
msgid "You are now connected."
msgstr "許可されていません。"
#, fuzzy
msgid "You are now logged off."
msgstr "許可されていません。"
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "パスワードのリセット" msgstr "パスワードのリセット"
@ -123,6 +214,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "ダッシュボードにアクセスするにはログインが必要です" msgstr "ダッシュボードにアクセスするにはログインが必要です"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "誰かをフォローするにはログインが必要です" msgstr "誰かをフォローするにはログインが必要です"
@ -131,6 +230,27 @@ msgstr "誰かをフォローするにはログインが必要です"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "プロフィールを編集するにはログインが必要です" msgstr "プロフィールを編集するにはログインが必要です"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "メディアがまだありません。"
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -46,6 +46,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Et innlegg med samme navn finnes allerede." msgstr "Et innlegg med samme navn finnes allerede."
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
#, fuzzy #, fuzzy
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Du er ikke denne bloggens forfatter." msgstr "Du er ikke denne bloggens forfatter."
@ -62,10 +70,54 @@ msgstr "Du er ikke denne bloggens forfatter."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Du er ikke denne bloggens forfatter." msgstr "Du er ikke denne bloggens forfatter."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:47 # src/routes/likes.rs:47
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Du er ikke denne bloggens forfatter."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Du er ikke denne bloggens forfatter."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -89,6 +141,32 @@ msgstr "Nytt innlegg"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Kommentér \"{0}\"" msgstr "Kommentér \"{0}\""
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Du er ikke denne bloggens forfatter."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Du er ikke denne bloggens forfatter."
#, fuzzy
msgid "Your article have been deleted."
msgstr "Ingen innlegg å vise enda."
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/user.rs:222 # src/routes/user.rs:222
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -99,6 +177,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
#, fuzzy
msgid "You are now connected."
msgstr "Det har du har ikke tilgang til."
#, fuzzy
msgid "You are now logged off."
msgstr "Det har du har ikke tilgang til."
#, fuzzy #, fuzzy
msgid "Password reset" msgid "Password reset"
msgstr "Passord" msgstr "Passord"
@ -119,6 +205,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
#, fuzzy
msgid "You are now following {}."
msgstr "{0} har begynt å følge deg"
# src/routes/user.rs:187 # src/routes/user.rs:187
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -127,6 +221,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"
@ -948,10 +1063,6 @@ msgstr ""
#~ msgid "{0}'s followers" #~ msgid "{0}'s followers"
#~ msgstr "Én følger" #~ msgstr "Én følger"
#, fuzzy
#~ msgid "{0} is now following you."
#~ msgstr "{0} har begynt å følge deg"
#, fuzzy #, fuzzy
#~ msgid "People {0} follows" #~ msgid "People {0} follows"
#~ msgstr "Én følger" #~ msgstr "Én følger"
@ -966,10 +1077,6 @@ msgstr ""
#~ msgid "Unfollow" #~ msgid "Unfollow"
#~ msgstr "Slutt å følge" #~ msgstr "Slutt å følge"
#, fuzzy
#~ msgid "No articles to see here yet."
#~ msgstr "Ingen innlegg å vise enda."
#~ msgid "New blog" #~ msgid "New blog"
#~ msgstr "Ny blogg" #~ msgstr "Ny blogg"

View file

@ -50,6 +50,15 @@ msgstr "Aby utworzyć nowy blog, musisz być zalogowany"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Blog o tej samej nazwie już istnieje." msgstr "Blog o tej samej nazwie już istnieje."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Twoje hasło zostało pomyślnie zresetowane."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Nie masz uprawnień do usunięcia tego bloga." msgstr "Nie masz uprawnień do usunięcia tego bloga."
@ -66,10 +75,56 @@ msgstr "Nie możesz użyć tego nośnika jako ikony blogu."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Nie możesz użyć tego nośnika jako banner na blogu." msgstr "Nie możesz użyć tego nośnika jako banner na blogu."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Nie masz żadnej zawartości multimedialnej."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Nie masz żadnej zawartości multimedialnej."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Aby polubić post, musisz być zalogowany" msgstr "Aby polubić post, musisz być zalogowany"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Nie masz uprawnień do usunięcia tego bloga."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Nie masz uprawnień edytować tego bloga."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Aby zobaczyć powiadomienia, musisz być zalogowany" msgstr "Aby zobaczyć powiadomienia, musisz być zalogowany"
@ -94,6 +149,34 @@ msgstr "Nowy wpis"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Edytuj {0}" msgstr "Edytuj {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Nie masz uprawnień edytować tego bloga."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Nie masz żadnej zawartości multimedialnej."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Nie masz uprawnień do usunięcia tego bloga."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +187,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Aby udostępnić post, musisz być zalogowany" msgstr "Aby udostępnić post, musisz być zalogowany"
#, fuzzy
msgid "You are now connected."
msgstr "Nie jesteś zalogowany."
#, fuzzy
msgid "You are now logged off."
msgstr "Nie jesteś zalogowany."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Resetowanie hasła" msgstr "Resetowanie hasła"
@ -124,6 +215,14 @@ msgstr "Przepraszam, ale link wygasł. Spróbuj ponownie"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Aby uzyskać dostęp do panelu, musisz być zalogowany" msgstr "Aby uzyskać dostęp do panelu, musisz być zalogowany"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Aby subskrybować do kogoś, musisz być zalogowany" msgstr "Aby subskrybować do kogoś, musisz być zalogowany"
@ -132,6 +231,27 @@ msgstr "Aby subskrybować do kogoś, musisz być zalogowany"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Aby edytować swój profil, musisz być zalogowany" msgstr "Aby edytować swój profil, musisz być zalogowany"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Nie masz żadnej zawartości multimedialnej."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -12,59 +12,111 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
# src/template_utils.rs:68 # src/template_utils.rs:102
msgid "{0} commented on your article." msgid "{0} commented on your article."
msgstr "" msgstr ""
# src/template_utils.rs:69 # src/template_utils.rs:103
msgid "{0} is subscribed to you." msgid "{0} is subscribed to you."
msgstr "" msgstr ""
# src/template_utils.rs:70 # src/template_utils.rs:104
msgid "{0} liked your article." msgid "{0} liked your article."
msgstr "" msgstr ""
# src/template_utils.rs:71 # src/template_utils.rs:105
msgid "{0} mentioned you." msgid "{0} mentioned you."
msgstr "" msgstr ""
# src/template_utils.rs:72 # src/template_utils.rs:106
msgid "{0} boosted your article." msgid "{0} boosted your article."
msgstr "" msgstr ""
# src/template_utils.rs:108 # src/template_utils.rs:142
msgid "{0}'s avatar" msgid "{0}'s avatar"
msgstr "" msgstr ""
# src/routes/blogs.rs:70 # src/routes/blogs.rs:64
msgid "To create a new blog, you need to be logged in" msgid "To create a new blog, you need to be logged in"
msgstr "" msgstr ""
# src/routes/blogs.rs:109 # src/routes/blogs.rs:106
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:141
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:163
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:170
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
# src/routes/blogs.rs:217 # src/routes/blogs.rs:218
msgid "You are not allowed to edit this blog." msgid "You are not allowed to edit this blog."
msgstr "" msgstr ""
# src/routes/blogs.rs:262 # src/routes/blogs.rs:263
msgid "You can't use this media as a blog icon." msgid "You can't use this media as a blog icon."
msgstr "" msgstr ""
# src/routes/blogs.rs:280 # src/routes/blogs.rs:281
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:314
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:94
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:169
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:134
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:175
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:177
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:221
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/notifications.rs:29 # src/routes/medias.rs:141
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:146
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:163
msgid "Your avatar have been updated."
msgstr ""
# src/routes/medias.rs:168
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -76,19 +128,43 @@ msgstr ""
msgid "To write a new post, you need to be logged in" msgid "To write a new post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/posts.rs:140 # src/routes/posts.rs:139
msgid "You are not an author of this blog." msgid "You are not an author of this blog."
msgstr "" msgstr ""
# src/routes/posts.rs:147 # src/routes/posts.rs:146
msgid "New post" msgid "New post"
msgstr "" msgstr ""
# src/routes/posts.rs:192 # src/routes/posts.rs:191
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:260
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:348
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:528
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:568
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:593
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:598
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:638
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct." msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "" msgstr ""
@ -96,19 +172,27 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:112
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:131
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:188
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
# src/routes/session.rs:182 # src/routes/session.rs:189
msgid "Here is the link to reset your password: {0}" msgid "Here is the link to reset your password: {0}"
msgstr "" msgstr ""
# src/routes/session.rs:259 # src/routes/session.rs:264
msgid "Your password was successfully reset." msgid "Your password was successfully reset."
msgstr "" msgstr ""
# src/routes/session.rs:263 # src/routes/session.rs:274
msgid "Sorry, but the link expired. Try again" msgid "Sorry, but the link expired. Try again"
msgstr "" msgstr ""
@ -116,14 +200,42 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:175
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:255
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:344 # src/routes/user.rs:357
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:399
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:426
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:432
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:504
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:528
msgid "Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""
@ -208,11 +320,11 @@ msgstr ""
msgid "Nothing to see here yet. Try subscribing to more people." msgid "Nothing to see here yet. Try subscribing to more people."
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Name" msgid "Name"
msgstr "" msgstr ""
# src/template_utils.rs:220 # src/template_utils.rs:254
msgid "Optional" msgid "Optional"
msgstr "" msgstr ""
@ -228,7 +340,7 @@ msgstr ""
msgid "Long description" msgid "Long description"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Default article license" msgid "Default article license"
msgstr "" msgstr ""
@ -274,11 +386,11 @@ msgstr ""
msgid "Upload an avatar" msgid "Upload an avatar"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Display name" msgid "Display name"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Email" msgid "Email"
msgstr "" msgstr ""
@ -327,15 +439,15 @@ msgstr ""
msgid "Create an account" msgid "Create an account"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Username" msgid "Username"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Password" msgid "Password"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Password confirmation" msgid "Password confirmation"
msgstr "" msgstr ""
@ -426,71 +538,71 @@ msgstr ""
msgid "Advanced search" msgid "Advanced search"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Article title matching these words" msgid "Article title matching these words"
msgstr "" msgstr ""
msgid "Title" msgid "Title"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Subtitle matching these words" msgid "Subtitle matching these words"
msgstr "" msgstr ""
msgid "Subtitle - byline" msgid "Subtitle - byline"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Content matching these words" msgid "Content matching these words"
msgstr "" msgstr ""
msgid "Body content" msgid "Body content"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "From this date" msgid "From this date"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "To this date" msgid "To this date"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Containing these tags" msgid "Containing these tags"
msgstr "" msgstr ""
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Posted on one of these instances" msgid "Posted on one of these instances"
msgstr "" msgstr ""
msgid "Instance domain" msgid "Instance domain"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Posted by one of these authors" msgid "Posted by one of these authors"
msgstr "" msgstr ""
msgid "Authors" msgid "Authors"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Posted on one of these blogs" msgid "Posted on one of these blogs"
msgstr "" msgstr ""
msgid "Blog title" msgid "Blog title"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Written in this language" msgid "Written in this language"
msgstr "" msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
# src/template_utils.rs:305 # src/template_utils.rs:339
msgid "Published under this license" msgid "Published under this license"
msgstr "" msgstr ""
@ -512,11 +624,11 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "New password" msgid "New password"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Confirmation" msgid "Confirmation"
msgstr "" msgstr ""
@ -529,7 +641,7 @@ msgstr ""
msgid "We sent a mail to the address you gave us, with a link to reset your password." msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@ -539,7 +651,7 @@ msgstr ""
msgid "Log in" msgid "Log in"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Username, or email" msgid "Username, or email"
msgstr "" msgstr ""
@ -558,7 +670,7 @@ msgstr ""
msgid "Classic editor (any changes will be lost)" msgid "Classic editor (any changes will be lost)"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Subtitle" msgid "Subtitle"
msgstr "" msgstr ""
@ -571,15 +683,15 @@ msgstr ""
msgid "Upload media" msgid "Upload media"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Tags, separated by commas" msgid "Tags, separated by commas"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "License" msgid "License"
msgstr "" msgstr ""
# src/template_utils.rs:225 # src/template_utils.rs:259
msgid "Leave it empty to reserve all rights" msgid "Leave it empty to reserve all rights"
msgstr "" msgstr ""
@ -639,7 +751,7 @@ msgstr ""
msgid "Comments" msgid "Comments"
msgstr "" msgstr ""
# src/template_utils.rs:217 # src/template_utils.rs:251
msgid "Content warning" msgid "Content warning"
msgstr "" msgstr ""
@ -746,7 +858,7 @@ msgstr ""
msgid "I'm from another instance" msgid "I'm from another instance"
msgstr "" msgstr ""
# src/template_utils.rs:225 # src/template_utils.rs:259
msgid "Example: user@plu.me" msgid "Example: user@plu.me"
msgstr "" msgstr ""

View file

@ -48,6 +48,15 @@ msgstr "Para criar um novo blog, você precisa estar logado"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Um blog com o mesmo nome já existe." msgstr "Um blog com o mesmo nome já existe."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "A sua palavra-passe foi redefinida com sucesso."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Não está autorizado a apagar este blog." msgstr "Não está autorizado a apagar este blog."
@ -64,10 +73,56 @@ msgstr "Você não pode usar esta mídia como um ícone do blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Você não pode usar esta mídia como um banner do blog." msgstr "Você não pode usar esta mídia como um banner do blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Você ainda não tem nenhuma mídia."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Você ainda não tem nenhuma mídia."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Para curtir uma postagem, você precisa estar logado" msgstr "Para curtir uma postagem, você precisa estar logado"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Não está autorizado a apagar este blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Você não está autorizado a apagar este blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Para ver suas notificações, você precisa estar logado" msgstr "Para ver suas notificações, você precisa estar logado"
@ -92,6 +147,34 @@ msgstr "Novo artigo"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Mudar {0}" msgstr "Mudar {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Você não está autorizado a apagar este blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Você ainda não tem nenhuma mídia."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Não está autorizado a apagar este blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +187,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Para recompartilhar uma postagem, você precisa estar logado" msgstr "Para recompartilhar uma postagem, você precisa estar logado"
#, fuzzy
msgid "You are now connected."
msgstr "Você não está autorizado."
#, fuzzy
msgid "You are now logged off."
msgstr "Você não está autorizado."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Redefinir palavra-passe" msgstr "Redefinir palavra-passe"
@ -124,6 +215,14 @@ msgstr "Desculpe, mas a ligação expirou. Tente novamente"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Para acessar seu painel, você precisa estar logado" msgstr "Para acessar seu painel, você precisa estar logado"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Para se inscrever em alguém, você precisa estar logado" msgstr "Para se inscrever em alguém, você precisa estar logado"
@ -132,6 +231,27 @@ msgstr "Para se inscrever em alguém, você precisa estar logado"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Para editar seu perfil, você precisa estar logado" msgstr "Para editar seu perfil, você precisa estar logado"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Você ainda não tem nenhuma mídia."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -49,6 +49,15 @@ msgstr "Pentru a crea un nou blog, trebuie sa fii logat"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Parola dumneavoastră a fost resetată cu succes."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Nu aveți permisiunea de a șterge acest blog." msgstr "Nu aveți permisiunea de a șterge acest blog."
@ -65,10 +74,56 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Nu aveți permisiunea de a șterge acest blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Nu aveți permisiunea de a șterge acest blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -93,6 +148,34 @@ msgstr "Postare nouă"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Editare {0}" msgstr "Editare {0}"
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Nu aveți permisiunea de a șterge acest blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Nu aveți permisiunea de a șterge acest blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -103,6 +186,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Pentru a redistribui un post, trebuie să fii logat" msgstr "Pentru a redistribui un post, trebuie să fii logat"
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Resetare parolă" msgstr "Resetare parolă"
@ -123,6 +214,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -131,6 +230,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -50,6 +50,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -66,10 +74,54 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:145
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Вы не авторизованы."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -94,6 +146,32 @@ msgstr "Новый пост"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Вы не авторизованы."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:565
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +182,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
#, fuzzy
msgid "You are now connected."
msgstr "Вы не авторизованы."
#, fuzzy
msgid "You are now logged off."
msgstr "Вы не авторизованы."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
@ -124,6 +210,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -132,6 +226,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -48,6 +48,15 @@ msgstr "Aby si vytvoril/a nový blog, musíš sa prihlásiť"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "Blog s rovnakým názvom už existuje." msgstr "Blog s rovnakým názvom už existuje."
# src/routes/session.rs:259
#, fuzzy
msgid "Your blog was successfully created!"
msgstr "Tvoje heslo bolo úspešne zmenené."
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Nemáš povolenie vymazať tento blog." msgstr "Nemáš povolenie vymazať tento blog."
@ -64,10 +73,56 @@ msgstr "Tento mediálny súbor nemožno použiť ako ikonku pre blog."
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "Tento mediálny súbor nemožno použiť ako záhlavie pre blog." msgstr "Tento mediálny súbor nemožno použiť ako záhlavie pre blog."
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
#, fuzzy
msgid "Your comment have been posted."
msgstr "Ešte nemáš nahrané žiadne multimédiá."
#, fuzzy
msgid "Your comment have been deleted."
msgstr "Ešte nemáš nahrané žiadne multimédiá."
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "Aby si si obľúbil/a príspevok, musíš sa prihlásiť" msgstr "Aby si si obľúbil/a príspevok, musíš sa prihlásiť"
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Nemáš povolenie vymazať tento blog."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Nemáš dovolené upravovať tento blog."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "Aby si videl/a notifikácie, musíš sa prihlásiť" msgstr "Aby si videl/a notifikácie, musíš sa prihlásiť"
@ -92,6 +147,34 @@ msgstr "Nový príspevok"
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Uprav {0}" msgstr "Uprav {0}"
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Nemáš dovolené upravovať tento blog."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
#, fuzzy
msgid "Your post have been saved."
msgstr "Ešte nemáš nahrané žiadne multimédiá."
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Nemáš povolenie vymazať tento blog."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -104,6 +187,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "Na zdieľanie príspevku sa musíš prihlásiť" msgstr "Na zdieľanie príspevku sa musíš prihlásiť"
#, fuzzy
msgid "You are now connected."
msgstr "Nemáš oprávnenie."
#, fuzzy
msgid "You are now logged off."
msgstr "Nemáš oprávnenie."
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Obnovenie hesla" msgstr "Obnovenie hesla"
@ -124,6 +215,14 @@ msgstr "Prepáč, ale tento odkaz už vypŕšal. Skús to znova"
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "Pre prístup k prehľadovému panelu sa musíš prihlásiť" msgstr "Pre prístup k prehľadovému panelu sa musíš prihlásiť"
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "Ak chceš niekoho odoberať, musíš sa prihlásiť" msgstr "Ak chceš niekoho odoberať, musíš sa prihlásiť"
@ -132,6 +231,27 @@ msgstr "Ak chceš niekoho odoberať, musíš sa prihlásiť"
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "Na upravenie tvojho profilu sa musíš prihlásiť" msgstr "Na upravenie tvojho profilu sa musíš prihlásiť"
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
#, fuzzy
msgid "Your account have been deleted."
msgstr "Ešte nemáš nahrané žiadne multimédiá."
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "Plume" msgstr "Plume"

View file

@ -49,6 +49,14 @@ msgstr ""
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "" msgstr ""
@ -65,10 +73,54 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:145
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/medias.rs:156
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -93,6 +145,32 @@ msgstr ""
msgid "Edit {0}" msgid "Edit {0}"
msgstr "Uredi {0}" msgstr "Uredi {0}"
# src/routes/posts.rs:264
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/posts.rs:565
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -103,6 +181,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "Poništavanje lozinke" msgstr "Poništavanje lozinke"
@ -123,6 +209,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -131,6 +225,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -48,6 +48,14 @@ msgstr "För att skapa en ny blogg måste du vara inloggad"
msgid "A blog with the same name already exists." msgid "A blog with the same name already exists."
msgstr "" msgstr ""
# src/routes/blogs.rs:142
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:167
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:172 # src/routes/blogs.rs:172
msgid "You are not allowed to delete this blog." msgid "You are not allowed to delete this blog."
msgstr "Du har inte tillstånd att ta bort den här bloggen." msgstr "Du har inte tillstånd att ta bort den här bloggen."
@ -64,10 +72,56 @@ msgstr ""
msgid "You can't use this media as a blog banner." msgid "You can't use this media as a blog banner."
msgstr "" msgstr ""
# src/routes/blogs.rs:312
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:89
msgid "Your comment have been posted."
msgstr ""
# src/routes/comments.rs:163
msgid "Your comment have been deleted."
msgstr ""
# src/routes/instance.rs:145
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:182
msgid "{} have been unblocked."
msgstr ""
# src/routes/instance.rs:184
msgid "{} have been blocked."
msgstr ""
# src/routes/instance.rs:218
msgid "{} have been banned."
msgstr ""
# src/routes/likes.rs:51 # src/routes/likes.rs:51
msgid "To like a post, you need to be logged in" msgid "To like a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/medias.rs:143
msgid "Your media have been deleted."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this media."
msgstr "Du har inte tillstånd att ta bort den här bloggen."
# src/routes/medias.rs:154
msgid "Your avatar have been updated."
msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to use this media."
msgstr "Du har inte tillstånd att redigera den här bloggen."
# src/routes/notifications.rs:29 # src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in" msgid "To see your notifications, you need to be logged in"
msgstr "" msgstr ""
@ -92,6 +146,34 @@ msgstr ""
msgid "Edit {0}" msgid "Edit {0}"
msgstr "" msgstr ""
# src/routes/blogs.rs:217
#, fuzzy
msgid "You are not allowed to publish on this blog."
msgstr "Du har inte tillstånd att redigera den här bloggen."
# src/routes/posts.rs:351
msgid "Your article have been updated."
msgstr ""
# src/routes/posts.rs:527
msgid "Your post have been saved."
msgstr ""
# src/routes/blogs.rs:172
#, fuzzy
msgid "You are not allowed to delete this article."
msgstr "Du har inte tillstånd att ta bort den här bloggen."
# src/routes/posts.rs:589
msgid "Your article have been deleted."
msgstr ""
# src/routes/posts.rs:593
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
# src/routes/posts.rs:630 # src/routes/posts.rs:630
msgid "" msgid ""
"Couldn't obtain enough information about your account. Please make sure your " "Couldn't obtain enough information about your account. Please make sure your "
@ -102,6 +184,14 @@ msgstr ""
msgid "To reshare a post, you need to be logged in" msgid "To reshare a post, you need to be logged in"
msgstr "" msgstr ""
# src/routes/session.rs:108
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:124
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:181 # src/routes/session.rs:181
msgid "Password reset" msgid "Password reset"
msgstr "" msgstr ""
@ -122,6 +212,14 @@ msgstr ""
msgid "To access your dashboard, you need to be logged in" msgid "To access your dashboard, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:158
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:174
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:244 # src/routes/user.rs:244
msgid "To subscribe to someone, you need to be logged in" msgid "To subscribe to someone, you need to be logged in"
msgstr "" msgstr ""
@ -130,6 +228,27 @@ msgstr ""
msgid "To edit your profile, you need to be logged in" msgid "To edit your profile, you need to be logged in"
msgstr "" msgstr ""
# src/routes/user.rs:390
msgid "Your profile have been updated."
msgstr ""
# src/routes/user.rs:409
msgid "Your account have been deleted."
msgstr ""
# src/routes/user.rs:411
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:473
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:491
msgid ""
"Your account have been created. You just need to login before you can use it."
msgstr ""
msgid "Plume" msgid "Plume"
msgstr "" msgstr ""

View file

@ -45,7 +45,6 @@ use plume_models::{
search::{Searcher as UnmanagedSearcher, SearcherError}, search::{Searcher as UnmanagedSearcher, SearcherError},
Connection, Error, CONFIG, Connection, Error, CONFIG,
}; };
use rocket::State;
use rocket_csrf::CsrfFairingBuilder; use rocket_csrf::CsrfFairingBuilder;
use scheduled_thread_pool::ScheduledThreadPool; use scheduled_thread_pool::ScheduledThreadPool;
use std::process::exit; use std::process::exit;
@ -69,8 +68,6 @@ include!(concat!(env!("OUT_DIR"), "/templates.rs"));
compile_i18n!(); compile_i18n!();
type Searcher<'a> = State<'a, Arc<UnmanagedSearcher>>;
/// Initializes a database pool. /// Initializes a database pool.
fn init_pool() -> Option<DbPool> { fn init_pool() -> Option<DbPool> {
dotenv::dotenv().ok(); dotenv::dotenv().ok();

View file

@ -17,21 +17,19 @@ use plume_models::{
users::User, Connection, PlumeRocket, users::User, Connection, PlumeRocket,
}; };
use routes::{errors::ErrorPage, Page}; use routes::{errors::ErrorPage, Page};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/~/<name>?<page>", rank = 2)] #[get("/~/<name>?<page>", rank = 2)]
pub fn details(name: String, page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> { pub fn details(name: String, page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let conn = &*rockets.conn; let conn = &*rockets.conn;
let blog = Blog::find_by_fqn(&rockets, &name)?; let blog = Blog::find_by_fqn(&rockets, &name)?;
let posts = Post::blog_page(&*conn, &blog, page.limits())?; let posts = Post::blog_page(conn, &blog, page.limits())?;
let articles_count = Post::count_for_blog(&*conn, &blog)?; let articles_count = Post::count_for_blog(conn, &blog)?;
let authors = &blog.list_authors(&*conn)?; let authors = &blog.list_authors(conn)?;
let user = rockets.user;
let intl = rockets.intl;
Ok(render!(blogs::details( Ok(render!(blogs::details(
&(&*conn, &intl.catalog, user.clone()), &rockets.to_context(),
blog, blog,
authors, authors,
page.0, page.0,
@ -51,13 +49,9 @@ pub fn activity_details(
} }
#[get("/blogs/new")] #[get("/blogs/new")]
pub fn new(rockets: PlumeRocket) -> Ructe { pub fn new(rockets: PlumeRocket, _user: User) -> Ructe {
let user = rockets.user.unwrap();
let intl = rockets.intl;
let conn = &*rockets.conn;
render!(blogs::new( render!(blogs::new(
&(&*conn, &intl.catalog, Some(user)), &rockets.to_context(),
&NewBlogForm::default(), &NewBlogForm::default(),
ValidationErrors::default() ValidationErrors::default()
)) ))
@ -90,7 +84,10 @@ fn valid_slug(title: &str) -> Result<(), ValidationError> {
} }
#[post("/blogs/new", data = "<form>")] #[post("/blogs/new", data = "<form>")]
pub fn create(form: LenientForm<NewBlogForm>, rockets: PlumeRocket) -> Result<Redirect, Ructe> { pub fn create(
form: LenientForm<NewBlogForm>,
rockets: PlumeRocket,
) -> Result<Flash<Redirect>, Ructe> {
let slug = utils::make_actor_id(&form.title); let slug = utils::make_actor_id(&form.title);
let conn = &*rockets.conn; let conn = &*rockets.conn;
let intl = &rockets.intl.catalog; let intl = &rockets.intl.catalog;
@ -139,37 +136,40 @@ pub fn create(form: LenientForm<NewBlogForm>, rockets: PlumeRocket) -> Result<Re
) )
.expect("blog::create: author error"); .expect("blog::create: author error");
Ok(Redirect::to(uri!(details: name = slug.clone(), page = _))) Ok(Flash::success(
Redirect::to(uri!(details: name = slug.clone(), page = _)),
&i18n!(intl, "Your blog was successfully created!"),
))
} else { } else {
Err(render!(blogs::new( Err(render!(blogs::new(&rockets.to_context(), &*form, errors)))
&(&*conn, intl, Some(user)),
&*form,
errors
)))
} }
} }
#[post("/~/<name>/delete")] #[post("/~/<name>/delete")]
pub fn delete(name: String, rockets: PlumeRocket) -> Result<Redirect, Ructe> { pub fn delete(name: String, rockets: PlumeRocket) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let blog = Blog::find_by_fqn(&rockets, &name).expect("blog::delete: blog not found"); let blog = Blog::find_by_fqn(&rockets, &name).expect("blog::delete: blog not found");
let user = rockets.user;
let intl = rockets.intl;
let searcher = rockets.searcher;
if user if rockets
.user
.clone() .clone()
.and_then(|u| u.is_author_in(&*conn, &blog).ok()) .and_then(|u| u.is_author_in(&*conn, &blog).ok())
.unwrap_or(false) .unwrap_or(false)
{ {
blog.delete(&conn, &searcher) blog.delete(&conn, &rockets.searcher)
.expect("blog::expect: deletion error"); .expect("blog::expect: deletion error");
Ok(Redirect::to(uri!(super::instance::index))) Ok(Flash::success(
Redirect::to(uri!(super::instance::index)),
i18n!(rockets.intl.catalog, "Your blog was deleted."),
))
} else { } else {
// TODO actually return 403 error code // TODO actually return 403 error code
Err(render!(errors::not_authorized( Err(render!(errors::not_authorized(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
i18n!(intl.catalog, "You are not allowed to delete this blog.") i18n!(
rockets.intl.catalog,
"You are not allowed to delete this blog."
)
))) )))
} }
} }
@ -190,15 +190,16 @@ pub fn edit(name: String, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
if rockets if rockets
.user .user
.clone() .clone()
.and_then(|u| u.is_author_in(&*conn, &blog).ok()) .and_then(|u| u.is_author_in(conn, &blog).ok())
.unwrap_or(false) .unwrap_or(false)
{ {
let user = rockets let user = rockets
.user .user
.clone()
.expect("blogs::edit: User was None while it shouldn't"); .expect("blogs::edit: User was None while it shouldn't");
let medias = Media::for_user(&*conn, user.id).expect("Couldn't list media"); let medias = Media::for_user(conn, user.id).expect("Couldn't list media");
Ok(render!(blogs::edit( Ok(render!(blogs::edit(
&(&*conn, &rockets.intl.catalog, Some(user)), &rockets.to_context(),
&blog, &blog,
medias, medias,
&EditForm { &EditForm {
@ -212,7 +213,7 @@ pub fn edit(name: String, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
} else { } else {
// TODO actually return 403 error code // TODO actually return 403 error code
Ok(render!(errors::not_authorized( Ok(render!(errors::not_authorized(
&(&*conn, &rockets.intl.catalog, rockets.user), &rockets.to_context(),
i18n!( i18n!(
rockets.intl.catalog, rockets.intl.catalog,
"You are not allowed to edit this blog." "You are not allowed to edit this blog."
@ -235,7 +236,7 @@ pub fn update(
name: String, name: String,
form: LenientForm<EditForm>, form: LenientForm<EditForm>,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, Ructe> { ) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let intl = &rockets.intl.catalog; let intl = &rockets.intl.catalog;
let mut blog = Blog::find_by_fqn(&rockets, &name).expect("blog::update: blog not found"); let mut blog = Blog::find_by_fqn(&rockets, &name).expect("blog::update: blog not found");
@ -308,12 +309,15 @@ pub fn update(
blog.banner_id = form.banner; blog.banner_id = form.banner;
blog.save_changes::<Blog>(&*conn) blog.save_changes::<Blog>(&*conn)
.expect("Couldn't save blog changes"); .expect("Couldn't save blog changes");
Ok(Redirect::to(uri!(details: name = name, page = _))) Ok(Flash::success(
Redirect::to(uri!(details: name = name, page = _)),
i18n!(intl, "Your blog information have been updated."),
))
}) })
.map_err(|err| { .map_err(|err| {
let medias = Media::for_user(&*conn, user.id).expect("Couldn't list media"); let medias = Media::for_user(&*conn, user.id).expect("Couldn't list media");
render!(blogs::edit( render!(blogs::edit(
&(&*conn, intl, Some(user)), &rockets.to_context(),
&blog, &blog,
medias, medias,
&*form, &*form,
@ -323,7 +327,7 @@ pub fn update(
} else { } else {
// TODO actually return 403 error code // TODO actually return 403 error code
Err(render!(errors::not_authorized( Err(render!(errors::not_authorized(
&(&*conn, &rockets.intl.catalog, rockets.user), &rockets.to_context(),
i18n!( i18n!(
rockets.intl.catalog, rockets.intl.catalog,
"You are not allowed to edit this blog." "You are not allowed to edit this blog."

View file

@ -1,5 +1,8 @@
use activitypub::object::Note; use activitypub::object::Note;
use rocket::{request::LenientForm, response::Redirect}; use rocket::{
request::LenientForm,
response::{Flash, Redirect},
};
use template_utils::Ructe; use template_utils::Ructe;
use validator::Validate; use validator::Validate;
@ -14,6 +17,7 @@ use plume_models::{
posts::Post, safe_string::SafeString, tags::Tag, users::User, Error, PlumeRocket, posts::Post, safe_string::SafeString, tags::Tag, users::User, Error, PlumeRocket,
}; };
use routes::errors::ErrorPage; use routes::errors::ErrorPage;
use template_utils::IntoContext;
#[derive(Default, FromForm, Debug, Validate)] #[derive(Default, FromForm, Debug, Validate)]
pub struct NewCommentForm { pub struct NewCommentForm {
@ -30,7 +34,7 @@ pub fn create(
form: LenientForm<NewCommentForm>, form: LenientForm<NewCommentForm>,
user: User, user: User,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, Ructe> { ) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("comments::create: blog error"); let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("comments::create: blog error");
let post = Post::find_by_slug(&*conn, &slug, blog.id).expect("comments::create: post error"); let post = Post::find_by_slug(&*conn, &slug, blog.id).expect("comments::create: post error");
@ -83,8 +87,11 @@ pub fn create(
.worker .worker
.execute(move || broadcast(&user_clone, new_comment, dest)); .execute(move || broadcast(&user_clone, new_comment, dest));
Redirect::to( Flash::success(
uri!(super::posts::details: blog = blog_name, slug = slug, responding_to = _), Redirect::to(
uri!(super::posts::details: blog = blog_name, slug = slug, responding_to = _),
),
i18n!(&rockets.intl.catalog, "Your comment have been posted."),
) )
}) })
.map_err(|errors| { .map_err(|errors| {
@ -97,7 +104,7 @@ pub fn create(
.and_then(|r| Comment::get(&*conn, r).ok()); .and_then(|r| Comment::get(&*conn, r).ok());
render!(posts::details( render!(posts::details(
&(&*conn, &rockets.intl.catalog, Some(user.clone())), &rockets.to_context(),
post.clone(), post.clone(),
blog, blog,
&*form, &*form,
@ -134,7 +141,7 @@ pub fn delete(
id: i32, id: i32,
user: User, user: User,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, ErrorPage> { ) -> Result<Flash<Redirect>, ErrorPage> {
if let Ok(comment) = Comment::get(&*rockets.conn, id) { if let Ok(comment) = Comment::get(&*rockets.conn, id) {
if comment.author_id == user.id { if comment.author_id == user.id {
let dest = User::one_by_instance(&*rockets.conn)?; let dest = User::one_by_instance(&*rockets.conn)?;
@ -157,8 +164,9 @@ pub fn delete(
}); });
} }
} }
Ok(Redirect::to( Ok(Flash::success(
uri!(super::posts::details: blog = blog, slug = slug, responding_to = _), Redirect::to(uri!(super::posts::details: blog = blog, slug = slug, responding_to = _)),
i18n!(&rockets.intl.catalog, "Your comment have been deleted."),
)) ))
} }

View file

@ -1,12 +1,9 @@
use plume_models::users::User; use plume_models::{Error, PlumeRocket};
use plume_models::{db_conn::DbConn, Error};
use rocket::{ use rocket::{
request::FromRequest,
response::{self, Responder}, response::{self, Responder},
Request, Request,
}; };
use rocket_i18n::I18n; use template_utils::{IntoContext, Ructe};
use template_utils::Ructe;
#[derive(Debug)] #[derive(Debug)]
pub struct ErrorPage(Error); pub struct ErrorPage(Error);
@ -19,78 +16,40 @@ impl From<Error> for ErrorPage {
impl<'r> Responder<'r> for ErrorPage { impl<'r> Responder<'r> for ErrorPage {
fn respond_to(self, req: &Request) -> response::Result<'r> { fn respond_to(self, req: &Request) -> response::Result<'r> {
let conn = req.guard::<DbConn>().succeeded(); let rockets = req.guard::<PlumeRocket>().unwrap();
let intl = req.guard::<I18n>().succeeded();
let user = User::from_request(req).succeeded();
match self.0 { match self.0 {
Error::NotFound => render!(errors::not_found(&( Error::NotFound => render!(errors::not_found(&rockets.to_context())).respond_to(req),
&*conn.unwrap(), Error::Unauthorized => {
&intl.unwrap().catalog, render!(errors::not_found(&rockets.to_context())).respond_to(req)
user }
))) _ => render!(errors::not_found(&rockets.to_context())).respond_to(req),
.respond_to(req),
Error::Unauthorized => render!(errors::not_found(&(
&*conn.unwrap(),
&intl.unwrap().catalog,
user
)))
.respond_to(req),
_ => render!(errors::not_found(&(
&*conn.unwrap(),
&intl.unwrap().catalog,
user
)))
.respond_to(req),
} }
} }
} }
#[catch(404)] #[catch(404)]
pub fn not_found(req: &Request) -> Ructe { pub fn not_found(req: &Request) -> Ructe {
let conn = req.guard::<DbConn>().succeeded(); let rockets = req.guard::<PlumeRocket>().unwrap();
let intl = req.guard::<I18n>().succeeded(); render!(errors::not_found(&rockets.to_context()))
let user = User::from_request(req).succeeded();
render!(errors::not_found(&(
&*conn.unwrap(),
&intl.unwrap().catalog,
user
)))
} }
#[catch(422)] #[catch(422)]
pub fn unprocessable_entity(req: &Request) -> Ructe { pub fn unprocessable_entity(req: &Request) -> Ructe {
let conn = req.guard::<DbConn>().succeeded(); let rockets = req.guard::<PlumeRocket>().unwrap();
let intl = req.guard::<I18n>().succeeded(); render!(errors::unprocessable_entity(&rockets.to_context()))
let user = User::from_request(req).succeeded();
render!(errors::unprocessable_entity(&(
&*conn.unwrap(),
&intl.unwrap().catalog,
user
)))
} }
#[catch(500)] #[catch(500)]
pub fn server_error(req: &Request) -> Ructe { pub fn server_error(req: &Request) -> Ructe {
let conn = req.guard::<DbConn>().succeeded(); let rockets = req.guard::<PlumeRocket>().unwrap();
let intl = req.guard::<I18n>().succeeded(); render!(errors::server_error(&rockets.to_context()))
let user = User::from_request(req).succeeded();
render!(errors::server_error(&(
&*conn.unwrap(),
&intl.unwrap().catalog,
user
)))
} }
#[post("/csrf-violation?<target>")] #[post("/csrf-violation?<target>")]
pub fn csrf_violation( pub fn csrf_violation(target: Option<String>, rockets: PlumeRocket) -> Ructe {
target: Option<String>,
conn: DbConn,
intl: I18n,
user: Option<User>,
) -> Ructe {
if let Some(uri) = target { if let Some(uri) = target {
eprintln!("Csrf violation while acceding \"{}\"", uri) eprintln!("Csrf violation while acceding \"{}\"", uri)
} }
render!(errors::csrf(&(&*conn, &intl.catalog, user))) render!(errors::csrf(&rockets.to_context()))
} }

View file

@ -1,6 +1,6 @@
use rocket::{ use rocket::{
request::LenientForm, request::LenientForm,
response::{status, Redirect}, response::{status, Flash, Redirect},
}; };
use rocket_contrib::json::Json; use rocket_contrib::json::Json;
use rocket_i18n::I18n; use rocket_i18n::I18n;
@ -14,25 +14,26 @@ use plume_models::{
safe_string::SafeString, users::User, Error, PlumeRocket, CONFIG, safe_string::SafeString, users::User, Error, PlumeRocket, CONFIG,
}; };
use routes::{errors::ErrorPage, rocket_uri_macro_static_files, Page}; use routes::{errors::ErrorPage, rocket_uri_macro_static_files, Page};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/")] #[get("/")]
pub fn index(conn: DbConn, user: Option<User>, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn index(rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let inst = Instance::get_local(&*conn)?; let conn = &*rockets.conn;
let federated = Post::get_recents_page(&*conn, Page::default().limits())?; let inst = Instance::get_local(conn)?;
let local = Post::get_instance_page(&*conn, inst.id, Page::default().limits())?; let federated = Post::get_recents_page(conn, Page::default().limits())?;
let user_feed = user.clone().and_then(|user| { let local = Post::get_instance_page(conn, inst.id, Page::default().limits())?;
let followed = user.get_followed(&*conn).ok()?; let user_feed = rockets.user.clone().and_then(|user| {
let followed = user.get_followed(conn).ok()?;
let mut in_feed = followed.into_iter().map(|u| u.id).collect::<Vec<i32>>(); let mut in_feed = followed.into_iter().map(|u| u.id).collect::<Vec<i32>>();
in_feed.push(user.id); in_feed.push(user.id);
Post::user_feed_page(&*conn, in_feed, Page::default().limits()).ok() Post::user_feed_page(conn, in_feed, Page::default().limits()).ok()
}); });
Ok(render!(instance::index( Ok(render!(instance::index(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
inst, inst,
User::count_local(&*conn)?, User::count_local(conn)?,
Post::count_local(&*conn)?, Post::count_local(conn)?,
local, local,
federated, federated,
user_feed user_feed
@ -40,61 +41,51 @@ pub fn index(conn: DbConn, user: Option<User>, intl: I18n) -> Result<Ructe, Erro
} }
#[get("/local?<page>")] #[get("/local?<page>")]
pub fn local( pub fn local(page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
conn: DbConn,
user: Option<User>,
page: Option<Page>,
intl: I18n,
) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let instance = Instance::get_local(&*conn)?; let instance = Instance::get_local(&*rockets.conn)?;
let articles = Post::get_instance_page(&*conn, instance.id, page.limits())?; let articles = Post::get_instance_page(&*rockets.conn, instance.id, page.limits())?;
Ok(render!(instance::local( Ok(render!(instance::local(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
instance, instance,
articles, articles,
page.0, page.0,
Page::total(Post::count_local(&*conn)? as i32) Page::total(Post::count_local(&*rockets.conn)? as i32)
))) )))
} }
#[get("/feed?<page>")] #[get("/feed?<page>")]
pub fn feed(conn: DbConn, user: User, page: Option<Page>, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn feed(user: User, page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let followed = user.get_followed(&*conn)?; let followed = user.get_followed(&*rockets.conn)?;
let mut in_feed = followed.into_iter().map(|u| u.id).collect::<Vec<i32>>(); let mut in_feed = followed.into_iter().map(|u| u.id).collect::<Vec<i32>>();
in_feed.push(user.id); in_feed.push(user.id);
let articles = Post::user_feed_page(&*conn, in_feed, page.limits())?; let articles = Post::user_feed_page(&*rockets.conn, in_feed, page.limits())?;
Ok(render!(instance::feed( Ok(render!(instance::feed(
&(&*conn, &intl.catalog, Some(user)), &rockets.to_context(),
articles, articles,
page.0, page.0,
Page::total(Post::count_local(&*conn)? as i32) Page::total(Post::count_local(&*rockets.conn)? as i32)
))) )))
} }
#[get("/federated?<page>")] #[get("/federated?<page>")]
pub fn federated( pub fn federated(page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
conn: DbConn,
user: Option<User>,
page: Option<Page>,
intl: I18n,
) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let articles = Post::get_recents_page(&*conn, page.limits())?; let articles = Post::get_recents_page(&*rockets.conn, page.limits())?;
Ok(render!(instance::federated( Ok(render!(instance::federated(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
articles, articles,
page.0, page.0,
Page::total(Post::count_local(&*conn)? as i32) Page::total(Post::count_local(&*rockets.conn)? as i32)
))) )))
} }
#[get("/admin")] #[get("/admin")]
pub fn admin(conn: DbConn, admin: Admin, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn admin(_admin: Admin, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let local_inst = Instance::get_local(&*conn)?; let local_inst = Instance::get_local(&*rockets.conn)?;
Ok(render!(instance::admin( Ok(render!(instance::admin(
&(&*conn, &intl.catalog, Some(admin.0)), &rockets.to_context(),
local_inst.clone(), local_inst.clone(),
InstanceSettingsForm { InstanceSettingsForm {
name: local_inst.name.clone(), name: local_inst.name.clone(),
@ -120,31 +111,34 @@ pub struct InstanceSettingsForm {
#[post("/admin", data = "<form>")] #[post("/admin", data = "<form>")]
pub fn update_settings( pub fn update_settings(
conn: DbConn, _admin: Admin,
admin: Admin,
form: LenientForm<InstanceSettingsForm>, form: LenientForm<InstanceSettingsForm>,
intl: I18n, rockets: PlumeRocket,
) -> Result<Redirect, Ructe> { ) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn;
form.validate() form.validate()
.and_then(|_| { .and_then(|_| {
let instance = Instance::get_local(&*conn) let instance =
.expect("instance::update_settings: local instance error"); Instance::get_local(conn).expect("instance::update_settings: local instance error");
instance instance
.update( .update(
&*conn, conn,
form.name.clone(), form.name.clone(),
form.open_registrations, form.open_registrations,
form.short_description.clone(), form.short_description.clone(),
form.long_description.clone(), form.long_description.clone(),
) )
.expect("instance::update_settings: save error"); .expect("instance::update_settings: save error");
Ok(Redirect::to(uri!(admin))) Ok(Flash::success(
Redirect::to(uri!(admin)),
i18n!(rockets.intl.catalog, "Instance settings have been saved."),
))
}) })
.or_else(|e| { .or_else(|e| {
let local_inst = Instance::get_local(&*conn) let local_inst =
.expect("instance::update_settings: local instance error"); Instance::get_local(conn).expect("instance::update_settings: local instance error");
Err(render!(instance::admin( Err(render!(instance::admin(
&(&*conn, &intl.catalog, Some(admin.0)), &rockets.to_context(),
local_inst, local_inst,
form.clone(), form.clone(),
e e
@ -154,64 +148,78 @@ pub fn update_settings(
#[get("/admin/instances?<page>")] #[get("/admin/instances?<page>")]
pub fn admin_instances( pub fn admin_instances(
admin: Admin, _admin: Admin,
conn: DbConn,
page: Option<Page>, page: Option<Page>,
intl: I18n, rockets: PlumeRocket,
) -> Result<Ructe, ErrorPage> { ) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let instances = Instance::page(&*conn, page.limits())?; let instances = Instance::page(&*rockets.conn, page.limits())?;
Ok(render!(instance::list( Ok(render!(instance::list(
&(&*conn, &intl.catalog, Some(admin.0)), &rockets.to_context(),
Instance::get_local(&*conn)?, Instance::get_local(&*rockets.conn)?,
instances, instances,
page.0, page.0,
Page::total(Instance::count(&*conn)? as i32) Page::total(Instance::count(&*rockets.conn)? as i32)
))) )))
} }
#[post("/admin/instances/<id>/block")] #[post("/admin/instances/<id>/block")]
pub fn toggle_block(_admin: Admin, conn: DbConn, id: i32) -> Result<Redirect, ErrorPage> { pub fn toggle_block(
if let Ok(inst) = Instance::get(&*conn, id) { _admin: Admin,
inst.toggle_block(&*conn)?; conn: DbConn,
} id: i32,
intl: I18n,
) -> Result<Flash<Redirect>, ErrorPage> {
let inst = Instance::get(&*conn, id)?;
let message = if inst.blocked {
i18n!(intl.catalog, "{} have been unblocked."; &inst.name)
} else {
i18n!(intl.catalog, "{} have been blocked."; &inst.name)
};
Ok(Redirect::to(uri!(admin_instances: page = _))) inst.toggle_block(&*conn)?;
Ok(Flash::success(
Redirect::to(uri!(admin_instances: page = _)),
message,
))
} }
#[get("/admin/users?<page>")] #[get("/admin/users?<page>")]
pub fn admin_users( pub fn admin_users(
admin: Admin, _admin: Admin,
conn: DbConn,
page: Option<Page>, page: Option<Page>,
intl: I18n, rockets: PlumeRocket,
) -> Result<Ructe, ErrorPage> { ) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
Ok(render!(instance::users( Ok(render!(instance::users(
&(&*conn, &intl.catalog, Some(admin.0)), &rockets.to_context(),
User::get_local_page(&*conn, page.limits())?, User::get_local_page(&*rockets.conn, page.limits())?,
page.0, page.0,
Page::total(User::count_local(&*conn)? as i32) Page::total(User::count_local(&*rockets.conn)? as i32)
))) )))
} }
#[post("/admin/users/<id>/ban")] #[post("/admin/users/<id>/ban")]
pub fn ban(_admin: Admin, id: i32, rockets: PlumeRocket) -> Result<Redirect, ErrorPage> { pub fn ban(_admin: Admin, id: i32, rockets: PlumeRocket) -> Result<Flash<Redirect>, ErrorPage> {
if let Ok(u) = User::get(&*rockets.conn, id) { let u = User::get(&*rockets.conn, id)?;
u.delete(&*rockets.conn, &rockets.searcher)?; u.delete(&*rockets.conn, &rockets.searcher)?;
if Instance::get_local(&*rockets.conn) if Instance::get_local(&*rockets.conn)
.map(|i| u.instance_id == i.id) .map(|i| u.instance_id == i.id)
.unwrap_or(false) .unwrap_or(false)
{ {
let target = User::one_by_instance(&*rockets.conn)?; let target = User::one_by_instance(&*rockets.conn)?;
let delete_act = u.delete_activity(&*rockets.conn)?; let delete_act = u.delete_activity(&*rockets.conn)?;
rockets let u_clone = u.clone();
.worker rockets
.execute(move || broadcast(&u, delete_act, target)); .worker
} .execute(move || broadcast(&u_clone, delete_act, target));
} }
Ok(Redirect::to(uri!(admin_users: page = _)))
Ok(Flash::success(
Redirect::to(uri!(admin_users: page = _)),
i18n!(rockets.intl.catalog, "{} have been banned."; u.name()),
))
} }
#[post("/inbox", data = "<data>")] #[post("/inbox", data = "<data>")]
@ -293,14 +301,15 @@ pub fn nodeinfo(conn: DbConn, version: String) -> Result<Json<serde_json::Value>
} }
#[get("/about")] #[get("/about")]
pub fn about(user: Option<User>, conn: DbConn, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn about(rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let conn = &*rockets.conn;
Ok(render!(instance::about( Ok(render!(instance::about(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
Instance::get_local(&*conn)?, Instance::get_local(conn)?,
Instance::get_local(&*conn)?.main_admin(&*conn)?, Instance::get_local(conn)?.main_admin(conn)?,
User::count_local(&*conn)?, User::count_local(conn)?,
Post::count_local(&*conn)?, Post::count_local(conn)?,
Instance::count(&*conn)? - 1 Instance::count(conn)? - 1
))) )))
} }

View file

@ -3,32 +3,32 @@ use multipart::server::{
save::{SaveResult, SavedData}, save::{SaveResult, SavedData},
Multipart, Multipart,
}; };
use plume_models::{db_conn::DbConn, medias::*, users::User, Error}; use plume_models::{db_conn::DbConn, medias::*, users::User, Error, PlumeRocket};
use rocket::{ use rocket::{
http::ContentType, http::ContentType,
response::{status, Redirect}, response::{status, Flash, Redirect},
Data, Data,
}; };
use rocket_i18n::I18n; use rocket_i18n::I18n;
use routes::{errors::ErrorPage, Page}; use routes::{errors::ErrorPage, Page};
use std::fs; use std::fs;
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/medias?<page>")] #[get("/medias?<page>")]
pub fn list(user: User, conn: DbConn, intl: I18n, page: Option<Page>) -> Result<Ructe, ErrorPage> { pub fn list(user: User, page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let medias = Media::page_for_user(&*conn, &user, page.limits())?; let medias = Media::page_for_user(&*rockets.conn, &user, page.limits())?;
Ok(render!(medias::index( Ok(render!(medias::index(
&(&*conn, &intl.catalog, Some(user.clone())), &rockets.to_context(),
medias, medias,
page.0, page.0,
Page::total(Media::count_for_user(&*conn, &user)? as i32) Page::total(Media::count_for_user(&*rockets.conn, &user)? as i32)
))) )))
} }
#[get("/medias/new")] #[get("/medias/new")]
pub fn new(user: User, conn: DbConn, intl: I18n) -> Ructe { pub fn new(_user: User, rockets: PlumeRocket) -> Ructe {
render!(medias::new(&(&*conn, &intl.catalog, Some(user)))) render!(medias::new(&rockets.to_context()))
} }
#[post("/medias/new", data = "<data>")] #[post("/medias/new", data = "<data>")]
@ -122,32 +122,50 @@ fn read(data: &SavedData) -> Result<String, status::BadRequest<&'static str>> {
} }
#[get("/medias/<id>")] #[get("/medias/<id>")]
pub fn details(id: i32, user: User, conn: DbConn, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn details(id: i32, user: User, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let media = Media::get(&*conn, id)?; let media = Media::get(&*rockets.conn, id)?;
if media.owner_id == user.id { if media.owner_id == user.id {
Ok(render!(medias::details( Ok(render!(medias::details(&rockets.to_context(), media)))
&(&*conn, &intl.catalog, Some(user)),
media
)))
} else { } else {
Err(Error::Unauthorized.into()) Err(Error::Unauthorized.into())
} }
} }
#[post("/medias/<id>/delete")] #[post("/medias/<id>/delete")]
pub fn delete(id: i32, user: User, conn: DbConn) -> Result<Redirect, ErrorPage> { pub fn delete(id: i32, user: User, conn: DbConn, intl: I18n) -> Result<Flash<Redirect>, ErrorPage> {
let media = Media::get(&*conn, id)?; let media = Media::get(&*conn, id)?;
if media.owner_id == user.id { if media.owner_id == user.id {
media.delete(&*conn)?; media.delete(&*conn)?;
Ok(Flash::success(
Redirect::to(uri!(list: page = _)),
i18n!(intl.catalog, "Your media have been deleted."),
))
} else {
Ok(Flash::error(
Redirect::to(uri!(list: page = _)),
i18n!(intl.catalog, "You are not allowed to delete this media."),
))
} }
Ok(Redirect::to(uri!(list: page = _)))
} }
#[post("/medias/<id>/avatar")] #[post("/medias/<id>/avatar")]
pub fn set_avatar(id: i32, user: User, conn: DbConn) -> Result<Redirect, ErrorPage> { pub fn set_avatar(
id: i32,
user: User,
conn: DbConn,
intl: I18n,
) -> Result<Flash<Redirect>, ErrorPage> {
let media = Media::get(&*conn, id)?; let media = Media::get(&*conn, id)?;
if media.owner_id == user.id { if media.owner_id == user.id {
user.set_avatar(&*conn, media.id)?; user.set_avatar(&*conn, media.id)?;
Ok(Flash::success(
Redirect::to(uri!(details: id = id)),
i18n!(intl.catalog, "Your avatar have been updated."),
))
} else {
Ok(Flash::error(
Redirect::to(uri!(details: id = id)),
i18n!(intl.catalog, "You are not allowed to use this media."),
))
} }
Ok(Redirect::to(uri!(details: id = id)))
} }

View file

@ -2,23 +2,22 @@ use rocket::response::{Flash, Redirect};
use rocket_i18n::I18n; use rocket_i18n::I18n;
use plume_common::utils; use plume_common::utils;
use plume_models::{db_conn::DbConn, notifications::Notification, users::User}; use plume_models::{notifications::Notification, users::User, PlumeRocket};
use routes::{errors::ErrorPage, Page}; use routes::{errors::ErrorPage, Page};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/notifications?<page>")] #[get("/notifications?<page>")]
pub fn notifications( pub fn notifications(
conn: DbConn,
user: User, user: User,
page: Option<Page>, page: Option<Page>,
intl: I18n, rockets: PlumeRocket,
) -> Result<Ructe, ErrorPage> { ) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
Ok(render!(notifications::index( Ok(render!(notifications::index(
&(&*conn, &intl.catalog, Some(user.clone())), &rockets.to_context(),
Notification::page_for_user(&*conn, &user, page.limits())?, Notification::page_for_user(&*rockets.conn, &user, page.limits())?,
page.0, page.0,
Page::total(Notification::count_for_user(&*conn, &user)? as i32) Page::total(Notification::count_for_user(&*rockets.conn, &user)? as i32)
))) )))
} }

View file

@ -27,7 +27,7 @@ use plume_models::{
Error, PlumeRocket, Error, PlumeRocket,
}; };
use routes::{comments::NewCommentForm, errors::ErrorPage, ContentLen, RemoteForm}; use routes::{comments::NewCommentForm, errors::ErrorPage, ContentLen, RemoteForm};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/~/<blog>/<slug>?<responding_to>", rank = 4)] #[get("/~/<blog>/<slug>?<responding_to>", rank = 4)]
pub fn details( pub fn details(
@ -51,7 +51,7 @@ pub fn details(
let previous = responding_to.and_then(|r| Comment::get(&*conn, r).ok()); let previous = responding_to.and_then(|r| Comment::get(&*conn, r).ok());
Ok(render!(posts::details( Ok(render!(posts::details(
&(&*conn, &rockets.intl.catalog, user.clone()), &rockets.to_context(),
post.clone(), post.clone(),
blog, blog,
&NewCommentForm { &NewCommentForm {
@ -89,7 +89,7 @@ pub fn details(
))) )))
} else { } else {
Ok(render!(errors::not_authorized( Ok(render!(errors::not_authorized(
&(&*conn, &rockets.intl.catalog, user.clone()), &rockets.to_context(),
i18n!(rockets.intl.catalog, "This post isn't published yet.") i18n!(rockets.intl.catalog, "This post isn't published yet.")
))) )))
} }
@ -130,21 +130,20 @@ pub fn new_auth(blog: String, i18n: I18n) -> Flash<Redirect> {
pub fn new(blog: String, cl: ContentLen, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> { pub fn new(blog: String, cl: ContentLen, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let b = Blog::find_by_fqn(&rockets, &blog)?; let b = Blog::find_by_fqn(&rockets, &blog)?;
let user = rockets.user.unwrap(); let user = rockets.user.clone().unwrap();
let intl = rockets.intl;
if !user.is_author_in(&*conn, &b)? { if !user.is_author_in(&*conn, &b)? {
// TODO actually return 403 error code // TODO actually return 403 error code
return Ok(render!(errors::not_authorized( return Ok(render!(errors::not_authorized(
&(&*conn, &intl.catalog, Some(user)), &rockets.to_context(),
i18n!(intl.catalog, "You are not an author of this blog.") i18n!(rockets.intl.catalog, "You are not an author of this blog.")
))); )));
} }
let medias = Media::for_user(&*conn, user.id)?; let medias = Media::for_user(&*conn, user.id)?;
Ok(render!(posts::new( Ok(render!(posts::new(
&(&*conn, &intl.catalog, Some(user)), &rockets.to_context(),
i18n!(intl.catalog, "New post"), i18n!(rockets.intl.catalog, "New post"),
b, b,
false, false,
&NewPostForm { &NewPostForm {
@ -170,11 +169,11 @@ pub fn edit(
let intl = &rockets.intl.catalog; let intl = &rockets.intl.catalog;
let b = Blog::find_by_fqn(&rockets, &blog)?; let b = Blog::find_by_fqn(&rockets, &blog)?;
let post = Post::find_by_slug(&*conn, &slug, b.id)?; let post = Post::find_by_slug(&*conn, &slug, b.id)?;
let user = rockets.user.unwrap(); let user = rockets.user.clone().unwrap();
if !user.is_author_in(&*conn, &b)? { if !user.is_author_in(&*conn, &b)? {
return Ok(render!(errors::not_authorized( return Ok(render!(errors::not_authorized(
&(&*conn, intl, Some(user)), &rockets.to_context(),
i18n!(intl, "You are not an author of this blog.") i18n!(intl, "You are not an author of this blog.")
))); )));
} }
@ -188,7 +187,7 @@ pub fn edit(
let medias = Media::for_user(&*conn, user.id)?; let medias = Media::for_user(&*conn, user.id)?;
let title = post.title.clone(); let title = post.title.clone();
Ok(render!(posts::new( Ok(render!(posts::new(
&(&*conn, intl, Some(user)), &rockets.to_context(),
i18n!(intl, "Edit {0}"; &title), i18n!(intl, "Edit {0}"; &title),
b, b,
true, true,
@ -220,7 +219,7 @@ pub fn update(
cl: ContentLen, cl: ContentLen,
form: LenientForm<NewPostForm>, form: LenientForm<NewPostForm>,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, Ructe> { ) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let b = Blog::find_by_fqn(&rockets, &blog).expect("post::update: blog error"); let b = Blog::find_by_fqn(&rockets, &blog).expect("post::update: blog error");
let mut post = let mut post =
@ -256,8 +255,9 @@ pub fn update(
.expect("posts::update: is author in error") .expect("posts::update: is author in error")
{ {
// actually it's not "Ok"… // actually it's not "Ok"…
Ok(Redirect::to( Ok(Flash::error(
uri!(super::blogs::details: name = blog, page = _), Redirect::to(uri!(super::blogs::details: name = blog, page = _)),
i18n!(&intl, "You are not allowed to publish on this blog."),
)) ))
} else { } else {
let (content, mentions, hashtags) = utils::md_to_html( let (content, mentions, hashtags) = utils::md_to_html(
@ -343,14 +343,15 @@ pub fn update(
} }
} }
Ok(Redirect::to( Ok(Flash::success(
uri!(details: blog = blog, slug = new_slug, responding_to = _), Redirect::to(uri!(details: blog = blog, slug = new_slug, responding_to = _)),
i18n!(intl, "Your article have been updated."),
)) ))
} }
} else { } else {
let medias = Media::for_user(&*conn, user.id).expect("posts:update: medias error"); let medias = Media::for_user(&*conn, user.id).expect("posts:update: medias error");
Err(render!(posts::new( Err(render!(posts::new(
&(&*conn, intl, Some(user)), &rockets.to_context(),
i18n!(intl, "Edit {0}"; &form.title), i18n!(intl, "Edit {0}"; &form.title),
b, b,
true, true,
@ -393,7 +394,7 @@ pub fn create(
form: LenientForm<NewPostForm>, form: LenientForm<NewPostForm>,
cl: ContentLen, cl: ContentLen,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, Result<Ructe, ErrorPage>> { ) -> Result<Flash<Redirect>, Result<Ructe, ErrorPage>> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("post::create: blog error");; let blog = Blog::find_by_fqn(&rockets, &blog_name).expect("post::create: blog error");;
let slug = form.title.to_string().to_kebab_case(); let slug = form.title.to_string().to_kebab_case();
@ -420,8 +421,12 @@ pub fn create(
.expect("post::create: is author in error") .expect("post::create: is author in error")
{ {
// actually it's not "Ok"… // actually it's not "Ok"…
return Ok(Redirect::to( return Ok(Flash::error(
uri!(super::blogs::details: name = blog_name, page = _), Redirect::to(uri!(super::blogs::details: name = blog_name, page = _)),
i18n!(
&rockets.intl.catalog,
"You are not allowed to publish on this blog."
),
)); ));
} }
@ -518,15 +523,15 @@ pub fn create(
worker.execute(move || broadcast(&user, act, dest)); worker.execute(move || broadcast(&user, act, dest));
} }
Ok(Redirect::to( Ok(Flash::success(
uri!(details: blog = blog_name, slug = slug, responding_to = _), Redirect::to(uri!(details: blog = blog_name, slug = slug, responding_to = _)),
i18n!(&rockets.intl.catalog, "Your post have been saved."),
)) ))
} else { } else {
let medias = Media::for_user(&*conn, user.id).expect("posts::create: medias error"); let medias = Media::for_user(&*conn, user.id).expect("posts::create: medias error");
let intl = rockets.intl;
Err(Ok(render!(posts::new( Err(Ok(render!(posts::new(
&(&*conn, &intl.catalog, Some(user)), &rockets.to_context(),
i18n!(intl.catalog, "New post"), i18n!(rockets.intl.catalog, "New post"),
blog, blog,
false, false,
&*form, &*form,
@ -544,7 +549,8 @@ pub fn delete(
blog_name: String, blog_name: String,
slug: String, slug: String,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, ErrorPage> { intl: I18n,
) -> Result<Flash<Redirect>, ErrorPage> {
let user = rockets.user.clone().unwrap(); let user = rockets.user.clone().unwrap();
let post = Blog::find_by_fqn(&rockets, &blog_name) let post = Blog::find_by_fqn(&rockets, &blog_name)
.and_then(|blog| Post::find_by_slug(&*rockets.conn, &slug, blog.id)); .and_then(|blog| Post::find_by_slug(&*rockets.conn, &slug, blog.id));
@ -555,8 +561,11 @@ pub fn delete(
.into_iter() .into_iter()
.any(|a| a.id == user.id) .any(|a| a.id == user.id)
{ {
return Ok(Redirect::to( return Ok(Flash::error(
uri!(details: blog = blog_name.clone(), slug = slug.clone(), responding_to = _), Redirect::to(
uri!(details: blog = blog_name.clone(), slug = slug.clone(), responding_to = _),
),
i18n!(intl.catalog, "You are not allowed to delete this article."),
)); ));
} }
@ -579,13 +588,14 @@ pub fn delete(
.expect("Failed to rotate keypair"); .expect("Failed to rotate keypair");
}); });
Ok(Redirect::to( Ok(Flash::success(
uri!(super::blogs::details: name = blog_name, page = _), Redirect::to(uri!(super::blogs::details: name = blog_name, page = _)),
i18n!(intl.catalog, "Your article have been deleted."),
)) ))
} else { } else {
Ok(Redirect::to( Ok(Flash::error(Redirect::to(
uri!(super::blogs::details: name = blog_name, page = _), uri!(super::blogs::details: name = blog_name, page = _),
)) ), i18n!(intl.catalog, "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?")))
} }
} }
@ -594,12 +604,11 @@ pub fn remote_interact(
rockets: PlumeRocket, rockets: PlumeRocket,
blog_name: String, blog_name: String,
slug: String, slug: String,
i18n: I18n,
) -> Result<Ructe, ErrorPage> { ) -> Result<Ructe, ErrorPage> {
let target = Blog::find_by_fqn(&rockets, &blog_name) let target = Blog::find_by_fqn(&rockets, &blog_name)
.and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?;
Ok(render!(posts::remote_interact( Ok(render!(posts::remote_interact(
&(&rockets.conn, &i18n.catalog, None), &rockets.to_context(),
target, target,
super::session::LoginForm::default(), super::session::LoginForm::default(),
ValidationErrors::default(), ValidationErrors::default(),
@ -614,7 +623,6 @@ pub fn remote_interact_post(
blog_name: String, blog_name: String,
slug: String, slug: String,
remote: LenientForm<RemoteForm>, remote: LenientForm<RemoteForm>,
i18n: I18n,
) -> Result<Result<Ructe, Redirect>, ErrorPage> { ) -> Result<Result<Ructe, Redirect>, ErrorPage> {
let target = Blog::find_by_fqn(&rockets, &blog_name) let target = Blog::find_by_fqn(&rockets, &blog_name)
.and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?; .and_then(|blog| Post::find_by_slug(&rockets.conn, &slug, blog.id))?;
@ -627,12 +635,12 @@ pub fn remote_interact_post(
let mut errs = ValidationErrors::new(); let mut errs = ValidationErrors::new();
errs.add("remote", ValidationError { errs.add("remote", ValidationError {
code: Cow::from("invalid_remote"), code: Cow::from("invalid_remote"),
message: Some(Cow::from(i18n!(&i18n.catalog, "Couldn't obtain enough information about your account. Please make sure your username is correct."))), message: Some(Cow::from(i18n!(rockets.intl.catalog, "Couldn't obtain enough information about your account. Please make sure your username is correct."))),
params: HashMap::new(), params: HashMap::new(),
}); });
//could not get your remote url? //could not get your remote url?
Ok(Ok(render!(posts::remote_interact( Ok(Ok(render!(posts::remote_interact(
&(&rockets.conn, &i18n.catalog, None), &rockets.to_context(),
target, target,
super::session::LoginForm::default(), super::session::LoginForm::default(),
ValidationErrors::default(), ValidationErrors::default(),

View file

@ -1,12 +1,10 @@
use chrono::offset::Utc; use chrono::offset::Utc;
use rocket::request::Form; use rocket::request::Form;
use rocket_i18n::I18n;
use plume_models::{db_conn::DbConn, search::Query, users::User}; use plume_models::{search::Query, PlumeRocket};
use routes::Page; use routes::Page;
use std::str::FromStr; use std::str::FromStr;
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
use Searcher;
#[derive(Default, FromForm)] #[derive(Default, FromForm)]
pub struct SearchQuery { pub struct SearchQuery {
@ -52,13 +50,8 @@ macro_rules! param_to_query {
} }
#[get("/search?<query..>")] #[get("/search?<query..>")]
pub fn search( pub fn search(query: Option<Form<SearchQuery>>, rockets: PlumeRocket) -> Ructe {
query: Option<Form<SearchQuery>>, let conn = &*rockets.conn;
conn: DbConn,
searcher: Searcher,
user: Option<User>,
intl: I18n,
) -> Ructe {
let query = query.map(Form::into_inner).unwrap_or_default(); let query = query.map(Form::into_inner).unwrap_or_default();
let page = query.page.unwrap_or_default(); let page = query.page.unwrap_or_default();
let mut parsed_query = let mut parsed_query =
@ -73,14 +66,16 @@ pub fn search(
if str_query.is_empty() { if str_query.is_empty() {
render!(search::index( render!(search::index(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
&format!("{}", Utc::today().format("%Y-%m-d")) &format!("{}", Utc::today().format("%Y-%m-d"))
)) ))
} else { } else {
let res = searcher.search_document(&conn, parsed_query, page.limits()); let res = rockets
.searcher
.search_document(&conn, parsed_query, page.limits());
let next_page = if res.is_empty() { 0 } else { page.0 + 1 }; let next_page = if res.is_empty() { 0 } else { page.0 + 1 };
render!(search::result( render!(search::result(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
&str_query, &str_query,
res, res,
page.0, page.0,

View file

@ -2,8 +2,8 @@ use lettre::Transport;
use rocket::http::ext::IntoOwned; use rocket::http::ext::IntoOwned;
use rocket::{ use rocket::{
http::{uri::Uri, Cookie, Cookies, SameSite}, http::{uri::Uri, Cookie, Cookies, SameSite},
request::{FlashMessage, Form, LenientForm}, request::{Form, LenientForm},
response::Redirect, response::{Flash, Redirect},
State, State,
}; };
use rocket_i18n::I18n; use rocket_i18n::I18n;
@ -12,21 +12,20 @@ use std::{
sync::{Arc, Mutex}, sync::{Arc, Mutex},
time::Instant, time::Instant,
}; };
use template_utils::Ructe;
use validator::{Validate, ValidationError, ValidationErrors}; use validator::{Validate, ValidationError, ValidationErrors};
use mail::{build_mail, Mailer}; use mail::{build_mail, Mailer};
use plume_models::{ use plume_models::{
db_conn::DbConn,
users::{User, AUTH_COOKIE}, users::{User, AUTH_COOKIE},
Error, PlumeRocket, CONFIG, Error, PlumeRocket, CONFIG,
}; };
use routes::errors::ErrorPage; use routes::errors::ErrorPage;
use template_utils::{IntoContext, Ructe};
#[get("/login?<m>")] #[get("/login?<m>")]
pub fn new(user: Option<User>, conn: DbConn, m: Option<String>, intl: I18n) -> Ructe { pub fn new(m: Option<String>, rockets: PlumeRocket) -> Ructe {
render!(session::login( render!(session::login(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
m, m,
&LoginForm::default(), &LoginForm::default(),
ValidationErrors::default() ValidationErrors::default()
@ -44,10 +43,9 @@ pub struct LoginForm {
#[post("/login", data = "<form>")] #[post("/login", data = "<form>")]
pub fn create( pub fn create(
form: LenientForm<LoginForm>, form: LenientForm<LoginForm>,
flash: Option<FlashMessage>,
mut cookies: Cookies, mut cookies: Cookies,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, Ructe> { ) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let user = User::find_by_email(&*conn, &form.email_or_name) let user = User::find_by_email(&*conn, &form.email_or_name)
.or_else(|_| User::find_by_fqn(&rockets, &form.email_or_name)); .or_else(|_| User::find_by_fqn(&rockets, &form.email_or_name));
@ -84,31 +82,38 @@ pub fn create(
.same_site(SameSite::Lax) .same_site(SameSite::Lax)
.finish(), .finish(),
); );
let destination = flash let destination = rockets
.and_then(|f| { .flash_msg
if f.name() == "callback" { .clone()
Some(f.msg().to_owned()) .and_then(
} else { |(name, msg)| {
None if name == "callback" {
} Some(msg)
}) } else {
None
}
},
)
.unwrap_or_else(|| "/".to_owned()); .unwrap_or_else(|| "/".to_owned());
let uri = Uri::parse(&destination) let uri = Uri::parse(&destination)
.map(IntoOwned::into_owned) .map(IntoOwned::into_owned)
.map_err(|_| { .map_err(|_| {
render!(session::login( render!(session::login(
&(&*conn, &rockets.intl.catalog, None), &(conn, &rockets.intl.catalog, None, None),
None, None,
&*form, &*form,
errors errors
)) ))
})?; })?;
Ok(Redirect::to(uri)) Ok(Flash::success(
Redirect::to(uri),
i18n!(&rockets.intl.catalog, "You are now connected."),
))
} else { } else {
Err(render!(session::login( Err(render!(session::login(
&(&*conn, &rockets.intl.catalog, None), &rockets.to_context(),
None, None,
&*form, &*form,
errors errors
@ -117,11 +122,14 @@ pub fn create(
} }
#[get("/logout")] #[get("/logout")]
pub fn delete(mut cookies: Cookies) -> Redirect { pub fn delete(mut cookies: Cookies, intl: I18n) -> Flash<Redirect> {
if let Some(cookie) = cookies.get_private(AUTH_COOKIE) { if let Some(cookie) = cookies.get_private(AUTH_COOKIE) {
cookies.remove_private(cookie); cookies.remove_private(cookie);
} }
Redirect::to("/") Flash::success(
Redirect::to("/"),
i18n!(intl.catalog, "You are now logged off."),
)
} }
#[derive(Clone)] #[derive(Clone)]
@ -138,9 +146,9 @@ impl PartialEq for ResetRequest {
} }
#[get("/password-reset")] #[get("/password-reset")]
pub fn password_reset_request_form(conn: DbConn, intl: I18n) -> Ructe { pub fn password_reset_request_form(rockets: PlumeRocket) -> Ructe {
render!(session::password_reset_request( render!(session::password_reset_request(
&(&*conn, &intl.catalog, None), &rockets.to_context(),
&ResetForm::default(), &ResetForm::default(),
ValidationErrors::default() ValidationErrors::default()
)) ))
@ -154,17 +162,16 @@ pub struct ResetForm {
#[post("/password-reset", data = "<form>")] #[post("/password-reset", data = "<form>")]
pub fn password_reset_request( pub fn password_reset_request(
conn: DbConn,
intl: I18n,
mail: State<Arc<Mutex<Mailer>>>, mail: State<Arc<Mutex<Mailer>>>,
form: Form<ResetForm>, form: Form<ResetForm>,
requests: State<Arc<Mutex<Vec<ResetRequest>>>>, requests: State<Arc<Mutex<Vec<ResetRequest>>>>,
rockets: PlumeRocket,
) -> Ructe { ) -> Ructe {
let mut requests = requests.lock().unwrap(); let mut requests = requests.lock().unwrap();
// Remove outdated requests (more than 1 day old) to avoid the list to grow too much // Remove outdated requests (more than 1 day old) to avoid the list to grow too much
requests.retain(|r| r.creation_date.elapsed().as_secs() < 24 * 60 * 60); requests.retain(|r| r.creation_date.elapsed().as_secs() < 24 * 60 * 60);
if User::find_by_email(&*conn, &form.email).is_ok() if User::find_by_email(&*rockets.conn, &form.email).is_ok()
&& !requests.iter().any(|x| x.mail == form.email.clone()) && !requests.iter().any(|x| x.mail == form.email.clone())
{ {
let id = plume_common::utils::random_hex(); let id = plume_common::utils::random_hex();
@ -178,8 +185,8 @@ pub fn password_reset_request(
let link = format!("https://{}/password-reset/{}", CONFIG.base_url, id); let link = format!("https://{}/password-reset/{}", CONFIG.base_url, id);
if let Some(message) = build_mail( if let Some(message) = build_mail(
form.email.clone(), form.email.clone(),
i18n!(intl.catalog, "Password reset"), i18n!(rockets.intl.catalog, "Password reset"),
i18n!(intl.catalog, "Here is the link to reset your password: {0}"; link), i18n!(rockets.intl.catalog, "Here is the link to reset your password: {0}"; link),
) { ) {
if let Some(ref mut mail) = *mail.lock().unwrap() { if let Some(ref mut mail) = *mail.lock().unwrap() {
mail.send(message.into()) mail.send(message.into())
@ -188,19 +195,14 @@ pub fn password_reset_request(
} }
} }
} }
render!(session::password_reset_request_ok(&( render!(session::password_reset_request_ok(&rockets.to_context()))
&*conn,
&intl.catalog,
None
)))
} }
#[get("/password-reset/<token>")] #[get("/password-reset/<token>")]
pub fn password_reset_form( pub fn password_reset_form(
conn: DbConn,
intl: I18n,
token: String, token: String,
requests: State<Arc<Mutex<Vec<ResetRequest>>>>, requests: State<Arc<Mutex<Vec<ResetRequest>>>>,
rockets: PlumeRocket,
) -> Result<Ructe, ErrorPage> { ) -> Result<Ructe, ErrorPage> {
requests requests
.lock() .lock()
@ -209,7 +211,7 @@ pub fn password_reset_form(
.find(|x| x.id == token.clone()) .find(|x| x.id == token.clone())
.ok_or(Error::NotFound)?; .ok_or(Error::NotFound)?;
Ok(render!(session::password_reset( Ok(render!(session::password_reset(
&(&*conn, &intl.catalog, None), &rockets.to_context(),
&NewPasswordForm::default(), &NewPasswordForm::default(),
ValidationErrors::default() ValidationErrors::default()
))) )))
@ -236,12 +238,11 @@ fn passwords_match(form: &NewPasswordForm) -> Result<(), ValidationError> {
#[post("/password-reset/<token>", data = "<form>")] #[post("/password-reset/<token>", data = "<form>")]
pub fn password_reset( pub fn password_reset(
conn: DbConn,
intl: I18n,
token: String, token: String,
requests: State<Arc<Mutex<Vec<ResetRequest>>>>, requests: State<Arc<Mutex<Vec<ResetRequest>>>>,
form: Form<NewPasswordForm>, form: Form<NewPasswordForm>,
) -> Result<Redirect, Ructe> { rockets: PlumeRocket,
) -> Result<Flash<Redirect>, Ructe> {
form.validate() form.validate()
.and_then(|_| { .and_then(|_| {
let mut requests = requests.lock().unwrap(); let mut requests = requests.lock().unwrap();
@ -253,24 +254,30 @@ pub fn password_reset(
if req.creation_date.elapsed().as_secs() < 60 * 60 * 2 { if req.creation_date.elapsed().as_secs() < 60 * 60 * 2 {
// Reset link is only valid for 2 hours // Reset link is only valid for 2 hours
requests.retain(|r| *r != req); requests.retain(|r| *r != req);
let user = User::find_by_email(&*conn, &req.mail).map_err(to_validation)?; let user = User::find_by_email(&*rockets.conn, &req.mail).map_err(to_validation)?;
user.reset_password(&*conn, &form.password).ok(); user.reset_password(&*rockets.conn, &form.password).ok();
Ok(Redirect::to(uri!( Ok(Flash::success(
new: m = i18n!(intl.catalog, "Your password was successfully reset.") Redirect::to(uri!(
))) new: m = _
)),
i18n!(
rockets.intl.catalog,
"Your password was successfully reset."
),
))
} else { } else {
Ok(Redirect::to(uri!( Ok(Flash::error(
new: m = i18n!(intl.catalog, "Sorry, but the link expired. Try again") Redirect::to(uri!(
))) new: m = _
)),
i18n!(
rockets.intl.catalog,
"Sorry, but the link expired. Try again"
),
))
} }
}) })
.map_err(|err| { .map_err(|err| render!(session::password_reset(&rockets.to_context(), &form, err)))
render!(session::password_reset(
&(&*conn, &intl.catalog, None),
&form,
err
))
})
} }
fn to_validation<T>(_: T) -> ValidationErrors { fn to_validation<T>(_: T) -> ValidationErrors {

View file

@ -1,24 +1,16 @@
use rocket_i18n::I18n; use plume_models::{posts::Post, PlumeRocket};
use plume_models::{db_conn::DbConn, posts::Post, users::User};
use routes::{errors::ErrorPage, Page}; use routes::{errors::ErrorPage, Page};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/tag/<name>?<page>")] #[get("/tag/<name>?<page>")]
pub fn tag( pub fn tag(name: String, page: Option<Page>, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
user: Option<User>,
conn: DbConn,
name: String,
page: Option<Page>,
intl: I18n,
) -> Result<Ructe, ErrorPage> {
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let posts = Post::list_by_tag(&*conn, name.clone(), page.limits())?; let posts = Post::list_by_tag(&*rockets.conn, name.clone(), page.limits())?;
Ok(render!(tags::index( Ok(render!(tags::index(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
name.clone(), name.clone(),
posts, posts,
page.0, page.0,
Page::total(Post::count_for_tag(&*conn, name)? as i32) Page::total(Post::count_for_tag(&*rockets.conn, name)? as i32)
))) )))
} }

View file

@ -26,7 +26,7 @@ use plume_models::{
Error, PlumeRocket, Error, PlumeRocket,
}; };
use routes::{errors::ErrorPage, Page, RemoteForm}; use routes::{errors::ErrorPage, Page, RemoteForm};
use template_utils::Ructe; use template_utils::{IntoContext, Ructe};
#[get("/me")] #[get("/me")]
pub fn me(user: Option<User>) -> Result<Redirect, Flash<Redirect>> { pub fn me(user: Option<User>) -> Result<Redirect, Flash<Redirect>> {
@ -48,7 +48,7 @@ pub fn details(
let user = User::find_by_fqn(&rockets, &name)?; let user = User::find_by_fqn(&rockets, &name)?;
let recents = Post::get_recents_for_author(&*conn, &user, 6)?; let recents = Post::get_recents_for_author(&*conn, &user, 6)?;
let reshares = Reshare::get_recents_for_author(&*conn, &user, 6)?; let reshares = Reshare::get_recents_for_author(&*conn, &user, 6)?;
let worker = rockets.worker; let worker = &rockets.worker;
if !user.get_instance(&*conn)?.local { if !user.get_instance(&*conn)?.local {
// Fetch new articles // Fetch new articles
@ -101,12 +101,12 @@ pub fn details(
} }
} }
let account = rockets.user;
let intl = rockets.intl;
Ok(render!(users::details( Ok(render!(users::details(
&(&*conn, &intl.catalog, account.clone()), &rockets.to_context(),
user.clone(), user.clone(),
account rockets
.user
.clone()
.and_then(|x| x.is_following(&*conn, user.id).ok()) .and_then(|x| x.is_following(&*conn, user.id).ok())
.unwrap_or(false), .unwrap_or(false),
user.instance_id != Instance::get_local(&*conn)?.id, user.instance_id != Instance::get_local(&*conn)?.id,
@ -120,12 +120,12 @@ pub fn details(
} }
#[get("/dashboard")] #[get("/dashboard")]
pub fn dashboard(user: User, conn: DbConn, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn dashboard(user: User, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
let blogs = Blog::find_for_author(&*conn, &user)?; let blogs = Blog::find_for_author(&*rockets.conn, &user)?;
Ok(render!(users::dashboard( Ok(render!(users::dashboard(
&(&*conn, &intl.catalog, Some(user.clone())), &rockets.to_context(),
blogs, blogs,
Post::drafts_by_author(&*conn, &user)? Post::drafts_by_author(&*rockets.conn, &user)?
))) )))
} }
@ -141,19 +141,25 @@ pub fn dashboard_auth(i18n: I18n) -> Flash<Redirect> {
} }
#[post("/@/<name>/follow")] #[post("/@/<name>/follow")]
pub fn follow(name: String, user: User, rockets: PlumeRocket) -> Result<Redirect, ErrorPage> { pub fn follow(
name: String,
user: User,
rockets: PlumeRocket,
) -> Result<Flash<Redirect>, ErrorPage> {
let conn = &*rockets.conn; let conn = &*rockets.conn;
let target = User::find_by_fqn(&rockets, &name)?; let target = User::find_by_fqn(&rockets, &name)?;
if let Ok(follow) = follows::Follow::find(&*conn, user.id, target.id) { let message = if let Ok(follow) = follows::Follow::find(&*conn, user.id, target.id) {
let delete_act = follow.build_undo(&*conn)?; let delete_act = follow.build_undo(&*conn)?;
local_inbox( local_inbox(
&rockets, &rockets,
serde_json::to_value(&delete_act).map_err(Error::from)?, serde_json::to_value(&delete_act).map_err(Error::from)?,
)?; )?;
let msg = i18n!(rockets.intl.catalog, "You are no longer following {}."; target.name());
rockets rockets
.worker .worker
.execute(move || broadcast(&user, delete_act, vec![target])); .execute(move || broadcast(&user, delete_act, vec![target]));
msg
} else { } else {
let f = follows::Follow::insert( let f = follows::Follow::insert(
&*conn, &*conn,
@ -166,11 +172,16 @@ pub fn follow(name: String, user: User, rockets: PlumeRocket) -> Result<Redirect
f.notify(&*conn)?; f.notify(&*conn)?;
let act = f.to_activity(&*conn)?; let act = f.to_activity(&*conn)?;
let msg = i18n!(rockets.intl.catalog, "You are now following {}."; target.name());
rockets rockets
.worker .worker
.execute(move || broadcast(&user, act, vec![target])); .execute(move || broadcast(&user, act, vec![target]));
} msg
Ok(Redirect::to(uri!(details: name = name))) };
Ok(Flash::success(
Redirect::to(uri!(details: name = name)),
message,
))
} }
#[post("/@/<name>/follow", data = "<remote_form>", rank = 2)] #[post("/@/<name>/follow", data = "<remote_form>", rank = 2)]
@ -209,7 +220,7 @@ pub fn follow_not_connected(
); );
Ok(Ok(Flash::new( Ok(Ok(Flash::new(
render!(users::follow_remote( render!(users::follow_remote(
&(&rockets.conn, &i18n.catalog, None), &rockets.to_context(),
target, target,
super::session::LoginForm::default(), super::session::LoginForm::default(),
ValidationErrors::default(), ValidationErrors::default(),
@ -223,7 +234,7 @@ pub fn follow_not_connected(
} else { } else {
Ok(Ok(Flash::new( Ok(Ok(Flash::new(
render!(users::follow_remote( render!(users::follow_remote(
&(&rockets.conn, &i18n.catalog, None), &rockets.to_context(),
target, target,
super::session::LoginForm::default(), super::session::LoginForm::default(),
ValidationErrors::default(), ValidationErrors::default(),
@ -260,10 +271,11 @@ pub fn followers(
let followers_count = user.count_followers(&*conn)?; let followers_count = user.count_followers(&*conn)?;
Ok(render!(users::followers( Ok(render!(users::followers(
&(&*conn, &rockets.intl.catalog, rockets.user.clone()), &rockets.to_context(),
user.clone(), user.clone(),
rockets rockets
.user .user
.clone()
.and_then(|x| x.is_following(&*conn, user.id).ok()) .and_then(|x| x.is_following(&*conn, user.id).ok())
.unwrap_or(false), .unwrap_or(false),
user.instance_id != Instance::get_local(&*conn)?.id, user.instance_id != Instance::get_local(&*conn)?.id,
@ -283,18 +295,19 @@ pub fn followed(
let conn = &*rockets.conn; let conn = &*rockets.conn;
let page = page.unwrap_or_default(); let page = page.unwrap_or_default();
let user = User::find_by_fqn(&rockets, &name)?; let user = User::find_by_fqn(&rockets, &name)?;
let followed_count = user.count_followed(&*conn)?; let followed_count = user.count_followed(conn)?;
Ok(render!(users::followed( Ok(render!(users::followed(
&(&*conn, &rockets.intl.catalog, rockets.user.clone()), &rockets.to_context(),
user.clone(), user.clone(),
rockets rockets
.user .user
.and_then(|x| x.is_following(&*conn, user.id).ok()) .clone()
.and_then(|x| x.is_following(conn, user.id).ok())
.unwrap_or(false), .unwrap_or(false),
user.instance_id != Instance::get_local(&*conn)?.id, user.instance_id != Instance::get_local(conn)?.id,
user.get_instance(&*conn)?.public_domain, user.get_instance(conn)?.public_domain,
user.get_followed_page(&*conn, page.limits())?, user.get_followed_page(conn, page.limits())?,
page.0, page.0,
Page::total(followed_count as i32) Page::total(followed_count as i32)
))) )))
@ -311,20 +324,20 @@ pub fn activity_details(
} }
#[get("/users/new")] #[get("/users/new")]
pub fn new(user: Option<User>, conn: DbConn, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn new(rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
Ok(render!(users::new( Ok(render!(users::new(
&(&*conn, &intl.catalog, user), &rockets.to_context(),
Instance::get_local(&*conn)?.open_registrations, Instance::get_local(&*rockets.conn)?.open_registrations,
&NewUserForm::default(), &NewUserForm::default(),
ValidationErrors::default() ValidationErrors::default()
))) )))
} }
#[get("/@/<name>/edit")] #[get("/@/<name>/edit")]
pub fn edit(name: String, user: User, conn: DbConn, intl: I18n) -> Result<Ructe, ErrorPage> { pub fn edit(name: String, user: User, rockets: PlumeRocket) -> Result<Ructe, ErrorPage> {
if user.username == name && !name.contains('@') { if user.username == name && !name.contains('@') {
Ok(render!(users::edit( Ok(render!(users::edit(
&(&*conn, &intl.catalog, Some(user.clone())), &rockets.to_context(),
UpdateUserForm { UpdateUserForm {
display_name: user.display_name.clone(), display_name: user.display_name.clone(),
email: user.email.clone().unwrap_or_default(), email: user.email.clone().unwrap_or_default(),
@ -361,7 +374,8 @@ pub fn update(
conn: DbConn, conn: DbConn,
user: User, user: User,
form: LenientForm<UpdateUserForm>, form: LenientForm<UpdateUserForm>,
) -> Result<Redirect, ErrorPage> { intl: I18n,
) -> Result<Flash<Redirect>, ErrorPage> {
user.update( user.update(
&*conn, &*conn,
if !form.display_name.is_empty() { if !form.display_name.is_empty() {
@ -380,7 +394,10 @@ pub fn update(
user.summary.to_string() user.summary.to_string()
}, },
)?; )?;
Ok(Redirect::to(uri!(me))) Ok(Flash::success(
Redirect::to(uri!(me)),
i18n!(intl.catalog, "Your profile have been updated."),
))
} }
#[post("/@/<name>/delete")] #[post("/@/<name>/delete")]
@ -389,7 +406,7 @@ pub fn delete(
user: User, user: User,
mut cookies: Cookies, mut cookies: Cookies,
rockets: PlumeRocket, rockets: PlumeRocket,
) -> Result<Redirect, ErrorPage> { ) -> Result<Flash<Redirect>, ErrorPage> {
let account = User::find_by_fqn(&rockets, &name)?; let account = User::find_by_fqn(&rockets, &name)?;
if user.id == account.id { if user.id == account.id {
account.delete(&*rockets.conn, &rockets.searcher)?; account.delete(&*rockets.conn, &rockets.searcher)?;
@ -404,9 +421,18 @@ pub fn delete(
cookies.remove_private(cookie); cookies.remove_private(cookie);
} }
Ok(Redirect::to(uri!(super::instance::index))) Ok(Flash::success(
Redirect::to(uri!(super::instance::index)),
i18n!(rockets.intl.catalog, "Your account have been deleted."),
))
} else { } else {
Ok(Redirect::to(uri!(edit: name = name))) Ok(Flash::error(
Redirect::to(uri!(edit: name = name)),
i18n!(
rockets.intl.catalog,
"You can't delete someone else's account."
),
))
} }
} }
@ -463,12 +489,22 @@ fn to_validation(_: Error) -> ValidationErrors {
} }
#[post("/users/new", data = "<form>")] #[post("/users/new", data = "<form>")]
pub fn create(conn: DbConn, form: LenientForm<NewUserForm>, intl: I18n) -> Result<Redirect, Ructe> { pub fn create(
if !Instance::get_local(&*conn) form: LenientForm<NewUserForm>,
rockets: PlumeRocket,
) -> Result<Flash<Redirect>, Ructe> {
let conn = &*rockets.conn;
if !Instance::get_local(conn)
.map(|i| i.open_registrations) .map(|i| i.open_registrations)
.unwrap_or(true) .unwrap_or(true)
{ {
return Ok(Redirect::to(uri!(new))); // Actually, it is an error return Ok(Flash::error(
Redirect::to(uri!(new)),
i18n!(
rockets.intl.catalog,
"Registrations are closed on this instance."
),
)); // Actually, it is an error
} }
let mut form = form.into_inner(); let mut form = form.into_inner();
@ -477,7 +513,7 @@ pub fn create(conn: DbConn, form: LenientForm<NewUserForm>, intl: I18n) -> Resul
form.validate() form.validate()
.and_then(|_| { .and_then(|_| {
NewUser::new_local( NewUser::new_local(
&*conn, conn,
form.username.to_string(), form.username.to_string(),
form.username.to_string(), form.username.to_string(),
false, false,
@ -486,12 +522,18 @@ pub fn create(conn: DbConn, form: LenientForm<NewUserForm>, intl: I18n) -> Resul
User::hash_pass(&form.password).map_err(to_validation)?, User::hash_pass(&form.password).map_err(to_validation)?,
) )
.map_err(to_validation)?; .map_err(to_validation)?;
Ok(Redirect::to(uri!(super::session::new: m = _))) Ok(Flash::success(
Redirect::to(uri!(super::session::new: m = _)),
i18n!(
rockets.intl.catalog,
"Your account have been created. You just need to login before you can use it."
),
))
}) })
.map_err(|err| { .map_err(|err| {
render!(users::new( render!(users::new(
&(&*conn, &intl.catalog, None), &rockets.to_context(),
Instance::get_local(&*conn) Instance::get_local(conn)
.map(|i| i.open_registrations) .map(|i| i.open_registrations)
.unwrap_or(true), .unwrap_or(true),
&form, &form,

View file

@ -1,4 +1,4 @@
use plume_models::{notifications::*, users::User, Connection}; use plume_models::{notifications::*, users::User, Connection, PlumeRocket};
use rocket::http::hyper::header::{ETag, EntityTag}; use rocket::http::hyper::header::{ETag, EntityTag};
use rocket::http::{Method, Status}; use rocket::http::{Method, Status};
@ -13,7 +13,41 @@ pub use askama_escape::escape;
pub static CACHE_NAME: &str = env!("CACHE_ID"); pub static CACHE_NAME: &str = env!("CACHE_ID");
pub type BaseContext<'a> = &'a (&'a Connection, &'a Catalog, Option<User>); pub type BaseContext<'a> = &'a (
&'a Connection,
&'a Catalog,
Option<User>,
Option<(String, String)>,
);
pub trait IntoContext {
fn to_context(
&self,
) -> (
&Connection,
&Catalog,
Option<User>,
Option<(String, String)>,
);
}
impl IntoContext for PlumeRocket {
fn to_context(
&self,
) -> (
&Connection,
&Catalog,
Option<User>,
Option<(String, String)>,
) {
(
&*self.conn,
&self.intl.catalog,
self.user.clone(),
self.flash_msg.clone(),
)
}
}
#[derive(Debug)] #[derive(Debug)]
pub struct Ructe(pub Vec<u8>); pub struct Ructe(pub Vec<u8>);

View file

@ -76,15 +76,28 @@ header {
.messages { .messages {
& > * { & > * {
padding: 1em 20%; padding: 1em 20%;
margin: 0;
max-width: initial;
font-weight: bold;
} }
p.error { p.error {
color: $red; color: darken($red, 20%);
background: lighten($red, 40%); background: lighten($red, 40%);
margin: 0; margin: 0;
max-width: initial; max-width: initial;
} }
p.warning {
color: darken($yellow, 20%);
background: lighten($yellow, 40%);
}
p.success {
color: darken($green, 20%);
background: lighten($green, 40%);
}
} }
// Only enable label animations on normal screens // Only enable label animations on normal screens

View file

@ -8,6 +8,8 @@ $white: #F4F4F4;
$purple: #7765E3; $purple: #7765E3;
$lightpurple: #c2bbee; $lightpurple: #c2bbee;
$red: #E92F2F; $red: #E92F2F;
$yellow: #ffe347;
$green: #23f0c7;
// Fonts // Fonts

View file

@ -69,6 +69,11 @@
</nav> </nav>
</div> </div>
</header> </header>
<div class="messages">
@if let Some(ref message) = ctx.3 {
<p class="flash-message @message.0">@message.1</p>
}
</div>
<main> <main>
@:content() @:content()
</main> </main>