Compare commits

...

109 Commits

Author SHA1 Message Date
Kitaiti Makoto ef628aa498 (cargo-release) version {{version}} 2022-01-02 20:41:28 +09:00
Kitaiti Makoto 011bd9602d Update plume-buildenv Docker image to v0.4.0 2021-12-12 00:54:26 +09:00
Kitaiti Makoto b0745cfd82 Fix search string in release.toml 2021-12-12 00:38:22 +09:00
Kitaiti Makoto d1b1d9f507 Update translations 2021-12-12 00:01:11 +09:00
Kitaiti Makoto 742d545f1c Update po files 2021-12-11 23:57:05 +09:00
Kitaiti Makoto 67dec4df22 Merge remote-tracking branch 'origin/main' into v0.7.0 2021-12-09 14:35:10 +09:00
KitaitiMakoto 33f3bbb774 Merge pull request 'Proper scaling of the default image, when a user doesn't have custom avatar' (#965) from mareklach/Plume:proper_scaling_for_blank_user_avatar into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/965
2021-12-09 05:33:52 +00:00
mareklach 7c1df80695 Update 'assets/themes/default/_global.scss' 2021-12-06 15:15:28 +00:00
mareklach 2adbb6f74c Merge branch 'main' into proper_scaling_for_blank_user_avatar 2021-12-06 14:52:28 +00:00
mareklach 79c05e8381 Proper scaling of the default image, when a user doesn't have custom avatar 2021-12-06 14:48:05 +00:00
Kitaiti Makoto 31a1591043 Merge remote-tracking branch 'origin/main' into v0.7.0 2021-12-06 07:32:05 +09:00
KitaitiMakoto 0ede2ab3ab Merge pull request 'Fixes #936: Sign GET request' (#957) from sign-get into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/957
2021-12-05 22:13:24 +00:00
Kitaiti Makoto 43656d8e46 Create instance for test 2021-12-06 00:33:48 +09:00
Kitaiti Makoto b7cc2369a7 Allow clippy::needless_borrow on CI 2021-12-06 00:33:20 +09:00
Kitaiti Makoto 05a98175bf Assign unsed return value to underscore variable 2021-12-05 21:56:00 +09:00
Kitaiti Makoto 346a67fe1c Create local instance user on start 2021-12-05 21:34:36 +09:00
Kitaiti Makoto a22f5f2336 Add more changelogs 2021-12-05 21:20:37 +09:00
Kitaiti Makoto 55439990c6 Complete changelog 2021-12-05 21:12:50 +09:00
Kitaiti Makoto 3b0f28d061 Update po files 2021-12-05 21:12:14 +09:00
Kitaiti Makoto ac3acfb4ac Merge latest translations 2021-12-05 21:12:14 +09:00
Kitaiti Makoto d5256e9ffc Merge translations from Crowdin 2021-12-05 21:12:14 +09:00
Kitaiti Makoto 13be46445c Add changelog about signing GET requests 2021-12-05 21:10:22 +09:00
Kitaiti Makoto c67b702425 Cache LOCAL_INSTANCE_USER once 2021-12-05 20:57:10 +09:00
Kitaiti Makoto e01539ef16 Follow Clippy 2021-12-05 20:24:11 +09:00
Kitaiti Makoto de4380fd34 Cache local when creating local instance 2021-12-05 20:22:32 +09:00
Kitaiti Makoto 5651e11ba1 Add FIXME comment 2021-12-05 20:22:10 +09:00
KitaitiMakoto 5815602309 Merge pull request 'Don't shrink edit link' (#964) from edit-link-no-shrink into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/964
2021-12-05 10:38:49 +00:00
Kitaiti Makoto a0a69dfb22 Don't shrink edit link 2021-12-05 19:37:38 +09:00
Kitaiti Makoto d98132db80 Don't log unnecessary error 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 25fe2ad802 Use request::get() instead of ClientBuilder 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 48fab8ad2c Impl From for request::Error 2021-12-05 19:32:27 +09:00
Kitaiti Makoto a7d8d49faf Define request::get() function 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 388acd6738 Remove needless reference sign 2021-12-05 19:32:27 +09:00
Kitaiti Makoto d3c035aa39 Remove needless code 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 12a8d00f8e Cache local instance user for test 2021-12-05 19:32:27 +09:00
Kitaiti Makoto b9ea06a01a Don't stop even when caching local instance user 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 1e67b3c13c Create local instance user on caching if it doesn't exist 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 5a5c8bdac8 Make inbox test follow API change 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 44f9d36df1 Make request test follow API change 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 7d349c2de6 Install once_cell 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 79715ec7c7 Add once_cell to dev-dependencies for plume-common 2021-12-05 19:32:27 +09:00
Kitaiti Makoto f4d7dfb261 Sign GET request to other instances 2021-12-05 19:32:27 +09:00
Kitaiti Makoto c525410062 Create local instance user on creating instance 2021-12-05 19:32:27 +09:00
Kitaiti Makoto af5b0b961b Extract Instance::create_local_instance_user() from get_local_instance_user_uncached() 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 2f7a5cbf56 Cache local instance user on start 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 1506802c20 Implement LOCAL_INSTANCE_USER and related methods 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 897ea8e11e Change const name: LOCAL_INSTANCE_USER -> LOCAL_INSTANCE_USERNAME 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 858806149a Use concrete Error for Signer 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 0da9572627 Implement User::get_local_instance_user() 2021-12-05 19:32:27 +09:00
Kitaiti Makoto 94cc260803 Add Instance to users::Role 2021-12-05 19:32:27 +09:00
KitaitiMakoto 7198b06a33 Merge pull request 'Fix problem of PL #956' (#963) from mskf1383/Plume:main into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/963
Reviewed-by: KitaitiMakoto <kitaitimakoto@noreply@joinplu.me>
2021-12-05 10:12:48 +00:00
MohammadSaleh Kamyab 81006e1db8 Update 'assets/themes/default/_global.scss' 2021-12-02 13:16:14 +00:00
KitaitiMakoto 0f7094a70e Merge pull request 'Update crates' (#961) from update-crates into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/961
2021-11-28 00:54:35 +00:00
Kitaiti Makoto a0b661fffe Make template follow change of Rust 2021-11-28 08:48:59 +09:00
Kitaiti Makoto 4bef91f08b Follow clippy warnings 2021-11-28 08:36:27 +09:00
Kitaiti Makoto 20c17be124 Update Rust version 2021-11-28 08:13:16 +09:00
Kitaiti Makoto ae3344f318 Follow Rust and crates update 2021-11-28 08:06:29 +09:00
Kitaiti Makoto 9187e4dde9 Update crates 2021-11-28 08:06:29 +09:00
Kitaiti Makoto 89c185f819 Specify Rocket and serde_json version loosely 2021-11-28 08:06:29 +09:00
Kitaiti Makoto 09b9a37720 Update Rust version 2021-11-28 08:06:24 +09:00
KitaitiMakoto 12a8bfcf2d Merge pull request 'Fix article title overflowing on small screens' (#960) from mareklach/Plume:fix-article-title-overflow-spill into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/960
2021-11-26 19:53:40 +00:00
mareklach b2be00b125 Fix article title overflowing on small screens
Improves CSS scaling of the article title for mobile-sized screens, to prevent it spilling over.
2021-11-26 16:50:08 +00:00
KitaitiMakoto 914d394bd0 Merge pull request 'Stick serde_json versoin for plume-models' (#959) from stick-serde_json into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/959
2021-11-25 23:55:37 +00:00
Kitaiti Makoto 811db1be0e Stick serde_json versoin for plume-models 2021-11-26 08:53:55 +09:00
KitaitiMakoto cd81f042b9 Merge pull request 'Stick serde_json to < 1.0.70' (#958) from stick-serde_json into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/958
2021-11-25 23:35:31 +00:00
Kitaiti Makoto c6111fcd28 Stick serde_json to < 1.0.70 2021-11-26 08:34:38 +09:00
KitaitiMakoto 82ebdc023c Merge pull request 'Fix RTL problem in post card' (#956) from mskf1383/Plume:main into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/956
Reviewed-by: KitaitiMakoto <kitaitimakoto@noreply@joinplu.me>
2021-11-21 14:32:14 +00:00
MohammadSaleh Kamyab 7b110179a9 Update 'assets/themes/default/_global.scss' 2021-11-21 12:21:47 +00:00
MohammadSaleh Kamyab afd66ce7cb Update 'assets/themes/default/_global.scss' 2021-11-21 05:46:48 +00:00
MohammadSaleh Kamyab 9dac97045b Update 'templates/partials/post_card.rs.html' 2021-11-21 05:37:57 +00:00
KitaitiMakoto 188d4ac063 Merge pull request 'Post ap_url as valid IRI' (#947) from post-slug into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/947
2021-09-07 05:36:00 +00:00
Kitaiti Makoto 0fbefe2cdc Percent-encode Post slug on sending Activity to other instances 2021-09-07 13:31:06 +09:00
Kitaiti Makoto eedd5fe4e9 Define utility function to percent-encode for IRI 2021-09-06 17:49:10 +09:00
KitaitiMakoto 27a1a56223 Merge pull request 'Make Feature list more clear' (#946) from github-856 into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/946
2021-09-05 12:50:49 +00:00
Kitaiti Makoto 8e3322776a Merge remote-tracking branch 'origin/main' into github-856 2021-09-05 21:49:50 +09:00
KitaitiMakoto 3d4336c548 Merge pull request 'update some dependancies' (#945) from update-deps into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/945
Reviewed-by: trinity-1686a <trinity-1686a@noreply@joinplu.me>
2021-09-05 12:48:07 +00:00
Trinity Pointard 0c8c607aa4 update some dependancies 2021-09-05 14:41:36 +02:00
D5k H3h 60d6734fe2 Make Feature list more clear
Say it, when something is currently missing.
Otherwise, people will get confused.
2021-09-05 11:58:02 +02:00
KitaitiMakoto 8c372aa6fc Merge pull request 'Fixes #929 Don't stip shipped binaries' (#942) from dont-strip into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/942
2021-08-15 15:46:02 +00:00
Kitaiti Makoto d1a74ca8e6 Don't stip shipped binaries 2021-08-16 00:44:15 +09:00
KitaitiMakoto c374e0af4c Merge pull request 'Upgrade bcrypt create' (#941) from update-blowfish into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/941
2021-08-14 10:23:41 +00:00
Kitaiti Makoto 58e8569048 Install bcrypt 2021-08-14 19:20:30 +09:00
Kitaiti Makoto 83dbf2a945 Upgrade bcrypt 2021-08-14 19:20:21 +09:00
trinity-1686a d7d6d5f644 Merge pull request 'Draw side line for blockquote on start' (#933) from ahangarha/Plume:ahangarha-patch-1-blockquote-line into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/933
Reviewed-by: trinity-1686a <trinity-1686a@noreply@joinplu.me>
2021-07-13 10:16:26 +00:00
trinity-1686a 9aa9885a89 Merge pull request 'Specify rocket version' (#937) from zynnnn/Plume:fix-rocket-version into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/937
Reviewed-by: trinity-1686a <trinity-1686a@noreply@joinplu.me>
2021-07-13 10:15:53 +00:00
Trinity Pointard 7fe1e083e0 use newer pulldown-cmark 2021-07-10 13:34:13 +02:00
Tdxdxoz a946823554 Specify rocket version 2021-07-06 22:36:59 +08:00
ahangarha 3a1872c03e Draw side line for blockquote on start
By this change, the line beside blockquote would appear at start. It means if the text is in LTR language, it appears on left and if it is in RTL, the line appears on right.
2021-06-11 11:53:28 +00:00
KitaitiMakoto 5424f9110f Merge pull request 'Add changelog about change of slug' (#921) from changelog into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/921
2021-04-11 02:45:56 +00:00
Kitaiti Makoto a597816617 Add changelog about change of slug 2021-04-11 11:44:52 +09:00
KitaitiMakoto fa7a44f6bb Merge pull request 'Fix #326 and #721: Keep title in URI' (#920) from keep-title-in-uri into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/920
2021-04-10 08:27:31 +00:00
Kitaiti Makoto dfcdcc1833 Remove heck from plume and plume-models 2021-04-10 16:39:23 +09:00
Kitaiti Makoto 6345a57498 Don't modify article title for slug 2021-04-10 16:37:26 +09:00
Kitaiti Makoto 87457c0ed1 Define Post::slug() 2021-04-10 16:30:50 +09:00
KitaitiMakoto 859a1fd528 Merge pull request 'Set default RUST_LOG to info' (#919) from default-log-level into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/919
2021-04-10 07:04:53 +00:00
Kitaiti Makoto 5069aab584 Set default RUST_LOG to info 2021-04-10 15:59:15 +09:00
KitaitiMakoto 033fde38fe Merge pull request 'Extract Post::ap_url()' (#918) from ap_url into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/918
2021-04-09 08:41:04 +00:00
Kitaiti Makoto 7b2bab0f9d Extract Post::ap_url() 2021-04-09 10:55:09 +09:00
KitaitiMakoto a419ef5319 Merge pull request 'Prevent duplicated posts in 'all' timeline' (#917) from dup-timeline into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/917
2021-03-29 15:31:52 +00:00
Kitaiti Makoto f77dce9f12 Add changelog about fix to duplicated posts in all timeline 2021-03-29 23:35:31 +09:00
Kitaiti Makoto 4c2cd92f0d Prevent duplicated posts in 'all' timeline 2021-03-29 23:33:57 +09:00
KitaitiMakoto dd932e1f15 Merge pull request 'Calculate media URI properly even when MEDIA_UPLOAD_DIRECTORY configured' (#916) from media-directory into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/916
2021-03-28 18:18:14 +00:00
Kitaiti Makoto 4376810d96 Add changelog about fix of MEDIA_UPLOAD_DIRECTORY handling 2021-03-29 02:32:02 +09:00
Kitaiti Makoto c961f4751b Complete pull request number to changelog 2021-03-29 02:29:50 +09:00
Kitaiti Makoto 9e5ec0c9df Calculate media URI properly even when MEDIA_UPLOAD_DIRECTORY configured 2021-03-29 02:29:15 +09:00
KitaitiMakoto 112c034e27 Merge pull request 'Update Post.ap_url when published' (#915) from update-ap-url into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/915
2021-03-28 17:27:45 +00:00
Kitaiti Makoto 664a3ddeea Add changelog about update of ap_url 2021-03-29 02:26:30 +09:00
Kitaiti Makoto 2ffd357d95 Update Post.ap_url when published 2021-03-29 01:38:28 +09:00
KitaitiMakoto 2bc4a13964 Merge pull request 'Add migration to add index to medias.file_path for SQLite3' (#914) from upsert-sqlite into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/914
2021-03-28 14:22:10 +00:00
145 changed files with 7166 additions and 7655 deletions
+1 -1
View File
@@ -63,7 +63,7 @@ commands:
type: boolean
default: false
steps:
- run: cargo clippy <<^parameters.no_feature>>--no-default-features --features="${FEATURES}"<</parameters.no_feature>> --release -p <<parameters.package>> -- -D warnings
- run: cargo clippy <<^parameters.no_feature>>--no-default-features --features="${FEATURES}"<</parameters.no_feature>> --release -p <<parameters.package>> -- -D warnings -A clippy::needless_borrow
run_with_coverage:
description: run command with environment for coverage
+1 -1
View File
@@ -11,7 +11,7 @@ RUN apt update &&\
rm -rf /var/lib/apt/lists/*
#install and configure rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2021-01-15 -y &&\
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2021-11-27 -y &&\
rustup component add rustfmt clippy &&\
rustup component add rust-std --target wasm32-unknown-unknown
+1 -1
View File
@@ -16,7 +16,7 @@ DATABASE_URL=postgres://plume:plume@localhost/plume
BASE_URL=plu.me
# Log level for each crate
RUST_LOG=warn,html5ever=warn,hyper=warn,tantivy=warn
RUST_LOG=info
# The secret key for private cookies and CSRF protection
# You can generate one with `openssl rand -base64 32`
+15 -2
View File
@@ -4,6 +4,8 @@
## [Unreleased] - ReleaseDate
## [[0.7.0]] - 2022-01-02
### Added
- Allow `dir` attributes for LtoR text in RtoL document (#860)
@@ -11,14 +13,18 @@
- Proxy support (#829)
- Riker a actor system library (#870)
- (request-target) and Host header in HTTP Signature (#872)
- Default log levels for RUST_LOG (#885, #886, #919)
### Changed
- Upgrade some dependent crates (#858)
- Use tracing crate (#868)
- Update Rust version to nightly-2021-01-15 (#878)
- Update Rust version to nightly-2021-11-27 (#961)
- Upgrade Tantivy to 0.13.3 and lindera-tantivy to 0.7.1 (#878)
- Run searcher on actor system (#870)
- Extract a function to calculate posts' ap_url and share it with some places (#918)
- Use article title as its slug instead of capitalizing and inserting hyphens (#920)
- Sign GET requests to other instances (#957)
### Fixed
@@ -26,6 +32,12 @@
- Menu animation not opening on iOS (#876, #897)
- Make actors subscribe to channel once (#913)
- Upsert posts and media instead of trying to insert and fail (#912)
- Update post's ActivityPub id when published by update (#915)
- Calculate media URI properly even when MEDIA_UPLOAD_DIRECTORY configured (#916)
- Prevent duplicated posts in 'all' timeline (#917)
- Draw side line for blockquote on start (#933)
- Fix URIs of posts on Mastodon (#947)
- Place edit link proper position (#956, #963, #964)
## [[0.6.0]] - 2020-12-29
@@ -206,7 +218,8 @@
- Ability to create multiple blogs
<!-- next-url -->
[Unreleased]: https://github.com/Plume-org/Plume/compare/0.6.0...HEAD
[Unreleased]: https://github.com/Plume-org/Plume/compare/0.7.0...HEAD
[[0.7.0]]: https://github.com/Plume-org/Plume/compare/0.6.0...0.7.0
[[0.6.0]]: https://github.com/Plume-org/Plume/compare/0.5.0...0.6.0
[0.5.0]: https://github.com/Plume-org/Plume/compare/0.4.0-alpha-4...0.5.0
[0.4.0]: https://github.com/Plume-org/Plume/compare/0.3.0-alpha-2...0.4.0-alpha-4
Generated
+949 -796
View File
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -1,7 +1,7 @@
[package]
authors = ["Plume contributors"]
name = "plume"
version = "0.6.1-dev"
version = "0.7.0"
repository = "https://github.com/Plume-org/Plume"
edition = "2018"
@@ -15,7 +15,6 @@ gettext = { git = "https://github.com/Plume-org/gettext/", rev = "294c54d74c699f
gettext-macros = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
gettext-utils = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
guid-create = "0.1"
heck = "0.3.0"
lettre = "0.9.2"
lettre_email = "0.9.2"
num_cpus = "1.10"
@@ -25,7 +24,7 @@ rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa
rpassword = "4.0"
scheduled-thread-pool = "0.2.2"
serde = "1.0"
serde_json = "1.0"
serde_json = "1.0.70"
shrinkwraprs = "0.2.1"
validator = "0.8"
validator_derive = "0.8"
+1 -1
View File
@@ -30,7 +30,7 @@ A lot of features are still missing, but what is already here should be quite st
- **Media management**: you can upload pictures to illustrate your articles, but also audio files if you host a podcast, and manage them all from Plume.
- **Federation**: Plume is part of a network of interconnected websites called the Fediverse. Each of these websites (often called *instances*) have their own
rules and thematics, but they can all communicate with each other.
- **Collaborative writing**: invite other people to your blogs, and write articles together.
- **Collaborative writing**: invite other people to your blogs, and write articles together. (Not implemented yet, but will be in 1.0)
## Get involved
+1 -1
View File
@@ -98,7 +98,7 @@ main article {
}
blockquote {
border-left: 5px solid $gray;
border-inline-start: 5px solid $gray;
margin: 1em auto;
padding: 0em 2em;
}
+13 -5
View File
@@ -229,6 +229,10 @@ p.error {
opacity: 0.9;
}
}
header {
display: flex;
}
h3 {
flex-grow: 1;
@@ -236,7 +240,9 @@ p.error {
font-family: $playfair;
font-size: 1.75em;
font-weight: normal;
line-height: 1.75;
line-height: 1.10;
display: inline-block;
position: relative;
a {
display: block;
transition: color 0.1s ease-in;
@@ -247,7 +253,8 @@ p.error {
}
.controls {
float: right;
flex-shrink: 0;
text-align: end;
.button {
margin-top: 0;
@@ -261,7 +268,7 @@ p.error {
font-family: $lora;
font-size: 1em;
line-height: 1.25;
text-align: left;
text-align: initial;
overflow: hidden;
}
}
@@ -465,9 +472,10 @@ figure {
/// Avatars
.avatar {
background-position: center;
background-position: center !important;
background-size: cover;
border-radius: 100%;
flex-shrink: 0;
&.small {
width: 50px;
@@ -603,4 +611,4 @@ code {
.function{
color:inherit;
}
}
}
+5 -5
View File
@@ -41,9 +41,9 @@ fn main() {
.expect("compile templates");
compile_themes().expect("Theme compilation error");
recursive_copy(&Path::new("assets").join("icons"), &Path::new("static"))
recursive_copy(&Path::new("assets").join("icons"), Path::new("static"))
.expect("Couldn't copy icons");
recursive_copy(&Path::new("assets").join("images"), &Path::new("static"))
recursive_copy(&Path::new("assets").join("images"), Path::new("static"))
.expect("Couldn't copy images");
create_dir_all(&Path::new("static").join("media")).expect("Couldn't init media directory");
@@ -97,12 +97,12 @@ fn compile_theme(path: &Path, out_dir: &Path) -> std::io::Result<()> {
.components()
.skip_while(|c| *c != Component::Normal(OsStr::new("themes")))
.skip(1)
.filter_map(|c| {
.map(|c| {
c.as_os_str()
.to_str()
.unwrap_or_default()
.splitn(2, '.')
.next()
.split_once('.')
.map_or(c.as_os_str().to_str().unwrap_or_default(), |x| x.0)
})
.collect::<Vec<_>>()
.join("-");
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-api"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Plume contributors"]
edition = "2018"
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-cli"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Plume contributors"]
edition = "2018"
+2
View File
@@ -68,4 +68,6 @@ fn new<'a>(args: &ArgMatches<'a>, conn: &Connection) {
},
)
.expect("Couldn't save instance");
Instance::cache_local(conn);
Instance::create_local_instance_user(conn).expect("Couldn't save local instance user");
}
+1 -1
View File
@@ -25,7 +25,7 @@ fn main() {
e => e.map(|_| ()).unwrap(),
}
let conn = Conn::establish(CONFIG.database_url.as_str());
let _ = conn.as_ref().map(|conn| Instance::cache_local(conn));
let _ = conn.as_ref().map(Instance::cache_local);
match matches.subcommand() {
("instance", Some(args)) => {
+5 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-common"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Plume contributors"]
edition = "2018"
@@ -18,7 +18,7 @@ rocket = "0.4.6"
reqwest = { version = "0.9", features = ["socks"] }
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
serde_json = "1.0.70"
shrinkwraprs = "0.3.0"
syntect = "4.5.0"
tokio = "0.1.22"
@@ -33,3 +33,6 @@ version = "0.4"
default-features = false
git = "https://git.joinplu.me/Plume/pulldown-cmark"
branch = "bidi-plume"
[dev-dependencies]
once_cell = "1.5.2"
+174 -31
View File
@@ -1,6 +1,8 @@
use reqwest::header::{HeaderValue, ACCEPT};
use reqwest;
use std::fmt::Debug;
use super::{request, sign::Signer};
/// Represents an ActivityPub inbox.
///
/// It routes an incoming Activity through the registered handlers.
@@ -10,7 +12,50 @@ use std::fmt::Debug;
/// ```rust
/// # extern crate activitypub;
/// # use activitypub::{actor::Person, activity::{Announce, Create}, object::Note};
/// # use openssl::{hash::MessageDigest, pkey::PKey, rsa::Rsa};
/// # use once_cell::sync::Lazy;
/// # use plume_common::activity_pub::inbox::*;
/// # use plume_common::activity_pub::sign::{gen_keypair, Error as SignError, Result as SignResult, Signer};
/// #
/// # static MY_SIGNER: Lazy<MySigner> = Lazy::new(|| MySigner::new());
/// #
/// # struct MySigner {
/// # public_key: String,
/// # private_key: String,
/// # }
/// #
/// # impl MySigner {
/// # fn new() -> Self {
/// # let (pub_key, priv_key) = gen_keypair();
/// # Self {
/// # public_key: String::from_utf8(pub_key).unwrap(),
/// # private_key: String::from_utf8(priv_key).unwrap(),
/// # }
/// # }
/// # }
/// #
/// # impl Signer for MySigner {
/// # fn get_key_id(&self) -> String {
/// # "mysigner".into()
/// # }
/// #
/// # fn sign(&self, to_sign: &str) -> SignResult<Vec<u8>> {
/// # let key = PKey::from_rsa(Rsa::private_key_from_pem(self.private_key.as_ref()).unwrap())
/// # .unwrap();
/// # let mut signer = openssl::sign::Signer::new(MessageDigest::sha256(), &key).unwrap();
/// # signer.update(to_sign.as_bytes()).unwrap();
/// # signer.sign_to_vec().map_err(|_| SignError())
/// # }
/// #
/// # fn verify(&self, data: &str, signature: &[u8]) -> SignResult<bool> {
/// # let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap())
/// # .unwrap();
/// # let mut verifier = openssl::sign::Verifier::new(MessageDigest::sha256(), &key).unwrap();
/// # verifier.update(data.as_bytes()).unwrap();
/// # verifier.verify(&signature).map_err(|_| SignError())
/// # }
/// # }
/// #
/// # struct User;
/// # impl FromId<()> for User {
/// # type Error = ();
@@ -23,6 +68,10 @@ use std::fmt::Debug;
/// # fn from_activity(_: &(), obj: Person) -> Result<Self, Self::Error> {
/// # Ok(User)
/// # }
/// #
/// # fn get_sender() -> &'static dyn Signer {
/// # &*MY_SIGNER
/// # }
/// # }
/// # impl AsActor<&()> for User {
/// # fn get_inbox_url(&self) -> String {
@@ -42,6 +91,10 @@ use std::fmt::Debug;
/// # fn from_activity(_: &(), obj: Note) -> Result<Self, Self::Error> {
/// # Ok(Message)
/// # }
/// #
/// # fn get_sender() -> &'static dyn Signer {
/// # &*MY_SIGNER
/// # }
/// # }
/// # impl AsObject<User, Create, &()> for Message {
/// # type Error = ();
@@ -207,7 +260,7 @@ where
};
// Handle the activity
match obj.activity(ctx, actor, &act_id) {
match obj.activity(ctx, actor, act_id) {
Ok(res) => Inbox::Handled(res.into()),
Err(e) => Inbox::Failed(e),
}
@@ -311,35 +364,16 @@ pub trait FromId<C>: Sized {
id: &str,
proxy: Option<reqwest::Proxy>,
) -> Result<Self::Object, (Option<serde_json::Value>, Self::Error)> {
if let Some(proxy) = proxy {
reqwest::ClientBuilder::new().proxy(proxy)
} else {
reqwest::ClientBuilder::new()
}
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()
.map_err(|_| (None, InboxError::DerefError.into()))?
.get(id)
.header(
ACCEPT,
HeaderValue::from_str(
&super::ap_accept_header()
.into_iter()
.collect::<Vec<_>>()
.join(", "),
)
.map_err(|_| (None, InboxError::DerefError.into()))?,
)
.send()
.map_err(|_| (None, InboxError::DerefError))
.and_then(|mut r| {
let json: serde_json::Value = r
.json()
.map_err(|_| (None, InboxError::InvalidObject(None)))?;
serde_json::from_value(json.clone())
.map_err(|_| (Some(json), InboxError::InvalidObject(None)))
})
.map_err(|(json, e)| (json, e.into()))
request::get(id, Self::get_sender(), proxy)
.map_err(|_| (None, InboxError::DerefError))
.and_then(|mut r| {
let json: serde_json::Value = r
.json()
.map_err(|_| (None, InboxError::InvalidObject(None)))?;
serde_json::from_value(json.clone())
.map_err(|_| (Some(json), InboxError::InvalidObject(None)))
})
.map_err(|(json, e)| (json, e.into()))
}
/// Builds a `Self` from its ActivityPub representation
@@ -347,6 +381,8 @@ pub trait FromId<C>: Sized {
/// Tries to find a `Self` with a given ID (`id`), using `ctx` (a database)
fn from_db(ctx: &C, id: &str) -> Result<Self, Self::Error>;
fn get_sender() -> &'static dyn Signer;
}
/// Should be implemented by anything representing an ActivityPub actor.
@@ -385,6 +421,49 @@ pub trait AsActor<C> {
/// # extern crate activitypub;
/// # use activitypub::{activity::Create, actor::Person, object::Note};
/// # use plume_common::activity_pub::inbox::{AsActor, AsObject, FromId};
/// # use plume_common::activity_pub::sign::{gen_keypair, Error as SignError, Result as SignResult, Signer};
/// # use openssl::{hash::MessageDigest, pkey::PKey, rsa::Rsa};
/// # use once_cell::sync::Lazy;
/// #
/// # static MY_SIGNER: Lazy<MySigner> = Lazy::new(|| MySigner::new());
/// #
/// # struct MySigner {
/// # public_key: String,
/// # private_key: String,
/// # }
/// #
/// # impl MySigner {
/// # fn new() -> Self {
/// # let (pub_key, priv_key) = gen_keypair();
/// # Self {
/// # public_key: String::from_utf8(pub_key).unwrap(),
/// # private_key: String::from_utf8(priv_key).unwrap(),
/// # }
/// # }
/// # }
/// #
/// # impl Signer for MySigner {
/// # fn get_key_id(&self) -> String {
/// # "mysigner".into()
/// # }
/// #
/// # fn sign(&self, to_sign: &str) -> SignResult<Vec<u8>> {
/// # let key = PKey::from_rsa(Rsa::private_key_from_pem(self.private_key.as_ref()).unwrap())
/// # .unwrap();
/// # let mut signer = openssl::sign::Signer::new(MessageDigest::sha256(), &key).unwrap();
/// # signer.update(to_sign.as_bytes()).unwrap();
/// # signer.sign_to_vec().map_err(|_| SignError())
/// # }
/// #
/// # fn verify(&self, data: &str, signature: &[u8]) -> SignResult<bool> {
/// # let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap())
/// # .unwrap();
/// # let mut verifier = openssl::sign::Verifier::new(MessageDigest::sha256(), &key).unwrap();
/// # verifier.update(data.as_bytes()).unwrap();
/// # verifier.verify(&signature).map_err(|_| SignError())
/// # }
/// # }
/// #
/// # struct Account;
/// # impl FromId<()> for Account {
/// # type Error = ();
@@ -397,6 +476,10 @@ pub trait AsActor<C> {
/// # fn from_activity(_: &(), obj: Person) -> Result<Self, Self::Error> {
/// # Ok(Account)
/// # }
/// #
/// # fn get_sender() -> &'static dyn Signer {
/// # &*MY_SIGNER
/// # }
/// # }
/// # impl AsActor<()> for Account {
/// # fn get_inbox_url(&self) -> String {
@@ -420,6 +503,10 @@ pub trait AsActor<C> {
/// fn from_activity(_: &(), obj: Note) -> Result<Self, Self::Error> {
/// Ok(Message { text: obj.object_props.content_string().map_err(|_| ())? })
/// }
///
/// fn get_sender() -> &'static dyn Signer {
/// &*MY_SIGNER
/// }
/// }
///
/// impl AsObject<Account, Create, ()> for Message {
@@ -459,7 +546,51 @@ where
#[cfg(test)]
mod tests {
use super::*;
use crate::activity_pub::sign::{
gen_keypair, Error as SignError, Result as SignResult, Signer,
};
use activitypub::{activity::*, actor::Person, object::Note};
use once_cell::sync::Lazy;
use openssl::{hash::MessageDigest, pkey::PKey, rsa::Rsa};
static MY_SIGNER: Lazy<MySigner> = Lazy::new(|| MySigner::new());
struct MySigner {
public_key: String,
private_key: String,
}
impl MySigner {
fn new() -> Self {
let (pub_key, priv_key) = gen_keypair();
Self {
public_key: String::from_utf8(pub_key).unwrap(),
private_key: String::from_utf8(priv_key).unwrap(),
}
}
}
impl Signer for MySigner {
fn get_key_id(&self) -> String {
"mysigner".into()
}
fn sign(&self, to_sign: &str) -> SignResult<Vec<u8>> {
let key = PKey::from_rsa(Rsa::private_key_from_pem(self.private_key.as_ref()).unwrap())
.unwrap();
let mut signer = openssl::sign::Signer::new(MessageDigest::sha256(), &key).unwrap();
signer.update(to_sign.as_bytes()).unwrap();
signer.sign_to_vec().map_err(|_| SignError())
}
fn verify(&self, data: &str, signature: &[u8]) -> SignResult<bool> {
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap())
.unwrap();
let mut verifier = openssl::sign::Verifier::new(MessageDigest::sha256(), &key).unwrap();
verifier.update(data.as_bytes()).unwrap();
verifier.verify(&signature).map_err(|_| SignError())
}
}
struct MyActor;
impl FromId<()> for MyActor {
@@ -473,6 +604,10 @@ mod tests {
fn from_activity(_: &(), _obj: Person) -> Result<Self, Self::Error> {
Ok(MyActor)
}
fn get_sender() -> &'static dyn Signer {
&*MY_SIGNER
}
}
impl AsActor<&()> for MyActor {
@@ -497,6 +632,10 @@ mod tests {
fn from_activity(_: &(), _obj: Note) -> Result<Self, Self::Error> {
Ok(MyObject)
}
fn get_sender() -> &'static dyn Signer {
&*MY_SIGNER
}
}
impl AsObject<MyActor, Create, &()> for MyObject {
type Error = ();
@@ -601,6 +740,10 @@ mod tests {
fn from_activity(_: &(), _obj: Person) -> Result<Self, Self::Error> {
Err(())
}
fn get_sender() -> &'static dyn Signer {
&*MY_SIGNER
}
}
impl AsActor<&()> for FailingActor {
fn get_inbox_url(&self) -> String {
+1 -1
View File
@@ -145,7 +145,7 @@ where
warn!("Inbox doesn't have host: {:?}", &inbox);
continue;
};
let host_header_value = HeaderValue::from_str(&url.host_str().expect("Unreachable"));
let host_header_value = HeaderValue::from_str(url.host_str().expect("Unreachable"));
if host_header_value.is_err() {
warn!("Header value is invalid: {:?}", url.host_str());
continue;
+55 -9
View File
@@ -1,6 +1,11 @@
use chrono::{offset::Utc, DateTime};
use openssl::hash::{Hasher, MessageDigest};
use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE, DATE, USER_AGENT};
use reqwest::{
header::{
HeaderMap, HeaderValue, InvalidHeaderValue, ACCEPT, CONTENT_TYPE, DATE, HOST, USER_AGENT,
},
ClientBuilder, Proxy, Response, Url, UrlError,
};
use std::ops::Deref;
use std::time::SystemTime;
use tracing::warn;
@@ -13,6 +18,24 @@ const PLUME_USER_AGENT: &str = concat!("Plume/", env!("CARGO_PKG_VERSION"));
#[derive(Debug)]
pub struct Error();
impl From<UrlError> for Error {
fn from(_err: UrlError) -> Self {
Error()
}
}
impl From<InvalidHeaderValue> for Error {
fn from(_err: InvalidHeaderValue) -> Self {
Error()
}
}
impl From<reqwest::Error> for Error {
fn from(_err: reqwest::Error) -> Self {
Error()
}
}
pub struct Digest(String);
impl Digest {
@@ -118,8 +141,8 @@ type Path<'a> = &'a str;
type Query<'a> = &'a str;
type RequestTarget<'a> = (Method<'a>, Path<'a>, Option<Query<'a>>);
pub fn signature<S: Signer>(
signer: &S,
pub fn signature(
signer: &dyn Signer,
headers: &HeaderMap,
request_target: RequestTarget,
) -> Result<HeaderValue, Error> {
@@ -164,10 +187,35 @@ pub fn signature<S: Signer>(
)).map_err(|_| Error())
}
pub fn get(url_str: &str, sender: &dyn Signer, proxy: Option<Proxy>) -> Result<Response, Error> {
let mut headers = headers();
let url = Url::parse(url_str)?;
if !url.has_host() {
return Err(Error());
}
let host_header_value = HeaderValue::from_str(url.host_str().expect("Unreachable"))?;
headers.insert(HOST, host_header_value);
if let Some(proxy) = proxy {
ClientBuilder::new().proxy(proxy)
} else {
ClientBuilder::new()
}
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()?
.get(url_str)
.headers(headers.clone())
.header(
"Signature",
signature(sender, &headers, ("get", url.path(), url.query()))?,
)
.send()
.map_err(|_| Error())
}
#[cfg(test)]
mod tests {
use super::{signature, Error};
use crate::activity_pub::sign::{gen_keypair, Signer};
use super::signature;
use crate::activity_pub::sign::{gen_keypair, Error, Result, Signer};
use openssl::{hash::MessageDigest, pkey::PKey, rsa::Rsa};
use reqwest::header::HeaderMap;
@@ -187,13 +235,11 @@ mod tests {
}
impl Signer for MySigner {
type Error = Error;
fn get_key_id(&self) -> String {
"mysigner".into()
}
fn sign(&self, to_sign: &str) -> Result<Vec<u8>, Self::Error> {
fn sign(&self, to_sign: &str) -> Result<Vec<u8>> {
let key = PKey::from_rsa(Rsa::private_key_from_pem(self.private_key.as_ref()).unwrap())
.unwrap();
let mut signer = openssl::sign::Signer::new(MessageDigest::sha256(), &key).unwrap();
@@ -201,7 +247,7 @@ mod tests {
signer.sign_to_vec().map_err(|_| Error())
}
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool, Self::Error> {
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool> {
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref()).unwrap())
.unwrap();
let mut verifier = openssl::sign::Verifier::new(MessageDigest::sha256(), &key).unwrap();
+12 -7
View File
@@ -19,20 +19,25 @@ pub fn gen_keypair() -> (Vec<u8>, Vec<u8>) {
#[derive(Debug)]
pub struct Error();
pub type Result<T> = std::result::Result<T, Error>;
impl From<openssl::error::ErrorStack> for Error {
fn from(_: openssl::error::ErrorStack) -> Self {
Self()
}
}
pub trait Signer {
type Error;
fn get_key_id(&self) -> String;
/// Sign some data with the signer keypair
fn sign(&self, to_sign: &str) -> Result<Vec<u8>, Self::Error>;
fn sign(&self, to_sign: &str) -> Result<Vec<u8>>;
/// Verify if the signature is valid
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool, Self::Error>;
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool>;
}
pub trait Signable {
fn sign<T>(&mut self, creator: &T) -> Result<&mut Self, Error>
fn sign<T>(&mut self, creator: &T) -> Result<&mut Self>
where
T: Signer;
fn verify<T>(self, creator: &T) -> bool
@@ -46,7 +51,7 @@ pub trait Signable {
}
impl Signable for serde_json::Value {
fn sign<T: Signer>(&mut self, creator: &T) -> Result<&mut serde_json::Value, Error> {
fn sign<T: Signer>(&mut self, creator: &T) -> Result<&mut serde_json::Value> {
let creation_date = Utc::now().to_rfc3339();
let mut options = json!({
"type": "RsaSignature2017",
@@ -182,7 +187,7 @@ pub fn verify_http_headers<S: Signer + ::std::fmt::Debug>(
}
let digest = all_headers.get_one("digest").unwrap_or("");
let digest = request::Digest::from_header(digest);
if !digest.map(|d| d.verify_header(&data)).unwrap_or(false) {
if !digest.map(|d| d.verify_header(data)).unwrap_or(false) {
// signature was valid, but body content does not match its digest
return SignatureValidity::Invalid;
}
+72 -6
View File
@@ -27,6 +27,59 @@ pub fn make_actor_id(name: &str) -> String {
.collect()
}
/**
* Percent-encode characters which are not allowed in IRI path segments.
*
* Intended to be used for generating Post ap_url.
*/
pub fn iri_percent_encode_seg(segment: &str) -> String {
segment.chars().map(iri_percent_encode_seg_char).collect()
}
pub fn iri_percent_encode_seg_char(c: char) -> String {
if c.is_alphanumeric() {
c.to_string()
} else {
match c {
'-'
| '.'
| '_'
| '~'
| '\u{A0}'..='\u{D7FF}'
| '\u{20000}'..='\u{2FFFD}'
| '\u{30000}'..='\u{3FFFD}'
| '\u{40000}'..='\u{4FFFD}'
| '\u{50000}'..='\u{5FFFD}'
| '\u{60000}'..='\u{6FFFD}'
| '\u{70000}'..='\u{7FFFD}'
| '\u{80000}'..='\u{8FFFD}'
| '\u{90000}'..='\u{9FFFD}'
| '\u{A0000}'..='\u{AFFFD}'
| '\u{B0000}'..='\u{BFFFD}'
| '\u{C0000}'..='\u{CFFFD}'
| '\u{D0000}'..='\u{DFFFD}'
| '\u{E0000}'..='\u{EFFFD}'
| '!'
| '$'
| '&'
| '\''
| '('
| ')'
| '*'
| '+'
| ','
| ';'
| '='
| ':'
| '@' => c.to_string(),
_ => {
let s = c.to_string();
Uri::percent_encode(&s).to_string()
}
}
}
}
/**
* Redirects to the login page with a given message.
*
@@ -88,13 +141,13 @@ fn highlight_code<'a>(
unreachable!();
};
let syntax_set = SyntaxSet::load_defaults_newlines();
let syntax = syntax_set.find_syntax_by_token(&lang).unwrap_or_else(|| {
let syntax = syntax_set.find_syntax_by_token(lang).unwrap_or_else(|| {
syntax_set
.find_syntax_by_name(&lang)
.find_syntax_by_name(lang)
.unwrap_or_else(|| syntax_set.find_syntax_plain_text())
});
let mut html = ClassedHTMLGenerator::new_with_class_style(
&syntax,
syntax,
&syntax_set,
ClassStyle::Spaced,
);
@@ -281,16 +334,15 @@ pub fn md_to_html<'a>(
text_acc.push(c)
}
let mention = text_acc;
let short_mention = mention.splitn(1, '@').next().unwrap_or("");
let link = Tag::Link(
LinkType::Inline,
format!("{}@/{}/", base_url, &mention).into(),
short_mention.to_owned().into(),
mention.clone().into(),
);
mentions.push(mention.clone());
events.push(Event::Start(link.clone()));
events.push(Event::Text(format!("@{}", &short_mention).into()));
events.push(Event::Text(format!("@{}", &mention).into()));
events.push(Event::End(link));
(
@@ -476,6 +528,20 @@ mod tests {
}
}
#[test]
fn test_iri_percent_encode_seg() {
assert_eq!(
&iri_percent_encode_seg("including whitespace"),
"including%20whitespace"
);
assert_eq!(&iri_percent_encode_seg("%20"), "%2520");
assert_eq!(&iri_percent_encode_seg("é"), "é");
assert_eq!(
&iri_percent_encode_seg("空白入り 日本語"),
"空白入り%20日本語"
);
}
#[test]
fn test_inline() {
assert_eq!(
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-front"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Plume contributors"]
edition = "2018"
+20 -14
View File
@@ -54,11 +54,6 @@ pub enum EditorError {
DOMError,
}
impl From<std::option::NoneError> for EditorError {
fn from(_: std::option::NoneError) -> Self {
EditorError::NoneError
}
}
const AUTOSAVE_DEBOUNCE_TIME: i32 = 5000;
#[derive(Serialize, Deserialize)]
struct AutosaveInformation {
@@ -198,7 +193,7 @@ fn clear_autosave() {
.unwrap()
.remove_item(&get_autosave_id())
.unwrap();
console::log_1(&&format!("Saved to {}", &get_autosave_id()).into());
console::log_1(&format!("Saved to {}", &get_autosave_id()).into());
}
type TimeoutHandle = i32;
lazy_static! {
@@ -366,7 +361,9 @@ fn init_editor() -> Result<(), EditorError> {
return Ok(());
}
let old_ed = old_ed.unwrap();
let old_title = document().get_element_by_id("plume-editor-title")?;
let old_title = document()
.get_element_by_id("plume-editor-title")
.ok_or(EditorError::NoneError)?;
old_ed
.dyn_ref::<HtmlElement>()
.unwrap()
@@ -434,7 +431,8 @@ fn init_editor() -> Result<(), EditorError> {
bg.class_list().add_1("show").unwrap();
})) as Box<dyn FnMut(MouseEvent)>);
document()
.get_element_by_id("publish")?
.get_element_by_id("publish")
.ok_or(EditorError::NoneError)?
.add_event_listener_with_callback("click", show_popup.as_ref().unchecked_ref())
.map_err(|_| EditorError::DOMError)?;
show_popup.forget();
@@ -528,8 +526,14 @@ fn init_popup(
cover_label
.set_attribute("for", "cover")
.map_err(|_| EditorError::DOMError)?;
let cover = document.get_element_by_id("cover")?;
cover.parent_element()?.remove_child(&cover).ok();
let cover = document
.get_element_by_id("cover")
.ok_or(EditorError::NoneError)?;
cover
.parent_element()
.ok_or(EditorError::NoneError)?
.remove_child(&cover)
.ok();
popup
.append_child(&cover_label)
.map_err(|_| EditorError::DOMError)?;
@@ -554,7 +558,7 @@ fn init_popup(
draft.set_checked(draft_checkbox.checked());
draft_label
.append_child(&draft)
.append_child(draft)
.map_err(|_| EditorError::DOMError)?;
draft_label
.append_child(&document.create_text_node(&i18n!(CATALOG, "This is a draft")))
@@ -620,11 +624,12 @@ fn init_popup(
.map_err(|_| EditorError::DOMError)?;
callback.forget();
popup
.append_child(&button)
.append_child(button)
.map_err(|_| EditorError::DOMError)?;
document
.body()?
.body()
.ok_or(EditorError::NoneError)?
.append_child(&popup)
.map_err(|_| EditorError::DOMError)?;
Ok(popup)
@@ -641,7 +646,8 @@ fn init_popup_bg() -> Result<Element, EditorError> {
.map_err(|_| EditorError::DOMError)?;
document()
.body()?
.body()
.ok_or(EditorError::NoneError)?
.append_child(&bg)
.map_err(|_| EditorError::DOMError)?;
let callback = Closure::wrap(Box::new(|_| close_popup()) as Box<dyn FnMut(MouseEvent)>);
+3 -3
View File
@@ -1,5 +1,5 @@
#![recursion_limit = "128"]
#![feature(decl_macro, proc_macro_hygiene, try_trait)]
#![feature(decl_macro, proc_macro_hygiene)]
#[macro_use]
extern crate gettext_macros;
@@ -61,7 +61,7 @@ lazy_static! {
static ref CATALOG: gettext::Catalog = {
let catalogs = include_i18n!();
let lang = window().unwrap().navigator().language().unwrap();
let lang = lang.splitn(2, '-').next().unwrap_or("en");
let lang = lang.split_once('-').map_or("en", |x| x.0);
let english_position = catalogs
.iter()
@@ -85,7 +85,7 @@ pub fn main() -> Result<(), JsValue> {
menu();
search();
editor::init()
.map_err(|e| console::error_1(&&format!("Editor error: {:?}", e).into()))
.map_err(|e| console::error_1(&format!("Editor error: {:?}", e).into()))
.ok();
Ok(())
}
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-macro"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Trinity Pointard <trinity.pointard@insa-rennes.fr>"]
edition = "2018"
description = "Plume procedural macros"
+2 -2
View File
@@ -58,7 +58,7 @@ pub fn import_migrations(input: TokenStream) -> TokenStream {
(name, up_sql, down_sql)
})
.collect::<Vec<_>>();
let migrations_name = migrations.iter().map(|m| &m.0).collect::<Vec<_>>();
let migrations_name = migrations.iter().map(|m| &m.0);
let migrations_up = migrations
.iter()
.map(|m| m.1.as_str())
@@ -103,7 +103,7 @@ fn file_to_migration(file: &str) -> TokenStream2 {
acc.push('\n');
}
} else if let Some(acc_str) = line.strip_prefix("--#!") {
acc.push_str(&acc_str);
acc.push_str(acc_str);
acc.push('\n');
} else if line.starts_with("--") {
continue;
+3 -4
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-models"
version = "0.6.1-dev"
version = "0.7.0"
authors = ["Plume contributors"]
edition = "2018"
@@ -8,9 +8,8 @@ edition = "2018"
activitypub = "0.1.1"
ammonia = "2.1.1"
askama_escape = "0.1"
bcrypt = "0.5"
bcrypt = "0.10.1"
guid-create = "0.1"
heck = "0.3.0"
itertools = "0.8.0"
lazy_static = "1.0"
ldap3 = "0.7.1"
@@ -22,7 +21,7 @@ reqwest = "0.9"
scheduled-thread-pool = "0.2.2"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
serde_json = "1.0.70"
tantivy = "0.13.3"
url = "2.1"
walkdir = "2.2"
+12 -8
View File
@@ -86,14 +86,18 @@ impl<'a, 'r> FromRequest<'a, 'r> for ApiToken {
}
let mut parsed_header = headers[0].split(' ');
let auth_type = parsed_header.next().map_or_else(
|| Outcome::Failure((Status::BadRequest, TokenError::NoType)),
Outcome::Success,
)?;
let val = parsed_header.next().map_or_else(
|| Outcome::Failure((Status::BadRequest, TokenError::NoValue)),
Outcome::Success,
)?;
let auth_type = parsed_header
.next()
.map_or_else::<rocket::Outcome<&str, _, ()>, _, _>(
|| Outcome::Failure((Status::BadRequest, TokenError::NoType)),
Outcome::Success,
)?;
let val = parsed_header
.next()
.map_or_else::<rocket::Outcome<&str, _, ()>, _, _>(
|| Outcome::Failure((Status::BadRequest, TokenError::NoValue)),
Outcome::Success,
)?;
if auth_type == "Bearer" {
let conn = request
+1 -1
View File
@@ -28,7 +28,7 @@ impl BlocklistedEmail {
pub fn delete_entries(conn: &Connection, ids: Vec<i32>) -> Result<bool> {
use diesel::delete;
for i in ids {
let be: BlocklistedEmail = BlocklistedEmail::find_by_id(&conn, i)?;
let be: BlocklistedEmail = BlocklistedEmail::find_by_id(conn, i)?;
delete(&be).execute(conn)?;
}
Ok(true)
+26 -13
View File
@@ -149,7 +149,15 @@ impl Blog {
.into_iter()
.find(|l| l.mime_type == Some(String::from("application/activity+json")))
.ok_or(Error::Webfinger)
.and_then(|l| Blog::from_id(conn, &l.href?, None, CONFIG.proxy()).map_err(|(_, e)| e))
.and_then(|l| {
Blog::from_id(
conn,
&l.href.ok_or(Error::MissingApProperty)?,
None,
CONFIG.proxy(),
)
.map_err(|(_, e)| e)
})
}
pub fn to_activity(&self, conn: &Connection) -> Result<CustomGroup> {
@@ -236,7 +244,7 @@ impl Blog {
(min, max): (i32, i32),
) -> Result<ActivityStream<OrderedCollectionPage>> {
let mut coll = OrderedCollectionPage::default();
let acts = self.get_activity_page(&conn, (min, max));
let acts = self.get_activity_page(conn, (min, max));
//This still doesn't do anything because the outbox
//doesn't do anything yet
coll.collection_page_props.set_next_link(Id::new(&format!(
@@ -265,7 +273,10 @@ impl Blog {
pub fn get_keypair(&self) -> Result<PKey<Private>> {
PKey::from_rsa(Rsa::private_key_from_pem(
self.private_key.clone()?.as_ref(),
self.private_key
.clone()
.ok_or(Error::MissingApProperty)?
.as_ref(),
)?)
.map_err(Error::from)
}
@@ -318,7 +329,7 @@ impl Blog {
}
pub fn delete(&self, conn: &Connection) -> Result<()> {
for post in Post::get_for_blog(conn, &self)? {
for post in Post::get_for_blog(conn, self)? {
post.delete(conn)?;
}
diesel::delete(self)
@@ -339,12 +350,12 @@ impl FromId<DbConn> for Blog {
type Object = CustomGroup;
fn from_db(conn: &DbConn, id: &str) -> Result<Self> {
Self::find_by_ap_url(&conn, id)
Self::find_by_ap_url(conn, id)
}
fn from_activity(conn: &DbConn, acct: CustomGroup) -> Result<Self> {
let url = Url::parse(&acct.object.object_props.id_string()?)?;
let inst = url.host_str()?;
let inst = url.host_str().ok_or(Error::Url)?;
let instance = Instance::find_by_domain(conn, inst).or_else(|_| {
Instance::insert(
conn,
@@ -432,6 +443,10 @@ impl FromId<DbConn> for Blog {
},
)
}
fn get_sender() -> &'static dyn sign::Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsActor<&PlumeRocket> for Blog {
@@ -451,24 +466,22 @@ impl AsActor<&PlumeRocket> for Blog {
}
impl sign::Signer for Blog {
type Error = Error;
fn get_key_id(&self) -> String {
format!("{}#main-key", self.ap_url)
}
fn sign(&self, to_sign: &str) -> Result<Vec<u8>> {
let key = self.get_keypair()?;
fn sign(&self, to_sign: &str) -> sign::Result<Vec<u8>> {
let key = self.get_keypair().map_err(|_| sign::Error())?;
let mut signer = Signer::new(MessageDigest::sha256(), &key)?;
signer.update(to_sign.as_bytes())?;
signer.sign_to_vec().map_err(Error::from)
signer.sign_to_vec().map_err(sign::Error::from)
}
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool> {
fn verify(&self, data: &str, signature: &[u8]) -> sign::Result<bool> {
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref())?)?;
let mut verifier = Verifier::new(MessageDigest::sha256(), &key)?;
verifier.update(data.as_bytes())?;
verifier.verify(&signature).map_err(Error::from)
verifier.verify(signature).map_err(sign::Error::from)
}
}
+22 -7
View File
@@ -21,6 +21,7 @@ use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
use plume_common::{
activity_pub::{
inbox::{AsActor, AsObject, FromId},
sign::Signer,
Id, IntoId, PUBLIC_VISIBILITY,
},
utils,
@@ -141,18 +142,20 @@ impl Comment {
}
pub fn create_activity(&self, conn: &DbConn) -> Result<Create> {
let author = User::get(&conn, self.author_id)?;
let author = User::get(conn, self.author_id)?;
let note = self.to_activity(conn)?;
let mut act = Create::default();
act.create_props.set_actor_link(author.into_id())?;
act.create_props.set_object_object(note.clone())?;
act.object_props
.set_id_string(format!("{}/activity", self.ap_url.clone()?,))?;
act.object_props.set_id_string(format!(
"{}/activity",
self.ap_url.clone().ok_or(Error::MissingApProperty)?,
))?;
act.object_props
.set_to_link_vec(note.object_props.to_link_vec::<Id>()?)?;
act.object_props
.set_cc_link_vec(vec![Id::new(self.get_author(&conn)?.followers_endpoint)])?;
.set_cc_link_vec(vec![Id::new(self.get_author(conn)?.followers_endpoint)])?;
Ok(act)
}
@@ -182,7 +185,9 @@ impl Comment {
.set_actor_link(self.get_author(conn)?.into_id())?;
let mut tombstone = Tombstone::default();
tombstone.object_props.set_id_string(self.ap_url.clone()?)?;
tombstone
.object_props
.set_id_string(self.ap_url.clone().ok_or(Error::MissingApProperty)?)?;
act.delete_props.set_object_object(tombstone)?;
act.object_props
@@ -204,7 +209,13 @@ impl FromId<DbConn> for Comment {
fn from_activity(conn: &DbConn, note: Note) -> Result<Self> {
let comm = {
let previous_url = note.object_props.in_reply_to.as_ref()?.as_str()?;
let previous_url = note
.object_props
.in_reply_to
.as_ref()
.ok_or(Error::MissingApProperty)?
.as_str()
.ok_or(Error::MissingApProperty)?;
let previous_comment = Comment::find_by_ap_url(conn, previous_url);
let is_public = |v: &Option<serde_json::Value>| match v
@@ -318,6 +329,10 @@ impl FromId<DbConn> for Comment {
comm.notify(conn)?;
Ok(comm)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, Create, &DbConn> for Comment {
@@ -346,7 +361,7 @@ impl AsObject<User, Delete, &DbConn> for Comment {
m.delete(conn)?;
}
for n in Notification::find_for_comment(&conn, &self)? {
for n in Notification::find_for_comment(conn, &self)? {
n.delete(&**conn)?;
}
+11 -11
View File
@@ -17,7 +17,7 @@ pub struct Config {
pub db_min_idle: Option<u32>,
pub search_index: String,
pub search_tokenizers: SearchTokenizerConfig,
pub rocket: Result<RocketConfig, RocketError>,
pub rocket: Result<RocketConfig, InvalidRocketConfig>,
pub logo: LogoConfig,
pub default_theme: String,
pub media_directory: String,
@@ -31,21 +31,21 @@ impl Config {
}
#[derive(Debug, Clone)]
pub enum RocketError {
InvalidEnv,
InvalidAddress,
InvalidSecretKey,
pub enum InvalidRocketConfig {
Env,
Address,
SecretKey,
}
fn get_rocket_config() -> Result<RocketConfig, RocketError> {
let mut c = RocketConfig::active().map_err(|_| RocketError::InvalidEnv)?;
fn get_rocket_config() -> Result<RocketConfig, InvalidRocketConfig> {
let mut c = RocketConfig::active().map_err(|_| InvalidRocketConfig::Env)?;
let address = var("ROCKET_ADDRESS").unwrap_or_else(|_| "localhost".to_owned());
let port = var("ROCKET_PORT")
.ok()
.map(|s| s.parse::<u16>().unwrap())
.unwrap_or(7878);
let secret_key = var("ROCKET_SECRET_KEY").map_err(|_| RocketError::InvalidSecretKey)?;
let secret_key = var("ROCKET_SECRET_KEY").map_err(|_| InvalidRocketConfig::SecretKey)?;
let form_size = var("FORM_SIZE")
.unwrap_or_else(|_| "128".to_owned())
.parse::<u64>()
@@ -56,10 +56,10 @@ fn get_rocket_config() -> Result<RocketConfig, RocketError> {
.unwrap();
c.set_address(address)
.map_err(|_| RocketError::InvalidAddress)?;
.map_err(|_| InvalidRocketConfig::Address)?;
c.set_port(port);
c.set_secret_key(secret_key)
.map_err(|_| RocketError::InvalidSecretKey)?;
.map_err(|_| InvalidRocketConfig::SecretKey)?;
c.set_limits(
Limits::new()
@@ -155,7 +155,7 @@ impl Default for LogoConfig {
.ok()
.or_else(|| custom_main.clone());
let other = if let Some(main) = custom_main.clone() {
let ext = |path: &str| match path.rsplitn(2, '.').next() {
let ext = |path: &str| match path.rsplit_once('.').map(|x| x.1) {
Some("png") => Some("image/png".to_owned()),
Some("jpg") | Some("jpeg") => Some("image/jpeg".to_owned()),
Some("svg") => Some("image/svg+xml".to_owned()),
+7 -3
View File
@@ -1,6 +1,6 @@
use crate::{
ap_url, db_conn::DbConn, notifications::*, schema::follows, users::User, Connection, Error,
Result, CONFIG,
ap_url, db_conn::DbConn, instance::Instance, notifications::*, schema::follows, users::User,
Connection, Error, Result, CONFIG,
};
use activitypub::activity::{Accept, Follow as FollowAct, Undo};
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
@@ -183,6 +183,10 @@ impl FromId<DbConn> for Follow {
.map_err(|(_, e)| e)?;
Follow::accept_follow(conn, &actor, &target, follow, actor.id, target.id)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, Undo, &DbConn> for Follow {
@@ -195,7 +199,7 @@ impl AsObject<User, Undo, &DbConn> for Follow {
diesel::delete(&self).execute(&**conn)?;
// delete associated notification if any
if let Ok(notif) = Notification::find(&conn, notification_kind::FOLLOW, self.id) {
if let Ok(notif) = Notification::find(conn, notification_kind::FOLLOW, self.id) {
diesel::delete(&notif).execute(&**conn)?;
}
+43 -2
View File
@@ -3,11 +3,12 @@ use crate::{
medias::Media,
safe_string::SafeString,
schema::{instances, users},
users::{Role, User},
users::{NewUser, Role, User},
Connection, Error, Result,
};
use chrono::NaiveDateTime;
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
use diesel::{self, result::Error::NotFound, ExpressionMethods, QueryDsl, RunQueryDsl};
use once_cell::sync::OnceCell;
use plume_common::utils::md_to_html;
use std::sync::RwLock;
@@ -45,6 +46,9 @@ lazy_static! {
static ref LOCAL_INSTANCE: RwLock<Option<Instance>> = RwLock::new(None);
}
const LOCAL_INSTANCE_USERNAME: &str = "__instance__";
static LOCAL_INSTANCE_USER: OnceCell<User> = OnceCell::new();
impl Instance {
pub fn set_local(self) {
LOCAL_INSTANCE.write().unwrap().replace(self);
@@ -76,6 +80,42 @@ impl Instance {
.map_err(Error::from)
}
pub fn create_local_instance_user(conn: &Connection) -> Result<User> {
let instance = Instance::get_local()?;
let email = format!("{}@{}", LOCAL_INSTANCE_USERNAME, &instance.public_domain);
NewUser::new_local(
conn,
LOCAL_INSTANCE_USERNAME.into(),
instance.public_domain,
Role::Instance,
"Local instance",
email,
None,
)
}
pub fn get_local_instance_user() -> Option<&'static User> {
LOCAL_INSTANCE_USER.get()
}
pub fn get_local_instance_user_uncached(conn: &Connection) -> Result<User> {
users::table
.filter(users::role.eq(3))
.first(conn)
.or_else(|err| match err {
NotFound => Self::create_local_instance_user(conn),
_ => Err(Error::Db(err)),
})
}
pub fn cache_local_instance_user(conn: &Connection) {
let _ = LOCAL_INSTANCE_USER.get_or_init(|| {
Self::get_local_instance_user_uncached(conn)
.or_else(|_| Self::create_local_instance_user(conn))
.expect("Failed to cache local instance user")
});
}
pub fn page(conn: &Connection, (min, max): (i32, i32)) -> Result<Vec<Instance>> {
instances::table
.order(instances::public_domain.asc())
@@ -304,6 +344,7 @@ pub(crate) mod tests {
})
.collect();
Instance::cache_local(conn);
Instance::cache_local_instance_user(conn);
res
}
+13 -8
View File
@@ -1,4 +1,3 @@
#![feature(try_trait)]
#![feature(never_type)]
#![feature(proc_macro_hygiene)]
#![feature(box_patterns)]
@@ -18,7 +17,7 @@ extern crate serde_json;
extern crate tantivy;
use once_cell::sync::Lazy;
use plume_common::activity_pub::inbox::InboxError;
use plume_common::activity_pub::{inbox::InboxError, request, sign};
use posts::PostEvent;
use riker::actors::{channel, ActorSystem, ChannelRef, SystemBuilder};
use users::UserEvent;
@@ -80,15 +79,15 @@ impl From<openssl::error::ErrorStack> for Error {
}
}
impl From<diesel::result::Error> for Error {
fn from(err: diesel::result::Error) -> Self {
Error::Db(err)
impl From<sign::Error> for Error {
fn from(_: sign::Error) -> Self {
Error::Signature
}
}
impl From<std::option::NoneError> for Error {
fn from(_: std::option::NoneError) -> Self {
Error::NotFound
impl From<diesel::result::Error> for Error {
fn from(err: diesel::result::Error) -> Self {
Error::Db(err)
}
}
@@ -158,6 +157,12 @@ impl From<InboxError<Error>> for Error {
}
}
impl From<request::Error> for Error {
fn from(_err: request::Error) -> Error {
Error::Request
}
}
pub type Result<T> = std::result::Result<T, Error>;
/// Adds a function to a model, that returns the first
+8 -3
View File
@@ -1,12 +1,13 @@
use crate::{
db_conn::DbConn, notifications::*, posts::Post, schema::likes, timeline::*, users::User,
Connection, Error, Result, CONFIG,
db_conn::DbConn, instance::Instance, notifications::*, posts::Post, schema::likes, timeline::*,
users::User, Connection, Error, Result, CONFIG,
};
use activitypub::activity;
use chrono::NaiveDateTime;
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
use plume_common::activity_pub::{
inbox::{AsActor, AsObject, FromId},
sign::Signer,
Id, IntoId, PUBLIC_VISIBILITY,
};
@@ -137,6 +138,10 @@ impl FromId<DbConn> for Like {
res.notify(conn)?;
Ok(res)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, activity::Undo, &DbConn> for Like {
@@ -148,7 +153,7 @@ impl AsObject<User, activity::Undo, &DbConn> for Like {
diesel::delete(&self).execute(&**conn)?;
// delete associated notification if any
if let Ok(notif) = Notification::find(&conn, notification_kind::LIKE, self.id) {
if let Ok(notif) = Notification::find(conn, notification_kind::LIKE, self.id) {
diesel::delete(&notif).execute(&**conn)?;
}
Ok(())
+1
View File
@@ -143,6 +143,7 @@ macro_rules! func {
}
}
#[allow(dead_code)]
#[derive(Clone, Queryable, Identifiable)]
struct ListElem {
pub id: i32,
+34 -24
View File
@@ -7,7 +7,7 @@ use askama_escape::escape;
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
use guid_create::GUID;
use plume_common::{
activity_pub::{inbox::FromId, Id},
activity_pub::{inbox::FromId, request, Id},
utils::MediaProcessor,
};
use std::{
@@ -104,8 +104,8 @@ impl Media {
pub fn category(&self) -> MediaCategory {
match &*self
.file_path
.rsplitn(2, '.')
.next()
.rsplit_once('.')
.map(|x| x.1)
.expect("Media::category: extension error")
.to_lowercase()
{
@@ -156,7 +156,11 @@ impl Media {
if self.is_remote {
Ok(self.remote_url.clone().unwrap_or_default())
} else {
let file_path = self.file_path.replace(path::MAIN_SEPARATOR, "/");
let file_path = self.file_path.replace(path::MAIN_SEPARATOR, "/").replacen(
&CONFIG.media_directory,
"static/media",
1,
); // "static/media" from plume::routs::plume_media_files()
Ok(ap_url(&format!(
"{}/{}",
Instance::get_local()?.public_domain,
@@ -204,31 +208,33 @@ impl Media {
// TODO: merge with save_remote?
pub fn from_activity(conn: &DbConn, image: &Image) -> Result<Media> {
let remote_url = image.object_props.url_string().ok()?;
let remote_url = image
.object_props
.url_string()
.or(Err(Error::MissingApProperty))?;
let path = determine_mirror_file_path(&remote_url);
let parent = path.parent()?;
let parent = path.parent().ok_or(Error::InvalidValue)?;
if !parent.is_dir() {
DirBuilder::new().recursive(true).create(parent)?;
}
let mut dest = fs::File::create(path.clone()).ok()?;
let mut dest = fs::File::create(path.clone())?;
// TODO: conditional GET
if let Some(proxy) = CONFIG.proxy() {
reqwest::ClientBuilder::new().proxy(proxy.clone()).build()?
} else {
reqwest::Client::new()
}
.get(remote_url.as_str())
.send()
.ok()?
.copy_to(&mut dest)
.ok()?;
request::get(
remote_url.as_str(),
User::get_sender(),
CONFIG.proxy().cloned(),
)?
.copy_to(&mut dest)?;
Media::find_by_file_path(conn, &path.to_str()?)
Media::find_by_file_path(conn, path.to_str().ok_or(Error::InvalidValue)?)
.and_then(|mut media| {
let mut updated = false;
let alt_text = image.object_props.content_string().ok()?;
let alt_text = image
.object_props
.content_string()
.or(Err(Error::NotFound))?;
let sensitive = image.object_props.summary_string().is_ok();
let content_warning = image.object_props.summary_string().ok();
if media.alt_text != alt_text {
@@ -260,8 +266,11 @@ impl Media {
Media::insert(
conn,
NewMedia {
file_path: path.to_str()?.to_string(),
alt_text: image.object_props.content_string().ok()?,
file_path: path.to_str().ok_or(Error::InvalidValue)?.to_string(),
alt_text: image
.object_props
.content_string()
.or(Err(Error::NotFound))?,
is_remote: false,
remote_url: None,
sensitive: image.object_props.summary_string().is_ok(),
@@ -271,9 +280,10 @@ impl Media {
image
.object_props
.attributed_to_link_vec::<Id>()
.ok()?
.or(Err(Error::NotFound))?
.into_iter()
.next()?
.next()
.ok_or(Error::NotFound)?
.as_ref(),
None,
CONFIG.proxy(),
@@ -321,7 +331,7 @@ fn determine_mirror_file_path(url: &str) -> PathBuf {
.next()
.map(ToOwned::to_owned)
.unwrap_or_else(|| String::from("png"));
file_path.push(format!("{}.{}", GUID::rand().to_string(), ext));
file_path.push(format!("{}.{}", GUID::rand(), ext));
});
file_path
}
+6 -2
View File
@@ -47,7 +47,11 @@ impl Mention {
pub fn get_user(&self, conn: &Connection) -> Result<User> {
match self.get_post(conn) {
Ok(p) => Ok(p.get_authors(conn)?.into_iter().next()?),
Ok(p) => Ok(p
.get_authors(conn)?
.into_iter()
.next()
.ok_or(Error::NotFound)?),
Err(_) => self.get_comment(conn).and_then(|c| c.get_author(conn)),
}
}
@@ -77,7 +81,7 @@ impl Mention {
in_post: bool,
notify: bool,
) -> Result<Self> {
let ap_url = ment.link_props.href_string().ok()?;
let ap_url = ment.link_props.href_string().or(Err(Error::NotFound))?;
let mentioned = User::find_by_ap_url(conn, &ap_url)?;
if in_post {
+2 -1
View File
@@ -105,7 +105,8 @@ impl ImportedMigrations {
pub fn rerun_last_migration(&self, conn: &Connection, path: &Path) -> Result<()> {
let latest_migration = conn.latest_run_migration_version()?;
let id = latest_migration
.and_then(|m| self.0.binary_search_by_key(&m.as_str(), |m| m.name).ok())?;
.and_then(|m| self.0.binary_search_by_key(&m.as_str(), |m| m.name).ok())
.ok_or(Error::NotFound)?;
let migration = &self.0[id];
conn.transaction(|| {
migration.revert(conn, path)?;
+1 -1
View File
@@ -61,7 +61,7 @@ impl PasswordResetRequest {
}
pub fn find_and_delete_by_token(conn: &Connection, token: &str) -> Result<Self> {
let request = Self::find_by_token(&conn, &token)?;
let request = Self::find_by_token(conn, token)?;
let filter =
password_reset_requests::table.filter(password_reset_requests::id.eq(request.id));
+35 -18
View File
@@ -11,14 +11,14 @@ use activitypub::{
};
use chrono::{NaiveDateTime, TimeZone, Utc};
use diesel::{self, BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
use heck::KebabCase;
use once_cell::sync::Lazy;
use plume_common::{
activity_pub::{
inbox::{AsActor, AsObject, FromId},
sign::Signer,
Hashtag, Id, IntoId, Licensed, Source, PUBLIC_VISIBILITY,
},
utils::md_to_html,
utils::{iri_percent_encode_seg, md_to_html},
};
use riker::actors::{Publish, Tell};
use std::collections::{HashMap, HashSet};
@@ -73,12 +73,7 @@ impl Post {
.execute(conn)?;
let mut post = Self::last(conn)?;
if post.ap_url.is_empty() {
post.ap_url = ap_url(&format!(
"{}/~/{}/{}/",
CONFIG.base_url,
post.get_blog(conn)?.fqn,
post.slug
));
post.ap_url = Self::ap_url(post.get_blog(conn)?, &post.slug);
let _: Post = post.save_changes(conn)?;
}
@@ -103,7 +98,7 @@ impl Post {
}
pub fn delete(&self, conn: &Connection) -> Result<()> {
for m in Mention::list_for_post(&conn, self.id)? {
for m in Mention::list_for_post(conn, self.id)? {
m.delete(conn)?;
}
diesel::delete(self).execute(conn)?;
@@ -254,6 +249,20 @@ impl Post {
.map_err(Error::from)
}
pub fn ap_url(blog: Blog, slug: &str) -> String {
ap_url(&format!(
"{}/~/{}/{}/",
CONFIG.base_url,
blog.fqn,
iri_percent_encode_seg(slug)
))
}
// It's better to calc slug in insert and update
pub fn slug(title: &str) -> &str {
title
}
pub fn get_authors(&self, conn: &Connection) -> Result<Vec<User>> {
use crate::schema::post_authors;
use crate::schema::users;
@@ -449,14 +458,14 @@ impl Post {
.filter_map(|(id, m)| id.map(|id| (m, id)))
.collect::<Vec<_>>();
let old_mentions = Mention::list_for_post(&conn, self.id)?;
let old_mentions = Mention::list_for_post(conn, self.id)?;
let old_user_mentioned = old_mentions
.iter()
.map(|m| m.mentioned_id)
.collect::<HashSet<_>>();
for (m, id) in &mentions {
if !old_user_mentioned.contains(&id) {
Mention::from_activity(&*conn, &m, self.id, true, true)?;
if !old_user_mentioned.contains(id) {
Mention::from_activity(&*conn, m, self.id, true, true)?;
}
}
@@ -468,7 +477,7 @@ impl Post {
.iter()
.filter(|m| !new_mentions.contains(&m.mentioned_id))
{
m.delete(&conn)?;
m.delete(conn)?;
}
Ok(())
}
@@ -649,12 +658,12 @@ impl FromId<DbConn> for Post {
.and_then(|mut post| {
let mut updated = false;
let slug = title.to_kebab_case();
let slug = Self::slug(&title);
let content = SafeString::new(&article.object_props.content_string()?);
let subtitle = article.object_props.summary_string()?;
let source = article.ap_object_props.source_object::<Source>()?.content;
if post.slug != slug {
post.slug = slug;
post.slug = slug.to_string();
updated = true;
}
if post.title != title {
@@ -692,8 +701,8 @@ impl FromId<DbConn> for Post {
Post::insert(
conn,
NewPost {
blog_id: blog?.id,
slug: title.to_kebab_case(),
blog_id: blog.ok_or(Error::NotFound)?.id,
slug: Self::slug(&title).to_string(),
title,
content: SafeString::new(&article.object_props.content_string()?),
published: true,
@@ -751,6 +760,10 @@ impl FromId<DbConn> for Post {
Ok(post)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, Create, &DbConn> for Post {
@@ -822,6 +835,10 @@ impl FromId<DbConn> for PostUpdate {
tags: updated.object.object_props.tag,
})
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, Update, &DbConn> for PostUpdate {
@@ -838,7 +855,7 @@ impl AsObject<User, Update, &DbConn> for PostUpdate {
}
if let Some(title) = self.title {
post.slug = title.to_kebab_case();
post.slug = Post::slug(&title).to_string();
post.title = title;
}
+8 -3
View File
@@ -1,12 +1,13 @@
use crate::{
db_conn::DbConn, notifications::*, posts::Post, schema::reshares, timeline::*, users::User,
Connection, Error, Result, CONFIG,
db_conn::DbConn, instance::Instance, notifications::*, posts::Post, schema::reshares,
timeline::*, users::User, Connection, Error, Result, CONFIG,
};
use activitypub::activity::{Announce, Undo};
use chrono::NaiveDateTime;
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
use plume_common::activity_pub::{
inbox::{AsActor, AsObject, FromId},
sign::Signer,
Id, IntoId, PUBLIC_VISIBILITY,
};
@@ -162,6 +163,10 @@ impl FromId<DbConn> for Reshare {
res.notify(conn)?;
Ok(res)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsObject<User, Undo, &DbConn> for Reshare {
@@ -173,7 +178,7 @@ impl AsObject<User, Undo, &DbConn> for Reshare {
diesel::delete(&self).execute(&**conn)?;
// delete associated notification if any
if let Ok(notif) = Notification::find(&conn, notification_kind::RESHARE, self.id) {
if let Ok(notif) = Notification::find(conn, notification_kind::RESHARE, self.id) {
diesel::delete(&notif).execute(&**conn)?;
}
+1 -1
View File
@@ -102,7 +102,7 @@ pub struct SafeString {
impl SafeString {
pub fn new(value: &str) -> Self {
SafeString {
value: CLEAN.clean(&value).to_string(),
value: CLEAN.clean(value).to_string(),
}
}
+2 -2
View File
@@ -148,7 +148,7 @@ impl PlumeQuery {
/// Parse a query string into this Query
pub fn parse_query(&mut self, query: &str) -> &mut Self {
self.from_str_req(&query.trim())
self.from_str_req(query.trim())
}
/// Convert this Query to a Tantivy Query
@@ -360,7 +360,7 @@ impl std::str::FromStr for PlumeQuery {
fn from_str(query: &str) -> Result<PlumeQuery, !> {
let mut res: PlumeQuery = Default::default();
res.from_str_req(&query.trim());
res.from_str_req(query.trim());
Ok(res)
}
}
+13
View File
@@ -223,6 +223,9 @@ impl Timeline {
}
pub fn add_post(&self, conn: &Connection, post: &Post) -> Result<()> {
if self.includes_post(conn, post)? {
return Ok(());
}
diesel::insert_into(timeline::table)
.values(TimelineEntry {
post_id: post.id,
@@ -236,6 +239,16 @@ impl Timeline {
let query = TimelineQuery::parse(&self.query)?;
query.matches(conn, self, post, kind)
}
fn includes_post(&self, conn: &Connection, post: &Post) -> Result<bool> {
diesel::dsl::select(diesel::dsl::exists(
timeline::table
.filter(timeline::timeline_id.eq(self.id))
.filter(timeline::post_id.eq(post.id)),
))
.get_result(conn)
.map_err(Error::from)
}
}
#[cfg(test)]
+49 -30
View File
@@ -18,12 +18,6 @@ pub enum QueryError {
RuntimeError(String),
}
impl From<std::option::NoneError> for QueryError {
fn from(_: std::option::NoneError) -> Self {
QueryError::UnexpectedEndOfQuery
}
}
pub type QueryResult<T> = std::result::Result<T, QueryError>;
#[derive(Debug, Clone, Copy, PartialEq)]
@@ -239,7 +233,7 @@ impl WithList {
) -> Result<bool> {
match list {
List::List(name) => {
let list = lists::List::find_for_user_by_name(conn, timeline.user_id, &name)?;
let list = lists::List::find_for_user_by_name(conn, timeline.user_id, name)?;
match (self, list.kind()) {
(WithList::Blog, ListType::Blog) => list.contains_blog(conn, post.blog_id),
(WithList::Author { boosts, likes }, ListType::User) => match kind {
@@ -414,7 +408,7 @@ enum List<'a> {
fn parse_s<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], TQ<'a>)> {
let mut res = Vec::new();
let (left, token) = parse_a(&stream)?;
let (left, token) = parse_a(stream)?;
res.push(token);
stream = left;
while !stream.is_empty() {
@@ -436,7 +430,7 @@ fn parse_s<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>],
fn parse_a<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], TQ<'a>)> {
let mut res = Vec::new();
let (left, token) = parse_b(&stream)?;
let (left, token) = parse_b(stream)?;
res.push(token);
stream = left;
while !stream.is_empty() {
@@ -463,7 +457,7 @@ fn parse_b<'a, 'b>(stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], TQ<
match left.get(0) {
Some(Token::RParent(_)) => Ok((&left[1..], token)),
Some(t) => t.get_error(Token::RParent(0)),
None => None?,
None => Err(QueryError::UnexpectedEndOfQuery),
}
}
_ => parse_c(stream),
@@ -484,9 +478,13 @@ fn parse_c<'a, 'b>(stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], TQ<
}
fn parse_d<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], Arg<'a>)> {
match stream.get(0).map(Token::get_text)? {
match stream
.get(0)
.map(Token::get_text)
.ok_or(QueryError::UnexpectedEndOfQuery)?
{
s @ "blog" | s @ "author" | s @ "license" | s @ "tags" | s @ "lang" => {
match stream.get(1)? {
match stream.get(1).ok_or(QueryError::UnexpectedEndOfQuery)? {
Token::Word(_, _, r#in) if r#in == &"in" => {
let (mut left, list) = parse_l(&stream[2..])?;
let kind = match s {
@@ -498,7 +496,12 @@ fn parse_d<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>],
if *clude != "include" && *clude != "exclude" {
break;
}
match (*clude, left.get(1).map(Token::get_text)?) {
match (
*clude,
left.get(1)
.map(Token::get_text)
.ok_or(QueryError::UnexpectedEndOfQuery)?,
) {
("include", "reshares") | ("include", "reshare") => {
boosts = true
}
@@ -529,7 +532,10 @@ fn parse_d<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>],
t => t.get_error(Token::Word(0, 0, "'in'")),
}
}
s @ "title" | s @ "subtitle" | s @ "content" => match (stream.get(1)?, stream.get(2)?) {
s @ "title" | s @ "subtitle" | s @ "content" => match (
stream.get(1).ok_or(QueryError::UnexpectedEndOfQuery)?,
stream.get(2).ok_or(QueryError::UnexpectedEndOfQuery)?,
) {
(Token::Word(_, _, contains), Token::Word(_, _, w)) if contains == &"contains" => Ok((
&stream[3..],
Arg::Contains(
@@ -555,7 +561,13 @@ fn parse_d<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>],
if *clude != "include" && *clude != "exclude" {
break;
}
match (*clude, stream.get(2).map(Token::get_text)?) {
match (
*clude,
stream
.get(2)
.map(Token::get_text)
.ok_or(QueryError::UnexpectedEndOfQuery)?,
) {
("include", "reshares") | ("include", "reshare") => boosts = true,
("exclude", "reshares") | ("exclude", "reshare") => boosts = false,
("include", "likes") | ("include", "like") => likes = true,
@@ -577,20 +589,23 @@ fn parse_d<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>],
"all" => Ok((&stream[1..], Arg::Boolean(Bool::All))),
_ => unreachable!(),
},
_ => stream.get(0)?.get_error(Token::Word(
0,
0,
"one of 'blog', 'author', 'license', 'tags', 'lang', \
_ => stream
.get(0)
.ok_or(QueryError::UnexpectedEndOfQuery)?
.get_error(Token::Word(
0,
0,
"one of 'blog', 'author', 'license', 'tags', 'lang', \
'title', 'subtitle', 'content', 'followed', 'has_cover', 'local' or 'all'",
)),
)),
}
}
fn parse_l<'a, 'b>(stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], List<'a>)> {
match stream.get(0)? {
match stream.get(0).ok_or(QueryError::UnexpectedEndOfQuery)? {
Token::LBracket(_) => {
let (left, list) = parse_m(&stream[1..])?;
match left.get(0)? {
match left.get(0).ok_or(QueryError::UnexpectedEndOfQuery)? {
Token::RBracket(_) => Ok((&left[1..], List::Array(list))),
t => t.get_error(Token::Word(0, 0, "one of ']' or ','")),
}
@@ -601,16 +616,20 @@ fn parse_l<'a, 'b>(stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], Lis
}
fn parse_m<'a, 'b>(mut stream: &'b [Token<'a>]) -> QueryResult<(&'b [Token<'a>], Vec<&'a str>)> {
let mut res: Vec<&str> = vec![match stream.get(0)? {
Token::Word(_, _, w) => w,
t => return t.get_error(Token::Word(0, 0, "any word")),
}];
stream = &stream[1..];
while let Token::Comma(_) = stream[0] {
res.push(match stream.get(1)? {
let mut res: Vec<&str> = vec![
match stream.get(0).ok_or(QueryError::UnexpectedEndOfQuery)? {
Token::Word(_, _, w) => w,
t => return t.get_error(Token::Word(0, 0, "any word")),
});
},
];
stream = &stream[1..];
while let Token::Comma(_) = stream[0] {
res.push(
match stream.get(1).ok_or(QueryError::UnexpectedEndOfQuery)? {
Token::Word(_, _, w) => w,
t => return t.get_error(Token::Word(0, 0, "any word")),
},
);
stream = &stream[2..];
}
+41 -79
View File
@@ -22,17 +22,13 @@ use openssl::{
};
use plume_common::{
activity_pub::{
ap_accept_header,
inbox::{AsActor, AsObject, FromId},
sign::{gen_keypair, Signer},
request::get,
sign::{gen_keypair, Error as SignError, Result as SignResult, Signer},
ActivityStream, ApSignature, Id, IntoId, PublicKey, PUBLIC_VISIBILITY,
},
utils,
};
use reqwest::{
header::{HeaderValue, ACCEPT},
ClientBuilder,
};
use riker::actors::{Publish, Tell};
use rocket::{
outcome::IntoOutcome,
@@ -52,6 +48,7 @@ pub enum Role {
Admin = 0,
Moderator = 1,
Normal = 2,
Instance = 3,
}
#[derive(Queryable, Identifiable, Clone, Debug, AsChangeset)]
@@ -78,6 +75,7 @@ pub struct User {
pub summary_html: SafeString,
/// 0 = admin
/// 1 = moderator
/// 3 = local instance
/// anything else = normal user
pub role: i32,
pub preferred_theme: Option<String>,
@@ -210,7 +208,13 @@ impl User {
.into_iter()
.find(|l| l.mime_type == Some(String::from("application/activity+json")))
.ok_or(Error::Webfinger)?;
User::from_id(conn, link.href.as_ref()?, None, CONFIG.proxy()).map_err(|(_, e)| e)
User::from_id(
conn,
link.href.as_ref().ok_or(Error::Webfinger)?,
None,
CONFIG.proxy(),
)
.map_err(|(_, e)| e)
}
pub fn fetch_remote_interact_uri(acct: &str) -> Result<String> {
@@ -223,20 +227,7 @@ impl User {
}
fn fetch(url: &str) -> Result<CustomPerson> {
let mut res = ClientBuilder::new()
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()?
.get(url)
.header(
ACCEPT,
HeaderValue::from_str(
&ap_accept_header()
.into_iter()
.collect::<Vec<_>>()
.join(", "),
)?,
)
.send()?;
let mut res = get(url, Self::get_sender(), CONFIG.proxy().cloned())?;
let text = &res.text()?;
// without this workaround, publicKey is not correctly deserialized
let ap_sign = serde_json::from_str::<ApSignature>(text)?;
@@ -255,10 +246,10 @@ impl User {
conn,
json.object
.object_props
.icon_image()?
.icon_image()? // FIXME: Fails when icon is not set
.object_props
.url_string()?,
&self,
self,
)
.ok();
@@ -427,12 +418,12 @@ impl User {
let last = &format!(
"{}?page={}",
&self.outbox_url,
self.get_activities_count(&conn) / i64::from(ITEMS_PER_PAGE) + 1
self.get_activities_count(conn) / i64::from(ITEMS_PER_PAGE) + 1
);
coll.collection_props.set_first_link(Id::new(first))?;
coll.collection_props.set_last_link(Id::new(last))?;
coll.collection_props
.set_total_items_u64(self.get_activities_count(&conn) as u64)?;
.set_total_items_u64(self.get_activities_count(conn) as u64)?;
Ok(ActivityStream::new(coll))
}
pub fn outbox_page(
@@ -441,7 +432,7 @@ impl User {
(min, max): (i32, i32),
) -> Result<ActivityStream<OrderedCollectionPage>> {
let acts = self.get_activities_page(conn, (min, max))?;
let n_acts = self.get_activities_count(&conn);
let n_acts = self.get_activities_count(conn);
let mut coll = OrderedCollectionPage::default();
if n_acts - i64::from(min) >= i64::from(ITEMS_PER_PAGE) {
coll.collection_page_props.set_next_link(Id::new(&format!(
@@ -463,20 +454,7 @@ impl User {
Ok(ActivityStream::new(coll))
}
fn fetch_outbox_page<T: Activity>(&self, url: &str) -> Result<(Vec<T>, Option<String>)> {
let mut res = ClientBuilder::new()
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()?
.get(url)
.header(
ACCEPT,
HeaderValue::from_str(
&ap_accept_header()
.into_iter()
.collect::<Vec<_>>()
.join(", "),
)?,
)
.send()?;
let mut res = get(url, Self::get_sender(), CONFIG.proxy().cloned())?;
let text = &res.text()?;
let json: serde_json::Value = serde_json::from_str(text)?;
let items = json["items"]
@@ -490,20 +468,11 @@ impl User {
Ok((items, next))
}
pub fn fetch_outbox<T: Activity>(&self) -> Result<Vec<T>> {
let mut res = ClientBuilder::new()
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()?
.get(&self.outbox_url[..])
.header(
ACCEPT,
HeaderValue::from_str(
&ap_accept_header()
.into_iter()
.collect::<Vec<_>>()
.join(", "),
)?,
)
.send()?;
let mut res = get(
&self.outbox_url[..],
Self::get_sender(),
CONFIG.proxy().cloned(),
)?;
let text = &res.text()?;
let json: serde_json::Value = serde_json::from_str(text)?;
if let Some(first) = json.get("first") {
@@ -513,7 +482,7 @@ impl User {
if page.is_empty() {
break;
}
items.extend(page.drain(..));
items.append(&mut page);
if let Some(n) = nxt {
if n == next {
break;
@@ -535,20 +504,11 @@ impl User {
}
pub fn fetch_followers_ids(&self) -> Result<Vec<String>> {
let mut res = ClientBuilder::new()
.connect_timeout(Some(std::time::Duration::from_secs(5)))
.build()?
.get(&self.followers_endpoint[..])
.header(
ACCEPT,
HeaderValue::from_str(
&ap_accept_header()
.into_iter()
.collect::<Vec<_>>()
.join(", "),
)?,
)
.send()?;
let mut res = get(
&self.followers_endpoint[..],
Self::get_sender(),
CONFIG.proxy().cloned(),
)?;
let text = &res.text()?;
let json: serde_json::Value = serde_json::from_str(text)?;
Ok(json["items"]
@@ -720,7 +680,7 @@ impl User {
pub fn get_keypair(&self) -> Result<PKey<Private>> {
PKey::from_rsa(Rsa::private_key_from_pem(
self.private_key.clone()?.as_ref(),
self.private_key.clone().ok_or(Error::Signature)?.as_ref(),
)?)
.map_err(Error::from)
}
@@ -943,7 +903,7 @@ impl FromId<DbConn> for User {
fn from_activity(conn: &DbConn, acct: CustomPerson) -> Result<Self> {
let url = Url::parse(&acct.object.object_props.id_string()?)?;
let inst = url.host_str()?;
let inst = url.host_str().ok_or(Error::Url)?;
let instance = Instance::find_by_domain(conn, inst).or_else(|_| {
Instance::insert(
conn,
@@ -1031,6 +991,10 @@ impl FromId<DbConn> for User {
Ok(user)
}
fn get_sender() -> &'static dyn Signer {
Instance::get_local_instance_user().expect("Failed to local instance user")
}
}
impl AsActor<&DbConn> for User {
@@ -1063,24 +1027,22 @@ impl AsObject<User, Delete, &DbConn> for User {
}
impl Signer for User {
type Error = Error;
fn get_key_id(&self) -> String {
format!("{}#main-key", self.ap_url)
}
fn sign(&self, to_sign: &str) -> Result<Vec<u8>> {
let key = self.get_keypair()?;
fn sign(&self, to_sign: &str) -> SignResult<Vec<u8>> {
let key = self.get_keypair().map_err(|_| SignError())?;
let mut signer = sign::Signer::new(MessageDigest::sha256(), &key)?;
signer.update(to_sign.as_bytes())?;
signer.sign_to_vec().map_err(Error::from)
signer.sign_to_vec().map_err(SignError::from)
}
fn verify(&self, data: &str, signature: &[u8]) -> Result<bool> {
fn verify(&self, data: &str, signature: &[u8]) -> SignResult<bool> {
let key = PKey::from_rsa(Rsa::public_key_from_pem(self.public_key.as_ref())?)?;
let mut verifier = sign::Verifier::new(MessageDigest::sha256(), &key)?;
verifier.update(data.as_bytes())?;
verifier.verify(&signature).map_err(Error::from)
verifier.verify(signature).map_err(SignError::from)
}
}
@@ -1121,7 +1083,7 @@ impl NewUser {
display_name,
role: role as i32,
summary: summary.to_owned(),
summary_html: SafeString::new(&utils::md_to_html(&summary, None, false, None).0),
summary_html: SafeString::new(&utils::md_to_html(summary, None, false, None).0),
email: Some(email),
hashed_password: password,
instance_id: instance.id,
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "فتح محرر النصوص الغني"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "العنوان"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "العنوان الثانوي أو الملخص"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "اكتب مقالك هنا. ماركداون مُدَعَّم."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "يتبقا {} حرفا تقريبا"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "الوسوم"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "الرخصة"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "الغلاف"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "هذه مسودة"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "نشر كتابا"
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Искате ли да активирате локално автоматично запаметяване, последно редактирано в {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Отворете редактора с богат текст"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Заглавие"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Подзаглавие или резюме"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Напишете статията си тук. Поддържа се Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Остават {} знака вляво"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Етикети"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Лиценз"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Основно изображение"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Това е проект"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Публикувай"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Obre leditor de text enriquit"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Títol"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Subtítol o resum"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Escriviu el vostre article ací. Podeu fer servir el Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Queden uns {} caràcters"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etiquetes"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Llicència"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Coberta"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Açò és un esborrany"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publica"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2022-01-02 11:39\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Otevřít editor formátovaného textu"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Nadpis"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Podnadpis, nebo shrnutí"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Sem napište svůj článek. Markdown je podporován."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Zbývá kolem {} znaků"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tagy"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licence"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Titulka"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Tohle je koncept"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Zveřejnit"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Möchten Sie die lokale automatische Speicherung laden, die zuletzt um {} bearbeitet wurde?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr " Rich Text Editor (RTE) öffnen"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titel"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Untertitel oder Zusammenfassung"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Schreiben deinen Artikel hier. Markdown wird unterstützt."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Ungefähr {} Zeichen übrig"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Schlagwörter"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Lizenz"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Einband"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Dies ist ein Entwurf"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Veröffentlichen"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: English\n"
"Language: en_US\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Esperanto\n"
"Language: eo_UY\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Malfermi la riĉan redaktilon"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titolo"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Verku vian artikolon ĉi tie. Markdown estas subtenita."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Proksimume {} signoj restantaj"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etikedoj"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Permesilo"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Kovro"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Malfinias"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Eldoni"
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2022-01-02 11:39\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "¿Quieres cargar el guardado automático local editado por última vez en {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Abrir el editor de texto enriquecido"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Subtítulo, o resumen"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Escriba su artículo aquí. Puede utilizar Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Quedan unos {} caracteres"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etiquetas"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licencia"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Cubierta"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Esto es un borrador"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publicar"
+15 -15
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Language: fa_IR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "آیا می‌خواهید نسخهٔ ذخیره شدهٔ خودکار محلّی از آخرین ویرایش در {} را بار کنید؟"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "باز کردن ویرایش‌گر غنی"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "عنوان"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "زیرعنوان، یا چکیده"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "مقاله را اینجا بنویسید. از مارک‌داون پشتیبانی می‌شود."
msgstr "مقاله‌تان را اینجا بنویسید. از مارک‌داون پشتیبانی می‌شود."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "نزدیک به {} حرف باقی مانده است"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "برچسب‌ها"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "پروانه"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "تصویر شاخص"
msgstr "جلد"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "این، یک پیش‌نویس است"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "انتشار"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Avaa edistynyt tekstieditori"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Otsikko"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Alaotsikko tai tiivistelmä"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Kirjoita artikkelisi tähän. Markdown -kuvauskieli on tuettu."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "%{count} merkkiä jäljellä"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tagit"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Lisenssi"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Kansi"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Tämä on luonnos"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Julkaise"
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Voulez vous charger la sauvegarde automatique locale, éditée la dernière fois à {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Ouvrir l'éditeur de texte avancé"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titre"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Sous-titre ou résumé"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Écrivez votre article ici. Vous pouvez utiliser du Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Environ {} caractères restant"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Étiquettes"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licence"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Illustration"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Ceci est un brouillon"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publier"
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Galician\n"
"Language: gl_ES\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Queres cargar a última copia gardada editada o {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Abre o editor de texto enriquecido"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Subtítulo, ou resumo"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Escribe aquí o teu artigo: podes utilizar Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Dispós de {} caracteres"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etiquetas"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenza"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Portada"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Este é un borrador"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publicar"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Hindi\n"
"Language: hi_IN\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "शीर्षक"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "अपना आर्टिकल या लेख यहाँ लिखें. Markdown उपलब्ध है."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "लगभग {} अक्षर बाकी हैं"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "टैग्स"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "लाइसेंस"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "पब्लिश करें"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Croatian\n"
"Language: hr_HR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tagovi"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Objavi"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_HU\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Apri il compositore di testo avanzato"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titolo"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Sottotitolo, o sommario"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Scrivi qui il tuo articolo. È supportato il Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Circa {} caratteri rimasti"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etichette"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenza"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Copertina"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Questa è una bozza"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Pubblica"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "リッチテキストエディターを開く"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "タイトル"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "サブタイトル、または概要"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "投稿をここに書きます。Markdown がサポートされています。"
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "残り約 {} 文字"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "タグ"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "ライセンス"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "カバー"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "これは下書きです"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "公開"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Wilt u de lokale auto-opslaan laden? Laatst bewerkt om: {}"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Open de rich-text editor"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titel"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Ondertitel of samenvatting"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Schrijf hier je artikel. Markdown wordt ondersteund."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Ongeveer {} tekens over"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tags"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licentie"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Hoofdafbeelding"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Dit is een concept"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publiceren"
+14 -14
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
msgstr "Lisens"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
msgstr "Publiser"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Otwórz edytor tekstu sformatowanego"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Tytuł"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Podtytuł, lub podsumowanie"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Napisz swój artykuł tutaj. Markdown jest obsługiwany."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Pozostało w okolicy {} znaków"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tagi"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licencja"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Okładka"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "To jest szkic"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publikuj"
+11 -11
View File
@@ -12,46 +12,46 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
# plume-front/src/editor.rs:188
# plume-front/src/editor.rs:177
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:281
# plume-front/src/editor.rs:331
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:314
# plume-front/src/editor.rs:388
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:318
# plume-front/src/editor.rs:392
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:325
# plume-front/src/editor.rs:399
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:336
# plume-front/src/editor.rs:410
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:413
# plume-front/src/editor.rs:519
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:520
msgid "License"
msgstr ""
# plume-front/src/editor.rs:417
# plume-front/src/editor.rs:526
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:437
# plume-front/src/editor.rs:560
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:444
# plume-front/src/editor.rs:571
msgid "Publish"
msgstr ""
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Você quer carregar o último conteúdo salvo localmente editado em {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Abrir o editor de rich text"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Subtítulo ou resumo"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Escreva seu artigo aqui. Markdown é suportado."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Cerca de {} caracteres restantes"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Tags"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licença"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Capa"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Isso é um rascunho"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publicar"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Deschide editorul de text"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titlu"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Scrie articolul tău aici. Markdown este acceptat."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "În apropiere de {} caractere rămase"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etichete"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenţă"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Coperta"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Aceasta este o ciornă"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publică"
+16 -16
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Хотите ли вы загрузить локальное автосохранение, сделанное в {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
msgstr "Открыть в визуальном редакторе"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Заголовок"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
msgstr "Подзаголовок или резюме"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Пишите свою статью здесь. Markdown поддерживается."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Осталось около {} символов"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Теги"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
msgstr "Лицензия"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Обложка"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Это черновик"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Опубликовать"
+18 -18
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Santali\n"
"Language: sat_IN\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "ᱟᱢ ᱪᱮᱫ ᱢᱟᱲᱟᱝ {} ᱨᱮ ᱥᱟᱯᱲᱟᱣ ᱟᱠᱟᱱ ᱞᱚᱠᱟᱞ ᱚᱴᱚᱥᱮᱣ ᱞᱟᱫᱮ ᱥᱟᱱᱟᱢ ᱠᱟᱱᱟ ᱥᱮ?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "ᱨᱤᱪ ᱚᱞ ᱥᱟᱯᱟᱣᱤᱡ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ"
msgstr "ᱨᱤᱪ ᱚᱞ ᱥᱟᱯᱟᱣᱤᱡ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮ"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "ᱴᱭᱴᱚᱞ"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "ᱥᱟᱹᱵᱴᱟᱭᱴᱟᱹᱞ, ᱟᱨ ᱵᱟᱝ ᱥᱟᱹᱢᱢᱟᱨᱭ"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "ᱟᱢᱟᱜ ᱚᱱᱚᱞ ᱱᱚᱰᱮ ᱚᱞ ᱛᱟᱢ ᱾ ᱪᱤᱱᱦᱟᱹ ᱥᱟᱯᱚᱴ ᱜᱮᱭᱟ ᱾"
msgstr "ᱟᱢᱟᱜ ᱚᱱᱚᱞ ᱱᱚᱰᱮ ᱚᱞ ᱛᱟᱢ ᱾ ᱪᱤᱱᱦᱟᱹ ᱥᱟᱯᱚᱴ ᱜᱮᱭᱟ ᱾"
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "ᱡᱷᱚᱛᱚ ᱨᱮ {} ᱡᱤᱱᱤᱥ ᱵᱟᱧᱪᱟᱣᱠᱟᱱᱟ"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "ᱴᱮᱜᱥ"
msgstr "ᱴᱮᱜᱥ"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "ᱞᱚᱭᱥᱮᱱᱥ"
msgstr "ᱞᱚᱭᱥᱮᱱᱥ"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "ᱠᱚᱵᱷᱚᱨ"
msgstr "ᱢᱚᱭᱞᱟᱹᱴ"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "ᱱᱚᱶᱟ ᱫᱚ ᱰᱨᱟᱯᱷᱼᱴ ᱠᱟᱱᱟ"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "ᱯᱟᱨᱥᱟᱞ"
+14 -14
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Sinhala\n"
"Language: si_LK\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
msgstr "මාතෘකාව"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
msgstr "බලපත්‍රය"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+13 -13
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: Slovak\n"
"Language: sk_SK\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "Chceš načítať automaticky uloženú zálohu, s poslednou úpravou {}?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Otvor editor formátovaného textu"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Nadpis"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Zhrnutie, alebo podnadpis"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Tu napíš svoj článok. Markdown je podporovaný."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Zostáva asi {} znakov"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Štítky"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licencia"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Obálka"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Toto je koncept"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Zverejniť"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Language: sl_SI\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Oznake"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "To je osnutek"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Objavi"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Serbian (Latin)\n"
"Language: sr_CS\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Otvori uređivač sa stilizacijom"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Podnaslov, ili sažetak"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Napišite vaš članak ovde. Na raspolaganju vam je Markdown."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Preostalo oko {} znakova"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Markeri"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Naslovna strana"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Ovo je nacrt"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Objavi"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Titel"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Skriv din artikel här. Markdown stöds."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Ungefär {} karaktärer kvar"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Taggar"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Licens"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Omslag"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Publicera"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Zengin metin editörünü (RTE) aç"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Başlık"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "Alt başlık, veya açıklama"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "Makaleni buraya yaz. Markdown kullanabilirsin."
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "Yaklaşık {} karakter kaldı"
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "Etiketler"
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr "Lisans"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "Kapak"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "Bu bir taslaktır"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "Yayınla"
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+63
View File
@@ -0,0 +1,63 @@
msgid ""
msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Urdu (Pakistan)\n"
"Language: ur_PK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ur-PK\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:314
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+12 -12
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
@@ -17,47 +17,47 @@ msgstr ""
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "Văn bản của tôi"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "Tiêu Châu"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
# plume-front/src/editor.rs:414
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr ""
+26 -26
View File
@@ -3,61 +3,61 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
# plume-front/src/editor.rs:188
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
msgstr "你想要載入上次在 {} 编辑的本地自動保存嗎?"
# plume-front/src/editor.rs:282
# plume-front/src/editor.rs:281
msgid "Open the rich text editor"
msgstr "打开富文本编辑器"
msgstr "開啟 RTF 編輯器"
# plume-front/src/editor.rs:315
# plume-front/src/editor.rs:314
msgid "Title"
msgstr "标题"
msgstr "標題"
# plume-front/src/editor.rs:319
# plume-front/src/editor.rs:318
msgid "Subtitle, or summary"
msgstr "副标题或摘要"
msgstr "副標題,或摘要"
# plume-front/src/editor.rs:326
# plume-front/src/editor.rs:325
msgid "Write your article here. Markdown is supported."
msgstr "在这里写下您的文章。支 Markdown 法。"
msgstr "在這裡寫下您的文章。支 Markdown 法。"
# plume-front/src/editor.rs:337
# plume-front/src/editor.rs:336
msgid "Around {} characters left"
msgstr "大约剩余 {} 可输入字符"
msgstr "大約還可輸入 {} 字符"
# plume-front/src/editor.rs:413
msgid "Tags"
msgstr "標籤"
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "标签"
# plume-front/src/editor.rs:415
msgid "License"
msgstr "许可协议"
msgstr "授權條款"
# plume-front/src/editor.rs:418
# plume-front/src/editor.rs:417
msgid "Cover"
msgstr "封面"
# plume-front/src/editor.rs:438
# plume-front/src/editor.rs:437
msgid "This is a draft"
msgstr "这是一个草稿"
msgstr "這是草稿"
# plume-front/src/editor.rs:445
# plume-front/src/editor.rs:444
msgid "Publish"
msgstr "布"
msgstr "布"
+73 -110
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr ""
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr ""
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr ""
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr ""
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr ""
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr ""
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr ""
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr ""
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr ""
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr ""
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr ""
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr ""
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr ""
@@ -177,118 +177,112 @@ msgstr ""
msgid "To write a new post, you need to be logged in"
msgstr ""
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr ""
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr ""
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr ""
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr ""
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr ""
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr ""
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr ""
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr ""
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr ""
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr ""
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -447,9 +441,7 @@ msgstr ""
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -479,8 +471,7 @@ msgstr ""
msgid "Your Profile"
msgstr ""
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "Upload an avatar"
@@ -552,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -639,21 +627,13 @@ msgstr ""
msgid "Save these settings"
msgstr ""
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -662,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -674,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -756,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr ""
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -816,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -875,9 +844,7 @@ msgstr ""
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -886,9 +853,7 @@ msgstr ""
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -903,8 +868,7 @@ msgstr ""
msgid "Edit \"{}\""
msgstr ""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -966,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1048,3 +1010,4 @@ msgstr ""
msgid "Article license"
msgstr ""
+81 -130
View File
@@ -3,15 +3,14 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ar\n"
@@ -66,59 +65,59 @@ msgstr "الصفحة التالية"
msgid "Optional"
msgstr "اختياري"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "لإنشاء مدونة جديدة، تحتاج إلى تسجيل الدخول"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "توجد مدونة تحمل نفس العنوان."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "تم إنشاء مدونتك بنجاح!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "تم حذف مدونتك."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "لا يسمح لك بحذف هذه المدونة."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "لا يسمح لك بتعديل هذه المدونة."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "لا يمكنك استخدام هذه الوسائط كأيقونة للمدونة."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "لا يمكنك استخدام هذه الوسائط كشعار للمدونة."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "تم تحديث معلومات مُدوّنتك."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "تم نشر تعليقك."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "تم حذف تعليقك."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "تم حفظ إعدادات المثيل."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "تم إلغاء حظر {}."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "تم حظر {}."
@@ -126,51 +125,51 @@ msgstr "تم حظر {}."
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "البريد الإلكتروني محظور"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "لا يسمح لك القيام بهذا الإجراء."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "تم."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا للإعجاب بهذا المقال"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "لقد تم حذف وسائطك."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "لا يسمح لك بحذف هذه الوسائط."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "تم تحديث صورتك الشخصية."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "لا يسمح لك باستعمال هذه الوسائط."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا لعرض الإشعارات"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "هذا المقال ليس منشورا بعد."
@@ -178,118 +177,112 @@ msgstr "هذا المقال ليس منشورا بعد."
msgid "To write a new post, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا لكتابة مقال جديد"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "لست مِن محرري هذه المدونة."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "منشور جديد"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "تعديل {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "لا يسمح لك بالنشر على هذه المدونة."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "تم تحديث مقالك."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "تم حفظ مقالك."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "مقال جديد"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "لا يسمح لك بحذف هذا المقال."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "تم حذف مقالك."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "لم يتم العثور على المقال الذي تحاول حذفه. ربما سبق حذفه؟"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "تعذر العثور عن معلومات حسابك. المرجو التحقق من صحة إسم المستخدم."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولا للإعادت نشر هذا المقال"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "أنت الآن متصل."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "لقد قمتَ بالخروج للتوّ."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "إعادة تعيين كلمة المرور"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "ها هو رابط إعادة تعيين كلمتك السرية: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "تمت إعادة تعيين كلمتك السرية بنجاح."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr "يجب عليك تسجيل الدخول أولاللنفاذ إلى لوح المراقبة"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "أنت لم تعد تتابع {}."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "أنت الآن تتابع {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "للإشتراك بأحد ما، يجب تسجيل الدخول أولا"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "لتعديل الحساب، يجب تسجيل الدخول أولا"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "تم تحديث ملفك الشخصي."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "تم حذف حسابك."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "لا يمكنك حذف حساب شخص آخر."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "التسجيلات مُغلقة على مثيل الخادم هذ."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "لقد تم إنشاء حسابك. ما عليك إلّا الولوج الآن للتمكّن مِن استعماله."
msgid "Media upload"
@@ -448,11 +441,8 @@ msgstr "كلمة السر"
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"المعذرة، لاكن التسجيل مغلق في هذا المثيل بالدات. يمكنك إجاد مثيل آخر للتسجيل."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "المعذرة، لاكن التسجيل مغلق في هذا المثيل بالدات. يمكنك إجاد مثيل آخر للتسجيل."
msgid "{0}'s subscriptions"
msgstr "{0} اشتراكات"
@@ -481,10 +471,8 @@ msgstr "تعديل حسابك"
msgid "Your Profile"
msgstr "ملفك الشخصي"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"لتغير الصورة التشخيصية قم أولا برفعها إلى الألبوم ثم قم بتعينها من هنالك."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "لتغير الصورة التشخيصية قم أولا برفعها إلى الألبوم ثم قم بتعينها من هنالك."
msgid "Upload an avatar"
msgstr "تحميل صورة رمزية"
@@ -555,13 +543,8 @@ msgstr "نعتذر عن الإزعاج. إن كنت تضن أن هذه مشكل
msgid "Invalid CSRF token"
msgstr "الرمز المميز CSRF غير صالح"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"هناكخطأم ما في رمز CSRF. تحقق أن الكوكيز مفعل في متصفحك وأعد تحميل الصفحة. "
"إذا واجهتهذا الخطأ منجديد يرجى التبليغ."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "هناكخطأم ما في رمز CSRF. تحقق أن الكوكيز مفعل في متصفحك وأعد تحميل الصفحة. إذا واجهتهذا الخطأ منجديد يرجى التبليغ."
msgid "You are not authorized."
msgstr "ليست لديك التصريحات اللازمة للقيام بذلك."
@@ -644,21 +627,13 @@ msgstr "الرخصة الافتراضية للمقال"
msgid "Save these settings"
msgstr "احفظ هذه الإعدادات"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "إذا كنت تصفح هذا الموقع كزائر ، لا يتم تجميع أي بيانات عنك."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -667,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -679,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -761,11 +729,8 @@ msgstr "العنوان الثانوي"
msgid "Content"
msgstr "المحتوى"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"يكنك رفع الوسائط للألبوم ومن ثم نسخ شفرة الماركداون في مقالاتك لإدراجها."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "يكنك رفع الوسائط للألبوم ومن ثم نسخ شفرة الماركداون في مقالاتك لإدراجها."
msgid "Upload media"
msgstr "تحميل وسائط"
@@ -830,12 +795,8 @@ msgstr "لم أعد أرغب في دعم هذا"
msgid "Boost"
msgstr "رقّي"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}قم بتسجيل الدخول{1} أو {2}استخدم حسابك على الفديفرس{3} إن كنت ترغب في "
"التفاعل مع هذا المقال"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}قم بتسجيل الدخول{1} أو {2}استخدم حسابك على الفديفرس{3} إن كنت ترغب في التفاعل مع هذا المقال"
msgid "Comments"
msgstr "التعليقات"
@@ -891,12 +852,8 @@ msgstr "تحديث الكلمة السرية"
msgid "Check your inbox!"
msgstr "تحقق من علبة الوارد الخاصة بك!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"لقد أرسلنا رسالة للعنوان الذي توصلنا به من طرفك تضمنرابط لإعادت تحديد كلمة "
"المرور."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "لقد أرسلنا رسالة للعنوان الذي توصلنا به من طرفك تضمنرابط لإعادت تحديد كلمة المرور."
msgid "Send password reset link"
msgstr "أرسل رابط إعادة تعيين الكلمة السرية"
@@ -904,9 +861,7 @@ msgstr "أرسل رابط إعادة تعيين الكلمة السرية"
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -921,8 +876,7 @@ msgstr "انشاء مدونة"
msgid "Edit \"{}\""
msgstr "تعديل \"{}\""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "يمكن رفع الصور إلى ألبومك من أجل إستعمالها كأيقونة المدونة أو الشعار."
msgid "Upload images"
@@ -988,12 +942,8 @@ msgstr "بلوم محرك لامركزي للمدونات."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr "يمكن للمحررين أن يديرو العديد من المدونات كل واحدة كموقع منفرد."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"ستكون المقالات معروضة على مواقع بلومالأخرى حيث يمكنكم التفاعل معها مباشرة "
"عبر أية منصة أخرى مثل ماستدون."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "ستكون المقالات معروضة على مواقع بلومالأخرى حيث يمكنكم التفاعل معها مباشرة عبر أية منصة أخرى مثل ماستدون."
msgid "Read the detailed rules"
msgstr "إقرأ القواعد بالتفصيل"
@@ -1072,3 +1022,4 @@ msgstr "نشرتحت هذا الترخيص"
msgid "Article license"
msgstr "رخصة المقال"
+100 -189
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
@@ -65,59 +65,59 @@ msgstr "Следваща страница"
msgid "Optional"
msgstr "По избор"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "За да създадете нов блог, трябва да влезете"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Вече съществува блог със същото име."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Блогът Ви бе успешно създаден!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Блогът ви бе изтрит."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "Нямате права за да изтриете този блог."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "Нямате права за да редактирате този блог."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "Не можете да използвате тази медия като икона на блога."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "Не можете да използвате тази медия като банер на блога."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Информацията в блога ви бе актуализирана."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Коментарът е публикуван."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Коментарът бе изтрит."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "Настройките на инстанциите са запазени."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "{} са отблокирани."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "{} са блокирани."
@@ -125,51 +125,51 @@ msgstr "{} са блокирани."
msgid "Blocks deleted"
msgstr "Блоковете са изтрити"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
msgstr "Имейлът вече е блокиран"
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "Блокиран Email"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr "Не можете да промените собствените си права."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "Нямате права да предприемате това действие."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "Свършен."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "За да харесате публикация, трябва да сте влезли в профила си"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Медията ви е изтрита."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "Вие нямате права да изтриете тази медия."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Вашият аватар е актуализиран."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "Нямате права да използвате тази медия."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "За да видите известията си, трябва да сте влезли в профила си"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Тази публикация все още не е публикувана."
@@ -177,127 +177,113 @@ msgstr "Тази публикация все още не е публикуван
msgid "To write a new post, you need to be logged in"
msgstr "За да напишете нова публикация, трябва да влезете"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "Вие не сте автор на този блог."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Нова публикация"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Редактирано от {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "Нямате права за публикуване в този блог."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Статията ви е актуализирана."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Вашата статия е запазена."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Нова статия"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "Нямате права за изтриване на тази статия."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Статията е изтрита."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Изглежда, че статията, която се опитвате да изтриете не съществува. Може би "
"вече я няма?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Изглежда, че статията, която се опитвате да изтриете не съществува. Може би вече я няма?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"Не можа да се получи достатъчно информация за профила ви. Моля, уверете се, "
"че потребителското ви име е правилно."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "Не можа да се получи достатъчно информация за профила ви. Моля, уверете се, че потребителското ви име е правилно."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "За да споделите отново публикация, трябва да сте влезли в профила си"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Вече сте свързани."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "Вече сте изключени."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "Нулиране на паролата"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "Ето и връзка, на която да зададете нова парола: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "Вашата парола бе успешно възстановена."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
"За да получите достъп до таблото си за управление, трябва да сте влезли в "
"профила си"
msgstr "За да получите достъп до таблото си за управление, трябва да сте влезли в профила си"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "Вече не следвате {}."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "Вече следите {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "За да се абонирате за някого, трябва да сте влезли в системата"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "За редактирате профила си, трябва да влезете"
msgstr "За да редактирате профила си, трябва да влезете"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "Вашият профил е актуализиран."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "Вашият акаунт е изтрит."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "Не можете да изтриете профила на някой друг."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "Регистрациите са затворени в тази инстанция."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"Вашият акаунт беше създаден. Сега просто трябва да влезете за да можете да "
"го използвате."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "Вашият акаунт беше създаден. Сега просто трябва да влезете за да можете да го използвате."
msgid "Media upload"
msgstr "Качи медия"
@@ -455,12 +441,8 @@ msgstr "Парола"
msgid "Password confirmation"
msgstr "Потвърждение на парола"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"Извиняваме се, но регистрациите са затворени за тази конкретна инстанция. "
"Можете обаче да намерите друга."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "Извиняваме се, но регистрациите са затворени за тази конкретна инстанция. Можете обаче да намерите друга."
msgid "{0}'s subscriptions"
msgstr "{0} абонаменти"
@@ -472,9 +454,7 @@ msgid "Your Blogs"
msgstr "Вашият Блог"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
"Все още нямате блог. Създайте свой собствен или поискайте да се присъедините "
"към някой друг."
msgstr "Все още нямате блог. Създайте свой собствен или поискайте да се присъедините към някой друг."
msgid "Start a new blog"
msgstr "Започнете нов блог"
@@ -491,10 +471,8 @@ msgstr "Редактирайте профила си"
msgid "Your Profile"
msgstr "Вашият профил"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"За да промените аватара си, качете го в галерията и след това го изберете."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "За да промените аватара си, качете го в галерията и след това го изберете."
msgid "Upload an avatar"
msgstr "Качете аватар"
@@ -524,17 +502,13 @@ msgid "Danger zone"
msgstr "Опасна зона"
msgid "Be very careful, any action taken here can't be cancelled."
msgstr ""
"Бъдете много внимателни, всяко действие предприето тук не може да бъде "
"отменено."
msgstr "Бъдете много внимателни, всяко действие предприето тук не може да бъде отменено."
msgid "Delete your account"
msgstr "Изтриване на вашият профил"
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
"За съжаление, като администратор не можете да напуснете своята собствена "
"инстанция."
msgstr "За съжаление, като администратор не можете да напуснете своята собствена инстанция."
msgid "Latest articles"
msgstr "Последни статии"
@@ -564,20 +538,13 @@ msgid "Something broke on our side."
msgstr "Възникна грешка от ваша страна."
msgid "Sorry about that. If you think this is a bug, please report it."
msgstr ""
"Извиняваме се за това. Ако смятате, че това е грешка, моля докладвайте я."
msgstr "Извиняваме се за това. Ако смятате, че това е грешка, моля докладвайте я."
msgid "Invalid CSRF token"
msgstr "Невалиден CSRF token (маркер)"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"Нещо не е наред с вашия CSRF token (маркер). Уверете се, че бисквитките са "
"активирани в браузъра и опитайте да заредите отново тази страница. Ако "
"продължите да виждате това съобщение за грешка, моля, подайте сигнал за това."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "Нещо не е наред с вашия CSRF token (маркер). Уверете се, че бисквитките са активирани в браузъра и опитайте да заредите отново тази страница. Ако продължите да виждате това съобщение за грешка, моля, подайте сигнал за това."
msgid "You are not authorized."
msgstr "Не сте упълномощени."
@@ -660,29 +627,14 @@ msgstr "Лиценз по подразбиране"
msgid "Save these settings"
msgstr "Запаметете тези настройки"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Ако разглеждате този сайт като посетител, не се събират данни за вас."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"Като регистриран потребител трябва да предоставите потребителско име (което "
"не е задължително да е вашето истинско име), вашия функционален имейл адрес "
"и парола за да можете да влезете, да напишете статии и коментари. "
"Съдържанието, което изпращате се съхранява докато не го изтриете."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "Като регистриран потребител трябва да предоставите потребителско име (което не е задължително да е вашето истинско име), вашия функционален имейл адрес и парола за да можете да влезете, да напишете статии и коментари. Съдържанието, което изпращате се съхранява докато не го изтриете."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"Когато влезете в системата, съхраняваме две „бисквитки“, една за отваряне на "
"сесията, а втората за да попречи на други хора да действат от ваше име. Ние "
"не съхраняваме никакви други бисквитки."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "Когато влезете в системата, съхраняваме две „бисквитки“, една за отваряне на сесията, а втората за да попречи на други хора да действат от ваше име. Ние не съхраняваме никакви други бисквитки."
msgid "Blocklisted Emails"
msgstr "Имейли в череният списък"
@@ -690,14 +642,8 @@ msgstr "Имейли в череният списък"
msgid "Email address"
msgstr "Имейл адрес"
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgstr ""
"Имейл адресът, който искате да блокирате. За да блокирате домейните можете "
"да използвате широкообхватен синтаксис, например '*@example.com' блокира "
"всички адреси от example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr "Имейл адресът, който искате да блокирате. За да блокирате домейните можете да използвате широкообхватен синтаксис, например '*@example.com' блокира всички адреси от example.com"
msgid "Note"
msgstr "Бележка"
@@ -705,22 +651,14 @@ msgstr "Бележка"
msgid "Notify the user?"
msgstr "Уведомяване на потребителя?"
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgstr ""
"По желание, показва съобщение на потребителя, когато той се опита да създаде "
"акаунт с този адрес"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr "По желание, показва съобщение на потребителя, когато той се опита да създаде акаунт с този адрес"
msgid "Blocklisting notification"
msgstr "Известие за блокиране от списък"
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgstr ""
"Съобщението, което трябва да се покаже, когато потребителят се опита да "
"създаде акаунт с този имейл адрес"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr "Съобщението, което трябва да се покаже, когато потребителят се опита да създаде акаунт с този имейл адрес"
msgid "Add blocklisted address"
msgstr "Добавяне на адрес в черният списък"
@@ -791,12 +729,8 @@ msgstr "Подзаглавие"
msgid "Content"
msgstr "Съдържание"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"Можете да качвате мултимедия в галерията си, а след това да копирате "
"Markdown кода в статиите си за да я вмъкнете."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "Можете да качвате мултимедия в галерията си, а след това да копирате Markdown кода в статиите си за да я вмъкнете."
msgid "Upload media"
msgstr "Качете медия"
@@ -853,12 +787,8 @@ msgstr "Не искам повече да го подсилвам"
msgid "Boost"
msgstr "Подсилване"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}Влезте {1}или {2}използвайте акаунта си в Fediverse{3}, за да "
"взаимодействате с тази статия"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}Влезте {1}или {2}използвайте акаунта си в Fediverse{3}, за да взаимодействате с тази статия"
msgid "Comments"
msgstr "Коментари"
@@ -876,8 +806,7 @@ msgid "Are you sure?"
msgstr "Сигурен ли си?"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"Тази статия все още е проект. Само вие и другите автори можете да я видите."
msgstr "Тази статия все още е проект. Само вие и другите автори можете да я видите."
msgid "Only you and other authors can edit this article."
msgstr "Само вие и другите автори можете да редактирате тази статия."
@@ -915,12 +844,8 @@ msgstr "Обнови паролата"
msgid "Check your inbox!"
msgstr "Проверете си пощата!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"Изпратихме емайл с връзка за възстановяване на паролата ви, на адреса който "
"ни дадохте."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "Изпратихме емайл с връзка за възстановяване на паролата ви, на адреса който ни дадохте."
msgid "Send password reset link"
msgstr "Изпращане на връзка за възстановяване на парола"
@@ -928,12 +853,8 @@ msgstr "Изпращане на връзка за възстановяване
msgid "This token has expired"
msgstr "Този токен е изтекъл"
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgstr ""
"Моля, стартирайте процеса отново като щракнете <a href=\"/password-reset"
"\">тук</a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr "Моля, стартирайте процеса отново като щракнете <a href=\"/password-reset\">тук</a>."
msgid "New Blog"
msgstr "Нов блог"
@@ -947,11 +868,8 @@ msgstr "Създайте блог"
msgid "Edit \"{}\""
msgstr "редактирам \"{}\""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"Можете да качвате изображения в галерията си и да ги използвате като икони "
"на блога или банери."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "Можете да качвате изображения в галерията си и да ги използвате като икони на блога или банери."
msgid "Upload images"
msgstr "Качване на изображения"
@@ -969,9 +887,7 @@ msgid "Update blog"
msgstr "Актуализация блог"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
"Бъдете много внимателни, всяко действие, предприето тук не може да бъде "
"отменено."
msgstr "Бъдете много внимателни, всяко действие, предприето тук не може да бъде отменено."
msgid "Are you sure that you want to permanently delete this blog?"
msgstr "Сигурни ли сте, че искате да изтриете окончателно този блог?"
@@ -1012,16 +928,10 @@ msgid "Plume is a decentralized blogging engine."
msgstr "Pluma е децентрализиран двигател за блогове."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
"Авторите могат да управляват множество блогове, всеки като свой уникален "
"уебсайт."
msgstr "Авторите могат да управляват множество блогове, всеки като свой уникален уебсайт."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"Статиите се виждат и на други Plume инстанции като можете да взаимодействате "
"с тях директно и от други платформи като Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "Статиите се виждат и на други Plume инстанции като можете да взаимодействате с тях директно и от други платформи като Mastodon."
msgid "Read the detailed rules"
msgstr "Прочетете подробните правила"
@@ -1100,3 +1010,4 @@ msgstr "Публикувано под този лиценз"
msgid "Article license"
msgstr "Лиценз на статията"
+96 -179
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\n"
@@ -65,59 +65,59 @@ msgstr "Pàgina següent"
msgid "Optional"
msgstr "Opcional"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Per a crear un blog nou, heu diniciar una sessió"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Ja existeix un blog amb el mateix nom."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Sha creat el vostre blog correctament."
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Sha suprimit el vostre blog."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "No tens permís per a esborrar aquest blog."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "No tens permís per a editar aquest blog."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "No pots usar aquest Mèdia com a icona del blog."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "No pots usar aquest Mèdia com a capçalera del blog."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Sha actualitzat la informació del vostre blog."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Sha publicat el vostre comentari."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Sha suprimit el vostre comentari."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "S'han desat les configuracions de l'instància."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "{0} ha estat desbloquejat."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "{0} ha estat bloquejat."
@@ -125,51 +125,51 @@ msgstr "{0} ha estat bloquejat."
msgid "Blocks deleted"
msgstr "Bloquejos esborrats"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "Adreça de correu bloquejada"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr "No pots canviar els teus propis drets."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "No tens permís per a prendre aquesta acció."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "Fet."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "Per a agradar-te una publicació necessites iniciar sessió"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "S'ha esborrat el teu Mèdia."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "No tens permís per a esborrar aquest Mèdia."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "S'ha actualitzat el teu avatar."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "No tens permís per a usar aquest Mèdia."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "Per a veure les teves notificacions necessites iniciar sessió"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Aquesta entrada encara no està publicada."
@@ -177,123 +177,113 @@ msgstr "Aquesta entrada encara no està publicada."
msgid "To write a new post, you need to be logged in"
msgstr "Per a escriure una nova entrada cal iniciar sessió"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "No ets un autor d'aquest blog."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Apunt nou"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Edita {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "No tens permís per a publicar en aquest blog."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Sha actualitzat el vostre article."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Sha desat el vostre article."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Article nou"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "No tens permís per a esborrar aquest article."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Sha suprimit el vostre article."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Sembla que l'article que intentes esborrar no existeix. Potser ja no hi és?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Sembla que l'article que intentes esborrar no existeix. Potser ja no hi és?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"No s'ha pogut obtenir informació sobre el teu compte. Si us plau, assegura't "
"que el teu nom d'usuari és correcte."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "No s'ha pogut obtenir informació sobre el teu compte. Si us plau, assegura't que el teu nom d'usuari és correcte."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "Per a impulsar una entrada cal iniciar sessió"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Ara estàs connectat."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "Ara estàs desconnectat."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "Reinicialització de contrasenya"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "Aquí està l'enllaç per a reiniciar la teva contrasenya: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "Sha reinicialitzat la vostra contrasenya correctament."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr "Per a accedir al teu panell cal iniciar sessió"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "Ja no segueixes a {}."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "Ara estàs seguint a {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "Per a subscriure't a algú cal iniciar sessió"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "Per a editar el teu perfil cal iniciar sessió"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "El teu perfil s'ha actualitzat."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "El teu compte s'ha esborrat."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "No pots esborrar el compte d'algú altre."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "El registre d'aquesta instància és tancat."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"S'ha creat el teu compte. Ara cal iniciar sessió per a començar a usar-lo."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "S'ha creat el teu compte. Ara cal iniciar sessió per a començar a usar-lo."
msgid "Media upload"
msgstr "Carregar Mèdia"
@@ -302,9 +292,7 @@ msgid "Description"
msgstr "Descripció"
msgid "Useful for visually impaired people, as well as licensing information"
msgstr ""
"Molt útil per a persones amb deficiències visuals aixó com informació sobre "
"llicències"
msgstr "Molt útil per a persones amb deficiències visuals aixó com informació sobre llicències"
msgid "Content warning"
msgstr "Advertència sobre el contingut"
@@ -453,12 +441,8 @@ msgstr "Contrasenya"
msgid "Password confirmation"
msgstr "Confirmació de la contrasenya"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"Disculpa, el registre d'aquesta instància és tancat. Pots trobar-ne un altre "
"diferent."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "Disculpa, el registre d'aquesta instància és tancat. Pots trobar-ne un altre diferent."
msgid "{0}'s subscriptions"
msgstr "Subscripcions de {0}"
@@ -470,8 +454,7 @@ msgid "Your Blogs"
msgstr "Els vostres blogs"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
"Encara no tens cap bloc. Crea el teu propi o pregunta per a unir-te a un."
msgstr "Encara no tens cap bloc. Crea el teu propi o pregunta per a unir-te a un."
msgid "Start a new blog"
msgstr "Inicia un nou bloc"
@@ -488,11 +471,8 @@ msgstr "Edita el teu compte"
msgid "Your Profile"
msgstr "El vostre perfil"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"Per a canviar el teu avatar, puja'l a la teva galeria i desprès selecciona'l "
"allà."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "Per a canviar el teu avatar, puja'l a la teva galeria i desprès selecciona'l allà."
msgid "Upload an avatar"
msgstr "Puja un avatar"
@@ -528,8 +508,7 @@ msgid "Delete your account"
msgstr "Elimina el teu compte"
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
"Ho sentim però com a admin, no pots abandonar la teva pròpia instància."
msgstr "Ho sentim però com a admin, no pots abandonar la teva pròpia instància."
msgid "Latest articles"
msgstr "Darrers articles"
@@ -564,14 +543,8 @@ msgstr "Disculpa-n's. Si creus que això és un error, si us plau reporta-ho."
msgid "Invalid CSRF token"
msgstr "Token CSRF invalid"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"Alguna cosa no és correcte amb el teu token CSRF. Assegura't que no "
"bloqueges les galetes en el teu navegador i prova refrescant la pàgina. Si "
"continues veient aquest missatge d'error, si us plau informa-ho."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "Alguna cosa no és correcte amb el teu token CSRF. Assegura't que no bloqueges les galetes en el teu navegador i prova refrescant la pàgina. Si continues veient aquest missatge d'error, si us plau informa-ho."
msgid "You are not authorized."
msgstr "No estàs autoritzat."
@@ -654,31 +627,14 @@ msgstr "Llicència per defecte dels articles"
msgid "Save these settings"
msgstr "Desa aquests paràmetres"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
"Si estàs navegant aquest lloc com a visitant cap dada sobre tu serà "
"recollida."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Si estàs navegant aquest lloc com a visitant cap dada sobre tu serà recollida."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"Com a usuari registrat has de proporcionar un nom d'usuari (que no ha de ser "
"el teu nom real), una adreça de correu funcional i una contrasenya per a "
"poder ser capaç d'iniciar sessió, escriure articles i comentar-los. El "
"contingut que enviïs es guarda fins que tu l'esborris."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "Com a usuari registrat has de proporcionar un nom d'usuari (que no ha de ser el teu nom real), una adreça de correu funcional i una contrasenya per a poder ser capaç d'iniciar sessió, escriure articles i comentar-los. El contingut que enviïs es guarda fins que tu l'esborris."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"Quan inicies sessió guardem dues galetes, una per a mantenir la sessió "
"oberta i l l'altre per a evitar que d'altres persones actuïn en el teu nom. "
"No guardem cap altre galeta."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "Quan inicies sessió guardem dues galetes, una per a mantenir la sessió oberta i l l'altre per a evitar que d'altres persones actuïn en el teu nom. No guardem cap altre galeta."
msgid "Blocklisted Emails"
msgstr "Llista de bloqueig d'adreces de correu"
@@ -686,14 +642,8 @@ msgstr "Llista de bloqueig d'adreces de correu"
msgid "Email address"
msgstr "Adreça de correu electrònic"
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgstr ""
"L'adreça de correu electrònic que desitges bloquejar. Per a bloquejar "
"dominis pots usar la sintaxi global, per exemple '*@exemple.com' bloqueja "
"totes les adreces de exemple.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr "L'adreça de correu electrònic que desitges bloquejar. Per a bloquejar dominis pots usar la sintaxi global, per exemple '*@exemple.com' bloqueja totes les adreces de exemple.com"
msgid "Note"
msgstr "Nota"
@@ -701,22 +651,14 @@ msgstr "Nota"
msgid "Notify the user?"
msgstr "Notificar l'usuari?"
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgstr ""
"Opcional, mostra un missatge al usuari quan intenta crear un compte amb "
"aquesta adreça"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr "Opcional, mostra un missatge al usuari quan intenta crear un compte amb aquesta adreça"
msgid "Blocklisting notification"
msgstr "Notificacions de la llista de bloqueig"
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgstr ""
"El missatge per a ser mostrat quan l'usuari intenta crear un compte amb "
"aquesta adreça de correu"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr "El missatge per a ser mostrat quan l'usuari intenta crear un compte amb aquesta adreça de correu"
msgid "Add blocklisted address"
msgstr "Afegir adreça a la llista de bloquejos"
@@ -787,12 +729,8 @@ msgstr "Subtítol"
msgid "Content"
msgstr "Contingut"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"Pots pujar Mèdia a la teva galeria i desprès copiar el codi Markdown dels "
"teus articles per a inserir-los."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "Pots pujar Mèdia a la teva galeria i desprès copiar el codi Markdown dels teus articles per a inserir-los."
msgid "Upload media"
msgstr "Pujar Mèdia"
@@ -849,12 +787,8 @@ msgstr "Ja no vull impulsar més això"
msgid "Boost"
msgstr "Impuls"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}Inicia sessió{1}, o {2}usa el teu compte del Fedivers{3} per a "
"interactuar amb aquest article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}Inicia sessió{1}, o {2}usa el teu compte del Fedivers{3} per a interactuar amb aquest article"
msgid "Comments"
msgstr "Comentaris"
@@ -872,9 +806,7 @@ msgid "Are you sure?"
msgstr "Nesteu segur?"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"Aquest article és encara un esborrany. Només tu i altres autors podeu "
"veure'l."
msgstr "Aquest article és encara un esborrany. Només tu i altres autors podeu veure'l."
msgid "Only you and other authors can edit this article."
msgstr "Només tu i altres autors podeu editar aquest article."
@@ -912,12 +844,8 @@ msgstr "Actualitza la contrasenya"
msgid "Check your inbox!"
msgstr "Reviseu la vostra safata dentrada."
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"Hem enviat un correu a l'adreça que ens vas donar, amb un enllaç per a "
"reiniciar la teva contrasenya."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "Hem enviat un correu a l'adreça que ens vas donar, amb un enllaç per a reiniciar la teva contrasenya."
msgid "Send password reset link"
msgstr "Envia l'enllaç per a reiniciar la contrasenya"
@@ -925,11 +853,8 @@ msgstr "Envia l'enllaç per a reiniciar la contrasenya"
msgid "This token has expired"
msgstr "Aquest token ha caducat"
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgstr ""
"Si us plau inicia el procés clicant <a href=\"/password-reset\">aquí</a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr "Si us plau inicia el procés clicant <a href=\"/password-reset\">aquí</a>."
msgid "New Blog"
msgstr "Blog nou"
@@ -943,11 +868,8 @@ msgstr "Crea un blog"
msgid "Edit \"{}\""
msgstr "Edita «{}»"
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"Pots pujar imatges a la teva galeria per a usar-les com a icones o "
"capçaleres del bloc."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "Pots pujar imatges a la teva galeria per a usar-les com a icones o capçaleres del bloc."
msgid "Upload images"
msgstr "Pujar imatges"
@@ -1006,16 +928,10 @@ msgid "Plume is a decentralized blogging engine."
msgstr "Plume és un motor de blocs descentralitzats."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
"Els autors poden gestionar diversos blocs, cadascun amb la seva pròpia "
"pàgina."
msgstr "Els autors poden gestionar diversos blocs, cadascun amb la seva pròpia pàgina."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"Els articles son visibles en altres instàncies Plume i pots interactuar "
"directament amb ells des d'altres plataformes com ara Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "Els articles son visibles en altres instàncies Plume i pots interactuar directament amb ells des d'altres plataformes com ara Mastodon."
msgid "Read the detailed rules"
msgstr "Llegeix les normes detallades"
@@ -1094,3 +1010,4 @@ msgstr "Publicat segons aquesta llicència"
msgid "Article license"
msgstr "Llicència del article"
+112 -186
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2022-01-02 11:39\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
@@ -43,7 +43,7 @@ msgstr "Vaše zdroje"
# src/template_utils.rs:117
msgid "Local feed"
msgstr "Místni zdroje"
msgstr "Místní zdroje"
# src/template_utils.rs:118
msgid "Federated feed"
@@ -55,121 +55,121 @@ msgstr "Avatar uživatele {0}"
# src/template_utils.rs:198
msgid "Previous page"
msgstr ""
msgstr "Předchozí stránka"
# src/template_utils.rs:209
msgid "Next page"
msgstr ""
msgstr "Následující strana"
# src/template_utils.rs:363
msgid "Optional"
msgstr "Nepovinné"
msgstr "Volitelné"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Pro vytvoření nového blogu musíte být přihlášeni"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Blog s rovnakým názvem již existuje."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Váš blog byl úspěšně vytvořen!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Váš blog byl smazán."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "Nemáte oprávnění zmazat tento blog."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "Nemáte oprávnění upravovat tento blog."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "Toto médium nelze použít jako ikonu blogu."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "Toto médium nelze použít jako banner blogu."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Údaje o vašem blogu byly aktualizovány."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Váš komentář byl zveřejněn."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Váš komentář byl odstraněn."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "Nastavení instance bylo uloženo."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
msgstr "{} byl/a odblokován/a."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
msgstr "{} byl/a zablokován/a."
# src/routes/instance.rs:203
msgid "Blocks deleted"
msgstr ""
msgstr "Blokování odstraněno"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
msgstr "Email je již zablokován"
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
msgstr "Email zablokován"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
msgstr "Nemůžete změnit vlastní oprávnění."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
msgstr "Nemáte oprávnění k provedení tohoto úkonu."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
msgstr "Hotovo."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
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"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Vaše média byla smazána."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "Nemáte oprávnění k smazání tohoto média."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Váš avatar byl aktualizován."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "Nemáte oprávnění k použití tohoto média."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
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"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Tento příspěvek ještě není zveřejněn."
@@ -177,125 +177,113 @@ msgstr "Tento příspěvek ještě není zveřejněn."
msgid "To write a new post, you need to be logged in"
msgstr "K napsaní nového příspěvku musíte být přihlášeni"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "Nejste autorem tohto blogu."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Nový příspěvek"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Upravit {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "Nemáte oprávnění zveřejňovat na tomto blogu."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Váš článek byl upraven."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Váš článek byl uložen."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Nový článek"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "Nemáte oprávnění zmazat tento článek."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Váš článek byl smazán."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Zdá se, že článek, který jste se snažili smazat, neexistuje, možná je již "
"pryč?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Zdá se, že článek, který jste se snažili smazat, neexistuje, možná je již pryč?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"Nemohli jsme zjistit dostatečné množství informací ohledne vašeho účtu. "
"Prosím ověřte si, že vaše předzývka je správná."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "Nemohli jsme zjistit dostatečné množství informací ohledne vašeho účtu. Prosím ověřte si, že vaše předzývka je správná."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
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"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Nyní jste připojeni."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "Nyní jste odhlášeni."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "Obnovit heslo"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "Zde je odkaz na obnovení vášho hesla: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "Vaše heslo bylo úspěšně obnoveno."
# src/routes/user.rs:141
# src/routes/user.rs:74
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"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "Již nenásledujete {}."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "Teď již nenásledujete {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
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"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "Pro úpravu vášho profilu musíte být přihlášeni"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "Váš profil byl upraven."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "Váš účet byl odstraněn."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "Nemůžete smazat účet někoho jiného."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "Registrace jsou na téhle instanci uzavřeny."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"Váš účet byl vytvořen. Nyní se stačí jenom přihlásit, než ho budete moci "
"používat."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "Váš účet byl vytvořen. Nyní se stačí jenom přihlásit, než ho budete moci používat."
msgid "Media upload"
msgstr "Nahrávaní médií"
@@ -397,7 +385,7 @@ msgid "Matrix room"
msgstr "Matrix místnost"
msgid "Admin"
msgstr "Administrátor"
msgstr "Správce"
msgid "It is you"
msgstr "To jste vy"
@@ -453,12 +441,8 @@ msgstr "Heslo"
msgid "Password confirmation"
msgstr "Potvrzení hesla"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"Omlouváme se, ale registrace je uzavřena na této konkrétní instanci. Můžete "
"však najít jinou."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "Omlouváme se, ale registrace je uzavřena na této konkrétní instanci. Můžete však najít jinou."
msgid "{0}'s subscriptions"
msgstr "Odběry uživatele {0}"
@@ -470,9 +454,7 @@ msgid "Your Blogs"
msgstr "Vaše Blogy"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
"Zatím nemáte žádný blog. Vytvořte si vlastní, nebo požádejte v nejakém o "
"členství."
msgstr "Zatím nemáte žádný blog. Vytvořte si vlastní, nebo požádejte v nejakém o členství."
msgid "Start a new blog"
msgstr "Začít nový blog"
@@ -489,11 +471,8 @@ msgstr "Upravit váš účet"
msgid "Your Profile"
msgstr "Váš profil"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"Chcete-li změnit svůj avatar, nahrejte ho do své galérie a pak ho odtud "
"zvolte."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "Chcete-li změnit svůj avatar, nahrejte ho do své galérie a pak ho odtud zvolte."
msgid "Upload an avatar"
msgstr "Nahrát avatara"
@@ -505,10 +484,10 @@ msgid "Summary"
msgstr "Souhrn"
msgid "Theme"
msgstr ""
msgstr "Motiv"
msgid "Default theme"
msgstr ""
msgstr "Výchozí motiv"
msgid "Error while loading theme selector."
msgstr ""
@@ -523,15 +502,13 @@ msgid "Danger zone"
msgstr "Nebezpečná zóna"
msgid "Be very careful, any action taken here can't be cancelled."
msgstr ""
"Buďte velmi opatrný/á, jakákoliv zde provedená akce nemůže být zrušena."
msgstr "Buďte velmi opatrný/á, jakákoliv zde provedená akce nemůže být zrušena."
msgid "Delete your account"
msgstr "Smazat váš účet"
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
"Omlouváme se, ale jako administrátor nemůžete opustit svou vlastní instanci."
msgstr "Omlouváme se, ale jako administrátor nemůžete opustit svou vlastní instanci."
msgid "Latest articles"
msgstr "Nejposlednejší články"
@@ -566,14 +543,8 @@ msgstr "Omlouváme se. Pokud si myslíte, že jde o chybu, prosím nahlašte ji.
msgid "Invalid CSRF token"
msgstr "Neplatný CSRF token"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"S vaším tokenem CSRF něco není v pořádku. Ujistěte se, že máte v prohlížeči "
"povolené cookies a zkuste obnovit stránku. Pokud tuto chybovou zprávu budete "
"nadále vidět, prosím nahlašte ji."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "S vaším tokenem CSRF něco není v pořádku. Ujistěte se, že máte v prohlížeči povolené cookies a zkuste obnovit stránku. Pokud tuto chybovou zprávu budete nadále vidět, prosím nahlašte ji."
msgid "You are not authorized."
msgstr "Nemáte oprávnění."
@@ -618,13 +589,13 @@ msgid "Run on selected users"
msgstr ""
msgid "Moderator"
msgstr ""
msgstr "Moderátor"
msgid "Moderation"
msgstr ""
msgid "Home"
msgstr ""
msgstr "Domů"
msgid "Administration of {0}"
msgstr "Správa {0}"
@@ -656,30 +627,14 @@ msgstr "Výchozí licence článků"
msgid "Save these settings"
msgstr "Uložit tyhle nastavení"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
"Pokud si tuto stránku prohlížete jako návštěvník, žádné údaje o vás nejsou "
"shromažďovány."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Pokud si tuto stránku prohlížete jako návštěvník, žádné údaje o vás nejsou shromažďovány."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"Jako registrovaný uživatel musíte poskytnout uživatelské jméno (které nemusí "
"být vaším skutečným jménem), funkční e-mailovou adresu a heslo, aby jste se "
"mohl přihlásit, psát články a komentář."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "Jako registrovaný uživatel musíte poskytnout uživatelské jméno (které nemusí být vaším skutečným jménem), funkční e-mailovou adresu a heslo, aby jste se mohl přihlásit, psát články a komentář."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"Když se přihlásíte, ukládáme dvě cookies, jedno, aby bylo možné udržet vaše "
"zasedání otevřené, druhé, aby se zabránilo jiným lidem jednat ve vašem "
"jméně. Žádné další cookies neukládáme."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "Když se přihlásíte, ukládáme dvě cookies, jedno, aby bylo možné udržet vaše zasedání otevřené, druhé, aby se zabránilo jiným lidem jednat ve vašem jméně. Žádné další cookies neukládáme."
msgid "Blocklisted Emails"
msgstr ""
@@ -687,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -699,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -719,13 +667,13 @@ msgid "There are no blocked emails on your instance"
msgstr ""
msgid "Delete selected emails"
msgstr ""
msgstr "Smazat vybrané emaily"
msgid "Email address:"
msgstr ""
msgstr "Emailová adresa:"
msgid "Blocklisted for:"
msgstr ""
msgstr "Blokováno pro:"
msgid "Will notify them on account creation with this message:"
msgstr ""
@@ -781,12 +729,8 @@ msgstr "Podtitul"
msgid "Content"
msgstr "Obsah"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"Můžete nahrát média do své galerie, a pak zkopírovat jejich kód Markdown do "
"vašich článků, pro vložení."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "Můžete nahrát média do své galerie, a pak zkopírovat jejich kód Markdown do vašich článků, pro vložení."
msgid "Upload media"
msgstr "Nahrát média"
@@ -847,12 +791,8 @@ msgstr "Už to nechci dále boostovat"
msgid "Boost"
msgstr "Boostnout"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}Přihlasit se{1}, nebo {2}použít váš Fediverse účet{3} k interakci s tímto "
"článkem"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}Přihlasit se{1}, nebo {2}použít váš Fediverse účet{3} k interakci s tímto článkem"
msgid "Comments"
msgstr "Komentáře"
@@ -870,8 +810,7 @@ msgid "Are you sure?"
msgstr "Jste si jisti?"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"Tento článek je stále konceptem. Jenom vy, a další autoři ho mohou vidět."
msgstr "Tento článek je stále konceptem. Jenom vy, a další autoři ho mohou vidět."
msgid "Only you and other authors can edit this article."
msgstr "Jenom vy, a další autoři mohou upravovat tento článek."
@@ -909,12 +848,8 @@ msgstr "Aktualizovat heslo"
msgid "Check your inbox!"
msgstr "Zkontrolujte svou příchozí poštu!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"Zaslali jsme email na adresu, kterou jste nám dodali, s odkazem na obnovu "
"vášho hesla."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "Zaslali jsme email na adresu, kterou jste nám dodali, s odkazem na obnovu vášho hesla."
msgid "Send password reset link"
msgstr "Poslat odkaz na obnovení hesla"
@@ -922,9 +857,7 @@ msgstr "Poslat odkaz na obnovení hesla"
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -939,11 +872,8 @@ msgstr "Vytvořit blog"
msgid "Edit \"{}\""
msgstr "Upravit \"{}\""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"Můžete nahrát obrázky do své galerie, aby je šlo použít jako ikony blogu, "
"nebo bannery."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "Můžete nahrát obrázky do své galerie, aby je šlo použít jako ikony blogu, nebo bannery."
msgid "Upload images"
msgstr "Nahrát obrázky"
@@ -961,8 +891,7 @@ msgid "Update blog"
msgstr "Aktualizovat blog"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
"Buďte velmi opatrný/á, jakákoliv zde provedená akce nemůže být vrácena."
msgstr "Buďte velmi opatrný/á, jakákoliv zde provedená akce nemůže být vrácena."
msgid "Are you sure that you want to permanently delete this blog?"
msgstr ""
@@ -1007,12 +936,8 @@ msgstr "Plume je decentralizovaný blogování systém."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr "Autoři mohou spravovat vícero blogů, každý jako svou vlastní stránku."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"Články jsou viditelné také na ostatních Plume instancích, a můžete s nimi "
"narábět přímo i v rámci jiných platforem, jako je Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "Články jsou viditelné také na ostatních Plume instancích, a můžete s nimi narábět přímo i v rámci jiných platforem, jako je Mastodon."
msgid "Read the detailed rules"
msgstr "Přečtěte si podrobná pravidla"
@@ -1091,3 +1016,4 @@ msgstr "Zveřejněn pod touto licenci"
msgid "Article license"
msgstr "Licence článku"
+73 -110
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr ""
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr ""
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr ""
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr ""
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr ""
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr ""
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr ""
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr ""
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr ""
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr ""
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr ""
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr ""
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr ""
@@ -177,118 +177,112 @@ msgstr ""
msgid "To write a new post, you need to be logged in"
msgstr ""
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr ""
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr ""
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr ""
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr ""
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr ""
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr ""
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr ""
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr ""
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr ""
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr ""
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -447,9 +441,7 @@ msgstr ""
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -479,8 +471,7 @@ msgstr ""
msgid "Your Profile"
msgstr ""
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "Upload an avatar"
@@ -552,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -639,21 +627,13 @@ msgstr ""
msgid "Save these settings"
msgstr ""
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -662,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -674,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -756,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr ""
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -816,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -875,9 +844,7 @@ msgstr ""
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -886,9 +853,7 @@ msgstr ""
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -903,8 +868,7 @@ msgstr ""
msgid "Edit \"{}\""
msgstr ""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -966,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1048,3 +1010,4 @@ msgstr ""
msgid "Article license"
msgstr ""
+100 -189
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -65,59 +65,59 @@ msgstr "Nächste Seite"
msgid "Optional"
msgstr "Optional"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Du musst angemeldet sein, um einen Blog zu erstellen"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Es existiert bereits ein Blog mit diesem Namen."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Dein Blog wurde erfolgreich erstellt!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Dein Blog wurde gelöscht."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "Du bist nicht berechtigt, diesen Blog zu löschen."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "Du bist nicht berechtigt, diesen Blog zu bearbeiten."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "Du kannst dieses Medium nicht als Blog-Symbol verwenden."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "Du kannst diese Datei nicht als Blog-Banner verwenden."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Informationen des Blog wurden aktualisiert."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Dein Kommentar wurde veröffentlicht."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Dein Kommentar wurde gelöscht."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "Die Instanzeinstellungen wurden gespeichert."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "{} wurde entsperrt."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "{} wurde gesperrt."
@@ -125,51 +125,51 @@ msgstr "{} wurde gesperrt."
msgid "Blocks deleted"
msgstr "Blöcke gelöscht"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
msgstr "E-Mail-Adresse bereits gesperrt"
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "E-Mail-Adresse gesperrt"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr "Du kannst deine eigenen Berechtigungen nicht ändern."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "Du bist nicht berechtigt, diese Aktion auszuführen."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "Fertig"
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "Um einen Beitrag zu liken, musst du angemeldet sein"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Deine Datei wurde gelöscht."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "Dir fehlt die Berechtigung, diese Datei zu löschen."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Dein Benutzerbild wurde aktualisiert."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "Dir fehlt die Berechtigung, um diese Datei zu nutzen."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "Um deine Benachrichtigungen zu sehen, musst du angemeldet sein"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Dieser Beitrag wurde noch nicht veröffentlicht."
@@ -177,125 +177,113 @@ msgstr "Dieser Beitrag wurde noch nicht veröffentlicht."
msgid "To write a new post, you need to be logged in"
msgstr "Um einen neuen Beitrag zu schreiben, musst du angemeldet sein"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "Du bist kein Autor dieses Blogs."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Neuer Beitrag"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "{0} bearbeiten"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "Dir fehlt die Berechtigung, in diesem Blog zu veröffentlichen."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Dein Artikel wurde aktualisiert."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Dein Artikel wurde gespeichert."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Neuer Artikel"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "Dir fehlt die Berechtigung, diesen Artikel zu löschen."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Dein Artikel wurde gelöscht."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Möglicherweise ist der zu löschende Artikel nicht (mehr) vorhanden. Wurde er "
"vielleicht schon entfernt?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Möglicherweise ist der zu löschende Artikel nicht (mehr) vorhanden. Wurde er vielleicht schon entfernt?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"Wir konnten nicht genug Informationen über dein Konto finden. Bitte stelle "
"sicher, dass dein Benutzername richtig ist."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "Wir konnten nicht genug Informationen über dein Konto finden. Bitte stelle sicher, dass dein Benutzername richtig ist."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "Um einen Beitrag erneut zu veröffentlichen, musst du angemeldet sein"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Du bist nun verbunden."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "Du bist jetzt abgemeldet."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "Passwort zurücksetzen"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "Hier der Link, um das Passwort zurückzusetzen: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "Dein Passwort wurde erfolgreich zurückgesetzt."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr "Um auf dein Dashboard zuzugreifen, musst du angemeldet sein"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "Du folgst {} nun nicht mehr."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "Du folgst nun {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "Um jemanden zu abonnieren, musst du angemeldet sein"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "Um dein Profil zu bearbeiten, musst du angemeldet sein"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "Dein Profil wurde aktualisiert."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "Dein Benutzerkonto wurde gelöscht."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "Dir fehlt die Berechtigung, das Konto eines anderen zu löschen."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "Anmeldungen sind auf dieser Instanz aktuell nicht möglich."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"Dein Konto wurde erstellt. Jetzt musst du dich nur noch anmelden, um es "
"nutzen zu können."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "Dein Konto wurde erstellt. Jetzt musst du dich nur noch anmelden, um es nutzen zu können."
msgid "Media upload"
msgstr "Hochladen von Mediendateien"
@@ -453,12 +441,8 @@ msgstr "Passwort"
msgid "Password confirmation"
msgstr "Passwort bestätigen"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"Entschuldigung, Registrierungen sind auf dieser Instanz geschlossen. Du "
"kannst jedoch eine andere finden."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "Entschuldigung, Registrierungen sind auf dieser Instanz geschlossen. Du kannst jedoch eine andere finden."
msgid "{0}'s subscriptions"
msgstr "{0}'s Abonnements"
@@ -470,9 +454,7 @@ msgid "Your Blogs"
msgstr "Deine Blogs"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
"Du hast noch keinen Blog. Erstelle deinen eigenen, oder frage, um dich einem "
"anzuschließen."
msgstr "Du hast noch keinen Blog. Erstelle deinen eigenen, oder frage, um dich einem anzuschließen."
msgid "Start a new blog"
msgstr "Neuen Blog beginnen"
@@ -481,7 +463,7 @@ msgid "Your Drafts"
msgstr "Deine Entwürfe"
msgid "Go to your gallery"
msgstr "Zu deiner Gallerie"
msgstr "Zu deiner Galerie"
msgid "Edit your account"
msgstr "Eigenes Profil bearbeiten"
@@ -489,11 +471,8 @@ msgstr "Eigenes Profil bearbeiten"
msgid "Your Profile"
msgstr "Dein Profil"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"Um dein Profilbild zu ändern, lade es in deine Galerie hoch und wähle es "
"dort aus."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "Um dein Profilbild zu ändern, lade es in deine Galerie hoch und wähle es dort aus."
msgid "Upload an avatar"
msgstr "Ein Profilbild hochladen"
@@ -529,9 +508,7 @@ msgid "Delete your account"
msgstr "Eigenen Account löschen"
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
"Entschuldingung, aber als Administrator kannst du deine eigene Instanz nicht "
"verlassen."
msgstr "Entschuldingung, aber als Administrator kannst du deine eigene Instanz nicht verlassen."
msgid "Latest articles"
msgstr "Neueste Artikel"
@@ -561,20 +538,13 @@ msgid "Something broke on our side."
msgstr "Bei dir ist etwas schief gegangen."
msgid "Sorry about that. If you think this is a bug, please report it."
msgstr ""
"Das tut uns leid. Wenn du denkst, dass dies ein Bug ist, melde ihn bitte."
msgstr "Das tut uns leid. Wenn du denkst, dass dies ein Bug ist, melde ihn bitte."
msgid "Invalid CSRF token"
msgstr "Ungültiges CSRF-Token"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"Irgendetwas stimmt mit deinem CSRF token nicht. Vergewissere dich, dass "
"Cookies in deinem Browser aktiviert sind und versuche diese Seite neu zu "
"laden. Bitte melde diesen Fehler, falls er erneut auftritt."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "Irgendetwas stimmt mit deinem CSRF token nicht. Vergewissere dich, dass Cookies in deinem Browser aktiviert sind und versuche diese Seite neu zu laden. Bitte melde diesen Fehler, falls er erneut auftritt."
msgid "You are not authorized."
msgstr "Berechtigung fehlt"
@@ -657,31 +627,14 @@ msgstr "Voreingestellte Artikel-Lizenz"
msgid "Save these settings"
msgstr "Diese Einstellungen speichern"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
"Wenn Sie diese Website als Besucher nutzen, werden keine Daten über Sie "
"erhoben."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Wenn Sie diese Website als Besucher nutzen, werden keine Daten über Sie erhoben."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"Als registrierter Benutzer müssen Sie Ihren Benutzernamen (der nicht Ihr "
"richtiger Name sein muss), Ihre E-Mail-Adresse und ein Passwort angeben, um "
"sich anmelden, Artikel schreiben und kommentieren zu können. Die von Ihnen "
"übermittelten Inhalte werden gespeichert, bis Sie sie löschen."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "Als registrierter Benutzer müssen Sie Ihren Benutzernamen (der nicht Ihr richtiger Name sein muss), Ihre E-Mail-Adresse und ein Passwort angeben, um sich anmelden, Artikel schreiben und kommentieren zu können. Die von Ihnen übermittelten Inhalte werden gespeichert, bis Sie sie löschen."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"Wenn Sie sich anmelden, speichern wir zwei Cookies, eines, um Ihre Sitzung "
"offen zu halten, das andere, um zu verhindern, dass andere Personen in Ihrem "
"Namen handeln. Wir speichern keine weiteren Cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "Wenn Sie sich anmelden, speichern wir zwei Cookies, eines, um Ihre Sitzung offen zu halten, das andere, um zu verhindern, dass andere Personen in Ihrem Namen handeln. Wir speichern keine weiteren Cookies."
msgid "Blocklisted Emails"
msgstr "Gesperrte E-Mail-Adressen"
@@ -689,14 +642,8 @@ msgstr "Gesperrte E-Mail-Adressen"
msgid "Email address"
msgstr "EMailAdresse"
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgstr ""
"Die E-Mail-Adresse, die du sperren möchtest. Um bestimmte Domänen zu "
"sperren, kannst du den Globbing-Syntax verwenden: Beispielsweise: *@example."
"com” sperrt alle Adressen von example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr "Die E-Mail-Adresse, die du sperren möchtest. Um bestimmte Domänen zu sperren, kannst du den Globbing-Syntax verwenden: Beispielsweise: *@example.com” sperrt alle Adressen von example.com"
msgid "Note"
msgstr "Notiz"
@@ -704,22 +651,14 @@ msgstr "Notiz"
msgid "Notify the user?"
msgstr "Benutzer benachrichtigen?"
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgstr ""
"Optional: Dem Benutzer wird eine Nachricht angezeigt, wenn er versucht, ein "
"Konto mit dieser Adresse zu erstellen"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr "Optional: Dem Benutzer wird eine Nachricht angezeigt, wenn er versucht, ein Konto mit dieser Adresse zu erstellen"
msgid "Blocklisting notification"
msgstr "Sperrlisten-Benachrichtigung"
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgstr ""
"Die Nachricht, die angezeigt wird, wenn der Benutzer versucht, ein Konto mit "
"dieser E-Mail-Adresse zu erstellen"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr "Die Nachricht, die angezeigt wird, wenn der Benutzer versucht, ein Konto mit dieser E-Mail-Adresse zu erstellen"
msgid "Add blocklisted address"
msgstr "Adresse zur Sperrliste hinzufügen"
@@ -737,12 +676,10 @@ msgid "Blocklisted for:"
msgstr "Gesperrt für:"
msgid "Will notify them on account creation with this message:"
msgstr ""
"Du wirst beim Erstellen eines Kontos mit dieser Nachricht benachrichtigt:"
msgstr "Du wirst beim Erstellen eines Kontos mit dieser Nachricht benachrichtigt:"
msgid "The user will be silently prevented from making an account"
msgstr ""
"Der Benutzer wird stillschweigend daran gehindert, ein Konto einzurichten"
msgstr "Der Benutzer wird stillschweigend daran gehindert, ein Konto einzurichten"
msgid "Welcome to {}"
msgstr "Willkommen bei {}"
@@ -792,12 +729,8 @@ msgstr "Untertitel"
msgid "Content"
msgstr "Inhalt"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"Du kannst Medien in deine Galerie hochladen und dann deren Markdown-Code in "
"deine Artikel kopieren, um sie einzufügen."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "Du kannst Medien in deine Galerie hochladen und dann deren Markdown-Code in deine Artikel kopieren, um sie einzufügen."
msgid "Upload media"
msgstr "Medien hochladen"
@@ -854,12 +787,8 @@ msgstr "Ich möchte das nicht mehr boosten"
msgid "Boost"
msgstr "Boosten"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}Anmelden{1} oder {2}Ihr Fediverse-Konto verwenden{3}, um mit diesem "
"Artikel zu interagieren."
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}Anmelden{1} oder {2}Ihr Fediverse-Konto verwenden{3}, um mit diesem Artikel zu interagieren."
msgid "Comments"
msgstr "Kommentare"
@@ -877,9 +806,7 @@ msgid "Are you sure?"
msgstr "Bist du dir sicher?"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"Dieser Artikel ist noch ein Entwurf. Nur Sie und andere Autoren können ihn "
"sehen."
msgstr "Dieser Artikel ist noch ein Entwurf. Nur Sie und andere Autoren können ihn sehen."
msgid "Only you and other authors can edit this article."
msgstr "Nur Sie und andere Autoren können diesen Artikel bearbeiten."
@@ -917,12 +844,8 @@ msgstr "Passwort aktualisieren"
msgid "Check your inbox!"
msgstr "Posteingang prüfen!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"Wir haben eine Mail an die von dir angegebene Adresse gesendet, mit einem "
"Link, um dein Passwort zurückzusetzen."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "Wir haben eine Mail an die von dir angegebene Adresse gesendet, mit einem Link, um dein Passwort zurückzusetzen."
msgid "Send password reset link"
msgstr "Link zum Zurücksetzen des Passworts senden"
@@ -930,12 +853,8 @@ msgstr "Link zum Zurücksetzen des Passworts senden"
msgid "This token has expired"
msgstr "Diese Token ist veraltet"
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgstr ""
"Bitte starten Sie den Prozess erneut, indem Sie <a href=\"/password-reset"
"\">hier</a> klicken."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr "Bitte starten Sie den Prozess erneut, indem Sie <a href=\"/password-reset\">hier</a> klicken."
msgid "New Blog"
msgstr "Neuer Blog"
@@ -949,11 +868,8 @@ msgstr "Blog erstellen"
msgid "Edit \"{}\""
msgstr "„{}” bearbeiten"
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"Sie können Bilder in Ihre Galerie hochladen, um sie als Blog-Symbol oder "
"Banner zu verwenden."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "Sie können Bilder in Ihre Galerie hochladen, um sie als Blog-Symbol oder Banner zu verwenden."
msgid "Upload images"
msgstr "Bilder hochladen"
@@ -971,9 +887,7 @@ msgid "Update blog"
msgstr "Blog aktualisieren"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
"Seien Sie sehr vorsichtig, alle hier getroffenen Aktionen können nicht "
"widerrufen werden."
msgstr "Seien Sie sehr vorsichtig, alle hier getroffenen Aktionen können nicht widerrufen werden."
msgid "Are you sure that you want to permanently delete this blog?"
msgstr "Möchten Sie diesen Blog wirklich dauerhaft löschen?"
@@ -1016,12 +930,8 @@ msgstr "Plume ist eine dezentrale Blogging-Engine."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr "Autoren können mehrere Blogs verwalten, jeden als eigene Website."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"Artikel sind auch auf anderen Plume-Instanzen sichtbar und du kannst mit "
"ihnen direkt von anderen Plattformen wie Mastodon interagieren."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "Artikel sind auch auf anderen Plume-Instanzen sichtbar und du kannst mit ihnen direkt von anderen Plattformen wie Mastodon interagieren."
msgid "Read the detailed rules"
msgstr "Die detaillierten Regeln lesen"
@@ -1100,3 +1010,4 @@ msgstr "Unter dieser Lizenz veröffentlicht"
msgid "Article license"
msgstr "Artikel-Lizenz"
+73 -110
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr ""
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr ""
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr ""
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr ""
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr ""
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr ""
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr ""
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr ""
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr ""
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr ""
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr ""
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr ""
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr ""
@@ -177,118 +177,112 @@ msgstr ""
msgid "To write a new post, you need to be logged in"
msgstr ""
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr ""
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr ""
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr ""
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr ""
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr ""
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr ""
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr ""
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr ""
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr ""
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr ""
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -447,9 +441,7 @@ msgstr ""
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -479,8 +471,7 @@ msgstr ""
msgid "Your Profile"
msgstr ""
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "Upload an avatar"
@@ -552,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -639,21 +627,13 @@ msgstr ""
msgid "Save these settings"
msgstr ""
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -662,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -674,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -756,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr ""
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -816,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -875,9 +844,7 @@ msgstr ""
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -886,9 +853,7 @@ msgstr ""
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -903,8 +868,7 @@ msgstr ""
msgid "Edit \"{}\""
msgstr ""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -966,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1048,3 +1010,4 @@ msgstr ""
msgid "Article license"
msgstr ""
+73 -110
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: English\n"
"Language: en_US\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr ""
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr ""
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr ""
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr ""
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr ""
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr ""
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr ""
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr ""
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr ""
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr ""
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr ""
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr ""
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr ""
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr ""
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr ""
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr ""
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr ""
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr ""
@@ -177,118 +177,112 @@ msgstr ""
msgid "To write a new post, you need to be logged in"
msgstr ""
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr ""
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr ""
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr ""
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr ""
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr ""
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr ""
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr ""
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr ""
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr ""
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr ""
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr ""
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -447,9 +441,7 @@ msgstr ""
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -479,8 +471,7 @@ msgstr ""
msgid "Your Profile"
msgstr ""
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "Upload an avatar"
@@ -552,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -639,21 +627,13 @@ msgstr ""
msgid "Save these settings"
msgstr ""
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -662,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -674,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -756,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr ""
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -816,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -875,9 +844,7 @@ msgstr ""
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -886,9 +853,7 @@ msgstr ""
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -903,8 +868,7 @@ msgstr ""
msgid "Edit \"{}\""
msgstr ""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -966,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1048,3 +1010,4 @@ msgstr ""
msgid "Article license"
msgstr ""
+74 -112
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Esperanto\n"
"Language: eo_UY\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr ""
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Por krei novan blogon, vi devas ensaluti"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Blogon kun la sama nomo jam ekzistas."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Sukcesas krei vian blogon!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Via blogo estis forigita."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "Vi ne rajtas forigi ĉi tiun blogon."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "Vi ne povas uzi ĉi tiun aŭdovidaĵon kiel simbolo de blogo."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr ""
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Viaj blogaj informaĵoj estis ĝisdatigita."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr ""
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Via komento estis forigita."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr ""
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr ""
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Via aŭdovidaĵo estis forigita."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "Vi ne rajtas forigi ĉi tiun aŭdovidaĵon."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Via profilbildo estis gîstatiga."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr ""
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr ""
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Ĉi tiu skribaĵo ankoraŭ ne estas eldonita."
@@ -177,118 +177,112 @@ msgstr "Ĉi tiu skribaĵo ankoraŭ ne estas eldonita."
msgid "To write a new post, you need to be logged in"
msgstr "Skribi novan skribaĵo, vi bezonas ensaluti vin"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "Vi ne estas la verkisto de ĉi tiu blogo."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Nova skribaĵo"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Ŝanĝo {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr ""
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Via artikolo estis ĝisdatigita."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Via artikolo estis konservita."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Nova artikolo"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "Vi ne rajtas forigi ĉi tiun artikolon."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Via artikolo estis forigita."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr ""
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr ""
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr ""
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr ""
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "Via profilo estis ĝisdatigita."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "Via konto estis forigita."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "Vi ne povas forigi konton de aliulo."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -447,9 +441,7 @@ msgstr "Pasvorto"
msgid "Password confirmation"
msgstr "Konfirmo de la pasvorto"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -479,10 +471,8 @@ msgstr "Redakti vian konton"
msgid "Your Profile"
msgstr "Via profilo"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"Por ĉanĝi vian profilbildon, retsendu ĝin en via bildaro kaj selektu ol kie."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "Por ĉanĝi vian profilbildon, retsendu ĝin en via bildaro kaj selektu ol kie."
msgid "Upload an avatar"
msgstr "Retsendi profilbildo"
@@ -553,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -640,21 +627,13 @@ msgstr ""
msgid "Save these settings"
msgstr "Konservi ĉi tiujn agordojn"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -663,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -675,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -757,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr "Enhavo"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -817,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -876,9 +844,7 @@ msgstr "Ĝisdatigi pasvorton"
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -887,9 +853,7 @@ msgstr "Sendi ligilon por restarigi pasvorton"
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -904,8 +868,7 @@ msgstr "Krei blogon"
msgid "Edit \"{}\""
msgstr "Redakti “{}”"
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -967,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1049,3 +1010,4 @@ msgstr "Eldonita sub ĉi tiu permesilo"
msgid "Article license"
msgstr "Artikola permesilo"
+102 -190
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2022-01-02 11:39\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
@@ -65,59 +65,59 @@ msgstr "Página siguiente"
msgid "Optional"
msgstr "Opcional"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Para crear un nuevo blog, necesita estar logueado"
msgstr "Para crear un nuevo blog, necesitas estar conectado"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Ya existe un blog con el mismo nombre."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "¡Tu blog se ha creado satisfactoriamente!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Tu blog fue eliminado."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "No está autorizado a eliminar este registro."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "No tiene permiso para editar este blog."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "No puede usar este medio como icono del blog."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "No puede usar este medio como bandera del blog."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "La información de tu blog ha sido actualizada."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Se ha publicado el comentario."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Se ha eliminado el comentario."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "Se han guardado los ajustes de la instancia."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "{} ha sido desbloqueado."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "{} ha sido bloqueado."
@@ -125,177 +125,165 @@ msgstr "{} ha sido bloqueado."
msgid "Blocks deleted"
msgstr "Bloqueos eliminados"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
msgstr "Correo electrónico ya bloqueado"
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "Email bloqueado"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr "No puedes cambiar tus propios derechos."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "No te está permitido realizar esta acción."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "Hecho."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "Para darle un Me Gusta a un artículo, necesita estar conectado"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Tus medios han sido eliminados."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "No tienes permisos para eliminar este medio."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Tu avatar ha sido actualizado."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "No tienes permisos para usar este medio."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "Para ver tus notificaciones, necesitas estar conectado"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Esta publicación aún no está publicada."
# src/routes/posts.rs:125
msgid "To write a new post, you need to be logged in"
msgstr "Para escribir un nuevo artículo, necesita estar logueado"
msgstr "Para escribir un nuevo artículo, necesitas estar conectado"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "No es un autor de este blog."
msgstr "No eres un autor de este blog."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Nueva publicación"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Editar {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "No tienes permiso para publicar en este blog."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Se ha actualizado el artículo."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Se ha guardado el artículo."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Nueva publicación"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "No tienes permiso para eliminar este artículo."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Se ha eliminado el artículo."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Parece que el artículo que intentaste eliminar no existe. ¿Tal vez ya haya "
"desaparecido?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Parece que el artículo que intentaste eliminar no existe. ¿Tal vez ya haya desaparecido?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"No se pudo obtener suficiente información sobre su cuenta. Por favor, "
"asegúrese de que su nombre de usuario es correcto."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "No se pudo obtener suficiente información sobre su cuenta. Por favor, asegúrese de que su nombre de usuario es correcto."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "Para compartir un artículo, necesita estar logueado"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Ahora estás conectado."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "Ahora estás desconectado."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "Reiniciar contraseña"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "Aquí está el enlace para restablecer tu contraseña: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "Su contraseña se ha restablecido correctamente."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr "Para acceder a su panel de control, necesita estar conectado"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "Ya no estás siguiendo a {}."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "Ahora estás siguiendo a {}."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "Para suscribirse a alguien, necesita estar conectado"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "Para editar su perfil, necesita estar conectado"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "Tu perfil ha sido actualizado."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "Tu cuenta ha sido eliminada."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "No puedes eliminar la cuenta de otra persona."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "Los registros están cerrados en esta instancia."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"Tu cuenta ha sido creada. Ahora solo necesitas iniciar sesión, antes de "
"poder usarla."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "Tu cuenta ha sido creada. Ahora solo necesitas iniciar sesión, antes de poder usarla."
msgid "Media upload"
msgstr "Subir medios"
@@ -304,9 +292,7 @@ msgid "Description"
msgstr "Descripción"
msgid "Useful for visually impaired people, as well as licensing information"
msgstr ""
"Útil para personas con discapacidad visual, tanto como información de "
"licencias"
msgstr "Útil para personas con discapacidad visual, tanto como información de licencias"
msgid "Content warning"
msgstr "Aviso de contenido"
@@ -396,7 +382,7 @@ msgid "Source code"
msgstr "Código fuente"
msgid "Matrix room"
msgstr "Sala de matriz"
msgstr "Sala de Matrix"
msgid "Admin"
msgstr "Administrador"
@@ -455,12 +441,8 @@ msgstr "Contraseña"
msgid "Password confirmation"
msgstr "Confirmación de contraseña"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"Lo sentimos, pero las inscripciones están cerradas en esta instancia. Sin "
"embargo, puede encontrar una instancia distinta."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "Lo sentimos, pero las inscripciones están cerradas en esta instancia. Sin embargo, puede encontrar una instancia distinta."
msgid "{0}'s subscriptions"
msgstr "Suscripciones de {0}"
@@ -489,8 +471,7 @@ msgstr "Edita tu cuenta"
msgid "Your Profile"
msgstr "Tu perfil"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "Para cambiar tu avatar, súbalo a su galería y seleccione de ahí."
msgid "Upload an avatar"
@@ -527,8 +508,7 @@ msgid "Delete your account"
msgstr "Eliminar tu cuenta"
msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr ""
"Lo sentimos, pero como un administrador, no puede dejar su propia instancia."
msgstr "Lo sentimos, pero como un administrador, no puede dejar su propia instancia."
msgid "Latest articles"
msgstr "Últimas publicaciones"
@@ -558,20 +538,13 @@ msgid "Something broke on our side."
msgstr "Algo ha salido mal de nuestro lado."
msgid "Sorry about that. If you think this is a bug, please report it."
msgstr ""
"Disculpe la molestia. Si cree que esto es un defecto, por favor repórtalo."
msgstr "Disculpe la molestia. Si cree que esto es un defecto, por favor repórtalo."
msgid "Invalid CSRF token"
msgstr "Token CSRF inválido"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"Hay un problema con su token CSRF. Asegúrase de que las cookies están "
"habilitadas en su navegador, e intente recargar esta página. Si sigue viendo "
"este mensaje de error, por favor infórmelo."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "Hay un problema con su token CSRF. Asegúrase de que las cookies están habilitadas en su navegador, e intente recargar esta página. Si sigue viendo este mensaje de error, por favor infórmelo."
msgid "You are not authorized."
msgstr "No está autorizado."
@@ -654,32 +627,14 @@ msgstr "Licencia del artículo por defecto"
msgid "Save these settings"
msgstr "Guardar estos ajustes"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
"Si está navegando por este sitio como visitante, no se recopilan datos sobre "
"usted."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Si está navegando por este sitio como visitante, no se recopilan datos sobre usted."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"Como usuario registrado, tienes que proporcionar tu nombre de usuario (que "
"no tiene que ser tu nombre real), tu dirección de correo electrónico "
"funcional y una contraseña, con el fin de poder iniciar sesión, escribir "
"artículos y comentarios. El contenido que envíes se almacena hasta que lo "
"elimines."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "Como usuario registrado, tienes que proporcionar tu nombre de usuario (que no tiene que ser tu nombre real), tu dirección de correo electrónico funcional y una contraseña, con el fin de poder iniciar sesión, escribir artículos y comentarios. El contenido que envíes se almacena hasta que lo elimines."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"Cuando inicias sesión, guardamos dos cookies, una para mantener tu sesión "
"abierta, la segunda para evitar que otras personas actúen en tu nombre. No "
"almacenamos ninguna otra cookie."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "Cuando inicias sesión, guardamos dos cookies, una para mantener tu sesión abierta, la segunda para evitar que otras personas actúen en tu nombre. No almacenamos ninguna otra cookie."
msgid "Blocklisted Emails"
msgstr "Correos en la lista de bloqueos"
@@ -687,14 +642,8 @@ msgstr "Correos en la lista de bloqueos"
msgid "Email address"
msgstr "Dirección de correo electrónico"
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgstr ""
"La dirección de correo electrónico que deseas bloquear. Para bloquear "
"dominios, puedes usar sintaxis de globbing, por ejemplo '*@example.com' "
"bloquea todas las direcciones de example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr "La dirección de correo electrónico que deseas bloquear. Para bloquear dominios, puedes usar sintaxis de globbing, por ejemplo '*@example.com' bloquea todas las direcciones de example.com"
msgid "Note"
msgstr "Nota"
@@ -702,22 +651,14 @@ msgstr "Nota"
msgid "Notify the user?"
msgstr "¿Notificar al usuario?"
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgstr ""
"Opcional, muestra un mensaje al usuario cuando intenta crear una cuenta con "
"esa dirección"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr "Opcional, muestra un mensaje al usuario cuando intenta crear una cuenta con esa dirección"
msgid "Blocklisting notification"
msgstr "Notificación de bloqueo"
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgstr ""
"El mensaje que se mostrará cuando el usuario intente crear una cuenta con "
"esta dirección de correo electrónico"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr "El mensaje que se mostrará cuando el usuario intente crear una cuenta con esta dirección de correo electrónico"
msgid "Add blocklisted address"
msgstr "Añadir dirección bloqueada"
@@ -732,9 +673,7 @@ msgid "Email address:"
msgstr "Dirección de correo electrónico:"
msgid "Blocklisted for:"
msgstr ""
"Este texto no tiene información de contexto. El texto es usado en plume.pot. "
"Posición en el archivo: 115:"
msgstr "Este texto no tiene información de contexto. El texto es usado en plume.pot. Posición en el archivo: 115:"
msgid "Will notify them on account creation with this message:"
msgstr "Les notificará al crear la cuenta con este mensaje:"
@@ -790,12 +729,8 @@ msgstr "Subtítulo"
msgid "Content"
msgstr "Contenido"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"Puede subir los medios a su galería, y luego copiar su código Markdown en "
"sus artículos para insertarlos."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "Puede subir los medios a su galería, y luego copiar su código Markdown en sus artículos para insertarlos."
msgid "Upload media"
msgstr "Cargar medios"
@@ -852,12 +787,8 @@ msgstr "Ya no quiero compartir esto"
msgid "Boost"
msgstr "Compartir"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}Inicie sesión{1}, o {2}utilice su cuenta del Fediverso{3} para "
"interactuar con este artículo"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}Inicie sesión{1}, o {2}utilice su cuenta del Fediverso{3} para interactuar con este artículo"
msgid "Comments"
msgstr "Comentários"
@@ -875,8 +806,7 @@ msgid "Are you sure?"
msgstr "¿Está seguro?"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"Este artículo sigue siendo un borrador. Sólo tú y otros autores pueden verlo."
msgstr "Este artículo sigue siendo un borrador. Sólo tú y otros autores pueden verlo."
msgid "Only you and other authors can edit this article."
msgstr "Sólo tú y otros autores pueden editar este artículo."
@@ -914,12 +844,8 @@ msgstr "Actualizar contraseña"
msgid "Check your inbox!"
msgstr "Revise su bandeja de entrada!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"Enviamos un correo a la dirección que nos dio, con un enlace para "
"restablecer su contraseña."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "Enviamos un correo a la dirección que nos dio, con un enlace para restablecer su contraseña."
msgid "Send password reset link"
msgstr "Enviar enlace de restablecimiento de contraseña"
@@ -927,12 +853,8 @@ msgstr "Enviar enlace de restablecimiento de contraseña"
msgid "This token has expired"
msgstr "Este token ha caducado"
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgstr ""
"Por favor, vuelva a iniciar el proceso haciendo click <a href=\"/password-"
"reset\">aquí</a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr "Por favor, vuelva a iniciar el proceso haciendo click <a href=\"/password-reset\">aquí</a>."
msgid "New Blog"
msgstr "Nuevo Blog"
@@ -946,11 +868,8 @@ msgstr "Crear el blog"
msgid "Edit \"{}\""
msgstr "Editar \"{}\""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"Puede subir imágenes a su galería, para usarlas como iconos de blog, o "
"banderas."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "Puede subir imágenes a su galería, para usarlas como iconos de blog, o banderas."
msgid "Upload images"
msgstr "Subir imágenes"
@@ -968,9 +887,7 @@ msgid "Update blog"
msgstr "Actualizar el blog"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
"Tenga mucho cuidado, cualquier acción que se tome aquí no puede ser "
"invertida."
msgstr "Tenga mucho cuidado, cualquier acción que se tome aquí no puede ser invertida."
msgid "Are you sure that you want to permanently delete this blog?"
msgstr "¿Está seguro que desea eliminar permanentemente este blog?"
@@ -1011,16 +928,10 @@ msgid "Plume is a decentralized blogging engine."
msgstr "Plume es un motor de blogs descentralizado."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
"Los autores pueden administrar múltiples blogs, cada uno como su propio "
"sitio web."
msgstr "Los autores pueden administrar múltiples blogs, cada uno como su propio sitio web."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"Los artículos también son visibles en otras instancias de Plume, y puede "
"interactuar con ellos directamente desde otras plataformas como Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "Los artículos también son visibles en otras instancias de Plume, y puede interactuar con ellos directamente desde otras plataformas como Mastodon."
msgid "Read the detailed rules"
msgstr "Leer las reglas detalladas"
@@ -1099,3 +1010,4 @@ msgstr "Publicado bajo esta licencia"
msgid "Article license"
msgstr "Licencia de artículo"
+135 -218
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"PO-Revision-Date: 2021-12-11 15:00\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Language: fa_IR\n"
@@ -19,7 +19,7 @@ msgstr ""
# src/template_utils.rs:105
msgid "{0} commented on your article."
msgstr "{0} روی مطلب شما نظر داد."
msgstr "{0} روی مقالهٔ شما نظر داد."
# src/template_utils.rs:106
msgid "{0} is subscribed to you."
@@ -27,7 +27,7 @@ msgstr "{0} شما را دنبال می‌کند."
# src/template_utils.rs:107
msgid "{0} liked your article."
msgstr "{0} مطلب شما را پسندید."
msgstr "{0} مقالهٔ شما را پسندید."
# src/template_utils.rs:108
msgid "{0} mentioned you."
@@ -35,7 +35,7 @@ msgstr "{0} به شما اشاره کرد."
# src/template_utils.rs:109
msgid "{0} boosted your article."
msgstr "{0} مطلب شما را تقویت کرد."
msgstr "{0} مقالهٔ شما را تقویت کرد."
# src/template_utils.rs:116
msgid "Your feed"
@@ -51,7 +51,7 @@ msgstr "خوراک سراسری"
# src/template_utils.rs:154
msgid "{0}'s avatar"
msgstr "آواتار {0}"
msgstr "چهرک {0}"
# src/template_utils.rs:198
msgid "Previous page"
@@ -65,235 +65,225 @@ msgstr "برگ پسین"
msgid "Optional"
msgstr "اختیاری"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "برای ساخت یک بلاگ بایستی وارد شوید"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "بلاگی با همین نام از قبل وجود دارد."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "بلاگ شما با موفقیت ساخته شد!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "بلاگ شما پاک شد."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "شما مجاز به پاک کردن این بلاگ نیستید."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "شما مجاز به ویرایش این بلاگ نیستید."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "شما نمی‌توانید این رسانه را به عنوان تصویر بلاگ استفاده کنید."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "شما نمی‌توانید از این رسانه به عنوان تصویر سردر بلاگ استفاده کنید."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "اطلاعات بلاگ شما به‌روز شده است."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "نظر شما فرستاده شده است."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "نظر شما پاک شده است."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "تنظیمات نمونه ذخیره شده است."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr "مسدودیت {} رفع شده است."
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr "{} مسدود شده است."
# src/routes/instance.rs:203
msgid "Blocks deleted"
msgstr "مسدود سازی حذف شد"
msgstr "مسدودسازی‌ها حذف شدند"
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
msgstr "رایانامه قبلاً مسدود شده است"
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr "ایمیل مسدود شده"
msgstr "رایانامه مسدود شده"
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr "شما نمی‌توانید نقش خود را تغییر دهید."
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr "شما مجاز به انجام این کار نیستید."
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr "انجام شد."
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "برای پسندیدن یک مطلب بایستی وارد شده باشید"
msgstr "برای پسندیدن یک فرسته، بایستی وارد شده باشید"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "رسانه شما پاک شده است."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "شما مجاز به پاک کردن این رسانه نیستید."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "آواتار شما به‌روز شده است."
msgstr "چهرک شما به‌روز شده است."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "شما مجاز به استفاده از این رسانه نیستید."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "برای دیدن اعلانات خود بایستی وارد شده باشید"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "این مطلب هنوز منتشر نشده است."
msgstr "این فرسته هنوز منتشر نشده است."
# src/routes/posts.rs:125
msgid "To write a new post, you need to be logged in"
msgstr "برای نوشتن یک مطلب جدید بایستی وارد شده باشید"
msgstr "برای نوشتن یک فرستهٔ جدید، بایستی وارد شده باشید"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "شما، نویسنده این بلاگ نیستید."
msgstr "شما نویسندهٔ این بلاگ نیستید."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "نوشتهٔ جدید"
msgstr "فرستهٔ جدید"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "ویرایش {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "شما مجاز به انتشار روی این بلاگ نیستید."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "نوشتهٔ شما به‌روز شده است."
msgstr "مقالهٔ شما به‌روز شده است."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "نوشتهٔ شما ذخیره شده است."
msgstr "مقالهٔ شما ذخیره شده است."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "نوشتهٔ جدید"
msgstr "مقالهٔ جدید"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "شما مجاز به حذف این نوشته نیستید."
msgstr "شما مجاز به حذف این مقاله نیستید."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "نوشتهٔ شما پاک شده است."
msgstr "مقالهٔ شما پاک شده است."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"به نظر می‌رسد نوشته‌ای را که می‌خواهید پاک کنید، وجود ندارد. قبلا پاک نشده است؟"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "به نظر می‌رسد مقاله‌ای را که می‌خواهید پاک کنید، وجود ندارد. قبلا پاک نشده است؟"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"نتوانستیم اطلاعات کافی درباره حساب شما دریافت کنیم. لطفا مطمئن شوید که نام "
"کاربری درست است."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "نتوانستیم اطّلاعات کافی دربارهٔ حساب شما دریافت کنیم. لطفاً مطمئن شوید که نام کاربری درست است."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "برای هم‌رسانی یک نوشته لازم است وارد شوید"
msgstr "برای هم‌رسانی یک فرسته لازم است وارد شوید"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "شما اکنون متصل هستید."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr "شما اکنون خارج شدید."
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr "بازنشانی گذرواژه"
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr "اینجا، پیوندی برای بازنشانی گذرواژهٔ شماست: {0}"
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr "گذرواژه شما با موفقیت بازنشانی شد."
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr "برای دسترسی به پیشخوان بایستی وارد شده باشید"
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr "دیگر {} را دنبال نمی‌کنید."
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr "اکنون {} را دنبال می‌کنید."
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr "برای دنبال کردن یک نفر، باید وارد شوید"
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr "برای ویرایش نمایهٔ خود، باید وارد شوید"
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr "نمایهٔ شما به‌روز شده است."
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr "حساب شما پاک شده است."
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr "نمی‌توانید حساب شخص دیگری را پاک کنید."
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr "ثبت‌نام روی این نمونه بسته شده است."
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
msgstr ""
"حساب شما ایجاد شده است. اکنون برای استفاده از آن تنها نیاز است که واردش شوید."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr "حساب شما ایجاد شده است. اکنون برای استفاده از آن تنها نیاز است که واردش شوید."
msgid "Media upload"
msgstr "بارگذاری رسانه"
@@ -302,7 +292,7 @@ msgid "Description"
msgstr "توضیحات"
msgid "Useful for visually impaired people, as well as licensing information"
msgstr "مناسب برای کسانی که مشکل بینایی دارند و نیز درج اطلاعات پروانه نشر"
msgstr "مناسب برای کسانی که مشکل بینایی دارند و نیز درج اطّلاعات پروانه نشر"
msgid "Content warning"
msgstr "هشدار محتوا"
@@ -344,7 +334,7 @@ msgid "Markdown syntax"
msgstr "نحو مارک‌داون"
msgid "Copy it into your articles, to insert this media:"
msgstr "برای درج رسانه، رونوشت این را در مطلب خود بگذارید:"
msgstr "برای درج این رسانه، این را در مقاله‌تان رونویسی کنید:"
msgid "Use as an avatar"
msgstr "استفاده به عنوان آواتار"
@@ -425,7 +415,7 @@ msgid "{0}'s subscribers"
msgstr "دنبال‌کنندگان {0}"
msgid "Articles"
msgstr "نوشته‌ها"
msgstr "مقالات"
msgid "Subscribers"
msgstr "دنبال‌کنندگان"
@@ -451,12 +441,8 @@ msgstr "گذرواژه"
msgid "Password confirmation"
msgstr "تایید گذرواژه"
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgstr ""
"معذرت می‌خواهیم. ثبت‌نام روی این نمونه خاص بسته شده است. با این حال شما "
"می‌توانید یک نمونه دیگر پیدا کنید."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr "معذرت می‌خواهیم. ثبت‌نام روی این نمونه خاص بسته شده است. با این حال شما می‌توانید یک نمونه دیگر پیدا کنید."
msgid "{0}'s subscriptions"
msgstr "دنبال‌شوندگان {0}"
@@ -468,8 +454,7 @@ msgid "Your Blogs"
msgstr "بلاگ‌های شما"
msgid "You don't have any blog yet. Create your own, or ask to join one."
msgstr ""
"شما هنوز هیچ بلاگی ندارید. یکی بسازید یا درخواست پیوستن به یکی را بدهید."
msgstr "شما هنوز هیچ بلاگی ندارید. یکی بسازید یا درخواست پیوستن به یکی را بدهید."
msgid "Start a new blog"
msgstr "شروع یک بلاگ جدید"
@@ -486,11 +471,8 @@ msgstr "حساب‌تان را ویرایش کنید"
msgid "Your Profile"
msgstr "نمایهٔ شما"
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgstr ""
"برای تغییر تصویر حساب‌تان، ابتدا آن را در نگارخانه بارگذاری کرده و سپس از "
"همان جا انتخابش کنید."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr "برای تغییر تصویر حساب‌تان، ابتدا آن را در نگارخانه بارگذاری کرده و سپس از همان جا انتخابش کنید."
msgid "Upload an avatar"
msgstr "بارگذاری تصویر حساب"
@@ -505,7 +487,7 @@ msgid "Theme"
msgstr "پوسته"
msgid "Default theme"
msgstr "پوسته پیش‌فرض"
msgstr "پوستهٔ پیش‌فرض"
msgid "Error while loading theme selector."
msgstr "خطا هنگام بار شدن گزینش‌گر پوسته."
@@ -529,19 +511,19 @@ msgid "Sorry, but as an admin, you can't leave your own instance."
msgstr "ببخشید اما به عنوان مدیر، نمی‌توانید نمونهٔ خودتان را ترک کنید."
msgid "Latest articles"
msgstr "آخرین نوشته‌ها"
msgstr "آخرین مقالات"
msgid "Atom feed"
msgstr "خوراک اتم"
msgid "Recently boosted"
msgstr "نوشته‌هایی که اخیرا تقویت شده‌اند"
msgstr "به‌تازگی تقویت شده"
msgid "Articles tagged \"{0}\""
msgstr "نوشته‌های دارای برچسب «{0}»"
msgstr "مقالات دارای برچسب «{0}»"
msgid "There are currently no articles with such a tag"
msgstr "در حال حاضر نوشته‌ای با این برچسب وجود ندارد"
msgstr "در حال حاضر مقاله‌ای با این برچسب وجود ندارد"
msgid "The content you sent can't be processed."
msgstr "محتوایی که فرستادید قابل پردازش نیست."
@@ -556,21 +538,13 @@ msgid "Something broke on our side."
msgstr "مشکلی سمت ما پیش آمد."
msgid "Sorry about that. If you think this is a bug, please report it."
msgstr ""
"از این بابت متاسفیم. اگر فکر می‌کنید این اتفاق ناشی از یک اشکال فنی است، لطفا "
"آن را گزارش کنید."
msgstr "از این بابت متاسفیم. اگر فکر می‌کنید این اتفاق ناشی از یک اشکال فنی است، لطفا آن را گزارش کنید."
msgid "Invalid CSRF token"
msgstr "توکن CSRF نامعتبر"
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgstr ""
"مشکلی در ارتباط با توکن CSRF ما وجود دارد. اطمینان حاصل کنید که کوکی در "
"مرورگرتان فعال است و سپس این صفحه را مجددا فراخوانی کنید. اگر این پیام خطا "
"را باز هم مشاهده کردید، موضوع را گزارش کنید."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr "مشکلی در ارتباط با توکن CSRF ما وجود دارد. اطمینان حاصل کنید که کوکی در مرورگرتان فعّال است و سپس این صفحه را مجددا فراخوانی کنید. اگر این پیام خطا را باز هم مشاهده کردید، موضوع را گزارش کنید."
msgid "You are not authorized."
msgstr "شما مجاز به این کار نیستید."
@@ -648,36 +622,19 @@ msgid "Long description"
msgstr "توضیحات بلند"
msgid "Default article license"
msgstr "پروانه پیش‌فرض نوشته"
msgstr "پروانهٔ پیش‌فرض مقاله"
msgid "Save these settings"
msgstr "ذخیره این تنظیمات"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgstr ""
"اگر شما به عنوان یک بازدیدکننده در حال مرور این پایگاه هستید، هیچ داده‌ای "
"درباره شما گردآوری نمی‌شود."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "اگر شما به عنوان یک بازدیدکننده در حال مرور این پایگاه هستید، هیچ داده‌ای درباره شما گردآوری نمی‌شود."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgstr ""
"به عنوان یک کاربر ثبت‌نام شده، برای آن‌که بتوانید وارد شده و مطلب بنویسید یا "
"نظر بدهید، لازم است که نام‌کاربری (که لازم نیست نام واقعی شما باشد) و نشانی "
"رایانامه فعال را ارائه کنید. محتوایی که می‌فرستید، تا زمانی که خودتان آن را "
"پاک نکنید نگه‌داری می‌شود."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr "به عنوان یک کاربر ثبت‌نام شده، برای آن‌که بتوانید وارد شده و مقاله بنویسید یا نظر بدهید، لازم است که نام کاربری (که لازم نیست نام واقعی شما باشد) و نشانی رایانامهٔ فعّال‌تان را ارائه کنید. محتوایی که ثبت می‌کنید، تا زمانی که خودتان آن را پاک نکنید نگه‌داری می‌شود."
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgstr ""
"وقتی وارد می‌شوید، ما دو کوکی ذخیره می‌کنیم. یکی برای باز نگه‌داشتن نشست جاری و "
"دومی برای اجتناب از فعالیت دیگران از جانب شما. ما هیچ کوکی دیگری ذخیره "
"نمی‌کنیم."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr "وقتی وارد می‌شوید، ما دو کوکی ذخیره می‌کنیم. یکی برای باز نگه‌داشتن نشست جاری و دومی برای اجتناب از فعّالیت دیگران از جانب شما. ما هیچ کوکی دیگری ذخیره نمی‌کنیم."
msgid "Blocklisted Emails"
msgstr "رایانامه‌های مسدود شده"
@@ -685,14 +642,8 @@ msgstr "رایانامه‌های مسدود شده"
msgid "Email address"
msgstr "نشانی رایانامه"
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgstr ""
"نشانی رایانامه‌ای که می‌خواهید مسدود کنید. اگر می‌خواهید دامنه‌ها را مسدود کنید، "
"می‌تواند از نحو گِلاب استفاده کنید. مثلاً عبارت '*@example.com' تمام نشانی‌ها از "
"دامنه example.com را مسدود می‌کند"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr "نشانی رایانامه‌ای که می‌خواهید مسدود کنید. اگر می‌خواهید دامنه‌ها را مسدود کنید، می‌تواند از نحو گِلاب استفاده کنید. مثلاً عبارت '*@example.com' تمام نشانی‌ها از دامنه example.com را مسدود می‌کند"
msgid "Note"
msgstr "یادداشت"
@@ -700,22 +651,14 @@ msgstr "یادداشت"
msgid "Notify the user?"
msgstr "به کاربر اعلان شود؟"
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgstr ""
"اختیاری، هنگامی که کاربر با آن نشانی تلاش برای ایجاد حساب کند، پیامی به او "
"نشان می‌دهد"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr "اختیاری، هنگامی که کاربر با آن نشانی تلاش برای ایجاد حساب کند، پیامی به او نشان می‌دهد"
msgid "Blocklisting notification"
msgstr "اعلان‌ مسدودسازی"
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgstr ""
"پیامی که هنگام تلاش کاربر برای ساخت حساب با این نشانی رایانامه به او نشان "
"داده می‌شود"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr "پیامی که هنگام تلاش کاربر برای ساخت حساب با این نشانی رایانامه به او نشان داده می‌شود"
msgid "Add blocklisted address"
msgstr "اضافه کردن نشانی مسدودشده"
@@ -754,7 +697,7 @@ msgid "Home to <em>{0}</em> people"
msgstr "میزبان <em>{0}</em> نفر"
msgid "Who wrote <em>{0}</em> articles"
msgstr "که تاکنون <em>{0}</em> مطلب نوشته‌اند"
msgstr "که تاکنون <em>{0}</em> مقاله نوشته‌اند"
msgid "And are connected to <em>{0}</em> other instances"
msgstr "و به <em>{0}</em> نمونه دیگر متصل‌اند"
@@ -786,12 +729,8 @@ msgstr "زیرعنوان"
msgid "Content"
msgstr "محتوا"
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgstr ""
"برای درج رسانه می‌توانید آن را به نگارخانه خود افزوده و سپس به کمک کد "
"مارک‌داونی که می‌گیرید وارد مطلب‌تان کنید."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr "می‌تواند رسانه را در نگار‌خانهٔ خود بارگذاری کنید، و سپس کد مارک‌داون آن‌ها را درون مقاله‌تان درج کنید."
msgid "Upload media"
msgstr "بارگذاری رسانه"
@@ -815,7 +754,7 @@ msgid "Update, or publish"
msgstr "به‌روزرسانی، یا انتشار"
msgid "Publish your post"
msgstr "انتشار نوشته‌تان"
msgstr "انتشار فرسته‌تان"
msgid "Written by {0}"
msgstr "نوشته شده توسط {0}"
@@ -824,7 +763,7 @@ msgid "All rights reserved."
msgstr "تمامی حقوق محفوظ است."
msgid "This article is under the {0} license."
msgstr "این مطلب تحت پروانه {0} است."
msgstr "این مقاله تحت پروانهٔ {0} است."
msgid "One like"
msgid_plural "{0} likes"
@@ -848,12 +787,8 @@ msgstr "دیگر نمی‌خوام این را تقویت کنم"
msgid "Boost"
msgstr "تقویت"
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgstr ""
"{0}وارد شوید{1} و یا {2}از حساب فدیورس خود{3} برای تعامل با این مطلب استفاده "
"کنید"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr "{0}وارد شوید{1}، یا {2}از حساب فدیورس خود{3} برای تعامل با این مقاله استفاده کنید"
msgid "Comments"
msgstr "نظرات"
@@ -871,12 +806,10 @@ msgid "Are you sure?"
msgstr "مطمئنید؟"
msgid "This article is still a draft. Only you and other authors can see it."
msgstr ""
"این مطلب هنوز یک پیش‌نویس است. تنها شما و دیگر نویسندگان می‌توانید آن را "
"ببینید."
msgstr "این مقاله هنوز یک پیش‌نویس است. تنها شما و دیگر نویسندگان می‌توانید آن را ببینید."
msgid "Only you and other authors can edit this article."
msgstr "تنها شما و دیگر نویسندگان می‌توانید این نوشته را ویرایش کنید."
msgstr "تنها شما و دیگر نویسندگان می‌توانید این مقاله را ویرایش کنید."
msgid "Edit"
msgstr "ویرایش"
@@ -900,7 +833,7 @@ msgid "Reset your password"
msgstr "بازنشانی گذرواژه"
msgid "New password"
msgstr "گذرواژه جدید"
msgstr "گذرواژهٔ جدید"
msgid "Confirmation"
msgstr "تایید"
@@ -911,12 +844,8 @@ msgstr "به‌روزرسانی گذرواژه"
msgid "Check your inbox!"
msgstr "صندوق پستی خود را بررسی کنید!"
msgid ""
"We sent a mail to the address you gave us, with a link to reset your "
"password."
msgstr ""
"ما، یک رایانامه به نشانی‌ای که به ما دادید فرستاده‌ایم. با پیوندی که در آن است "
"می‌توانید گذرواژه خود را تغییر دهید."
msgid "We sent a mail to the address you gave us, with a link to reset your password."
msgstr "ما، یک رایانامه به نشانی‌ای که به ما دادید فرستاده‌ایم. با پیوندی که در آن است می‌توانید گذرواژه خود را تغییر دهید."
msgid "Send password reset link"
msgstr "فرستادن پیوند بازنشانی گذرواژه"
@@ -924,11 +853,8 @@ msgstr "فرستادن پیوند بازنشانی گذرواژه"
msgid "This token has expired"
msgstr "این توکن منقضی شده است"
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgstr ""
"لطفاً برای شروع فرایند، <a href=\"/password-reset\">اینجا</a> کلیک کنید."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr "لطفاً برای شروع فرایند، <a href=\"/password-reset\">اینجا</a> کلیک کنید."
msgid "New Blog"
msgstr "بلاگ جدید"
@@ -942,11 +868,8 @@ msgstr "ایجاد بلاگ"
msgid "Edit \"{}\""
msgstr "ویرایش «{}»"
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
"می‌توانید تصاویرتان را در نگارخانه بارگذاری کرده و از آن‌ها به عنوان شکلک و یا "
"تصویر سردر بلاگ استفاده کنید."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr "می‌توانید تصاویرتان را در نگارخانه بارگذاری کرده و از آن‌ها به عنوان شکلک و یا تصویر سردر بلاگ استفاده کنید."
msgid "Upload images"
msgstr "بارگذاری تصاویر"
@@ -964,8 +887,7 @@ msgid "Update blog"
msgstr "به‌روزرسانی بلاگ"
msgid "Be very careful, any action taken here can't be reversed."
msgstr ""
"حواس‌تان خیلی جمع باشد! هر اقدامی که اینجا انجام دهید غیرقابل بازگشت است."
msgstr "حواس‌تان خیلی جمع باشد! هر اقدامی که اینجا انجام دهید غیرقابل بازگشت است."
msgid "Are you sure that you want to permanently delete this blog?"
msgstr "آیا مطمئن هستید که می‌خواهید این بلاگ را برای همیشه حذف کنید؟"
@@ -982,7 +904,7 @@ msgstr[0] "یک نویسنده در این بلاگ است: "
msgstr[1] "{0} نویسنده در این بلاگ هستند: "
msgid "No posts to see here yet."
msgstr "هنوز نوشته‌ای برای دیدن وجود ندارد."
msgstr "هنوز فرسته‌ای برای دیدن وجود ندارد."
msgid "Nothing to see here yet."
msgstr "هنوز اینجا چیزی برای دیدن نیست."
@@ -1006,16 +928,10 @@ msgid "Plume is a decentralized blogging engine."
msgstr "پلوم یک موتور بلاگ‌نویسی غیرمتمرکز است."
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
"نویسندگان می‌توانند چندین بلاگ را مدیریت کنند که هر کدام‌شان مانند یک پایگاه "
"وب مستقل هستند."
msgstr "نویسندگان می‌توانند چندین بلاگ را مدیریت کنند که هر کدام‌شان مانند یک پایگاه وب مستقل هستند."
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgstr ""
"نوشته‌ها در سایر نمونه‌های پلوم نیز قابل مشاهده هستند و شما می‌توانید با آن‌ها "
"به صورت مستقیم و از دیگر بن‌سازه‌ها مانند ماستدون تعامل داشته باشید."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr "مقالات در سایر نمونه‌های پلوم نیز قابل مشاهده هستند و شما می‌توانید با آن‌ها به صورت مستقیم و از دیگر بن‌سازه‌ها مانند ماستودون تعامل داشته باشید."
msgid "Read the detailed rules"
msgstr "قوانین کامل را مطالعه کنید"
@@ -1042,7 +958,7 @@ msgid "Advanced search"
msgstr "جستجوی پیشرفته"
msgid "Article title matching these words"
msgstr "عنوان مطلب با این واژگان انطباق داشته باشد"
msgstr "عنوان مقاله با این واژگان انطباق داشته باشد"
msgid "Subtitle matching these words"
msgstr "زیرعنوان با این واژگان انطباق داشته باشد"
@@ -1066,19 +982,19 @@ msgid "Tags"
msgstr "برچسب‌ها"
msgid "Posted on one of these instances"
msgstr "منتشر شده روی یکی از این نمونه‌ها"
msgstr "فرستاده شده روی یکی از این نمونه‌ها"
msgid "Instance domain"
msgstr "دامنهٔ نمونه"
msgid "Posted by one of these authors"
msgstr "منتشر شده توسط یکی از این نویسندگان"
msgstr "فرستاده شده توسط یکی از این نویسندگان"
msgid "Author(s)"
msgstr "نویسنده(ها)"
msgid "Posted on one of these blogs"
msgstr "منتشر شده روی یکی از این بلاگ‌ها"
msgstr "فرستاده شده روی یکی از این بلاگ‌ها"
msgid "Blog title"
msgstr "عنوان بلاگ"
@@ -1093,4 +1009,5 @@ msgid "Published under this license"
msgstr "منتشر شده تحت این پروانه"
msgid "Article license"
msgstr "پروانهٔ نوشته"
msgstr "پروانهٔ مقاله"
+75 -116
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"PO-Revision-Date: 2021-05-05 18:31\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\n"
@@ -65,59 +65,59 @@ msgstr ""
msgid "Optional"
msgstr "Valinnainen"
# src/routes/blogs.rs:63
# src/routes/blogs.rs:67
msgid "To create a new blog, you need to be logged in"
msgstr "Luodaksesi blogin sinun tulee olla sisäänkirjautuneena"
# src/routes/blogs.rs:102
# src/routes/blogs.rs:109
msgid "A blog with the same name already exists."
msgstr "Saman niminen blogi on jo olemassa."
# src/routes/blogs.rs:140
# src/routes/blogs.rs:147
msgid "Your blog was successfully created!"
msgstr "Blogisi luotiin onnistuneesti!"
# src/routes/blogs.rs:160
# src/routes/blogs.rs:165
msgid "Your blog was deleted."
msgstr "Blogisi poistettiin."
# src/routes/blogs.rs:168
# src/routes/blogs.rs:173
msgid "You are not allowed to delete this blog."
msgstr "Sinulla ei ole oikeutta poistaa tätä blogia."
# src/routes/blogs.rs:219
# src/routes/blogs.rs:223
msgid "You are not allowed to edit this blog."
msgstr "Sinulla ei ole oikeutta muokata tätä blogia."
# src/routes/blogs.rs:275
# src/routes/blogs.rs:279
msgid "You can't use this media as a blog icon."
msgstr "Et voi käyttää tätä mediaa blogin ikonina."
# src/routes/blogs.rs:293
# src/routes/blogs.rs:297
msgid "You can't use this media as a blog banner."
msgstr "Et voi käyttää tätä mediaa blogin bannerina."
# src/routes/blogs.rs:327
# src/routes/blogs.rs:331
msgid "Your blog information have been updated."
msgstr "Blogisi tiedot on päivitetty."
# src/routes/comments.rs:97
# src/routes/comments.rs:100
msgid "Your comment has been posted."
msgstr "Kommentisi lähetettiin."
# src/routes/comments.rs:172
# src/routes/comments.rs:177
msgid "Your comment has been deleted."
msgstr "Sisältösi poistettiin."
# src/routes/instance.rs:120
# src/routes/instance.rs:117
msgid "Instance settings have been saved."
msgstr "Instanssin asetukset on tallennettu."
# src/routes/instance.rs:152
# src/routes/instance.rs:150
msgid "{} has been unblocked."
msgstr ""
# src/routes/instance.rs:154
# src/routes/instance.rs:152
msgid "{} has been blocked."
msgstr ""
@@ -125,51 +125,51 @@ msgstr ""
msgid "Blocks deleted"
msgstr ""
# src/routes/instance.rs:218
# src/routes/instance.rs:219
msgid "Email already blocked"
msgstr ""
# src/routes/instance.rs:223
# src/routes/instance.rs:224
msgid "Email Blocked"
msgstr ""
# src/routes/instance.rs:314
# src/routes/instance.rs:317
msgid "You can't change your own rights."
msgstr ""
# src/routes/instance.rs:325
# src/routes/instance.rs:328
msgid "You are not allowed to take this action."
msgstr ""
# src/routes/instance.rs:362
# src/routes/instance.rs:363
msgid "Done."
msgstr ""
# src/routes/likes.rs:53
# src/routes/likes.rs:58
msgid "To like a post, you need to be logged in"
msgstr "Tykätäksesi postauksesta sinun tulee olla sisäänkirjautuneena"
# src/routes/medias.rs:145
# src/routes/medias.rs:158
msgid "Your media have been deleted."
msgstr "Mediasi on poistettu."
# src/routes/medias.rs:150
# src/routes/medias.rs:163
msgid "You are not allowed to delete this media."
msgstr "Sinulla ei ole oikeutta poistaa tätä mediaa."
# src/routes/medias.rs:167
# src/routes/medias.rs:180
msgid "Your avatar has been updated."
msgstr "Avatarisi on päivitetty."
# src/routes/medias.rs:172
# src/routes/medias.rs:185
msgid "You are not allowed to use this media."
msgstr "Sinulla ei ole oikeutta käyttää tätä mediaa."
# src/routes/notifications.rs:28
# src/routes/notifications.rs:29
msgid "To see your notifications, you need to be logged in"
msgstr "Nähdäksesi ilmoituksesi sinun tulee olla sisäänkirjautuneena"
# src/routes/posts.rs:54
# src/routes/posts.rs:55
msgid "This post isn't published yet."
msgstr "Tätä postausta ei ole vielä julkaistu."
@@ -177,122 +177,112 @@ msgstr "Tätä postausta ei ole vielä julkaistu."
msgid "To write a new post, you need to be logged in"
msgstr "Kirjoittaaksesi uuden postauksen sinun tulee olla sisäänkirjautuneena"
# src/routes/posts.rs:142
# src/routes/posts.rs:146
msgid "You are not an author of this blog."
msgstr "Et ole tämän blogin kirjoittaja."
# src/routes/posts.rs:149
# src/routes/posts.rs:153
msgid "New post"
msgstr "Uusi postaus"
# src/routes/posts.rs:194
# src/routes/posts.rs:198
msgid "Edit {0}"
msgstr "Muokkaa {0}"
# src/routes/posts.rs:263
# src/routes/posts.rs:267
msgid "You are not allowed to publish on this blog."
msgstr "Sinulla ei ole oikeutta julkaista tällä blogilla."
# src/routes/posts.rs:355
# src/routes/posts.rs:367
msgid "Your article has been updated."
msgstr "Artikkeli päivitetty."
# src/routes/posts.rs:542
# src/routes/posts.rs:556
msgid "Your article has been saved."
msgstr "Artikkeli on tallennettu."
# src/routes/posts.rs:549
# src/routes/posts.rs:563
msgid "New article"
msgstr "Uusi artikkeli"
# src/routes/posts.rs:582
# src/routes/posts.rs:601
msgid "You are not allowed to delete this article."
msgstr "Sinulla ei ole oikeutta poistaa tätä artikkelia."
# src/routes/posts.rs:607
# src/routes/posts.rs:625
msgid "Your article has been deleted."
msgstr "Artikkelisi on poistettu."
# src/routes/posts.rs:612
msgid ""
"It looks like the article you tried to delete doesn't exist. Maybe it is "
"already gone?"
msgstr ""
"Näyttää siltä, että koetat poistaa artikkelia jota ei ole olemassa. Ehkä se "
"on jo poistettu?"
# src/routes/posts.rs:630
msgid "It looks like the article you tried to delete doesn't exist. Maybe it is already gone?"
msgstr "Näyttää siltä, että koetat poistaa artikkelia jota ei ole olemassa. Ehkä se on jo poistettu?"
# src/routes/posts.rs:652
msgid ""
"Couldn't obtain enough information about your account. Please make sure your "
"username is correct."
msgstr ""
"Tunnuksestasi ei saatu haettua tarpeeksi tietoja. Varmistathan että "
"käyttäjätunkuksesi on oikein."
# src/routes/posts.rs:672
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
msgstr "Tunnuksestasi ei saatu haettua tarpeeksi tietoja. Varmistathan että käyttäjätunkuksesi on oikein."
# src/routes/reshares.rs:54
# src/routes/reshares.rs:58
msgid "To reshare a post, you need to be logged in"
msgstr "Uudelleenjakaaksesi postauksen sinun tulee olla sisäänkirjatuneena"
# src/routes/session.rs:87
# src/routes/session.rs:95
msgid "You are now connected."
msgstr "Olette nyt yhdistetty."
# src/routes/session.rs:108
# src/routes/session.rs:116
msgid "You are now logged off."
msgstr ""
# src/routes/session.rs:153
# src/routes/session.rs:162
msgid "Password reset"
msgstr ""
# src/routes/session.rs:154
# src/routes/session.rs:163
msgid "Here is the link to reset your password: {0}"
msgstr ""
# src/routes/session.rs:216
# src/routes/session.rs:235
msgid "Your password was successfully reset."
msgstr ""
# src/routes/user.rs:141
# src/routes/user.rs:74
msgid "To access your dashboard, you need to be logged in"
msgstr ""
# src/routes/user.rs:163
# src/routes/user.rs:96
msgid "You are no longer following {}."
msgstr ""
# src/routes/user.rs:180
# src/routes/user.rs:113
msgid "You are now following {}."
msgstr ""
# src/routes/user.rs:260
# src/routes/user.rs:190
msgid "To subscribe to someone, you need to be logged in"
msgstr ""
# src/routes/user.rs:364
# src/routes/user.rs:299
msgid "To edit your profile, you need to be logged in"
msgstr ""
# src/routes/user.rs:409
# src/routes/user.rs:345
msgid "Your profile has been updated."
msgstr ""
# src/routes/user.rs:436
# src/routes/user.rs:373
msgid "Your account has been deleted."
msgstr ""
# src/routes/user.rs:442
# src/routes/user.rs:379
msgid "You can't delete someone else's account."
msgstr ""
# src/routes/user.rs:526
# src/routes/user.rs:463
msgid "Registrations are closed on this instance."
msgstr ""
# src/routes/user.rs:549
msgid ""
"Your account has been created. Now you just need to log in, before you can "
"use it."
# src/routes/user.rs:486
msgid "Your account has been created. Now you just need to log in, before you can use it."
msgstr ""
msgid "Media upload"
@@ -451,9 +441,7 @@ msgstr ""
msgid "Password confirmation"
msgstr ""
msgid ""
"Apologies, but registrations are closed on this particular instance. You "
"can, however, find a different one."
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
msgstr ""
msgid "{0}'s subscriptions"
@@ -483,8 +471,7 @@ msgstr ""
msgid "Your Profile"
msgstr ""
msgid ""
"To change your avatar, upload it to your gallery and then select from there."
msgid "To change your avatar, upload it to your gallery and then select from there."
msgstr ""
msgid "Upload an avatar"
@@ -556,10 +543,7 @@ msgstr ""
msgid "Invalid CSRF token"
msgstr ""
msgid ""
"Something is wrong with your CSRF token. Make sure cookies are enabled in "
"you browser, and try reloading this page. If you continue to see this error "
"message, please report it."
msgid "Something is wrong with your CSRF token. Make sure cookies are enabled in you browser, and try reloading this page. If you continue to see this error message, please report it."
msgstr ""
msgid "You are not authorized."
@@ -643,21 +627,13 @@ msgstr "Oletus lisenssi artikelleille"
msgid "Save these settings"
msgstr "Tallenna nämä asetukset"
msgid ""
"If you are browsing this site as a visitor, no data about you is collected."
msgid "If you are browsing this site as a visitor, no data about you is collected."
msgstr "Jos aelailet tätä sivua vierailijana, sinusta ei kerätä yhtään dataa."
msgid ""
"As a registered user, you have to provide your username (which does not have "
"to be your real name), your functional email address and a password, in "
"order to be able to log in, write articles and comment. The content you "
"submit is stored until you delete it."
msgid "As a registered user, you have to provide your username (which does not have to be your real name), your functional email address and a password, in order to be able to log in, write articles and comment. The content you submit is stored until you delete it."
msgstr ""
msgid ""
"When you log in, we store two cookies, one to keep your session open, the "
"second to prevent other people to act on your behalf. We don't store any "
"other cookies."
msgid "When you log in, we store two cookies, one to keep your session open, the second to prevent other people to act on your behalf. We don't store any other cookies."
msgstr ""
msgid "Blocklisted Emails"
@@ -666,10 +642,7 @@ msgstr ""
msgid "Email address"
msgstr ""
msgid ""
"The email address you wish to block. In order to block domains, you can use "
"globbing syntax, for example '*@example.com' blocks all addresses from "
"example.com"
msgid "The email address you wish to block. In order to block domains, you can use globbing syntax, for example '*@example.com' blocks all addresses from example.com"
msgstr ""
msgid "Note"
@@ -678,17 +651,13 @@ msgstr ""
msgid "Notify the user?"
msgstr ""
msgid ""
"Optional, shows a message to the user when they attempt to create an account "
"with that address"
msgid "Optional, shows a message to the user when they attempt to create an account with that address"
msgstr ""
msgid "Blocklisting notification"
msgstr ""
msgid ""
"The message to be shown when the user attempts to create an account with "
"this email address"
msgid "The message to be shown when the user attempts to create an account with this email address"
msgstr ""
msgid "Add blocklisted address"
@@ -760,9 +729,7 @@ msgstr ""
msgid "Content"
msgstr ""
msgid ""
"You can upload media to your gallery, and then copy their Markdown code into "
"your articles to insert them."
msgid "You can upload media to your gallery, and then copy their Markdown code into your articles to insert them."
msgstr ""
msgid "Upload media"
@@ -820,9 +787,7 @@ msgstr ""
msgid "Boost"
msgstr ""
msgid ""
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
"article"
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
msgstr ""
msgid "Comments"
@@ -879,9 +844,7 @@ msgstr ""
msgid "Check your inbox!"
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 ""
msgid "Send password reset link"
@@ -890,9 +853,7 @@ msgstr ""
msgid "This token has expired"
msgstr ""
msgid ""
"Please start the process again by clicking <a href=\"/password-reset\">here</"
"a>."
msgid "Please start the process again by clicking <a href=\"/password-reset\">here</a>."
msgstr ""
msgid "New Blog"
@@ -907,8 +868,7 @@ msgstr ""
msgid "Edit \"{}\""
msgstr ""
msgid ""
"You can upload images to your gallery, to use them as blog icons, or banners."
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
msgstr ""
msgid "Upload images"
@@ -970,9 +930,7 @@ msgstr ""
msgid "Authors can manage multiple blogs, each as its own website."
msgstr ""
msgid ""
"Articles are also visible on other Plume instances, and you can interact "
"with them directly from other platforms like Mastodon."
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
msgstr ""
msgid "Read the detailed rules"
@@ -1052,3 +1010,4 @@ msgstr ""
msgid "Article license"
msgstr ""

Some files were not shown because too many files have changed in this diff Show More