Add support for generic timeline #525
|
@ -55,11 +55,11 @@ aliases:
|
|||
- &restore_cache
|
||||
restore_cache:
|
||||
keys:
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v1-plume-notest
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-notest
|
||||
- &save_cache
|
||||
save_cache:
|
||||
key: v1-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
key: v2-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
paths:
|
||||
- ~/.cargo/
|
||||
- ./target
|
||||
|
@ -67,11 +67,11 @@ aliases:
|
|||
- &restore_cache_web
|
||||
restore_cache:
|
||||
keys:
|
||||
- v1-plume-web-{{ checksum "Cargo.lock" }}
|
||||
- v1-plume-web
|
||||
- v2-plume-web-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-web
|
||||
- &save_cache_web
|
||||
save_cache:
|
||||
key: v1-plume-web-{{ checksum "Cargo.lock" }}
|
||||
key: v2-plume-web-{{ checksum "Cargo.lock" }}
|
||||
paths:
|
||||
- ~/.cargo/
|
||||
- ./target
|
||||
|
@ -79,29 +79,44 @@ aliases:
|
|||
- &restore_cache_cli
|
||||
restore_cache:
|
||||
keys:
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v1-plume-notest
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-notest
|
||||
- &save_cache_cli
|
||||
save_cache:
|
||||
key: v1-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
||||
key: v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}-cli
|
||||
paths:
|
||||
- ~/.cargo/
|
||||
- target
|
||||
|
||||
- &restore_cache_release
|
||||
restore_cache:
|
||||
keys:
|
||||
- v2-plume-release-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-release
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-notest
|
||||
- &save_cache_release
|
||||
save_cache:
|
||||
key: v2-plume-release-{{ checksum "Cargo.lock" }}
|
||||
paths:
|
||||
- ~/.cargo
|
||||
- target/release
|
||||
- target/wasm32-unknown-unknown/release
|
||||
|
||||
- &restore_cache_plume_dead_code
|
||||
restore_cache:
|
||||
keys:
|
||||
- v1-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
||||
- v1-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}
|
||||
- v1-plume-test-{{ checksum "/FEATURES" }}
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
||||
- v1-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v1-plume-notest
|
||||
- v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
||||
- v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-test-{{ checksum "/FEATURES" }}
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}-{{ checksum "/FEATURES" }}
|
||||
- v2-plume-notest-{{ checksum "Cargo.lock" }}
|
||||
- v2-plume-notest
|
||||
- &save_cache_plume_dead_code
|
||||
save_cache:
|
||||
key: v1-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
||||
key: v2-plume-test-{{ checksum "/FEATURES" }}-{{ checksum "Cargo.lock" }}-plume
|
||||
paths:
|
||||
- ~/.cargo/
|
||||
- target
|
||||
|
@ -150,10 +165,10 @@ aliases:
|
|||
command: diesel migration run
|
||||
- run:
|
||||
name: install server
|
||||
command: cargo install --debug --no-default-features --features="${FEATURES}",test --path . || cargo install --debug --no-default-features --features="${FEATURES}",test --path .
|
||||
command: cargo install --debug --no-default-features --features="${FEATURES}",test --path . --force || cargo install --debug --no-default-features --features="${FEATURES}",test --path . --force
|
||||
- run:
|
||||
name: install plm
|
||||
command: cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli || cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli
|
||||
command: cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli --force || cargo install --debug --no-default-features --features="${FEATURES}" --path plume-cli --force
|
||||
- run:
|
||||
name: run test
|
||||
command: ./script/run_browser_test.sh
|
||||
|
@ -164,6 +179,26 @@ aliases:
|
|||
command: ./script/upload_coverage.sh integration
|
||||
- *save_cache_plume_dead_code
|
||||
|
||||
- &release
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- *restore_cache_release
|
||||
- run:
|
||||
name: build frontend
|
||||
command: cargo web deploy -p plume-front --release
|
||||
- run:
|
||||
name: build server
|
||||
command: cargo build --release --no-default-features --features="${FEATURES}" || cargo build --release --no-default-features --features="${FEATURES}"
|
||||
- run:
|
||||
name: build plm
|
||||
command: cargo build --release --no-default-features --features="${FEATURES}" -p plume-cli || cargo build --release --no-default-features --features="${FEATURES}" -p plume-cli
|
||||
- *save_cache_release
|
||||
- run: script/generate_artifact.sh
|
||||
- store_artifacts:
|
||||
path: plume.tar.gz
|
||||
destination: plume.tar.gz
|
||||
|
||||
|
||||
jobs:
|
||||
download_deps:
|
||||
<<: *defaults
|
||||
|
@ -171,6 +206,7 @@ jobs:
|
|||
- checkout
|
||||
- *attach_workspace
|
||||
- *restore_cache
|
||||
- run: git config --global --remove-section url."ssh://git@github.com"
|
||||
- run: cargo fetch
|
||||
- *save_cache
|
||||
- *persist_to_workspace
|
||||
|
@ -220,6 +256,19 @@ jobs:
|
|||
<<: *selenium
|
||||
<<: *env_sqlite
|
||||
<<: *test_browser
|
||||
all_ok:
|
||||
docker:
|
||||
- image: alpine:3.7
|
||||
steps:
|
||||
- run: /bin/true
|
||||
release_postgresql:
|
||||
<<: *defaults
|
||||
<<: *env_postgresql
|
||||
<<: *release
|
||||
release_sqlite:
|
||||
<<: *defaults
|
||||
<<: *env_sqlite
|
||||
<<: *release
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
|
@ -250,3 +299,18 @@ workflows:
|
|||
- test_browser_sqlite:
|
||||
requires:
|
||||
- build_web
|
||||
- all_ok:
|
||||
requires:
|
||||
- cargo_fmt
|
||||
- test_cli_postgresql
|
||||
- test_cli_sqlite
|
||||
- test_unit_postgresql
|
||||
- test_unit_sqlite
|
||||
- test_browser_postgresql
|
||||
- test_browser_sqlite
|
||||
- release_postgresql:
|
||||
requires:
|
||||
- all_ok
|
||||
- release_sqlite:
|
||||
requires:
|
||||
- all_ok
|
||||
|
|
73
Cargo.lock
generated
|
@ -938,7 +938,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gettext"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
source = "git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3#294c54d74c699fbc66502b480a37cc66c1daa7f3"
|
||||
dependencies = [
|
||||
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -947,16 +947,16 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gettext-macros"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
source = "git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10#a7c605f7edd6bfbfbfe7778026bfefd88d82db10"
|
||||
dependencies = [
|
||||
"gettext 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)",
|
||||
"gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gettext-utils"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
source = "git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10#a7c605f7edd6bfbfbfe7778026bfefd88d82db10"
|
||||
|
||||
[[package]]
|
||||
name = "guid"
|
||||
|
@ -1777,7 +1777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "plume"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"activitypub 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"askama_escape 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1788,26 +1788,26 @@ dependencies = [
|
|||
"ctrlc 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"diesel 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext-macros 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)",
|
||||
"gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)",
|
||||
"gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)",
|
||||
"guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lettre 0.9.0 (git+https://github.com/lettre/lettre?rev=c988b1760ad8179d9e7f3fb8594d2b86cf2a0a49)",
|
||||
"lettre_email 0.9.0 (git+https://github.com/lettre/lettre?rev=c988b1760ad8179d9e7f3fb8594d2b86cf2a0a49)",
|
||||
"multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plume-api 0.2.0",
|
||||
"plume-common 0.2.0",
|
||||
"plume-models 0.2.0",
|
||||
"plume-api 0.3.0",
|
||||
"plume-common 0.3.0",
|
||||
"plume-models 0.3.0",
|
||||
"rocket 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_contrib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=4a72ea2ec716cb0b26188fb00bccf2ef7d1e031c)",
|
||||
"rocket_i18n 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)",
|
||||
"rpassword 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ructe 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"runtime-fmt 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1819,7 +1819,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "plume-api"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"canapi 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1828,18 +1828,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "plume-cli"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"diesel 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plume-models 0.2.0",
|
||||
"plume-models 0.3.0",
|
||||
"rpassword 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "plume-common"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"activitypub 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"activitystreams-derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1847,8 +1847,6 @@ dependencies = [
|
|||
"array_tool 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper 0.12.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1863,18 +1861,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "plume-front"
|
||||
version = "0.1.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"gettext 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext-macros 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)",
|
||||
"gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)",
|
||||
"gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)",
|
||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"stdweb 0.4.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "plume-models"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"activitypub 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ammonia 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1887,12 +1885,13 @@ dependencies = [
|
|||
"guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl 0.10.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plume-api 0.2.0",
|
||||
"plume-common 0.2.0",
|
||||
"plume-api 0.3.0",
|
||||
"plume-common 0.3.0",
|
||||
"reqwest 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)",
|
||||
"scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2334,9 +2333,9 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "rocket_i18n"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
source = "git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2#e922afa7c366038b3433278c03b1456b346074f2"
|
||||
dependencies = [
|
||||
"gettext 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)",
|
||||
"rocket 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -2375,6 +2374,11 @@ dependencies = [
|
|||
"nom 4.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "runtime-fmt"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rust-stemmers"
|
||||
version = "1.1.0"
|
||||
|
@ -3366,9 +3370,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
"checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b"
|
||||
"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
|
||||
"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592"
|
||||
"checksum gettext 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4378b8e09fd51cfdb0d48f40929a5c358efeeb62feb458c7d6eab979fae231f4"
|
||||
"checksum gettext-macros 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdeb4255ca6caddbe341fb22fdbe654abb0b797358dfc2c569ed0d5d832ab8e"
|
||||
"checksum gettext-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46dd079379f756f6a1ae74b051813e242893f84fbf6ac898bce827fc77958d70"
|
||||
"checksum gettext 0.3.0 (git+https://github.com/Plume-org/gettext/?rev=294c54d74c699fbc66502b480a37cc66c1daa7f3)" = "<none>"
|
||||
"checksum gettext-macros 0.4.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)" = "<none>"
|
||||
"checksum gettext-utils 0.1.0 (git+https://github.com/Plume-org/gettext-macros/?rev=a7c605f7edd6bfbfbfe7778026bfefd88d82db10)" = "<none>"
|
||||
"checksum guid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e691c64d9b226c7597e29aeb46be753beb8c9eeef96d8c78dfd4d306338a38da"
|
||||
"checksum guid-create 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fcea207bf7a6092166ab590f98fe5dde5a7deed1f1920d98dcac31f80814c40d"
|
||||
"checksum guid-macro-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d50f7c496073b5a5dec0f6f1c149113a50960ce25dd2a559987a5a71190816"
|
||||
|
@ -3500,10 +3504,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
"checksum rocket_contrib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f73e161dad5730435f51c815a5c6831d2e57b6b4299b1bf609d31b09aa9a2fa7"
|
||||
"checksum rocket_csrf 0.1.0 (git+https://github.com/fdb-hiroshima/rocket_csrf?rev=4a72ea2ec716cb0b26188fb00bccf2ef7d1e031c)" = "<none>"
|
||||
"checksum rocket_http 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba9d4f2ce5bba6e1b6d3100493bbad63879e99bbf6b4365d61e6f781daab324d"
|
||||
"checksum rocket_i18n 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc76ce146d0650cd38ee343202c95c8a891311f1ddad54feb9ecf8709cc2c86b"
|
||||
"checksum rocket_i18n 0.4.0 (git+https://github.com/Plume-org/rocket_i18n?rev=e922afa7c366038b3433278c03b1456b346074f2)" = "<none>"
|
||||
"checksum rpassword 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37473170aedbe66ffa3ad3726939ba677d83c646ad4fd99e5b4bc38712f45ec"
|
||||
"checksum rsass 0.9.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4534cc03040beacd2668621815f26fe57e5b7cfe085790f98e5e87c1612316"
|
||||
"checksum ructe 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "159f449df09bdd1c92080d0fc1d1c5e11abe81301496370dfee546d985a46dec"
|
||||
"checksum runtime-fmt 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "647a821d66049faccc993fc3c379d1181b81a484097495cda79ffdb17b55b87f"
|
||||
"checksum rust-stemmers 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05928c187b85b38f6b98db43057a24f0245163635a5ce6325a4f77a833d646aa"
|
||||
"checksum rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "adacaae16d02b6ec37fdc7acfcddf365978de76d1983d3ee22afc260e1ca9619"
|
||||
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
||||
|
|
12
Cargo.toml
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
authors = ["Plume contributors"]
|
||||
name = "plume"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
repository = "https://github.com/Plume-org/Plume"
|
||||
|
||||
[dependencies]
|
||||
|
@ -11,10 +11,9 @@ atom_syndication = "0.6"
|
|||
canapi = "0.2"
|
||||
colored = "1.7"
|
||||
dotenv = "0.13"
|
||||
failure = "0.1"
|
||||
gettext = "0.3"
|
||||
gettext-macros = "0.4"
|
||||
gettext-utils = "0.1"
|
||||
gettext = { git = "https://github.com/Plume-org/gettext/", rev = "294c54d74c699fbc66502b480a37cc66c1daa7f3" }
|
||||
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 = { git = "https://github.com/lettre/lettre", rev = "c988b1760ad8179d9e7f3fb8594d2b86cf2a0a49" }
|
||||
|
@ -22,8 +21,9 @@ lettre_email = { git = "https://github.com/lettre/lettre", rev = "c988b1760ad817
|
|||
num_cpus = "1.0"
|
||||
rocket = "0.4.0"
|
||||
rocket_contrib = { version = "0.4.0", features = ["json"] }
|
||||
rocket_i18n = "0.4.0"
|
||||
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
|
||||
rpassword = "2.0"
|
||||
runtime-fmt = "0.3.0"
|
||||
scheduled-thread-pool = "0.2.0"
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "plume-api"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
authors = ["Plume contributors"]
|
||||
|
||||
[dependencies]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "plume-cli"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
authors = ["Plume contributors"]
|
||||
|
||||
[[bin]]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "plume-common"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
authors = ["Plume contributors"]
|
||||
|
||||
[dependencies]
|
||||
|
@ -9,8 +9,6 @@ activitystreams-derive = "0.1.0"
|
|||
activitystreams-traits = "0.1.0"
|
||||
array_tool = "1.0"
|
||||
base64 = "0.10"
|
||||
failure = "0.1"
|
||||
failure_derive = "0.1"
|
||||
heck = "0.3.0"
|
||||
hex = "0.3"
|
||||
hyper = "0.12.20"
|
||||
|
|
|
@ -1,48 +1,606 @@
|
|||
use activitypub::{activity::Create, Error as ApError, Object};
|
||||
use reqwest::header::{HeaderValue, ACCEPT};
|
||||
use std::fmt::Debug;
|
||||
|
||||
use activity_pub::Id;
|
||||
/// Represents an ActivityPub inbox.
|
||||
///
|
||||
/// It routes an incoming Activity through the registered handlers.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```rust
|
||||
/// # extern crate activitypub;
|
||||
/// # use activitypub::{actor::Person, activity::{Announce, Create}, object::Note};
|
||||
/// # use plume_common::activity_pub::inbox::*;
|
||||
/// # struct User;
|
||||
/// # impl FromId<()> for User {
|
||||
/// # type Error = ();
|
||||
/// # type Object = Person;
|
||||
/// #
|
||||
/// # fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
/// # Ok(User)
|
||||
/// # }
|
||||
/// #
|
||||
/// # fn from_activity(_: &(), obj: Person) -> Result<Self, Self::Error> {
|
||||
/// # Ok(User)
|
||||
/// # }
|
||||
/// # }
|
||||
/// # impl AsActor<&()> for User {
|
||||
/// # fn get_inbox_url(&self) -> String {
|
||||
/// # String::new()
|
||||
/// # }
|
||||
/// # fn is_local(&self) -> bool { false }
|
||||
/// # }
|
||||
/// # struct Message;
|
||||
/// # impl FromId<()> for Message {
|
||||
/// # type Error = ();
|
||||
/// # type Object = Note;
|
||||
/// #
|
||||
/// # fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
/// # Ok(Message)
|
||||
/// # }
|
||||
/// #
|
||||
/// # fn from_activity(_: &(), obj: Note) -> Result<Self, Self::Error> {
|
||||
/// # Ok(Message)
|
||||
/// # }
|
||||
/// # }
|
||||
/// # impl AsObject<User, Create, &()> for Message {
|
||||
/// # type Error = ();
|
||||
/// # type Output = ();
|
||||
/// #
|
||||
/// # fn activity(self, _: &(), _actor: User, _id: &str) -> Result<(), ()> {
|
||||
/// # Ok(())
|
||||
/// # }
|
||||
/// # }
|
||||
/// # impl AsObject<User, Announce, &()> for Message {
|
||||
/// # type Error = ();
|
||||
/// # type Output = ();
|
||||
/// #
|
||||
/// # fn activity(self, _: &(), _actor: User, _id: &str) -> Result<(), ()> {
|
||||
/// # Ok(())
|
||||
/// # }
|
||||
/// # }
|
||||
/// #
|
||||
/// # let mut act = Create::default();
|
||||
/// # act.object_props.set_id_string(String::from("https://test.ap/activity")).unwrap();
|
||||
/// # let mut person = Person::default();
|
||||
/// # person.object_props.set_id_string(String::from("https://test.ap/actor")).unwrap();
|
||||
/// # act.create_props.set_actor_object(person).unwrap();
|
||||
/// # act.create_props.set_object_object(Note::default()).unwrap();
|
||||
/// # let activity_json = serde_json::to_value(act).unwrap();
|
||||
/// #
|
||||
/// # let conn = ();
|
||||
/// #
|
||||
/// let result: Result<(), ()> = Inbox::handle(&conn, activity_json)
|
||||
/// .with::<User, Announce, Message>()
|
||||
/// .with::<User, Create, Message>()
|
||||
/// .done();
|
||||
/// ```
|
||||
pub enum Inbox<'a, C, E, R>
|
||||
where
|
||||
E: From<InboxError<E>> + Debug,
|
||||
{
|
||||
/// The activity has not been handled yet
|
||||
///
|
||||
/// # Structure
|
||||
///
|
||||
/// - the context to be passed to each handler.
|
||||
/// - the activity
|
||||
/// - the reason it has not been handled yet
|
||||
NotHandled(&'a C, serde_json::Value, InboxError<E>),
|
||||
|
||||
#[derive(Fail, Debug)]
|
||||
pub enum InboxError {
|
||||
#[fail(display = "The `type` property is required, but was not present")]
|
||||
NoType,
|
||||
#[fail(display = "Invalid activity type")]
|
||||
InvalidType,
|
||||
#[fail(display = "Couldn't undo activity")]
|
||||
CantUndo,
|
||||
/// A matching handler have been found but failed
|
||||
///
|
||||
/// The wrapped value is the error returned by the handler
|
||||
Failed(E),
|
||||
|
||||
/// The activity was successfully handled
|
||||
///
|
||||
/// The wrapped value is the value returned by the handler
|
||||
Handled(R),
|
||||
}
|
||||
|
||||
pub trait FromActivity<T: Object, C>: Sized {
|
||||
type Error: From<ApError>;
|
||||
/// Possible reasons of inbox failure
|
||||
#[derive(Debug)]
|
||||
pub enum InboxError<E: Debug> {
|
||||
/// None of the registered handlers matched
|
||||
NoMatch,
|
||||
|
||||
fn from_activity(conn: &C, obj: T, actor: Id) -> Result<Self, Self::Error>;
|
||||
/// No ID was provided for the incoming activity, or it was not a string
|
||||
InvalidID,
|
||||
|
||||
fn try_from_activity(conn: &C, act: Create) -> Result<Self, Self::Error> {
|
||||
Self::from_activity(
|
||||
conn,
|
||||
act.create_props.object_object()?,
|
||||
act.create_props.actor_link::<Id>()?,
|
||||
)
|
||||
/// The activity type matched for at least one handler, but then the actor was
|
||||
/// not of the expected type
|
||||
InvalidActor(Option<E>),
|
||||
|
||||
/// Activity and Actor types matched, but not the Object
|
||||
InvalidObject(Option<E>),
|
||||
|
||||
/// Error while dereferencing the object
|
||||
DerefError,
|
||||
}
|
||||
|
||||
impl<T: Debug> From<InboxError<T>> for () {
|
||||
fn from(_: InboxError<T>) {}
|
||||
}
|
||||
|
||||
/*
|
||||
Type arguments:
|
||||
- C: Context
|
||||
- E: Error
|
||||
- R: Result
|
||||
*/
|
||||
impl<'a, C, E, R> Inbox<'a, C, E, R>
|
||||
where
|
||||
E: From<InboxError<E>> + Debug,
|
||||
{
|
||||
/// Creates a new `Inbox` to handle an incoming activity.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `ctx`: the context to pass to each handler
|
||||
/// - `json`: the JSON representation of the incoming activity
|
||||
pub fn handle(ctx: &'a C, json: serde_json::Value) -> Inbox<'a, C, E, R> {
|
||||
Inbox::NotHandled(ctx, json, InboxError::NoMatch)
|
||||
}
|
||||
|
||||
/// Registers an handler on this Inbox.
|
||||
pub fn with<A, V, M>(self) -> Inbox<'a, C, E, R>
|
||||
where
|
||||
A: AsActor<&'a C> + FromId<C, Error = E>,
|
||||
V: activitypub::Activity,
|
||||
M: AsObject<A, V, &'a C, Error = E> + FromId<C, Error = E>,
|
||||
M::Output: Into<R>,
|
||||
{
|
||||
if let Inbox::NotHandled(ctx, mut act, e) = self {
|
||||
if serde_json::from_value::<V>(act.clone()).is_ok() {
|
||||
let act_clone = act.clone();
|
||||
let act_id = match act_clone["id"].as_str() {
|
||||
Some(x) => x,
|
||||
None => return Inbox::NotHandled(ctx, act, InboxError::InvalidID),
|
||||
};
|
||||
|
||||
// Get the actor ID
|
||||
let actor_id = match get_id(act["actor"].clone()) {
|
||||
Some(x) => x,
|
||||
None => return Inbox::NotHandled(ctx, act, InboxError::InvalidActor(None)),
|
||||
};
|
||||
// Transform this actor to a model (see FromId for details about the from_id function)
|
||||
let actor = match A::from_id(
|
||||
ctx,
|
||||
&actor_id,
|
||||
serde_json::from_value(act["actor"].clone()).ok(),
|
||||
) {
|
||||
Ok(a) => a,
|
||||
// If the actor was not found, go to the next handler
|
||||
Err((json, e)) => {
|
||||
if let Some(json) = json {
|
||||
act["actor"] = json;
|
||||
}
|
||||
return Inbox::NotHandled(ctx, act, InboxError::InvalidActor(Some(e)));
|
||||
}
|
||||
};
|
||||
|
||||
// Same logic for "object"
|
||||
let obj_id = match get_id(act["object"].clone()) {
|
||||
Some(x) => x,
|
||||
None => return Inbox::NotHandled(ctx, act, InboxError::InvalidObject(None)),
|
||||
};
|
||||
let obj = match M::from_id(
|
||||
ctx,
|
||||
&obj_id,
|
||||
serde_json::from_value(act["object"].clone()).ok(),
|
||||
) {
|
||||
Ok(o) => o,
|
||||
Err((json, e)) => {
|
||||
if let Some(json) = json {
|
||||
act["object"] = json;
|
||||
}
|
||||
return Inbox::NotHandled(ctx, act, InboxError::InvalidObject(Some(e)));
|
||||
}
|
||||
};
|
||||
|
||||
// Handle the activity
|
||||
match obj.activity(ctx, actor, &act_id) {
|
||||
Ok(res) => Inbox::Handled(res.into()),
|
||||
Err(e) => Inbox::Failed(e),
|
||||
}
|
||||
} else {
|
||||
// If the Activity type is not matching the expected one for
|
||||
// this handler, try with the next one.
|
||||
Inbox::NotHandled(ctx, act, e)
|
||||
}
|
||||
} else {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
/// Transforms the inbox in a `Result`
|
||||
pub fn done(self) -> Result<R, E> {
|
||||
match self {
|
||||
Inbox::Handled(res) => Ok(res),
|
||||
Inbox::NotHandled(_, _, err) => Err(E::from(err)),
|
||||
Inbox::Failed(err) => Err(err),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Notify<C> {
|
||||
type Error;
|
||||
|
||||
fn notify(&self, conn: &C) -> Result<(), Self::Error>;
|
||||
/// Get the ActivityPub ID of a JSON value.
|
||||
///
|
||||
/// If the value is a string, its value is returned.
|
||||
/// If it is an object, and that its `id` field is a string, we return it.
|
||||
///
|
||||
/// Otherwise, `None` is returned.
|
||||
fn get_id(json: serde_json::Value) -> Option<String> {
|
||||
match json {
|
||||
serde_json::Value::String(s) => Some(s),
|
||||
serde_json::Value::Object(map) => map.get("id")?.as_str().map(ToString::to_string),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Deletable<C, A> {
|
||||
type Error;
|
||||
/// A trait for ActivityPub objects that can be retrieved or constructed from ID.
|
||||
///
|
||||
/// The two functions to implement are `from_activity` to create (and save) a new object
|
||||
/// of this type from its AP representation, and `from_db` to try to find it in the database
|
||||
/// using its ID.
|
||||
///
|
||||
/// When dealing with the "object" field of incoming activities, `Inbox` will try to see if it is
|
||||
/// a full object, and if so, save it with `from_activity`. If it is only an ID, it will try to find
|
||||
/// it in the database with `from_db`, and otherwise dereference (fetch) the full object and parse it
|
||||
/// with `from_activity`.
|
||||
pub trait FromId<C>: Sized {
|
||||
/// The type representing a failure
|
||||
type Error: From<InboxError<Self::Error>> + Debug;
|
||||
|
||||
fn delete(&self, conn: &C) -> Result<A, Self::Error>;
|
||||
fn delete_id(id: &str, actor_id: &str, conn: &C) -> Result<A, Self::Error>;
|
||||
/// The ActivityPub object type representing Self
|
||||
type Object: activitypub::Object;
|
||||
|
||||
/// Tries to get an instance of `Self` from an ActivityPub ID.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `ctx`: a context to get this instance (= a database in which to search)
|
||||
/// - `id`: the ActivityPub ID of the object to find
|
||||
/// - `object`: optional object that will be used if the object was not found in the database
|
||||
/// If absent, the ID will be dereferenced.
|
||||
fn from_id(
|
||||
ctx: &C,
|
||||
id: &str,
|
||||
object: Option<Self::Object>,
|
||||
) -> Result<Self, (Option<serde_json::Value>, Self::Error)> {
|
||||
match Self::from_db(ctx, id) {
|
||||
Ok(x) => Ok(x),
|
||||
_ => match object {
|
||||
Some(o) => Self::from_activity(ctx, o).map_err(|e| (None, e)),
|
||||
None => Self::from_activity(ctx, Self::deref(id)?).map_err(|e| (None, e)),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/// Dereferences an ID
|
||||
fn deref(id: &str) -> Result<Self::Object, (Option<serde_json::Value>, Self::Error)> {
|
||||
reqwest::Client::new()
|
||||
.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()))
|
||||
}
|
||||
|
||||
/// Builds a `Self` from its ActivityPub representation
|
||||
fn from_activity(ctx: &C, activity: Self::Object) -> Result<Self, Self::Error>;
|
||||
|
||||
/// 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>;
|
||||
}
|
||||
|
||||
pub trait WithInbox {
|
||||
/// Should be implemented by anything representing an ActivityPub actor.
|
||||
///
|
||||
/// # Type arguments
|
||||
///
|
||||
/// - `C`: the context to be passed to this activity handler from the `Inbox` (usually a database connection)
|
||||
pub trait AsActor<C> {
|
||||
/// Return the URL of this actor's inbox
|
||||
fn get_inbox_url(&self) -> String;
|
||||
|
||||
fn get_shared_inbox_url(&self) -> Option<String>;
|
||||
/// If this actor has shared inbox, its URL should be returned by this function
|
||||
fn get_shared_inbox_url(&self) -> Option<String> {
|
||||
None
|
||||
}
|
||||
|
||||
/// `true` if this actor comes from the running ActivityPub server/instance
|
||||
fn is_local(&self) -> bool;
|
||||
}
|
||||
|
||||
/// Should be implemented by anything representing an ActivityPub object.
|
||||
///
|
||||
/// # Type parameters
|
||||
///
|
||||
/// - `A`: the actor type
|
||||
/// - `V`: the ActivityPub verb/activity
|
||||
/// - `O`: the ActivityPub type of the Object for this activity (usually the type corresponding to `Self`)
|
||||
/// - `C`: the context needed to handle the activity (usually a database connection)
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// An implementation of AsObject that handles Note creation by an Account model,
|
||||
/// representing the Note by a Message type, without any specific context.
|
||||
///
|
||||
/// ```rust
|
||||
/// # extern crate activitypub;
|
||||
/// # use activitypub::{activity::Create, actor::Person, object::Note};
|
||||
/// # use plume_common::activity_pub::inbox::{AsActor, AsObject, FromId};
|
||||
/// # struct Account;
|
||||
/// # impl FromId<()> for Account {
|
||||
/// # type Error = ();
|
||||
/// # type Object = Person;
|
||||
/// #
|
||||
/// # fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
/// # Ok(Account)
|
||||
/// # }
|
||||
/// #
|
||||
/// # fn from_activity(_: &(), obj: Person) -> Result<Self, Self::Error> {
|
||||
/// # Ok(Account)
|
||||
/// # }
|
||||
/// # }
|
||||
/// # impl AsActor<()> for Account {
|
||||
/// # fn get_inbox_url(&self) -> String {
|
||||
/// # String::new()
|
||||
/// # }
|
||||
/// # fn is_local(&self) -> bool { false }
|
||||
/// # }
|
||||
/// #[derive(Debug)]
|
||||
/// struct Message {
|
||||
/// text: String,
|
||||
/// }
|
||||
///
|
||||
/// impl FromId<()> for Message {
|
||||
/// type Error = ();
|
||||
/// type Object = Note;
|
||||
///
|
||||
/// fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
/// Ok(Message { text: "From DB".into() })
|
||||
/// }
|
||||
///
|
||||
/// fn from_activity(_: &(), obj: Note) -> Result<Self, Self::Error> {
|
||||
/// Ok(Message { text: obj.object_props.content_string().map_err(|_| ())? })
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// impl AsObject<Account, Create, ()> for Message {
|
||||
/// type Error = ();
|
||||
/// type Output = ();
|
||||
///
|
||||
/// fn activity(self, _: (), _actor: Account, _id: &str) -> Result<(), ()> {
|
||||
/// println!("New Note: {:?}", self);
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
pub trait AsObject<A, V, C>
|
||||
where
|
||||
V: activitypub::Activity,
|
||||
{
|
||||
/// What kind of error is returned when something fails
|
||||
type Error;
|
||||
|
||||
/// What is returned by `AsObject::activity`, if anything is returned
|
||||
type Output = ();
|
||||
|
||||
/// Handle a specific type of activity dealing with this type of objects.
|
||||
///
|
||||
/// The implementations should check that the actor is actually authorized
|
||||
/// to perform this action.
|
||||
///
|
||||
/// # Parameters
|
||||
///
|
||||
/// - `self`: the object on which the activity acts
|
||||
/// - `ctx`: the context passed to `Inbox::handle`
|
||||
/// - `actor`: the actor who did this activity
|
||||
/// - `id`: the ID of this activity
|
||||
fn activity(self, ctx: C, actor: A, id: &str) -> Result<Self::Output, Self::Error>;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use activitypub::{activity::*, actor::Person, object::Note};
|
||||
|
||||
struct MyActor;
|
||||
impl FromId<()> for MyActor {
|
||||
type Error = ();
|
||||
type Object = Person;
|
||||
|
||||
fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
Ok(MyActor)
|
||||
}
|
||||
|
||||
fn from_activity(_: &(), _obj: Person) -> Result<Self, Self::Error> {
|
||||
Ok(MyActor)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsActor<&()> for MyActor {
|
||||
fn get_inbox_url(&self) -> String {
|
||||
String::from("https://test.ap/my-actor/inbox")
|
||||
}
|
||||
|
||||
fn is_local(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
struct MyObject;
|
||||
impl FromId<()> for MyObject {
|
||||
type Error = ();
|
||||
type Object = Note;
|
||||
|
||||
fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
Ok(MyObject)
|
||||
}
|
||||
|
||||
fn from_activity(_: &(), _obj: Note) -> Result<Self, Self::Error> {
|
||||
Ok(MyObject)
|
||||
}
|
||||
}
|
||||
impl AsObject<MyActor, Create, &()> for MyObject {
|
||||
type Error = ();
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, _: &(), _actor: MyActor, _id: &str) -> Result<Self::Output, Self::Error> {
|
||||
println!("MyActor is creating a Note");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<MyActor, Like, &()> for MyObject {
|
||||
type Error = ();
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, _: &(), _actor: MyActor, _id: &str) -> Result<Self::Output, Self::Error> {
|
||||
println!("MyActor is liking a Note");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<MyActor, Delete, &()> for MyObject {
|
||||
type Error = ();
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, _: &(), _actor: MyActor, _id: &str) -> Result<Self::Output, Self::Error> {
|
||||
println!("MyActor is deleting a Note");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<MyActor, Announce, &()> for MyObject {
|
||||
type Error = ();
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, _: &(), _actor: MyActor, _id: &str) -> Result<Self::Output, Self::Error> {
|
||||
println!("MyActor is announcing a Note");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn build_create() -> Create {
|
||||
let mut act = Create::default();
|
||||
act.object_props
|
||||
.set_id_string(String::from("https://test.ap/activity"))
|
||||
.unwrap();
|
||||
let mut person = Person::default();
|
||||
person
|
||||
.object_props
|
||||
.set_id_string(String::from("https://test.ap/actor"))
|
||||
.unwrap();
|
||||
act.create_props.set_actor_object(person).unwrap();
|
||||
let mut note = Note::default();
|
||||
note.object_props
|
||||
.set_id_string(String::from("https://test.ap/note"))
|
||||
.unwrap();
|
||||
act.create_props.set_object_object(note).unwrap();
|
||||
act
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inbox_basic() {
|
||||
let act = serde_json::to_value(build_create()).unwrap();
|
||||
let res: Result<(), ()> = Inbox::handle(&(), act)
|
||||
.with::<MyActor, Create, MyObject>()
|
||||
.done();
|
||||
assert!(res.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inbox_multi_handlers() {
|
||||
let act = serde_json::to_value(build_create()).unwrap();
|
||||
let res: Result<(), ()> = Inbox::handle(&(), act)
|
||||
.with::<MyActor, Announce, MyObject>()
|
||||
.with::<MyActor, Delete, MyObject>()
|
||||
.with::<MyActor, Create, MyObject>()
|
||||
.with::<MyActor, Like, MyObject>()
|
||||
.done();
|
||||
assert!(res.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inbox_failure() {
|
||||
let act = serde_json::to_value(build_create()).unwrap();
|
||||
// Create is not handled by this inbox
|
||||
let res: Result<(), ()> = Inbox::handle(&(), act)
|
||||
.with::<MyActor, Announce, MyObject>()
|
||||
.with::<MyActor, Like, MyObject>()
|
||||
.done();
|
||||
assert!(res.is_err());
|
||||
}
|
||||
|
||||
struct FailingActor;
|
||||
impl FromId<()> for FailingActor {
|
||||
type Error = ();
|
||||
type Object = Person;
|
||||
|
||||
fn from_db(_: &(), _id: &str) -> Result<Self, Self::Error> {
|
||||
Err(())
|
||||
}
|
||||
|
||||
fn from_activity(_: &(), _obj: Person) -> Result<Self, Self::Error> {
|
||||
Err(())
|
||||
}
|
||||
}
|
||||
impl AsActor<&()> for FailingActor {
|
||||
fn get_inbox_url(&self) -> String {
|
||||
String::from("https://test.ap/failing-actor/inbox")
|
||||
}
|
||||
|
||||
fn is_local(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<FailingActor, Create, &()> for MyObject {
|
||||
type Error = ();
|
||||
type Output = ();
|
||||
|
||||
fn activity(
|
||||
self,
|
||||
_: &(),
|
||||
_actor: FailingActor,
|
||||
_id: &str,
|
||||
) -> Result<Self::Output, Self::Error> {
|
||||
println!("FailingActor is creating a Note");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inbox_actor_failure() {
|
||||
let act = serde_json::to_value(build_create()).unwrap();
|
||||
|
||||
let res: Result<(), ()> = Inbox::handle(&(), act.clone())
|
||||
.with::<FailingActor, Create, MyObject>()
|
||||
.done();
|
||||
assert!(res.is_err());
|
||||
|
||||
let res: Result<(), ()> = Inbox::handle(&(), act.clone())
|
||||
.with::<FailingActor, Create, MyObject>()
|
||||
.with::<MyActor, Create, MyObject>()
|
||||
.done();
|
||||
assert!(res.is_ok());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ pub mod request;
|
|||
pub mod sign;
|
||||
|
||||
pub const CONTEXT_URL: &str = "https://www.w3.org/ns/activitystreams";
|
||||
pub const PUBLIC_VISIBILTY: &str = "https://www.w3.org/ns/activitystreams#Public";
|
||||
pub const PUBLIC_VISIBILITY: &str = "https://www.w3.org/ns/activitystreams#Public";
|
||||
|
||||
pub const AP_CONTENT_TYPE: &str =
|
||||
r#"application/ld+json; profile="https://www.w3.org/ns/activitystreams""#;
|
||||
|
@ -107,11 +107,12 @@ impl<'a, 'r> FromRequest<'a, 'r> for ApRequest {
|
|||
.unwrap_or(Outcome::Forward(()))
|
||||
}
|
||||
}
|
||||
pub fn broadcast<S: sign::Signer, A: Activity, T: inbox::WithInbox>(
|
||||
sender: &S,
|
||||
act: A,
|
||||
to: Vec<T>,
|
||||
) {
|
||||
pub fn broadcast<S, A, T, C>(sender: &S, act: A, to: Vec<T>)
|
||||
where
|
||||
S: sign::Signer,
|
||||
A: Activity,
|
||||
T: inbox::AsActor<C>,
|
||||
{
|
||||
let boxes = to
|
||||
.into_iter()
|
||||
.filter(|u| !u.is_local())
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![feature(custom_attribute)]
|
||||
#![feature(custom_attribute, associated_type_defaults)]
|
||||
|
||||
extern crate activitypub;
|
||||
#[macro_use]
|
||||
|
@ -7,9 +7,6 @@ extern crate activitystreams_traits;
|
|||
extern crate array_tool;
|
||||
extern crate base64;
|
||||
extern crate chrono;
|
||||
extern crate failure;
|
||||
#[macro_use]
|
||||
extern crate failure_derive;
|
||||
extern crate heck;
|
||||
extern crate hex;
|
||||
extern crate openssl;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
[package]
|
||||
name = "plume-front"
|
||||
version = "0.1.0"
|
||||
version = "0.3.0"
|
||||
authors = ["Plume contributors"]
|
||||
|
||||
[dependencies]
|
||||
stdweb = "0.4"
|
||||
gettext = "0.3"
|
||||
gettext-macros = "0.4"
|
||||
gettext-utils = "0.1"
|
||||
gettext = { git = "https://github.com/Plume-org/gettext/", rev = "294c54d74c699fbc66502b480a37cc66c1daa7f3" }
|
||||
gettext-macros = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
|
||||
gettext-utils = { git = "https://github.com/Plume-org/gettext-macros/", rev = "a7c605f7edd6bfbfbfe7778026bfefd88d82db10" }
|
||||
lazy_static = "1.3"
|
|
@ -11,7 +11,31 @@ extern crate stdweb;
|
|||
|
||||
use stdweb::web::{event::*, *};
|
||||
|
||||
init_i18n!("plume-front", en, fr);
|
||||
init_i18n!(
|
||||
"plume-front",
|
||||
ar,
|
||||
bg,
|
||||
ca,
|
||||
cs,
|
||||
de,
|
||||
en,
|
||||
eo,
|
||||
es,
|
||||
fr,
|
||||
gl,
|
||||
hi,
|
||||
hr,
|
||||
it,
|
||||
ja,
|
||||
nb,
|
||||
pl,
|
||||
pt,
|
||||
ro,
|
||||
ru,
|
||||
sr,
|
||||
sk,
|
||||
sv
|
||||
);
|
||||
|
||||
mod editor;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "plume-models"
|
||||
version = "0.2.0"
|
||||
version = "0.3.0"
|
||||
authors = ["Plume contributors"]
|
||||
|
||||
[dependencies]
|
||||
|
@ -15,6 +15,7 @@ itertools = "0.8.0"
|
|||
lazy_static = "*"
|
||||
openssl = "0.10.15"
|
||||
rocket = "0.4.0"
|
||||
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
|
||||
reqwest = "0.9"
|
||||
scheduled-thread-pool = "0.2.0"
|
||||
serde = "1.0"
|
||||
|
|
|
@ -7,10 +7,6 @@ use openssl::{
|
|||
rsa::Rsa,
|
||||
sign::{Signer, Verifier},
|
||||
};
|
||||
use reqwest::{
|
||||
header::{HeaderValue, ACCEPT},
|
||||
Client,
|
||||
};
|
||||
use serde_json;
|
||||
use url::Url;
|
||||
use webfinger::*;
|
||||
|
@ -18,8 +14,7 @@ use webfinger::*;
|
|||
use instance::*;
|
||||
use medias::Media;
|
||||
use plume_common::activity_pub::{
|
||||
ap_accept_header,
|
||||
inbox::{Deletable, WithInbox},
|
||||
inbox::{AsActor, FromId},
|
||||
sign, ActivityStream, ApSignature, Id, IntoId, PublicKey, Source,
|
||||
};
|
||||
use posts::Post;
|
||||
|
@ -27,7 +22,7 @@ use safe_string::SafeString;
|
|||
use schema::blogs;
|
||||
use search::Searcher;
|
||||
use users::User;
|
||||
use {Connection, Error, Result, CONFIG};
|
||||
use {Connection, Error, PlumeRocket, Result};
|
||||
|
||||
pub type CustomGroup = CustomObject<ApSignature, Group>;
|
||||
|
||||
|
@ -135,121 +130,27 @@ impl Blog {
|
|||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn find_by_fqn(conn: &Connection, fqn: &str) -> Result<Blog> {
|
||||
pub fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result<Blog> {
|
||||
let from_db = blogs::table
|
||||
.filter(blogs::fqn.eq(fqn))
|
||||
.limit(1)
|
||||
.load::<Blog>(conn)?
|
||||
.load::<Blog>(&*c.conn)?
|
||||
.into_iter()
|
||||
.next();
|
||||
if let Some(from_db) = from_db {
|
||||
Ok(from_db)
|
||||
} else {
|
||||
Blog::fetch_from_webfinger(conn, fqn)
|
||||
Blog::fetch_from_webfinger(c, fqn)
|
||||
}
|
||||
}
|
||||
|
||||
fn fetch_from_webfinger(conn: &Connection, acct: &str) -> Result<Blog> {
|
||||
fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result<Blog> {
|
||||
resolve(acct.to_owned(), true)?
|
||||
.links
|
||||
thank you for the explanation! thank you for the explanation!
|
||||
.into_iter()
|
||||
.find(|l| l.mime_type == Some(String::from("application/activity+json")))
|
||||
.ok_or(Error::Webfinger)
|
||||
.and_then(|l| Blog::fetch_from_url(conn, &l.href?))
|
||||
}
|
||||
|
||||
fn fetch_from_url(conn: &Connection, url: &str) -> Result<Blog> {
|
||||
let mut res = Client::new()
|
||||
.get(url)
|
||||
.header(
|
||||
ACCEPT,
|
||||
HeaderValue::from_str(
|
||||
&ap_accept_header()
|
||||
.into_iter()
|
||||
.collect::<Vec<_>>()
|
||||
.join(", "),
|
||||
)?,
|
||||
)
|
||||
.send()?;
|
||||
|
||||
let text = &res.text()?;
|
||||
let ap_sign: ApSignature = serde_json::from_str(text)?;
|
||||
let mut json: CustomGroup = serde_json::from_str(text)?;
|
||||
json.custom_props = ap_sign; // without this workaround, publicKey is not correctly deserialized
|
||||
Blog::from_activity(conn, &json, Url::parse(url)?.host_str()?)
|
||||
}
|
||||
|
||||
fn from_activity(conn: &Connection, acct: &CustomGroup, inst: &str) -> Result<Blog> {
|
||||
let instance = Instance::find_by_domain(conn, inst).or_else(|_| {
|
||||
Instance::insert(
|
||||
conn,
|
||||
NewInstance {
|
||||
public_domain: inst.to_owned(),
|
||||
name: inst.to_owned(),
|
||||
local: false,
|
||||
// We don't really care about all the following for remote instances
|
||||
long_description: SafeString::new(""),
|
||||
short_description: SafeString::new(""),
|
||||
default_license: String::new(),
|
||||
open_registrations: true,
|
||||
short_description_html: String::new(),
|
||||
long_description_html: String::new(),
|
||||
},
|
||||
)
|
||||
})?;
|
||||
|
||||
let icon_id = acct
|
||||
.object
|
||||
.object_props
|
||||
.icon_image()
|
||||
.ok()
|
||||
.and_then(|icon| {
|
||||
let owner: String = icon.object_props.attributed_to_link::<Id>().ok()?.into();
|
||||
Media::save_remote(
|
||||
conn,
|
||||
icon.object_props.url_string().ok()?,
|
||||
&User::from_url(conn, &owner).ok()?,
|
||||
)
|
||||
.ok()
|
||||
})
|
||||
.map(|m| m.id);
|
||||
|
||||
let banner_id = acct
|
||||
.object
|
||||
.object_props
|
||||
.image_image()
|
||||
.ok()
|
||||
.and_then(|banner| {
|
||||
let owner: String = banner.object_props.attributed_to_link::<Id>().ok()?.into();
|
||||
Media::save_remote(
|
||||
conn,
|
||||
banner.object_props.url_string().ok()?,
|
||||
&User::from_url(conn, &owner).ok()?,
|
||||
)
|
||||
.ok()
|
||||
})
|
||||
.map(|m| m.id);
|
||||
|
||||
Blog::insert(
|
||||
conn,
|
||||
NewBlog {
|
||||
actor_id: acct.object.ap_actor_props.preferred_username_string()?,
|
||||
title: acct.object.object_props.name_string()?,
|
||||
outbox_url: acct.object.ap_actor_props.outbox_string()?,
|
||||
inbox_url: acct.object.ap_actor_props.inbox_string()?,
|
||||
summary: acct.object.object_props.summary_string()?,
|
||||
instance_id: instance.id,
|
||||
ap_url: acct.object.object_props.id_string()?,
|
||||
public_key: acct
|
||||
.custom_props
|
||||
.public_key_publickey()?
|
||||
.public_key_pem_string()?,
|
||||
private_key: None,
|
||||
banner_id,
|
||||
icon_id,
|
||||
summary_html: SafeString::new(&acct.object.object_props.summary_string()?),
|
||||
},
|
||||
)
|
||||
.and_then(|l| Blog::from_id(c, &l.href?, None).map_err(|(_, e)| e))
|
||||
}
|
||||
|
||||
pub fn to_activity(&self, conn: &Connection) -> Result<CustomGroup> {
|
||||
|
@ -368,18 +269,6 @@ impl Blog {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn from_url(conn: &Connection, url: &str) -> Result<Blog> {
|
||||
Blog::find_by_ap_url(conn, url).or_else(|_| {
|
||||
// The requested blog was not in the DB
|
||||
// We try to fetch it if it is remote
|
||||
if Url::parse(url)?.host_str()? != CONFIG.base_url.as_str() {
|
||||
Blog::fetch_from_url(conn, url)
|
||||
} else {
|
||||
Err(Error::NotFound)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn icon_url(&self, conn: &Connection) -> String {
|
||||
self.icon_id
|
||||
.and_then(|id| Media::get(conn, id).and_then(|m| m.url(conn)).ok())
|
||||
|
@ -394,7 +283,7 @@ impl Blog {
|
|||
|
||||
pub fn delete(&self, conn: &Connection, searcher: &Searcher) -> Result<()> {
|
||||
for post in Post::get_for_blog(conn, &self)? {
|
||||
post.delete(&(conn, searcher))?;
|
||||
post.delete(conn, searcher)?;
|
||||
}
|
||||
diesel::delete(self)
|
||||
.execute(conn)
|
||||
|
@ -409,7 +298,106 @@ impl IntoId for Blog {
|
|||
}
|
||||
}
|
||||
|
||||
impl WithInbox for Blog {
|
||||
impl FromId<PlumeRocket> for Blog {
|
||||
type Error = Error;
|
||||
type Object = CustomGroup;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Self::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, acct: CustomGroup) -> Result<Self> {
|
||||
let url = Url::parse(&acct.object.object_props.id_string()?)?;
|
||||
let inst = url.host_str()?;
|
||||
let instance = Instance::find_by_domain(&c.conn, inst).or_else(|_| {
|
||||
Instance::insert(
|
||||
&c.conn,
|
||||
NewInstance {
|
||||
public_domain: inst.to_owned(),
|
||||
name: inst.to_owned(),
|
||||
local: false,
|
||||
// We don't really care about all the following for remote instances
|
||||
long_description: SafeString::new(""),
|
||||
short_description: SafeString::new(""),
|
||||
default_license: String::new(),
|
||||
open_registrations: true,
|
||||
short_description_html: String::new(),
|
||||
long_description_html: String::new(),
|
||||
},
|
||||
)
|
||||
})?;
|
||||
let icon_id = acct
|
||||
.object
|
||||
.object_props
|
||||
.icon_image()
|
||||
.ok()
|
||||
.and_then(|icon| {
|
||||
let owner: String = icon.object_props.attributed_to_link::<Id>().ok()?.into();
|
||||
Media::save_remote(
|
||||
&c.conn,
|
||||
icon.object_props.url_string().ok()?,
|
||||
&User::from_id(c, &owner, None).ok()?,
|
||||
)
|
||||
.ok()
|
||||
})
|
||||
.map(|m| m.id);
|
||||
|
||||
let banner_id = acct
|
||||
.object
|
||||
.object_props
|
||||
.image_image()
|
||||
.ok()
|
||||
.and_then(|banner| {
|
||||
let owner: String = banner.object_props.attributed_to_link::<Id>().ok()?.into();
|
||||
Media::save_remote(
|
||||
&c.conn,
|
||||
banner.object_props.url_string().ok()?,
|
||||
&User::from_id(c, &owner, None).ok()?,
|
||||
)
|
||||
.ok()
|
||||
})
|
||||
.map(|m| m.id);
|
||||
|
||||
let name = acct.object.ap_actor_props.preferred_username_string()?;
|
||||
if name.contains(&['<', '>', '&', '@', '\'', '"', ' ', '\t'][..]) {
|
||||
return Err(Error::InvalidValue);
|
||||
}
|
||||
|
||||
Blog::insert(
|
||||
&c.conn,
|
||||
NewBlog {
|
||||
actor_id: name.clone(),
|
||||
title: acct.object.object_props.name_string().unwrap_or(name),
|
||||
outbox_url: acct.object.ap_actor_props.outbox_string()?,
|
||||
inbox_url: acct.object.ap_actor_props.inbox_string()?,
|
||||
summary: acct
|
||||
.object
|
||||
.ap_object_props
|
||||
.source_object::<Source>()
|
||||
.map(|s| s.content)
|
||||
.unwrap_or_default(),
|
||||
instance_id: instance.id,
|
||||
ap_url: acct.object.object_props.id_string()?,
|
||||
public_key: acct
|
||||
.custom_props
|
||||
.public_key_publickey()?
|
||||
.public_key_pem_string()?,
|
||||
private_key: None,
|
||||
banner_id,
|
||||
icon_id,
|
||||
summary_html: SafeString::new(
|
||||
&acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
),
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsActor<&PlumeRocket> for Blog {
|
||||
fn get_inbox_url(&self) -> String {
|
||||
self.inbox_url.clone()
|
||||
}
|
||||
|
@ -419,7 +407,7 @@ impl WithInbox for Blog {
|
|||
}
|
||||
|
||||
fn is_local(&self) -> bool {
|
||||
self.instance_id == 0
|
||||
self.instance_id == 1 // TODO: this is not always true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -469,9 +457,11 @@ impl NewBlog {
|
|||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use blog_authors::*;
|
||||
use diesel::Connection;
|
||||
use instance::tests as instance_tests;
|
||||
use medias::NewMedia;
|
||||
use search::tests::get_searcher;
|
||||
use tests::db;
|
||||
use tests::{db, rockets};
|
||||
use users::tests as usersTests;
|
||||
use Connection as Conn;
|
||||
|
||||
|
@ -557,238 +547,318 @@ pub(crate) mod tests {
|
|||
#[test]
|
||||
fn get_instance() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
blog.get_instance(conn).unwrap().id,
|
||||
Instance::get_local(conn).unwrap().id
|
||||
);
|
||||
// TODO add tests for remote instance
|
||||
assert_eq!(
|
||||
blog.get_instance(conn).unwrap().id,
|
||||
Instance::get_local(conn).unwrap().id
|
||||
);
|
||||
// TODO add tests for remote instance
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn authors() {
|
||||
let conn = &db();
|
||||
let (user, _) = fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (user, _) = fill_database(conn);
|
||||
|
||||
let b1 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
let b1 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let b2 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"Blog".to_owned(),
|
||||
"Blog".to_owned(),
|
||||
"I've named my blog Blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
.unwrap();
|
||||
let b2 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"Blog".to_owned(),
|
||||
"Blog".to_owned(),
|
||||
"I've named my blog Blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let blog = vec![b1, b2];
|
||||
.unwrap();
|
||||
let blog = vec![b1, b2];
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[1].id,
|
||||
is_owner: false,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[1].id,
|
||||
is_owner: false,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[1].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[1].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert!(blog[0]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[0].id));
|
||||
assert!(blog[0]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[1].id));
|
||||
assert!(blog[1]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[0].id));
|
||||
assert!(!blog[1]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[1].id));
|
||||
assert!(blog[0]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[0].id));
|
||||
assert!(blog[0]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[1].id));
|
||||
assert!(blog[1]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[0].id));
|
||||
assert!(!blog[1]
|
||||
.list_authors(conn)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|a| a.id == user[1].id));
|
||||
|
||||
assert!(Blog::find_for_author(conn, &user[0])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[0].id));
|
||||
assert!(Blog::find_for_author(conn, &user[1])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[0].id));
|
||||
assert!(Blog::find_for_author(conn, &user[0])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[1].id));
|
||||
assert!(!Blog::find_for_author(conn, &user[1])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[1].id));
|
||||
assert!(Blog::find_for_author(conn, &user[0])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[0].id));
|
||||
assert!(Blog::find_for_author(conn, &user[1])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[0].id));
|
||||
assert!(Blog::find_for_author(conn, &user[0])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[1].id));
|
||||
assert!(!Blog::find_for_author(conn, &user[1])
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|b| b.id == blog[1].id));
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn find_local() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(Blog::find_by_fqn(conn, "SomeName").unwrap().id, blog.id);
|
||||
assert_eq!(Blog::find_by_fqn(&r, "SomeName").unwrap().id, blog.id);
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_fqn() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
let blog = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(blog.fqn, "SomeName");
|
||||
assert_eq!(blog.fqn, "SomeName");
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn delete() {
|
||||
let conn = &db();
|
||||
let (_, blogs) = fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (_, blogs) = fill_database(conn);
|
||||
|
||||
blogs[0].delete(conn, &get_searcher()).unwrap();
|
||||
assert!(Blog::get(conn, blogs[0].id).is_err());
|
||||
blogs[0].delete(conn, &get_searcher()).unwrap();
|
||||
assert!(Blog::get(conn, blogs[0].id).is_err());
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn delete_via_user() {
|
||||
let conn = &db();
|
||||
let searcher = get_searcher();
|
||||
let (user, _) = fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let searcher = get_searcher();
|
||||
let (user, _) = fill_database(conn);
|
||||
|
||||
let b1 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
let b1 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"SomeName".to_owned(),
|
||||
"Some name".to_owned(),
|
||||
"This is some blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let b2 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"Blog".to_owned(),
|
||||
"Blog".to_owned(),
|
||||
"I've named my blog Blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
.unwrap();
|
||||
let b2 = Blog::insert(
|
||||
conn,
|
||||
NewBlog::new_local(
|
||||
"Blog".to_owned(),
|
||||
"Blog".to_owned(),
|
||||
"I've named my blog Blog".to_owned(),
|
||||
Instance::get_local(conn).unwrap().id,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let blog = vec![b1, b2];
|
||||
.unwrap();
|
||||
let blog = vec![b1, b2];
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[1].id,
|
||||
is_owner: false,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[0].id,
|
||||
author_id: user[1].id,
|
||||
is_owner: false,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[1].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
BlogAuthor::insert(
|
||||
conn,
|
||||
NewBlogAuthor {
|
||||
blog_id: blog[1].id,
|
||||
author_id: user[0].id,
|
||||
is_owner: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
user[0].delete(conn, &searcher).unwrap();
|
||||
assert!(Blog::get(conn, blog[0].id).is_ok());
|
||||
assert!(Blog::get(conn, blog[1].id).is_err());
|
||||
user[1].delete(conn, &searcher).unwrap();
|
||||
assert!(Blog::get(conn, blog[0].id).is_err());
|
||||
user[0].delete(conn, &searcher).unwrap();
|
||||
assert!(Blog::get(conn, blog[0].id).is_ok());
|
||||
assert!(Blog::get(conn, blog[1].id).is_err());
|
||||
user[1].delete(conn, &searcher).unwrap();
|
||||
assert!(Blog::get(conn, blog[0].id).is_err());
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn self_federation() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (users, mut blogs) = fill_database(conn);
|
||||
blogs[0].icon_id = Some(
|
||||
Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: "aaa.png".into(),
|
||||
alt_text: String::new(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: users[0].id,
|
||||
},
|
||||
)
|
||||
.unwrap()
|
||||
.id,
|
||||
);
|
||||
blogs[0].banner_id = Some(
|
||||
Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: "bbb.png".into(),
|
||||
alt_text: String::new(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: users[0].id,
|
||||
},
|
||||
)
|
||||
.unwrap()
|
||||
.id,
|
||||
);
|
||||
let _: Blog = blogs[0].save_changes(conn).unwrap();
|
||||
|
||||
let ap_repr = blogs[0].to_activity(conn).unwrap();
|
||||
blogs[0].delete(conn, &*r.searcher).unwrap();
|
||||
let blog = Blog::from_activity(&r, ap_repr).unwrap();
|
||||
|
||||
assert_eq!(blog.actor_id, blogs[0].actor_id);
|
||||
assert_eq!(blog.title, blogs[0].title);
|
||||
assert_eq!(blog.summary, blogs[0].summary);
|
||||
assert_eq!(blog.outbox_url, blogs[0].outbox_url);
|
||||
assert_eq!(blog.inbox_url, blogs[0].inbox_url);
|
||||
assert_eq!(blog.instance_id, blogs[0].instance_id);
|
||||
assert_eq!(blog.ap_url, blogs[0].ap_url);
|
||||
assert_eq!(blog.public_key, blogs[0].public_key);
|
||||
assert_eq!(blog.fqn, blogs[0].fqn);
|
||||
assert_eq!(blog.summary_html, blogs[0].summary_html);
|
||||
assert_eq!(blog.icon_url(conn), blogs[0].icon_url(conn));
|
||||
assert_eq!(blog.banner_url(conn), blogs[0].banner_url(conn));
|
||||
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,15 +15,15 @@ use medias::Media;
|
|||
use mentions::Mention;
|
||||
use notifications::*;
|
||||
use plume_common::activity_pub::{
|
||||
inbox::{Deletable, FromActivity, Notify},
|
||||
Id, IntoId, PUBLIC_VISIBILTY,
|
||||
inbox::{AsObject, FromId},
|
||||
Id, IntoId, PUBLIC_VISIBILITY,
|
||||
};
|
||||
use plume_common::utils;
|
||||
use posts::Post;
|
||||
use safe_string::SafeString;
|
||||
use schema::comments;
|
||||
use users::User;
|
||||
use {Connection, Error, Result};
|
||||
use {Connection, Error, PlumeRocket, Result};
|
||||
|
||||
#[derive(Queryable, Identifiable, Clone, AsChangeset)]
|
||||
pub struct Comment {
|
||||
|
@ -103,18 +103,17 @@ impl Comment {
|
|||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
pub fn to_activity<'b>(&self, conn: &'b Connection) -> Result<Note> {
|
||||
let author = User::get(conn, self.author_id)?;
|
||||
|
||||
pub fn to_activity(&self, c: &PlumeRocket) -> Result<Note> {
|
||||
let author = User::get(&c.conn, self.author_id)?;
|
||||
let (html, mentions, _hashtags) = utils::md_to_html(
|
||||
self.content.get().as_ref(),
|
||||
&Instance::get_local(conn)?.public_domain,
|
||||
&Instance::get_local(&c.conn)?.public_domain,
|
||||
true,
|
||||
Some(Media::get_media_processor(conn, vec![&author])),
|
||||
Some(Media::get_media_processor(&c.conn, vec![&author])),
|
||||
);
|
||||
|
||||
let mut note = Note::default();
|
||||
let to = vec![Id::new(PUBLIC_VISIBILTY.to_string())];
|
||||
let to = vec![Id::new(PUBLIC_VISIBILITY.to_string())];
|
||||
|
||||
note.object_props
|
||||
.set_id_string(self.ap_url.clone().unwrap_or_default())?;
|
||||
|
@ -123,8 +122,8 @@ impl Comment {
|
|||
note.object_props.set_content_string(html)?;
|
||||
note.object_props
|
||||
.set_in_reply_to_link(Id::new(self.in_response_to_id.map_or_else(
|
||||
|| Ok(Post::get(conn, self.post_id)?.ap_url),
|
||||
|id| Ok(Comment::get(conn, id)?.ap_url.unwrap_or_default()) as Result<String>,
|
||||
|| Ok(Post::get(&c.conn, self.post_id)?.ap_url),
|
||||
|id| Ok(Comment::get(&c.conn, id)?.ap_url.unwrap_or_default()) as Result<String>,
|
||||
)?))?;
|
||||
note.object_props
|
||||
.set_published_string(chrono::Utc::now().to_rfc3339())?;
|
||||
|
@ -134,16 +133,16 @@ impl Comment {
|
|||
note.object_props.set_tag_link_vec(
|
||||
mentions
|
||||
.into_iter()
|
||||
.filter_map(|m| Mention::build_activity(conn, &m).ok())
|
||||
.filter_map(|m| Mention::build_activity(c, &m).ok())
|
||||
.collect::<Vec<link::Mention>>(),
|
||||
)?;
|
||||
Ok(note)
|
||||
}
|
||||
|
||||
pub fn create_activity(&self, conn: &Connection) -> Result<Create> {
|
||||
let author = User::get(conn, self.author_id)?;
|
||||
pub fn create_activity(&self, c: &PlumeRocket) -> Result<Create> {
|
||||
let author = User::get(&c.conn, self.author_id)?;
|
||||
|
||||
let note = self.to_activity(conn)?;
|
||||
let note = self.to_activity(c)?;
|
||||
let mut act = Create::default();
|
||||
act.create_props.set_actor_link(author.into_id())?;
|
||||
act.create_props.set_object_object(note.clone())?;
|
||||
|
@ -151,15 +150,53 @@ impl Comment {
|
|||
.set_id_string(format!("{}/activity", self.ap_url.clone()?,))?;
|
||||
act.object_props
|
||||
.set_to_link_vec(note.object_props.to_link_vec::<Id>()?)?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
act.object_props
|
||||
.set_cc_link_vec(vec![Id::new(self.get_author(&c.conn)?.followers_endpoint)])?;
|
||||
Ok(act)
|
||||
}
|
||||
|
||||
pub fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
for author in self.get_post(conn)?.get_authors(conn)? {
|
||||
Notification::insert(
|
||||
conn,
|
||||
NewNotification {
|
||||
kind: notification_kind::COMMENT.to_string(),
|
||||
object_id: self.id,
|
||||
user_id: author.id,
|
||||
},
|
||||
)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn build_delete(&self, conn: &Connection) -> Result<Delete> {
|
||||
let mut act = Delete::default();
|
||||
act.delete_props
|
||||
.set_actor_link(self.get_author(conn)?.into_id())?;
|
||||
|
||||
let mut tombstone = Tombstone::default();
|
||||
tombstone.object_props.set_id_string(self.ap_url.clone()?)?;
|
||||
act.delete_props.set_object_object(tombstone)?;
|
||||
|
||||
act.object_props
|
||||
.set_id_string(format!("{}#delete", self.ap_url.clone().unwrap()))?;
|
||||
act.object_props
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY)])?;
|
||||
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromActivity<Note, Connection> for Comment {
|
||||
impl FromId<PlumeRocket> for Comment {
|
||||
type Error = Error;
|
||||
type Object = Note;
|
||||
|
||||
fn from_activity(conn: &Connection, note: Note, actor: Id) -> Result<Comment> {
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Self::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, note: Note) -> Result<Self> {
|
||||
let conn = &*c.conn;
|
||||
let comm = {
|
||||
let previous_url = note.object_props.in_reply_to.as_ref()?.as_str()?;
|
||||
let previous_comment = Comment::find_by_ap_url(conn, previous_url);
|
||||
|
@ -171,8 +208,8 @@ impl FromActivity<Note, Connection> for Comment {
|
|||
serde_json::Value::Array(v) => v
|
||||
.iter()
|
||||
.filter_map(serde_json::Value::as_str)
|
||||
.any(|s| s == PUBLIC_VISIBILTY),
|
||||
serde_json::Value::String(s) => s == PUBLIC_VISIBILTY,
|
||||
.any(|s| s == PUBLIC_VISIBILITY),
|
||||
serde_json::Value::String(s) => s == PUBLIC_VISIBILITY,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
|
@ -191,8 +228,17 @@ impl FromActivity<Note, Connection> for Comment {
|
|||
post_id: previous_comment.map(|c| c.post_id).or_else(|_| {
|
||||
Ok(Post::find_by_ap_url(conn, previous_url)?.id) as Result<i32>
|
||||
})?,
|
||||
author_id: User::from_url(conn, actor.as_ref())?.id,
|
||||
sensitive: false, // "sensitive" is not a standard property, we need to think about how to support it with the activitypub crate
|
||||
author_id: User::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = note.object_props.attributed_to_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
sensitive: note.object_props.summary_string().is_ok(),
|
||||
public_visibility,
|
||||
},
|
||||
)?;
|
||||
|
@ -243,10 +289,10 @@ impl FromActivity<Note, Connection> for Comment {
|
|||
.chain(cc)
|
||||
.chain(bto)
|
||||
.chain(bcc)
|
||||
.collect::<HashSet<_>>() //remove duplicates (don't do a query more than once)
|
||||
.collect::<HashSet<_>>() // remove duplicates (don't do a query more than once)
|
||||
.into_iter()
|
||||
.map(|v| {
|
||||
if let Ok(user) = User::from_url(conn, &v) {
|
||||
if let Ok(user) = User::from_id(c, &v, None) {
|
||||
vec![user]
|
||||
} else {
|
||||
vec![] // TODO try to fetch collection
|
||||
|
@ -272,20 +318,41 @@ impl FromActivity<Note, Connection> for Comment {
|
|||
}
|
||||
}
|
||||
|
||||
impl Notify<Connection> for Comment {
|
||||
impl AsObject<User, Create, &PlumeRocket> for Comment {
|
||||
type Error = Error;
|
||||
type Output = Self;
|
||||
|
||||
fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
for author in self.get_post(conn)?.get_authors(conn)? {
|
||||
Notification::insert(
|
||||
conn,
|
||||
NewNotification {
|
||||
kind: notification_kind::COMMENT.to_string(),
|
||||
object_id: self.id,
|
||||
user_id: author.id,
|
||||
},
|
||||
)?;
|
||||
fn activity(self, _c: &PlumeRocket, _actor: User, _id: &str) -> Result<Self> {
|
||||
// The actual creation takes place in the FromId impl
|
||||
Ok(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Delete, &PlumeRocket> for Comment {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
if self.author_id != actor.id {
|
||||
return Err(Error::Unauthorized);
|
||||
}
|
||||
|
||||
for m in Mention::list_for_comment(&c.conn, self.id)? {
|
||||
for n in Notification::find_for_mention(&c.conn, &m)? {
|
||||
n.delete(&c.conn)?;
|
||||
}
|
||||
m.delete(&c.conn)?;
|
||||
}
|
||||
|
||||
for n in Notification::find_for_comment(&c.conn, &self)? {
|
||||
n.delete(&c.conn)?;
|
||||
}
|
||||
|
||||
diesel::update(comments::table)
|
||||
.filter(comments::in_response_to_id.eq(self.id))
|
||||
.set(comments::in_response_to_id.eq(self.in_response_to_id))
|
||||
.execute(&*c.conn)?;
|
||||
diesel::delete(&self).execute(&*c.conn)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -316,49 +383,57 @@ impl CommentTree {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> Deletable<Connection, Delete> for Comment {
|
||||
type Error = Error;
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::inbox::{inbox, tests::fill_database, InboxResult};
|
||||
use crate::safe_string::SafeString;
|
||||
use crate::tests::rockets;
|
||||
use diesel::Connection;
|
||||
|
||||
fn delete(&self, conn: &Connection) -> Result<Delete> {
|
||||
let mut act = Delete::default();
|
||||
act.delete_props
|
||||
.set_actor_link(self.get_author(conn)?.into_id())?;
|
||||
// creates a post, get it's Create activity, delete the post,
|
||||
// "send" the Create to the inbox, and check it works
|
||||
#[test]
|
||||
fn self_federation() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let mut tombstone = Tombstone::default();
|
||||
tombstone.object_props.set_id_string(self.ap_url.clone()?)?;
|
||||
act.delete_props.set_object_object(tombstone)?;
|
||||
let original_comm = Comment::insert(
|
||||
conn,
|
||||
NewComment {
|
||||
content: SafeString::new("My comment"),
|
||||
in_response_to_id: None,
|
||||
post_id: posts[0].id,
|
||||
author_id: users[0].id,
|
||||
ap_url: None,
|
||||
sensitive: true,
|
||||
spoiler_text: "My CW".into(),
|
||||
public_visibility: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let act = original_comm.create_activity(&r).unwrap();
|
||||
inbox(
|
||||
&r,
|
||||
serde_json::to_value(original_comm.build_delete(conn).unwrap()).unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
act.object_props
|
||||
.set_id_string(format!("{}#delete", self.ap_url.clone().unwrap()))?;
|
||||
act.object_props
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILTY)])?;
|
||||
|
||||
for m in Mention::list_for_comment(conn, self.id)? {
|
||||
for n in Notification::find_for_mention(conn, &m)? {
|
||||
n.delete(conn)?;
|
||||
}
|
||||
m.delete(conn)?;
|
||||
}
|
||||
|
||||
for n in Notification::find_for_comment(conn, &self)? {
|
||||
n.delete(conn)?;
|
||||
}
|
||||
|
||||
diesel::update(comments::table)
|
||||
.filter(comments::in_response_to_id.eq(self.id))
|
||||
.set(comments::in_response_to_id.eq(self.in_response_to_id))
|
||||
.execute(conn)?;
|
||||
diesel::delete(self).execute(conn)?;
|
||||
Ok(act)
|
||||
}
|
||||
|
||||
fn delete_id(id: &str, actor_id: &str, conn: &Connection) -> Result<Delete> {
|
||||
let actor = User::find_by_ap_url(conn, actor_id)?;
|
||||
let comment = Comment::find_by_ap_url(conn, id)?;
|
||||
if comment.author_id == actor.id {
|
||||
comment.delete(conn)
|
||||
} else {
|
||||
Err(Error::Unauthorized)
|
||||
}
|
||||
match inbox(&r, serde_json::to_value(act).unwrap()).unwrap() {
|
||||
InboxResult::Commented(c) => {
|
||||
// TODO: one is HTML, the other markdown: assert_eq!(c.content, original_comm.content);
|
||||
assert_eq!(c.in_response_to_id, original_comm.in_response_to_id);
|
||||
assert_eq!(c.post_id, original_comm.post_id);
|
||||
assert_eq!(c.author_id, original_comm.author_id);
|
||||
assert_eq!(c.ap_url, original_comm.ap_url);
|
||||
assert_eq!(c.spoiler_text, original_comm.spoiler_text);
|
||||
assert_eq!(c.public_visibility, original_comm.public_visibility);
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
};
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ fn get_rocket_config() -> Result<RocketConfig, RocketError> {
|
|||
.unwrap_or(7878);
|
||||
let secret_key = var("ROCKET_SECRET_KEY").map_err(|_| RocketError::InvalidSecretKey)?;
|
||||
let form_size = var("FORM_SIZE")
|
||||
.unwrap_or_else(|_| "32".to_owned())
|
||||
.unwrap_or_else(|_| "128".to_owned())
|
||||
.parse::<u64>()
|
||||
.unwrap();
|
||||
let activity_size = var("ACTIVITY_SIZE")
|
||||
|
|
|
@ -59,3 +59,19 @@ impl CustomizeConnection<Connection, ConnError> for PragmaForeignKey {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use diesel::Connection as _;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TestConnectionCustomizer;
|
||||
impl CustomizeConnection<Connection, ConnError> for TestConnectionCustomizer {
|
||||
fn on_acquire(&self, conn: &mut Connection) -> Result<(), ConnError> {
|
||||
PragmaForeignKey.on_acquire(conn)?;
|
||||
Ok(conn.begin_test_transaction().unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
use activitypub::{
|
||||
activity::{Accept, Follow as FollowAct, Undo},
|
||||
actor::Person,
|
||||
};
|
||||
use activitypub::activity::{Accept, Follow as FollowAct, Undo};
|
||||
use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
|
||||
|
||||
use blogs::Blog;
|
||||
use notifications::*;
|
||||
use plume_common::activity_pub::{
|
||||
broadcast,
|
||||
inbox::{Deletable, FromActivity, Notify, WithInbox},
|
||||
inbox::{AsActor, AsObject, FromId},
|
||||
sign::Signer,
|
||||
Id, IntoId,
|
||||
Id, IntoId, PUBLIC_VISIBILITY,
|
||||
};
|
||||
use schema::follows;
|
||||
use users::User;
|
||||
use {ap_url, Connection, Error, Result, CONFIG};
|
||||
use {ap_url, Connection, Error, PlumeRocket, Result, CONFIG};
|
||||
|
||||
#[derive(Clone, Queryable, Identifiable, Associations, AsChangeset)]
|
||||
#[belongs_to(User, foreign_key = "following_id")]
|
||||
|
@ -65,14 +61,26 @@ impl Follow {
|
|||
act.follow_props
|
||||
.set_object_link::<Id>(target.clone().into_id())?;
|
||||
act.object_props.set_id_string(self.ap_url.clone())?;
|
||||
act.object_props.set_to_link(target.into_id())?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
act.object_props.set_to_link_vec(vec![target.into_id()])?;
|
||||
act.object_props
|
||||
.set_cc_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
Ok(act)
|
||||
}
|
||||
|
||||
pub fn notify(&self, conn: &Connection) -> Result<Notification> {
|
||||
Notification::insert(
|
||||
conn,
|
||||
NewNotification {
|
||||
kind: notification_kind::FOLLOW.to_string(),
|
||||
object_id: self.id,
|
||||
user_id: self.following_id,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// from -> The one sending the follow request
|
||||
/// target -> The target of the request, responding with Accept
|
||||
pub fn accept_follow<A: Signer + IntoId + Clone, B: Clone + WithInbox + IntoId>(
|
||||
pub fn accept_follow<A: Signer + IntoId + Clone, B: Clone + AsActor<T> + IntoId, T>(
|
||||
conn: &Connection,
|
||||
from: &B,
|
||||
target: &A,
|
||||
|
@ -88,6 +96,7 @@ impl Follow {
|
|||
ap_url: follow.object_props.id_string()?,
|
||||
},
|
||||
)?;
|
||||
res.notify(conn)?;
|
||||
|
||||
let mut accept = Accept::default();
|
||||
let accept_id = ap_url(&format!(
|
||||
|
@ -96,8 +105,12 @@ impl Follow {
|
|||
&res.id
|
||||
));
|
||||
accept.object_props.set_id_string(accept_id)?;
|
||||
accept.object_props.set_to_link(from.clone().into_id())?;
|
||||
accept.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
accept
|
||||
.object_props
|
||||
.set_to_link_vec(vec![from.clone().into_id()])?;
|
||||
accept
|
||||
.object_props
|
||||
.set_cc_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
accept
|
||||
.accept_props
|
||||
.set_actor_link::<Id>(target.clone().into_id())?;
|
||||
|
@ -105,61 +118,8 @@ impl Follow {
|
|||
broadcast(&*target, accept, vec![from.clone()]);
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromActivity<FollowAct, Connection> for Follow {
|
||||
type Error = Error;
|
||||
|
||||
fn from_activity(conn: &Connection, follow: FollowAct, _actor: Id) -> Result<Follow> {
|
||||
let from_id = follow
|
||||
.follow_props
|
||||
.actor_link::<Id>()
|
||||
.map(Into::into)
|
||||
.or_else(|_| {
|
||||
Ok(follow
|
||||
.follow_props
|
||||
.actor_object::<Person>()?
|
||||
.object_props
|
||||
.id_string()?) as Result<String>
|
||||
})?;
|
||||
let from = User::from_url(conn, &from_id)?;
|
||||
match User::from_url(conn, follow.follow_props.object.as_str()?) {
|
||||
Ok(user) => Follow::accept_follow(conn, &from, &user, follow, from.id, user.id),
|
||||
Err(_) => {
|
||||
let blog = Blog::from_url(conn, follow.follow_props.object.as_str()?)?;
|
||||
Follow::accept_follow(conn, &from, &blog, follow, from.id, blog.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Notify<Connection> for Follow {
|
||||
type Error = Error;
|
||||
|
||||
fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
Notification::insert(
|
||||
conn,
|
||||
NewNotification {
|
||||
kind: notification_kind::FOLLOW.to_string(),
|
||||
object_id: self.id,
|
||||
user_id: self.following_id,
|
||||
},
|
||||
)
|
||||
.map(|_| ())
|
||||
}
|
||||
}
|
||||
|
||||
impl Deletable<Connection, Undo> for Follow {
|
||||
type Error = Error;
|
||||
|
||||
fn delete(&self, conn: &Connection) -> Result<Undo> {
|
||||
diesel::delete(self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(conn, notification_kind::FOLLOW, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
|
||||
pub fn build_undo(&self, conn: &Connection) -> Result<Undo> {
|
||||
let mut undo = Undo::default();
|
||||
undo.undo_props
|
||||
.set_actor_link(User::get(conn, self.follower_id)?.into_id())?;
|
||||
|
@ -167,14 +127,77 @@ impl Deletable<Connection, Undo> for Follow {
|
|||
.set_id_string(format!("{}/undo", self.ap_url))?;
|
||||
undo.undo_props
|
||||
.set_object_link::<Id>(self.clone().into_id())?;
|
||||
undo.object_props
|
||||
.set_to_link_vec(vec![User::get(conn, self.following_id)?.into_id()])?;
|
||||
undo.object_props
|
||||
.set_cc_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
Ok(undo)
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_id(id: &str, actor_id: &str, conn: &Connection) -> Result<Undo> {
|
||||
let follow = Follow::find_by_ap_url(conn, id)?;
|
||||
let user = User::find_by_ap_url(conn, actor_id)?;
|
||||
if user.id == follow.follower_id {
|
||||
follow.delete(conn)
|
||||
impl AsObject<User, FollowAct, &PlumeRocket> for User {
|
||||
type Error = Error;
|
||||
type Output = Follow;
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, id: &str) -> Result<Follow> {
|
||||
// Mastodon (at least) requires the full Follow object when accepting it,
|
||||
// so we rebuilt it here
|
||||
let mut follow = FollowAct::default();
|
||||
follow.object_props.set_id_string(id.to_string())?;
|
||||
follow
|
||||
.follow_props
|
||||
.set_actor_link::<Id>(actor.clone().into_id())?;
|
||||
Follow::accept_follow(&c.conn, &actor, &self, follow, actor.id, self.id)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromId<PlumeRocket> for Follow {
|
||||
type Error = Error;
|
||||
type Object = FollowAct;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Follow::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, follow: FollowAct) -> Result<Self> {
|
||||
let actor = User::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = follow.follow_props.actor_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?;
|
||||
|
||||
let target = User::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = follow.follow_props.object_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?;
|
||||
Follow::accept_follow(&c.conn, &actor, &target, follow, actor.id, target.id)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Undo, &PlumeRocket> for Follow {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
let conn = &*c.conn;
|
||||
if self.follower_id == actor.id {
|
||||
diesel::delete(&self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(conn, notification_kind::FOLLOW, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::Unauthorized)
|
||||
}
|
||||
|
@ -190,36 +213,41 @@ impl IntoId for Follow {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use diesel::Connection;
|
||||
use tests::db;
|
||||
use users::tests as user_tests;
|
||||
|
||||
#[test]
|
||||
fn test_id() {
|
||||
let conn = db();
|
||||
let users = user_tests::fill_database(&conn);
|
||||
let follow = Follow::insert(
|
||||
&conn,
|
||||
NewFollow {
|
||||
follower_id: users[0].id,
|
||||
following_id: users[1].id,
|
||||
ap_url: String::new(),
|
||||
},
|
||||
)
|
||||
.expect("Couldn't insert new follow");
|
||||
assert_eq!(
|
||||
follow.ap_url,
|
||||
format!("https://{}/follows/{}", CONFIG.base_url, follow.id)
|
||||
);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let users = user_tests::fill_database(&conn);
|
||||
let follow = Follow::insert(
|
||||
&conn,
|
||||
NewFollow {
|
||||
follower_id: users[0].id,
|
||||
following_id: users[1].id,
|
||||
ap_url: String::new(),
|
||||
},
|
||||
)
|
||||
.expect("Couldn't insert new follow");
|
||||
assert_eq!(
|
||||
follow.ap_url,
|
||||
format!("https://{}/follows/{}", CONFIG.base_url, follow.id)
|
||||
);
|
||||
|
||||
let follow = Follow::insert(
|
||||
&conn,
|
||||
NewFollow {
|
||||
follower_id: users[1].id,
|
||||
following_id: users[0].id,
|
||||
ap_url: String::from("https://some.url/"),
|
||||
},
|
||||
)
|
||||
.expect("Couldn't insert new follow");
|
||||
assert_eq!(follow.ap_url, String::from("https://some.url/"));
|
||||
let follow = Follow::insert(
|
||||
&conn,
|
||||
NewFollow {
|
||||
follower_id: users[1].id,
|
||||
following_id: users[0].id,
|
||||
ap_url: String::from("https://some.url/"),
|
||||
},
|
||||
)
|
||||
.expect("Couldn't insert new follow");
|
||||
assert_eq!(follow.ap_url, String::from("https://some.url/"));
|
||||
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
476
plume-models/src/inbox.rs
Normal file
|
@ -0,0 +1,476 @@
|
|||
use activitypub::activity::*;
|
||||
use serde_json;
|
||||
|
||||
use crate::{
|
||||
comments::Comment,
|
||||
follows, likes,
|
||||
posts::{Post, PostUpdate},
|
||||
reshares::Reshare,
|
||||
users::User,
|
||||
Error, PlumeRocket,
|
||||
};
|
||||
use plume_common::activity_pub::inbox::Inbox;
|
||||
|
||||
macro_rules! impl_into_inbox_result {
|
||||
( $( $t:ty => $variant:ident ),+ ) => {
|
||||
$(
|
||||
impl From<$t> for InboxResult {
|
||||
fn from(x: $t) -> InboxResult {
|
||||
InboxResult::$variant(x)
|
||||
}
|
||||
}
|
||||
)+
|
||||
}
|
||||
}
|
||||
|
||||
pub enum InboxResult {
|
||||
Commented(Comment),
|
||||
Followed(follows::Follow),
|
||||
Liked(likes::Like),
|
||||
Other,
|
||||
Post(Post),
|
||||
Reshared(Reshare),
|
||||
}
|
||||
|
||||
impl From<()> for InboxResult {
|
||||
fn from(_: ()) -> InboxResult {
|
||||
InboxResult::Other
|
||||
}
|
||||
}
|
||||
|
||||
impl_into_inbox_result! {
|
||||
Comment => Commented,
|
||||
follows::Follow => Followed,
|
||||
likes::Like => Liked,
|
||||
Post => Post,
|
||||
Reshare => Reshared
|
||||
}
|
||||
|
||||
pub fn inbox(ctx: &PlumeRocket, act: serde_json::Value) -> Result<InboxResult, Error> {
|
||||
Inbox::handle(ctx, act)
|
||||
.with::<User, Announce, Post>()
|
||||
.with::<User, Create, Comment>()
|
||||
.with::<User, Create, Post>()
|
||||
.with::<User, Delete, Comment>()
|
||||
.with::<User, Delete, Post>()
|
||||
.with::<User, Follow, User>()
|
||||
.with::<User, Like, Post>()
|
||||
.with::<User, Undo, Reshare>()
|
||||
.with::<User, Undo, follows::Follow>()
|
||||
.with::<User, Undo, likes::Like>()
|
||||
.with::<User, Update, PostUpdate>()
|
||||
.done()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::InboxResult;
|
||||
use crate::blogs::tests::fill_database as blog_fill_db;
|
||||
use crate::safe_string::SafeString;
|
||||
use crate::tests::rockets;
|
||||
use crate::PlumeRocket;
|
||||
use diesel::Connection;
|
||||
|
||||
pub fn fill_database(
|
||||
rockets: &PlumeRocket,
|
||||
) -> (
|
||||
Vec<crate::posts::Post>,
|
||||
Vec<crate::users::User>,
|
||||
Vec<crate::blogs::Blog>,
|
||||
) {
|
||||
use crate::post_authors::*;
|
||||
use crate::posts::*;
|
||||
|
||||
let (users, blogs) = blog_fill_db(&rockets.conn);
|
||||
let post = Post::insert(
|
||||
&rockets.conn,
|
||||
NewPost {
|
||||
blog_id: blogs[0].id,
|
||||
slug: "testing".to_owned(),
|
||||
title: "Testing".to_owned(),
|
||||
content: crate::safe_string::SafeString::new("Hello"),
|
||||
published: true,
|
||||
license: "WTFPL".to_owned(),
|
||||
creation_date: None,
|
||||
ap_url: format!("https://plu.me/~/{}/testing", blogs[0].actor_id),
|
||||
subtitle: String::new(),
|
||||
source: String::new(),
|
||||
cover_id: None,
|
||||
},
|
||||
&rockets.searcher,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
PostAuthor::insert(
|
||||
&rockets.conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: users[0].id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
(vec![post], users, blogs)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn announce_post() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
let act = json!({
|
||||
"id": "https://plu.me/announce/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": posts[0].ap_url,
|
||||
"type": "Announce",
|
||||
});
|
||||
|
||||
match super::inbox(&r, act).unwrap() {
|
||||
super::InboxResult::Reshared(r) => {
|
||||
assert_eq!(r.post_id, posts[0].id);
|
||||
assert_eq!(r.user_id, users[0].id);
|
||||
assert_eq!(r.ap_url, "https://plu.me/announce/1".to_owned());
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
};
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_comment() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
let act = json!({
|
||||
"id": "https://plu.me/comment/1/activity",
|
||||
"actor": users[0].ap_url,
|
||||
"object": {
|
||||
"type": "Note",
|
||||
"id": "https://plu.me/comment/1",
|
||||
"attributedTo": users[0].ap_url,
|
||||
"inReplyTo": posts[0].ap_url,
|
||||
"content": "Hello.",
|
||||
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
|
||||
},
|
||||
"type": "Create",
|
||||
});
|
||||
|
||||
match super::inbox(&r, act).unwrap() {
|
||||
super::InboxResult::Commented(c) => {
|
||||
assert_eq!(c.author_id, users[0].id);
|
||||
assert_eq!(c.post_id, posts[0].id);
|
||||
assert_eq!(c.in_response_to_id, None);
|
||||
assert_eq!(c.content, SafeString::new("Hello."));
|
||||
assert!(c.public_visibility);
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
};
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_post() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (_, users, blogs) = fill_database(&r);
|
||||
let act = json!({
|
||||
"id": "https://plu.me/comment/1/activity",
|
||||
"actor": users[0].ap_url,
|
||||
"object": {
|
||||
"type": "Article",
|
||||
"id": "https://plu.me/~/Blog/my-article",
|
||||
"attributedTo": [users[0].ap_url, blogs[0].ap_url],
|
||||
"content": "Hello.",
|
||||
"name": "My Article",
|
||||
"summary": "Bye.",
|
||||
"source": {
|
||||
"content": "Hello.",
|
||||
"mediaType": "text/markdown"
|
||||
},
|
||||
"published": "2014-12-12T12:12:12Z",
|
||||
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
|
||||
},
|
||||
"type": "Create",
|
||||
});
|
||||
|
||||
match super::inbox(&r, act).unwrap() {
|
||||
super::InboxResult::Post(p) => {
|
||||
assert!(p.is_author(conn, users[0].id).unwrap());
|
||||
assert_eq!(p.source, "Hello.".to_owned());
|
||||
assert_eq!(p.blog_id, blogs[0].id);
|
||||
assert_eq!(p.content, SafeString::new("Hello."));
|
||||
assert_eq!(p.subtitle, "Bye.".to_owned());
|
||||
assert_eq!(p.title, "My Article".to_owned());
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
};
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn delete_comment() {
|
||||
use crate::comments::*;
|
||||
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
Comment::insert(
|
||||
conn,
|
||||
NewComment {
|
||||
content: SafeString::new("My comment"),
|
||||
in_response_to_id: None,
|
||||
post_id: posts[0].id,
|
||||
author_id: users[0].id,
|
||||
ap_url: Some("https://plu.me/comment/1".to_owned()),
|
||||
sensitive: false,
|
||||
spoiler_text: "spoiler".to_owned(),
|
||||
public_visibility: true,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let fail_act = json!({
|
||||
"id": "https://plu.me/comment/1/delete",
|
||||
"actor": users[1].ap_url, // Not the author of the comment, it should fail
|
||||
"object": "https://plu.me/comment/1",
|
||||
"type": "Delete",
|
||||
});
|
||||
assert!(super::inbox(&r, fail_act).is_err());
|
||||
|
||||
let ok_act = json!({
|
||||
"id": "https://plu.me/comment/1/delete",
|
||||
"actor": users[0].ap_url,
|
||||
"object": "https://plu.me/comment/1",
|
||||
"type": "Delete",
|
||||
});
|
||||
assert!(super::inbox(&r, ok_act).is_ok());
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn delete_post() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let fail_act = json!({
|
||||
"id": "https://plu.me/comment/1/delete",
|
||||
"actor": users[1].ap_url, // Not the author of the post, it should fail
|
||||
"object": posts[0].ap_url,
|
||||
"type": "Delete",
|
||||
});
|
||||
assert!(super::inbox(&r, fail_act).is_err());
|
||||
|
||||
let ok_act = json!({
|
||||
"id": "https://plu.me/comment/1/delete",
|
||||
"actor": users[0].ap_url,
|
||||
"object": posts[0].ap_url,
|
||||
"type": "Delete",
|
||||
});
|
||||
assert!(super::inbox(&r, ok_act).is_ok());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn follow() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (_, users, _) = fill_database(&r);
|
||||
|
||||
let act = json!({
|
||||
"id": "https://plu.me/follow/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": users[1].ap_url,
|
||||
"type": "Follow",
|
||||
});
|
||||
match super::inbox(&r, act).unwrap() {
|
||||
InboxResult::Followed(f) => {
|
||||
assert_eq!(f.follower_id, users[0].id);
|
||||
assert_eq!(f.following_id, users[1].id);
|
||||
assert_eq!(f.ap_url, "https://plu.me/follow/1".to_owned());
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
}
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn like() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let act = json!({
|
||||
"id": "https://plu.me/like/1",
|
||||
"actor": users[1].ap_url,
|
||||
"object": posts[0].ap_url,
|
||||
"type": "Like",
|
||||
});
|
||||
match super::inbox(&r, act).unwrap() {
|
||||
InboxResult::Liked(l) => {
|
||||
assert_eq!(l.user_id, users[1].id);
|
||||
assert_eq!(l.post_id, posts[0].id);
|
||||
assert_eq!(l.ap_url, "https://plu.me/like/1".to_owned());
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
}
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn undo_reshare() {
|
||||
use crate::reshares::*;
|
||||
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let announce = Reshare::insert(
|
||||
conn,
|
||||
NewReshare {
|
||||
post_id: posts[0].id,
|
||||
user_id: users[1].id,
|
||||
ap_url: "https://plu.me/announce/1".to_owned(),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let fail_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": announce.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, fail_act).is_err());
|
||||
|
||||
let ok_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[1].ap_url,
|
||||
"object": announce.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, ok_act).is_ok());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn undo_follow() {
|
||||
use crate::follows::*;
|
||||
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (_, users, _) = fill_database(&r);
|
||||
|
||||
let follow = Follow::insert(
|
||||
conn,
|
||||
NewFollow {
|
||||
follower_id: users[0].id,
|
||||
following_id: users[1].id,
|
||||
ap_url: "https://plu.me/follow/1".to_owned(),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let fail_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[2].ap_url,
|
||||
"object": follow.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, fail_act).is_err());
|
||||
|
||||
let ok_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": follow.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, ok_act).is_ok());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn undo_like() {
|
||||
use crate::likes::*;
|
||||
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let like = Like::insert(
|
||||
conn,
|
||||
NewLike {
|
||||
post_id: posts[0].id,
|
||||
user_id: users[1].id,
|
||||
ap_url: "https://plu.me/like/1".to_owned(),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let fail_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": like.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, fail_act).is_err());
|
||||
|
||||
let ok_act = json!({
|
||||
"id": "https://plu.me/undo/1",
|
||||
"actor": users[1].ap_url,
|
||||
"object": like.ap_url,
|
||||
"type": "Undo",
|
||||
});
|
||||
assert!(super::inbox(&r, ok_act).is_ok());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn update_post() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (posts, users, _) = fill_database(&r);
|
||||
|
||||
let act = json!({
|
||||
"id": "https://plu.me/update/1",
|
||||
"actor": users[0].ap_url,
|
||||
"object": {
|
||||
"type": "Article",
|
||||
"id": posts[0].ap_url,
|
||||
"name": "Mia Artikolo",
|
||||
"summary": "Jes, mi parolas esperanton nun",
|
||||
"content": "<b>Saluton</b>, mi skribas testojn",
|
||||
"source": {
|
||||
"mediaType": "text/markdown",
|
||||
"content": "**Saluton**, mi skribas testojn"
|
||||
},
|
||||
},
|
||||
"type": "Update",
|
||||
});
|
||||
|
||||
super::inbox(&r, act).unwrap();
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
}
|
|
@ -166,6 +166,7 @@ impl Instance {
|
|||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use diesel::Connection;
|
||||
use tests::db;
|
||||
use Connection as Conn;
|
||||
|
||||
|
@ -230,176 +231,192 @@ pub(crate) mod tests {
|
|||
#[test]
|
||||
fn local_instance() {
|
||||
let conn = &db();
|
||||
let inserted = fill_database(conn)
|
||||
.into_iter()
|
||||
.map(|(inserted, _)| inserted)
|
||||
.find(|inst| inst.local)
|
||||
.unwrap();
|
||||
let res = Instance::get_local(conn).unwrap();
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn)
|
||||
.into_iter()
|
||||
.map(|(inserted, _)| inserted)
|
||||
.find(|inst| inst.local)
|
||||
.unwrap();
|
||||
let res = Instance::get_local(conn).unwrap();
|
||||
|
||||
part_eq!(
|
||||
res,
|
||||
inserted,
|
||||
[
|
||||
default_license,
|
||||
local,
|
||||
long_description,
|
||||
short_description,
|
||||
name,
|
||||
open_registrations,
|
||||
public_domain
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
res.long_description_html.get(),
|
||||
&inserted.long_description_html
|
||||
);
|
||||
assert_eq!(
|
||||
res.short_description_html.get(),
|
||||
&inserted.short_description_html
|
||||
);
|
||||
part_eq!(
|
||||
res,
|
||||
inserted,
|
||||
[
|
||||
default_license,
|
||||
local,
|
||||
long_description,
|
||||
short_description,
|
||||
name,
|
||||
open_registrations,
|
||||
public_domain
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
res.long_description_html.get(),
|
||||
&inserted.long_description_html
|
||||
);
|
||||
assert_eq!(
|
||||
res.short_description_html.get(),
|
||||
&inserted.short_description_html
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn remote_instance() {
|
||||
let conn = &db();
|
||||
let inserted = fill_database(conn);
|
||||
assert_eq!(Instance::count(conn).unwrap(), inserted.len() as i64);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn);
|
||||
assert_eq!(Instance::count(conn).unwrap(), inserted.len() as i64);
|
||||
|
||||
let res = Instance::get_remotes(conn).unwrap();
|
||||
assert_eq!(
|
||||
res.len(),
|
||||
inserted.iter().filter(|(inst, _)| !inst.local).count()
|
||||
);
|
||||
let res = Instance::get_remotes(conn).unwrap();
|
||||
assert_eq!(
|
||||
res.len(),
|
||||
inserted.iter().filter(|(inst, _)| !inst.local).count()
|
||||
);
|
||||
|
||||
inserted
|
||||
.iter()
|
||||
.filter(|(newinst, _)| !newinst.local)
|
||||
.map(|(newinst, inst)| (newinst, res.iter().find(|res| res.id == inst.id).unwrap()))
|
||||
.for_each(|(newinst, inst)| {
|
||||
part_eq!(
|
||||
newinst,
|
||||
inst,
|
||||
[
|
||||
default_license,
|
||||
local,
|
||||
long_description,
|
||||
short_description,
|
||||
name,
|
||||
open_registrations,
|
||||
public_domain
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
&newinst.long_description_html,
|
||||
inst.long_description_html.get()
|
||||
);
|
||||
assert_eq!(
|
||||
&newinst.short_description_html,
|
||||
inst.short_description_html.get()
|
||||
);
|
||||
});
|
||||
inserted
|
||||
.iter()
|
||||
.filter(|(newinst, _)| !newinst.local)
|
||||
.map(|(newinst, inst)| (newinst, res.iter().find(|res| res.id == inst.id).unwrap()))
|
||||
.for_each(|(newinst, inst)| {
|
||||
part_eq!(
|
||||
newinst,
|
||||
inst,
|
||||
[
|
||||
default_license,
|
||||
local,
|
||||
long_description,
|
||||
short_description,
|
||||
name,
|
||||
open_registrations,
|
||||
public_domain
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
&newinst.long_description_html,
|
||||
inst.long_description_html.get()
|
||||
);
|
||||
assert_eq!(
|
||||
&newinst.short_description_html,
|
||||
inst.short_description_html.get()
|
||||
);
|
||||
});
|
||||
|
||||
let page = Instance::page(conn, (0, 2)).unwrap();
|
||||
assert_eq!(page.len(), 2);
|
||||
let page1 = &page[0];
|
||||
let page2 = &page[1];
|
||||
assert!(page1.public_domain <= page2.public_domain);
|
||||
let page = Instance::page(conn, (0, 2)).unwrap();
|
||||
assert_eq!(page.len(), 2);
|
||||
let page1 = &page[0];
|
||||
let page2 = &page[1];
|
||||
assert!(page1.public_domain <= page2.public_domain);
|
||||
|
||||
let mut last_domaine: String = Instance::page(conn, (0, 1)).unwrap()[0]
|
||||
.public_domain
|
||||
.clone();
|
||||
for i in 1..inserted.len() as i32 {
|
||||
let page = Instance::page(conn, (i, i + 1)).unwrap();
|
||||
assert_eq!(page.len(), 1);
|
||||
assert!(last_domaine <= page[0].public_domain);
|
||||
last_domaine = page[0].public_domain.clone();
|
||||
}
|
||||
let mut last_domaine: String = Instance::page(conn, (0, 1)).unwrap()[0]
|
||||
.public_domain
|
||||
.clone();
|
||||
for i in 1..inserted.len() as i32 {
|
||||
let page = Instance::page(conn, (i, i + 1)).unwrap();
|
||||
assert_eq!(page.len(), 1);
|
||||
assert!(last_domaine <= page[0].public_domain);
|
||||
last_domaine = page[0].public_domain.clone();
|
||||
}
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn blocked() {
|
||||
let conn = &db();
|
||||
let inst_list = fill_database(conn);
|
||||
let inst = &inst_list[0].1;
|
||||
let inst_list = &inst_list[1..];
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inst_list = fill_database(conn);
|
||||
let inst = &inst_list[0].1;
|
||||
let inst_list = &inst_list[1..];
|
||||
|
||||
let blocked = inst.blocked;
|
||||
inst.toggle_block(conn).unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.blocked, !blocked);
|
||||
assert_eq!(
|
||||
inst_list
|
||||
.iter()
|
||||
.filter(|(_, inst)| inst.blocked != Instance::get(conn, inst.id).unwrap().blocked)
|
||||
.count(),
|
||||
0
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
inst.blocked
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}a/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
Instance::find_by_domain(conn, &format!("{}a", inst.public_domain))
|
||||
.map(|inst| inst.blocked)
|
||||
.unwrap_or(false)
|
||||
);
|
||||
let blocked = inst.blocked;
|
||||
inst.toggle_block(conn).unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.blocked, !blocked);
|
||||
assert_eq!(
|
||||
inst_list
|
||||
.iter()
|
||||
.filter(
|
||||
|(_, inst)| inst.blocked != Instance::get(conn, inst.id).unwrap().blocked
|
||||
)
|
||||
.count(),
|
||||
0
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
inst.blocked
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}a/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
Instance::find_by_domain(conn, &format!("{}a", inst.public_domain))
|
||||
.map(|inst| inst.blocked)
|
||||
.unwrap_or(false)
|
||||
);
|
||||
|
||||
inst.toggle_block(conn).unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.blocked, blocked);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
inst.blocked
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}a/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
Instance::find_by_domain(conn, &format!("{}a", inst.public_domain))
|
||||
.map(|inst| inst.blocked)
|
||||
.unwrap_or(false)
|
||||
);
|
||||
assert_eq!(
|
||||
inst_list
|
||||
.iter()
|
||||
.filter(|(_, inst)| inst.blocked != Instance::get(conn, inst.id).unwrap().blocked)
|
||||
.count(),
|
||||
0
|
||||
);
|
||||
inst.toggle_block(conn).unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.blocked, blocked);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
inst.blocked
|
||||
);
|
||||
assert_eq!(
|
||||
Instance::is_blocked(conn, &format!("https://{}a/something", inst.public_domain))
|
||||
.unwrap(),
|
||||
Instance::find_by_domain(conn, &format!("{}a", inst.public_domain))
|
||||
.map(|inst| inst.blocked)
|
||||
.unwrap_or(false)
|
||||
);
|
||||
assert_eq!(
|
||||
inst_list
|
||||
.iter()
|
||||
.filter(
|
||||
|(_, inst)| inst.blocked != Instance::get(conn, inst.id).unwrap().blocked
|
||||
)
|
||||
.count(),
|
||||
0
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn update() {
|
||||
let conn = &db();
|
||||
let inst = &fill_database(conn)[0].1;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inst = &fill_database(conn)[0].1;
|
||||
|
||||
inst.update(
|
||||
conn,
|
||||
"NewName".to_owned(),
|
||||
false,
|
||||
SafeString::new("[short](#link)"),
|
||||
SafeString::new("[long_description](/with_link)"),
|
||||
)
|
||||
.unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.name, "NewName".to_owned());
|
||||
assert_eq!(inst.open_registrations, false);
|
||||
assert_eq!(
|
||||
inst.long_description.get(),
|
||||
"[long_description](/with_link)"
|
||||
);
|
||||
assert_eq!(
|
||||
inst.long_description_html,
|
||||
SafeString::new("<p><a href=\"/with_link\">long_description</a></p>\n")
|
||||
);
|
||||
assert_eq!(inst.short_description.get(), "[short](#link)");
|
||||
assert_eq!(
|
||||
inst.short_description_html,
|
||||
SafeString::new("<p><a href=\"#link\">short</a></p>\n")
|
||||
);
|
||||
inst.update(
|
||||
conn,
|
||||
"NewName".to_owned(),
|
||||
false,
|
||||
SafeString::new("[short](#link)"),
|
||||
SafeString::new("[long_description](/with_link)"),
|
||||
)
|
||||
.unwrap();
|
||||
let inst = Instance::get(conn, inst.id).unwrap();
|
||||
assert_eq!(inst.name, "NewName".to_owned());
|
||||
assert_eq!(inst.open_registrations, false);
|
||||
assert_eq!(
|
||||
inst.long_description.get(),
|
||||
"[long_description](/with_link)"
|
||||
);
|
||||
assert_eq!(
|
||||
inst.long_description_html,
|
||||
SafeString::new("<p><a href=\"/with_link\">long_description</a></p>\n")
|
||||
);
|
||||
assert_eq!(inst.short_description.get(), "[short](#link)");
|
||||
assert_eq!(
|
||||
inst.short_description_html,
|
||||
SafeString::new("<p><a href=\"#link\">short</a></p>\n")
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ extern crate plume_api;
|
|||
extern crate plume_common;
|
||||
extern crate reqwest;
|
||||
extern crate rocket;
|
||||
extern crate rocket_i18n;
|
||||
extern crate scheduled_thread_pool;
|
||||
extern crate serde;
|
||||
#[macro_use]
|
||||
|
@ -36,6 +37,8 @@ extern crate whatlang;
|
|||
#[macro_use]
|
||||
extern crate diesel_migrations;
|
||||
|
||||
use plume_common::activity_pub::inbox::InboxError;
|
||||
|
||||
#[cfg(not(any(feature = "sqlite", feature = "postgres")))]
|
||||
compile_error!("Either feature \"sqlite\" or \"postgres\" must be enabled for this crate.");
|
||||
#[cfg(all(feature = "sqlite", feature = "postgres"))]
|
||||
|
@ -51,6 +54,7 @@ pub type Connection = diesel::PgConnection;
|
|||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
Db(diesel::result::Error),
|
||||
Inbox(Box<InboxError<Error>>),
|
||||
InvalidValue,
|
||||
Io(std::io::Error),
|
||||
MissingApProperty,
|
||||
|
@ -146,6 +150,15 @@ impl From<std::io::Error> for Error {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<InboxError<Error>> for Error {
|
||||
fn from(err: InboxError<Error>) -> Error {
|
||||
match err {
|
||||
InboxError::InvalidActor(Some(e)) | InboxError::InvalidObject(Some(e)) => e,
|
||||
e => Error::Inbox(Box::new(e)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
|
||||
pub type ApiResult<T> = std::result::Result<T, canapi::Error>;
|
||||
|
@ -295,9 +308,13 @@ pub fn ap_url(url: &str) -> String {
|
|||
#[cfg(test)]
|
||||
#[macro_use]
|
||||
mod tests {
|
||||
use diesel::Connection;
|
||||
use db_conn;
|
||||
use diesel::r2d2::ConnectionManager;
|
||||
#[cfg(feature = "sqlite")]
|
||||
use diesel::{dsl::sql_query, RunQueryDsl};
|
||||
use scheduled_thread_pool::ScheduledThreadPool;
|
||||
use search;
|
||||
use std::sync::Arc;
|
||||
use Connection as Conn;
|
||||
use CONFIG;
|
||||
|
||||
|
@ -318,17 +335,28 @@ mod tests {
|
|||
};
|
||||
}
|
||||
|
||||
pub fn db() -> Conn {
|
||||
let conn = Conn::establish(CONFIG.database_url.as_str())
|
||||
.expect("Couldn't connect to the database");
|
||||
#[cfg(feature = "sqlite")]
|
||||
sql_query("PRAGMA foreign_keys = on;")
|
||||
.execute(&conn)
|
||||
.expect("PRAGMA foreign_keys fail");
|
||||
conn.begin_test_transaction()
|
||||
.expect("Couldn't start test transaction");
|
||||
embedded_migrations::run(&conn).expect("Couldn't run migrations");
|
||||
conn
|
||||
pub fn db<'a>() -> db_conn::DbConn {
|
||||
db_conn::DbConn((*DB_POOL).get().unwrap())
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
static ref DB_POOL: db_conn::DbPool = {
|
||||
let pool = db_conn::DbPool::builder()
|
||||
.connection_customizer(Box::new(db_conn::tests::TestConnectionCustomizer))
|
||||
.build(ConnectionManager::<Conn>::new(CONFIG.database_url.as_str()))
|
||||
.unwrap();
|
||||
embedded_migrations::run(&*pool.get().unwrap()).expect("Migrations error");
|
||||
pool
|
||||
};
|
||||
}
|
||||
|
||||
pub fn rockets() -> super::PlumeRocket {
|
||||
super::PlumeRocket {
|
||||
conn: db_conn::DbConn((*DB_POOL).get().unwrap()),
|
||||
searcher: Arc::new(search::tests::get_searcher()),
|
||||
worker: Arc::new(ScheduledThreadPool::new(2)),
|
||||
user: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -342,12 +370,14 @@ pub mod comments;
|
|||
pub mod db_conn;
|
||||
pub mod follows;
|
||||
pub mod headers;
|
||||
pub mod inbox;
|
||||
pub mod instance;
|
||||
pub mod likes;
|
||||
pub mod lists;
|
||||
pub mod medias;
|
||||
pub mod mentions;
|
||||
pub mod notifications;
|
||||
pub mod plume_rocket;
|
||||
pub mod post_authors;
|
||||
pub mod posts;
|
||||
pub mod reshares;
|
||||
|
@ -357,3 +387,4 @@ pub mod search;
|
|||
pub mod tags;
|
||||
pub mod timeline;
|
||||
pub mod users;
|
||||
pub use plume_rocket::PlumeRocket;
|
||||
|
|
|
@ -4,13 +4,13 @@ use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
|
|||
|
||||
use notifications::*;
|
||||
use plume_common::activity_pub::{
|
||||
inbox::{Deletable, FromActivity, Notify},
|
||||
Id, IntoId, PUBLIC_VISIBILTY,
|
||||
inbox::{AsObject, FromId},
|
||||
Id, IntoId, PUBLIC_VISIBILITY,
|
||||
};
|
||||
use posts::Post;
|
||||
use schema::likes;
|
||||
use users::User;
|
||||
use {Connection, Error, Result};
|
||||
use {Connection, Error, PlumeRocket, Result};
|
||||
|
||||
#[derive(Clone, Queryable, Identifiable)]
|
||||
pub struct Like {
|
||||
|
@ -42,37 +42,16 @@ impl Like {
|
|||
act.like_props
|
||||
.set_object_link(Post::get(conn, self.post_id)?.into_id())?;
|
||||
act.object_props
|
||||
.set_to_link(Id::new(PUBLIC_VISIBILTY.to_string()))?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
act.object_props.set_cc_link_vec(vec![Id::new(
|
||||
User::get(conn, self.user_id)?.followers_endpoint,
|
||||
)])?;
|
||||
act.object_props.set_id_string(self.ap_url.clone())?;
|
||||
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromActivity<activity::Like, Connection> for Like {
|
||||
type Error = Error;
|
||||
|
||||
fn from_activity(conn: &Connection, like: activity::Like, _actor: Id) -> Result<Like> {
|
||||
let liker = User::from_url(conn, like.like_props.actor.as_str()?)?;
|
||||
let post = Post::find_by_ap_url(conn, like.like_props.object.as_str()?)?;
|
||||
let res = Like::insert(
|
||||
conn,
|
||||
NewLike {
|
||||
post_id: post.id,
|
||||
user_id: liker.id,
|
||||
ap_url: like.object_props.id_string()?,
|
||||
},
|
||||
)?;
|
||||
res.notify(conn)?;
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl Notify<Connection> for Like {
|
||||
type Error = Error;
|
||||
|
||||
fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
pub fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
let post = Post::get(conn, self.post_id)?;
|
||||
for author in post.get_authors(conn)? {
|
||||
Notification::insert(
|
||||
|
@ -86,19 +65,8 @@ impl Notify<Connection> for Like {
|
|||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Deletable<Connection, activity::Undo> for Like {
|
||||
type Error = Error;
|
||||
|
||||
fn delete(&self, conn: &Connection) -> Result<activity::Undo> {
|
||||
diesel::delete(self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(conn, notification_kind::LIKE, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
|
||||
pub fn build_undo(&self, conn: &Connection) -> Result<activity::Undo> {
|
||||
let mut act = activity::Undo::default();
|
||||
act.undo_props
|
||||
.set_actor_link(User::get(conn, self.user_id)?.into_id())?;
|
||||
|
@ -106,17 +74,87 @@ impl Deletable<Connection, activity::Undo> for Like {
|
|||
act.object_props
|
||||
.set_id_string(format!("{}#delete", self.ap_url))?;
|
||||
act.object_props
|
||||
.set_to_link(Id::new(PUBLIC_VISIBILTY.to_string()))?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
act.object_props.set_cc_link_vec(vec![Id::new(
|
||||
User::get(conn, self.user_id)?.followers_endpoint,
|
||||
)])?;
|
||||
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_id(id: &str, actor_id: &str, conn: &Connection) -> Result<activity::Undo> {
|
||||
let like = Like::find_by_ap_url(conn, id)?;
|
||||
let user = User::find_by_ap_url(conn, actor_id)?;
|
||||
if user.id == like.user_id {
|
||||
like.delete(conn)
|
||||
impl AsObject<User, activity::Like, &PlumeRocket> for Post {
|
||||
type Error = Error;
|
||||
type Output = Like;
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, id: &str) -> Result<Like> {
|
||||
let res = Like::insert(
|
||||
&c.conn,
|
||||
NewLike {
|
||||
post_id: self.id,
|
||||
user_id: actor.id,
|
||||
ap_url: id.to_string(),
|
||||
},
|
||||
)?;
|
||||
res.notify(&c.conn)?;
|
||||
trinity-1686a
commented
I might be reading this wrong, but this enum (Kind) is made to tell if this is a new post, or a like/reshare of an "old" one, and by whom. This is in the part that handle likes, so I think this should be I might be reading this wrong, but this enum (Kind) is made to tell if this is a new post, or a like/reshare of an "old" one, and by whom. This is in the part that handle likes, so I think this should be `Kind::Like(&actor)`. There is probably the same issue with reshare in other places
Indeed, thanks. I probably copied it from somewhere else and forgot to change it (I should really stop copy/pasting code…) Indeed, thanks. I probably copied it from somewhere else and forgot to change it (I should really stop copy/pasting code…)
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromId<PlumeRocket> for Like {
|
||||
type Error = Error;
|
||||
type Object = activity::Like;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Like::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, act: activity::Like) -> Result<Self> {
|
||||
let res = Like::insert(
|
||||
&c.conn,
|
||||
NewLike {
|
||||
post_id: Post::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = act.like_props.object_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
user_id: User::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = act.like_props.actor_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
ap_url: act.object_props.id_string()?,
|
||||
},
|
||||
)?;
|
||||
res.notify(&c.conn)?;
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, activity::Undo, &PlumeRocket> for Like {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
let conn = &*c.conn;
|
||||
if actor.id == self.user_id {
|
||||
diesel::delete(&self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(conn, notification_kind::LIKE, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::Unauthorized)
|
||||
}
|
||||
|
@ -125,6 +163,7 @@ impl Deletable<Connection, activity::Undo> for Like {
|
|||
|
||||
impl NewLike {
|
||||
pub fn new(p: &Post, u: &User) -> Self {
|
||||
// TODO: this URL is not valid
|
||||
let ap_url = format!("{}/like/{}", u.ap_url, p.ap_url);
|
||||
NewLike {
|
||||
post_id: p.id,
|
||||
|
|
|
@ -399,6 +399,7 @@ pub(super) mod private {
|
|||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
mod tests {
|
||||
use super::*;
|
||||
use blogs::tests as blog_tests;
|
||||
use diesel::Connection;
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
use tests::db;
|
||||
|
||||
#[test]
|
||||
|
@ -412,169 +413,182 @@ mod tests {
|
|||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
#[test]
|
||||
fn list_lists() {
|
||||
let conn = &db();
|
||||
let (users, _) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let (users, _) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l1 = List::new(conn, "list1", None, ListType::User).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l2 = List::new(conn, "list2", None, ListType::Blog).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l1u = List::new(conn, "list1", Some(&users[0]), ListType::Word).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l1 = List::new(conn, "list1", None, ListType::User).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l2 = List::new(conn, "list2", None, ListType::Blog).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l1u = List::new(conn, "list1", Some(&users[0]), ListType::Word).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l_eq = |l1: &List, l2: &List| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.id, l2.id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.user_id, l2.user_id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.name, l2.name);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.type_, l2.type_);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
};
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l_eq = |l1: &List, l2: &List| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.id, l2.id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.user_id, l2.user_id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.name, l2.name);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l1.type_, l2.type_);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
};
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l1bis = List::get(conn, l1.id).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l1bis);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l1bis = List::get(conn, l1.id).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l1bis);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l_inst = List::list_for_user(conn, None).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l_user = List::list_for_user(conn, Some(users[0].id)).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l_inst.len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l_user.len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l_inst.iter().all(|l| l.id != l1u.id));
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l_inst = List::list_for_user(conn, None).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l_user = List::list_for_user(conn, Some(users[0].id)).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l_inst.len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l_user.len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l_inst.iter().all(|l| l.id != l1u.id));
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l_eq(&l1u, &l_user[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
if l_inst[0].id == l1.id {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l_inst[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l2, &l_inst[1]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
} else {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l_inst[1]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l2, &l_inst[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1u, &l_user[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
if l_inst[0].id == l1.id {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l_inst[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l2, &l_inst[1]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
} else {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l1, &l_inst[1]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(&l2, &l_inst[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l_eq(
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&l1,
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&List::find_by_name(conn, l1.user_id, &l1.name).unwrap(),
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&&l1u,
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&List::find_by_name(conn, l1u.user_id, &l1u.name).unwrap(),
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&l1,
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&List::find_by_name(conn, l1.user_id, &l1.name).unwrap(),
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l_eq(
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&&l1u,
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
&List::find_by_name(conn, l1u.user_id, &l1u.name).unwrap(),
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
Ok(())
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
});
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_user_list() {
|
||||
let conn = &db();
|
||||
let (users, blogs) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let (users, blogs) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l = List::new(conn, "list", None, ListType::User).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l = List::new(conn, "list", None, ListType::User).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert_eq!(l.kind(), ListType::User);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_users(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l.kind(), ListType::User);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_users(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.add_users(conn, &[users[1].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_users(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_users(conn, &[users[1].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_users(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.set_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_user(conn, users[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_users(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(users[0] == l.list_users(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.set_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_user(conn, users[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_user(conn, users[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_users(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(users[0] == l.list_users(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_users(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_users(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.add_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
Ok(())
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
});
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_blog_list() {
|
||||
let conn = &db();
|
||||
let (users, blogs) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let (users, blogs) = blog_tests::fill_database(conn);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l = List::new(conn, "list", None, ListType::Blog).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l = List::new(conn, "list", None, ListType::Blog).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert_eq!(l.kind(), ListType::Blog);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_blogs(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l.kind(), ListType::Blog);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_blogs(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.add_blogs(conn, &[blogs[1].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_blogs(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_blogs(conn, &[blogs[1].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_blogs(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.set_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_blog(conn, blogs[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_blogs(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(blogs[0].id, l.list_blogs(conn).unwrap()[0].id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.set_blogs(conn, &[blogs[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_blog(conn, blogs[0].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_blog(conn, blogs[1].id).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_blogs(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(blogs[0].id, l.list_blogs(conn).unwrap()[0].id);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_blogs(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_blogs(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.add_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_users(conn, &[users[0].id]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
Ok(())
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
});
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_word_list() {
|
||||
let conn = &db();
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l = List::new(conn, "list", None, ListType::Word).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l = List::new(conn, "list", None, ListType::Word).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l.kind(), ListType::Word);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_words(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert_eq!(l.kind(), ListType::Word);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_words(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_words(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_word(conn, "plumelin").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_words(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_word(conn, "plumelin").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_words(conn, &["amsterdam"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_words(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.add_words(conn, &["amsterdam"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_words(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.set_words(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_word(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_words(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!("plume", l.list_words(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.set_words(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_word(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_word(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_words(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!("plume", l.list_words(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_words(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_words(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_prefixes(conn, &["something"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_prefixes(conn, &["something"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
Ok(())
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
});
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_prefix_list() {
|
||||
let conn = &db();
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
let l = List::new(conn, "list", None, ListType::Prefix).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
let l = List::new(conn, "list", None, ListType::Prefix).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(l.kind(), ListType::Prefix);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_prefixes(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert_eq!(l.kind(), ListType::Prefix);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_prefixes(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_prefixes(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plumelin").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(!l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_prefixes(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plumelin").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.add_prefixes(conn, &["amsterdam"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_prefixes(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.add_prefixes(conn, &["amsterdam"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(2, l.list_prefixes(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.set_prefixes(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_prefix(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_prefixes(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!("plume", l.list_prefixes(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
assert!(l.set_prefixes(conn, &["plume"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.contains_prefix(conn, "plume").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.contains_prefix(conn, "amsterdam").unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!(1, l.list_prefixes(conn).unwrap().len());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert_eq!("plume", l.list_prefixes(conn).unwrap()[0]);
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_prefixes(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
l.clear(conn).unwrap();
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(l.list_prefixes(conn).unwrap().is_empty());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_words(conn, &["something"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
assert!(!l.add_words(conn, &["something"]).unwrap());
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
Ok(())
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
});
|
||||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|||
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
`Invalid` without the `e`
i dunno, this feels like an error… i dunno, this feels like an error…
trinity-1686a
commented
this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private this gives this module more visibility from the outer code, while keeping it private from other crates. It was probably necessary at some point, but rn it could be plain private
trinity-1686a
commented
I's a find by (list) name, in context of the given user (or instance if None) I's a find by (list) name, in context of the given user (or instance if None)
that needs either documentation or different names, because this way it's just way too confusing that needs either documentation or different names, because this way it's just way too confusing
|
|
@ -5,13 +5,16 @@ use guid_create::GUID;
|
|||
use reqwest;
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use plume_common::{activity_pub::Id, utils::MediaProcessor};
|
||||
use plume_common::{
|
||||
activity_pub::{inbox::FromId, Id},
|
||||
utils::MediaProcessor,
|
||||
};
|
||||
|
||||
use instance::Instance;
|
||||
use safe_string::SafeString;
|
||||
use schema::medias;
|
||||
use users::User;
|
||||
use {ap_url, Connection, Error, Result};
|
||||
use {ap_url, Connection, Error, PlumeRocket, Result};
|
||||
|
||||
#[derive(Clone, Identifiable, Queryable)]
|
||||
pub struct Media {
|
||||
|
@ -183,7 +186,8 @@ impl Media {
|
|||
}
|
||||
|
||||
// TODO: merge with save_remote?
|
||||
pub fn from_activity(conn: &Connection, image: &Image) -> Result<Media> {
|
||||
pub fn from_activity(c: &PlumeRocket, image: &Image) -> Result<Media> {
|
||||
let conn = &*c.conn;
|
||||
let remote_url = image.object_props.url_string().ok()?;
|
||||
let ext = remote_url
|
||||
.rsplit('.')
|
||||
|
@ -210,8 +214,8 @@ impl Media {
|
|||
remote_url: None,
|
||||
sensitive: image.object_props.summary_string().is_ok(),
|
||||
content_warning: image.object_props.summary_string().ok(),
|
||||
owner_id: User::from_url(
|
||||
conn,
|
||||
owner_id: User::from_id(
|
||||
c,
|
||||
image
|
||||
.object_props
|
||||
.attributed_to_link_vec::<Id>()
|
||||
|
@ -219,7 +223,9 @@ impl Media {
|
|||
.into_iter()
|
||||
.next()?
|
||||
.as_ref(),
|
||||
)?
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
},
|
||||
)
|
||||
|
@ -242,6 +248,7 @@ impl Media {
|
|||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use diesel::Connection;
|
||||
use std::env::{current_dir, set_current_dir};
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
|
@ -309,80 +316,83 @@ pub(crate) mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
//set_owner
|
||||
|
||||
#[test]
|
||||
fn delete() {
|
||||
let conn = &db();
|
||||
let user = fill_database(conn).0[0].id;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let user = fill_database(conn).0[0].id;
|
||||
|
||||
let path = "static/media/test_deletion".to_owned();
|
||||
fs::write(path.clone(), []).unwrap();
|
||||
let path = "static/media/test_deletion".to_owned();
|
||||
fs::write(path.clone(), []).unwrap();
|
||||
|
||||
let media = Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: path.clone(),
|
||||
alt_text: "alt message".to_owned(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: user,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let media = Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: path.clone(),
|
||||
alt_text: "alt message".to_owned(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: user,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert!(Path::new(&path).exists());
|
||||
media.delete(conn).unwrap();
|
||||
assert!(!Path::new(&path).exists());
|
||||
assert!(Path::new(&path).exists());
|
||||
media.delete(conn).unwrap();
|
||||
assert!(!Path::new(&path).exists());
|
||||
|
||||
clean(conn);
|
||||
clean(conn);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
fn set_owner() {
|
||||
let conn = &db();
|
||||
let (users, _) = fill_database(conn);
|
||||
let u1 = &users[0];
|
||||
let u2 = &users[1];
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (users, _) = fill_database(conn);
|
||||
let u1 = &users[0];
|
||||
let u2 = &users[1];
|
||||
|
||||
let path = "static/media/test_set_owner".to_owned();
|
||||
fs::write(path.clone(), []).unwrap();
|
||||
let path = "static/media/test_set_owner".to_owned();
|
||||
fs::write(path.clone(), []).unwrap();
|
||||
|
||||
let media = Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: path.clone(),
|
||||
alt_text: "alt message".to_owned(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: u1.id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let media = Media::insert(
|
||||
conn,
|
||||
NewMedia {
|
||||
file_path: path.clone(),
|
||||
alt_text: "alt message".to_owned(),
|
||||
is_remote: false,
|
||||
remote_url: None,
|
||||
sensitive: false,
|
||||
content_warning: None,
|
||||
owner_id: u1.id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert!(Media::for_user(conn, u1.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
assert!(!Media::for_user(conn, u2.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
media.set_owner(conn, u2).unwrap();
|
||||
assert!(!Media::for_user(conn, u1.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
assert!(Media::for_user(conn, u2.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
assert!(Media::for_user(conn, u1.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
assert!(!Media::for_user(conn, u2.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
media.set_owner(conn, u2).unwrap();
|
||||
assert!(!Media::for_user(conn, u1.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
assert!(Media::for_user(conn, u2.id)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.any(|m| m.id == media.id));
|
||||
|
||||
clean(conn);
|
||||
clean(conn);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,10 +3,10 @@ use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
|
|||
|
||||
use comments::Comment;
|
||||
use notifications::*;
|
||||
use plume_common::activity_pub::inbox::Notify;
|
||||
use posts::Post;
|
||||
use schema::mentions;
|
||||
use users::User;
|
||||
use PlumeRocket;
|
||||
use {Connection, Error, Result};
|
||||
|
||||
#[derive(Clone, Queryable, Identifiable)]
|
||||
|
@ -55,8 +55,8 @@ impl Mention {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn build_activity(conn: &Connection, ment: &str) -> Result<link::Mention> {
|
||||
let user = User::find_by_fqn(conn, ment)?;
|
||||
pub fn build_activity(c: &PlumeRocket, ment: &str) -> Result<link::Mention> {
|
||||
let user = User::find_by_fqn(c, ment)?;
|
||||
let mut mention = link::Mention::default();
|
||||
mention.link_props.set_href_string(user.ap_url)?;
|
||||
mention.link_props.set_name_string(format!("@{}", ment))?;
|
||||
|
@ -126,10 +126,7 @@ impl Mention {
|
|||
.map(|_| ())
|
||||
.map_err(Error::from)
|
||||
}
|
||||
}
|
||||
|
||||
impl Notify<Connection> for Mention {
|
||||
type Error = Error;
|
||||
fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
let m = self.get_mentioned(conn)?;
|
||||
Notification::insert(
|
||||
|
|
80
plume-models/src/plume_rocket.rs
Normal file
|
@ -0,0 +1,80 @@
|
|||
pub use self::module::PlumeRocket;
|
||||
|
||||
#[cfg(not(test))]
|
||||
mod module {
|
||||
use crate::db_conn::DbConn;
|
||||
use crate::search;
|
||||
use crate::users;
|
||||
use rocket::{
|
||||
request::{self, FromRequest, Request},
|
||||
Outcome, State,
|
||||
};
|
||||
use scheduled_thread_pool::ScheduledThreadPool;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Common context needed by most routes and operations on models
|
||||
pub struct PlumeRocket {
|
||||
pub conn: DbConn,
|
||||
pub intl: rocket_i18n::I18n,
|
||||
pub user: Option<users::User>,
|
||||
pub searcher: Arc<search::Searcher>,
|
||||
pub worker: Arc<ScheduledThreadPool>,
|
||||
}
|
||||
|
||||
impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket {
|
||||
type Error = ();
|
||||
|
||||
fn from_request(request: &'a Request<'r>) -> request::Outcome<PlumeRocket, ()> {
|
||||
let conn = request.guard::<DbConn>()?;
|
||||
let intl = request.guard::<rocket_i18n::I18n>()?;
|
||||
let user = request.guard::<users::User>().succeeded();
|
||||
let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?;
|
||||
let searcher = request.guard::<State<Arc<search::Searcher>>>()?;
|
||||
Outcome::Success(PlumeRocket {
|
||||
conn,
|
||||
intl,
|
||||
user,
|
||||
worker: worker.clone(),
|
||||
searcher: searcher.clone(),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod module {
|
||||
use crate::db_conn::DbConn;
|
||||
use crate::search;
|
||||
use crate::users;
|
||||
use rocket::{
|
||||
request::{self, FromRequest, Request},
|
||||
Outcome, State,
|
||||
};
|
||||
use scheduled_thread_pool::ScheduledThreadPool;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Common context needed by most routes and operations on models
|
||||
pub struct PlumeRocket {
|
||||
pub conn: DbConn,
|
||||
pub user: Option<users::User>,
|
||||
pub searcher: Arc<search::Searcher>,
|
||||
pub worker: Arc<ScheduledThreadPool>,
|
||||
}
|
||||
|
||||
impl<'a, 'r> FromRequest<'a, 'r> for PlumeRocket {
|
||||
type Error = ();
|
||||
|
||||
fn from_request(request: &'a Request<'r>) -> request::Outcome<PlumeRocket, ()> {
|
||||
let conn = request.guard::<DbConn>()?;
|
||||
let user = request.guard::<users::User>().succeeded();
|
||||
let worker = request.guard::<State<Arc<ScheduledThreadPool>>>()?;
|
||||
let searcher = request.guard::<State<Arc<search::Searcher>>>()?;
|
||||
Outcome::Success(PlumeRocket {
|
||||
conn,
|
||||
user,
|
||||
worker: worker.clone(),
|
||||
searcher: searcher.clone(),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,7 +8,6 @@ use canapi::{Error as ApiError, Provider};
|
|||
use chrono::{NaiveDateTime, TimeZone, Utc};
|
||||
use diesel::{self, BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
|
||||
use heck::{CamelCase, KebabCase};
|
||||
use scheduled_thread_pool::ScheduledThreadPool as Worker;
|
||||
use serde_json;
|
||||
use std::collections::HashSet;
|
||||
|
||||
|
@ -20,8 +19,8 @@ use plume_api::posts::PostEndpoint;
|
|||
use plume_common::{
|
||||
activity_pub::{
|
||||
broadcast,
|
||||
inbox::{Deletable, FromActivity},
|
||||
Hashtag, Id, IntoId, Licensed, Source, PUBLIC_VISIBILTY,
|
||||
inbox::{AsObject, FromId},
|
||||
Hashtag, Id, IntoId, Licensed, Source, PUBLIC_VISIBILITY,
|
||||
},
|
||||
utils::md_to_html,
|
||||
};
|
||||
|
@ -31,7 +30,7 @@ use schema::posts;
|
|||
use search::Searcher;
|
||||
use tags::*;
|
||||
use users::User;
|
||||
use {ap_url, ApiResult, Connection, Error, Result, CONFIG};
|
||||
use {ap_url, ApiResult, Connection, Error, PlumeRocket, Result, CONFIG};
|
||||
|
||||
pub type LicensedArticle = CustomObject<Licensed, Article>;
|
||||
|
||||
|
@ -68,17 +67,17 @@ pub struct NewPost {
|
|||
pub cover_id: Option<i32>,
|
||||
}
|
||||
|
||||
impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for Post {
|
||||
impl Provider<PlumeRocket> for Post {
|
||||
type Data = PostEndpoint;
|
||||
|
||||
fn get(
|
||||
(conn, _worker, _search, user_id): &(&Connection, &Worker, &Searcher, Option<i32>),
|
||||
id: i32,
|
||||
) -> ApiResult<PostEndpoint> {
|
||||
fn get(rockets: &PlumeRocket, id: i32) -> ApiResult<PostEndpoint> {
|
||||
let conn = &*rockets.conn;
|
||||
if let Ok(post) = Post::get(conn, id) {
|
||||
if !post.published
|
||||
&& !user_id
|
||||
.map(|u| post.is_author(conn, u).unwrap_or(false))
|
||||
&& !rockets
|
||||
.user
|
||||
.as_ref()
|
||||
.and_then(|u| post.is_author(conn, u.id).ok())
|
||||
.unwrap_or(false)
|
||||
{
|
||||
return Err(ApiError::Authorization(
|
||||
|
@ -115,10 +114,8 @@ impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for P
|
|||
}
|
||||
}
|
||||
|
||||
fn list(
|
||||
(conn, _worker, _search, user_id): &(&Connection, &Worker, &Searcher, Option<i32>),
|
||||
filter: PostEndpoint,
|
||||
) -> Vec<PostEndpoint> {
|
||||
fn list(rockets: &PlumeRocket, filter: PostEndpoint) -> Vec<PostEndpoint> {
|
||||
let conn = &*rockets.conn;
|
||||
let mut query = posts::table.into_boxed();
|
||||
if let Some(title) = filter.title {
|
||||
query = query.filter(posts::title.eq(title));
|
||||
|
@ -131,13 +128,15 @@ impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for P
|
|||
}
|
||||
|
||||
query
|
||||
.get_results::<Post>(*conn)
|
||||
.get_results::<Post>(conn)
|
||||
.map(|ps| {
|
||||
ps.into_iter()
|
||||
.filter(|p| {
|
||||
p.published
|
||||
|| user_id
|
||||
.map(|u| p.is_author(conn, u).unwrap_or(false))
|
||||
|| rockets
|
||||
.user
|
||||
.as_ref()
|
||||
.and_then(|u| p.is_author(conn, u.id).ok())
|
||||
.unwrap_or(false)
|
||||
})
|
||||
.map(|p| PostEndpoint {
|
||||
|
@ -166,31 +165,33 @@ impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for P
|
|||
}
|
||||
|
||||
fn update(
|
||||
(_conn, _worker, _search, _user_id): &(&Connection, &Worker, &Searcher, Option<i32>),
|
||||
_rockets: &PlumeRocket,
|
||||
_id: i32,
|
||||
_new_data: PostEndpoint,
|
||||
) -> ApiResult<PostEndpoint> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn delete(
|
||||
(conn, _worker, search, user_id): &(&Connection, &Worker, &Searcher, Option<i32>),
|
||||
id: i32,
|
||||
) {
|
||||
let user_id = user_id.expect("Post as Provider::delete: not authenticated");
|
||||
fn delete(rockets: &PlumeRocket, id: i32) {
|
||||
let conn = &*rockets.conn;
|
||||
let user_id = rockets
|
||||
.user
|
||||
.as_ref()
|
||||
.expect("Post as Provider::delete: not authenticated")
|
||||
.id;
|
||||
if let Ok(post) = Post::get(conn, id) {
|
||||
if post.is_author(conn, user_id).unwrap_or(false) {
|
||||
post.delete(&(conn, search))
|
||||
post.delete(conn, &rockets.searcher)
|
||||
.expect("Post as Provider::delete: delete error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn create(
|
||||
(conn, worker, search, user_id): &(&Connection, &Worker, &Searcher, Option<i32>),
|
||||
query: PostEndpoint,
|
||||
) -> ApiResult<PostEndpoint> {
|
||||
if user_id.is_none() {
|
||||
fn create(rockets: &PlumeRocket, query: PostEndpoint) -> ApiResult<PostEndpoint> {
|
||||
let conn = &*rockets.conn;
|
||||
let search = &rockets.searcher;
|
||||
let worker = &rockets.worker;
|
||||
if rockets.user.is_none() {
|
||||
return Err(ApiError::Authorization(
|
||||
"You are not authorized to create new articles.".to_string(),
|
||||
));
|
||||
|
@ -207,11 +208,10 @@ impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for P
|
|||
let domain = &Instance::get_local(&conn)
|
||||
.map_err(|_| ApiError::NotFound("posts::update: Error getting local instance".into()))?
|
||||
.public_domain;
|
||||
let author = User::get(
|
||||
conn,
|
||||
user_id.expect("<Post as Provider>::create: no user_id error"),
|
||||
)
|
||||
.map_err(|_| ApiError::NotFound("Author not found".into()))?;
|
||||
let author = rockets
|
||||
.user
|
||||
.clone()
|
||||
.ok_or_else(|| ApiError::NotFound("Author not found".into()))?;
|
||||
|
||||
let (content, mentions, hashtags) = md_to_html(
|
||||
query.source.clone().unwrap_or_default().clone().as_ref(),
|
||||
|
@ -298,7 +298,7 @@ impl<'a> Provider<(&'a Connection, &'a Worker, &'a Searcher, Option<i32>)> for P
|
|||
for m in mentions.into_iter() {
|
||||
Mention::from_activity(
|
||||
&*conn,
|
||||
&Mention::build_activity(&*conn, &m)
|
||||
&Mention::build_activity(&rockets, &m)
|
||||
.map_err(|_| ApiError::NotFound("Couldn't build mentions".into()))?,
|
||||
post.id,
|
||||
true,
|
||||
|
@ -367,6 +367,7 @@ impl Post {
|
|||
searcher.add_document(conn, &post)?;
|
||||
Ok(post)
|
||||
}
|
||||
|
||||
pub fn update(&self, conn: &Connection, searcher: &Searcher) -> Result<Self> {
|
||||
diesel::update(self).set(self).execute(conn)?;
|
||||
let post = Self::get(conn, self.id)?;
|
||||
|
@ -374,6 +375,15 @@ impl Post {
|
|||
Ok(post)
|
||||
}
|
||||
|
||||
pub fn delete(&self, conn: &Connection, searcher: &Searcher) -> Result<()> {
|
||||
for m in Mention::list_for_post(&conn, self.id)? {
|
||||
m.delete(conn)?;
|
||||
}
|
||||
diesel::delete(self).execute(conn)?;
|
||||
searcher.delete_document(self);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn list_by_tag(
|
||||
conn: &Connection,
|
||||
tag: String,
|
||||
|
@ -625,7 +635,7 @@ impl Post {
|
|||
|
||||
pub fn to_activity(&self, conn: &Connection) -> Result<LicensedArticle> {
|
||||
let cc = self.get_receivers_urls(conn)?;
|
||||
let to = vec![PUBLIC_VISIBILTY.to_string()];
|
||||
let to = vec![PUBLIC_VISIBILITY.to_string()];
|
||||
|
||||
let mut mentions_json = Mention::list_for_post(conn, self.id)?
|
||||
.into_iter()
|
||||
|
@ -726,77 +736,6 @@ impl Post {
|
|||
Ok(act)
|
||||
}
|
||||
|
||||
pub fn handle_update(
|
||||
conn: &Connection,
|
||||
updated: &LicensedArticle,
|
||||
searcher: &Searcher,
|
||||
) -> Result<()> {
|
||||
let id = updated.object.object_props.id_string()?;
|
||||
let mut post = Post::find_by_ap_url(conn, &id)?;
|
||||
|
||||
if let Ok(title) = updated.object.object_props.name_string() {
|
||||
post.slug = title.to_kebab_case();
|
||||
post.title = title;
|
||||
}
|
||||
|
||||
if let Ok(content) = updated.object.object_props.content_string() {
|
||||
post.content = SafeString::new(&content);
|
||||
}
|
||||
|
||||
if let Ok(subtitle) = updated.object.object_props.summary_string() {
|
||||
post.subtitle = subtitle;
|
||||
}
|
||||
|
||||
if let Ok(ap_url) = updated.object.object_props.url_string() {
|
||||
post.ap_url = ap_url;
|
||||
}
|
||||
|
||||
if let Ok(source) = updated.object.ap_object_props.source_object::<Source>() {
|
||||
post.source = source.content;
|
||||
}
|
||||
|
||||
if let Ok(license) = updated.custom_props.license_string() {
|
||||
post.license = license;
|
||||
}
|
||||
|
||||
let mut txt_hashtags = md_to_html(&post.source, "", false, None)
|
||||
.2
|
||||
.into_iter()
|
||||
.map(|s| s.to_camel_case())
|
||||
.collect::<HashSet<_>>();
|
||||
if let Some(serde_json::Value::Array(mention_tags)) =
|
||||
updated.object.object_props.tag.clone()
|
||||
{
|
||||
let mut mentions = vec![];
|
||||
let mut tags = vec![];
|
||||
let mut hashtags = vec![];
|
||||
for tag in mention_tags {
|
||||
serde_json::from_value::<link::Mention>(tag.clone())
|
||||
.map(|m| mentions.push(m))
|
||||
.ok();
|
||||
|
||||
serde_json::from_value::<Hashtag>(tag.clone())
|
||||
.map_err(Error::from)
|
||||
.and_then(|t| {
|
||||
let tag_name = t.name_string()?;
|
||||
if txt_hashtags.remove(&tag_name) {
|
||||
hashtags.push(t);
|
||||
} else {
|
||||
tags.push(t);
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
post.update_mentions(conn, mentions)?;
|
||||
post.update_tags(conn, tags)?;
|
||||
post.update_hashtags(conn, hashtags)?;
|
||||
}
|
||||
|
||||
post.update(conn, searcher)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn update_mentions(&self, conn: &Connection, mentions: Vec<link::Mention>) -> Result<()> {
|
||||
let mentions = mentions
|
||||
.into_iter()
|
||||
|
@ -925,112 +864,8 @@ impl Post {
|
|||
.and_then(|i| Media::get(conn, i).ok())
|
||||
.and_then(|c| c.url(conn).ok())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromActivity<LicensedArticle, (&'a Connection, &'a Searcher)> for Post {
|
||||
type Error = Error;
|
||||
|
||||
fn from_activity(
|
||||
(conn, searcher): &(&'a Connection, &'a Searcher),
|
||||
article: LicensedArticle,
|
||||
_actor: Id,
|
||||
) -> Result<Post> {
|
||||
let license = article.custom_props.license_string().unwrap_or_default();
|
||||
let article = article.object;
|
||||
if let Ok(post) =
|
||||
Post::find_by_ap_url(conn, &article.object_props.id_string().unwrap_or_default())
|
||||
{
|
||||
Ok(post)
|
||||
} else {
|
||||
let (blog, authors) = article
|
||||
.object_props
|
||||
.attributed_to_link_vec::<Id>()?
|
||||
.into_iter()
|
||||
.fold((None, vec![]), |(blog, mut authors), link| {
|
||||
let url: String = link.into();
|
||||
match User::from_url(conn, &url) {
|
||||
Ok(u) => {
|
||||
authors.push(u);
|
||||
(blog, authors)
|
||||
}
|
||||
Err(_) => (blog.or_else(|| Blog::from_url(conn, &url).ok()), authors),
|
||||
}
|
||||
});
|
||||
|
||||
let cover = article
|
||||
.object_props
|
||||
.icon_object::<Image>()
|
||||
.ok()
|
||||
.and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id));
|
||||
|
||||
let title = article.object_props.name_string()?;
|
||||
let post = Post::insert(
|
||||
conn,
|
||||
NewPost {
|
||||
blog_id: blog?.id,
|
||||
slug: title.to_kebab_case(),
|
||||
title,
|
||||
content: SafeString::new(&article.object_props.content_string()?),
|
||||
published: true,
|
||||
license,
|
||||
// FIXME: This is wrong: with this logic, we may use the display URL as the AP ID. We need two different fields
|
||||
ap_url: article
|
||||
.object_props
|
||||
.url_string()
|
||||
.or_else(|_| article.object_props.id_string())?,
|
||||
creation_date: Some(article.object_props.published_utctime()?.naive_utc()),
|
||||
subtitle: article.object_props.summary_string()?,
|
||||
source: article.ap_object_props.source_object::<Source>()?.content,
|
||||
cover_id: cover,
|
||||
},
|
||||
searcher,
|
||||
)?;
|
||||
|
||||
for author in authors {
|
||||
PostAuthor::insert(
|
||||
conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: author.id,
|
||||
},
|
||||
)?;
|
||||
}
|
||||
|
||||
// save mentions and tags
|
||||
let mut hashtags = md_to_html(&post.source, "", false, None)
|
||||
.2
|
||||
.into_iter()
|
||||
.map(|s| s.to_camel_case())
|
||||
.collect::<HashSet<_>>();
|
||||
if let Some(serde_json::Value::Array(tags)) = article.object_props.tag.clone() {
|
||||
for tag in tags {
|
||||
serde_json::from_value::<link::Mention>(tag.clone())
|
||||
.map(|m| Mention::from_activity(conn, &m, post.id, true, true))
|
||||
.ok();
|
||||
|
||||
serde_json::from_value::<Hashtag>(tag.clone())
|
||||
.map_err(Error::from)
|
||||
.and_then(|t| {
|
||||
let tag_name = t.name_string()?;
|
||||
Ok(Tag::from_activity(
|
||||
conn,
|
||||
&t,
|
||||
post.id,
|
||||
hashtags.remove(&tag_name),
|
||||
))
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
}
|
||||
Ok(post)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Deletable<(&'a Connection, &'a Searcher), Delete> for Post {
|
||||
type Error = Error;
|
||||
|
||||
fn delete(&self, (conn, searcher): &(&Connection, &Searcher)) -> Result<Delete> {
|
||||
pub fn build_delete(&self, conn: &Connection) -> Result<Delete> {
|
||||
let mut act = Delete::default();
|
||||
act.delete_props
|
||||
.set_actor_link(self.get_authors(conn)?[0].clone().into_id())?;
|
||||
|
@ -1042,37 +877,360 @@ impl<'a> Deletable<(&'a Connection, &'a Searcher), Delete> for Post {
|
|||
act.object_props
|
||||
.set_id_string(format!("{}#delete", self.ap_url))?;
|
||||
act.object_props
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILTY)])?;
|
||||
|
||||
for m in Mention::list_for_post(&conn, self.id)? {
|
||||
m.delete(conn)?;
|
||||
}
|
||||
diesel::delete(self).execute(*conn)?;
|
||||
searcher.delete_document(self);
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY)])?;
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_id(
|
||||
id: &str,
|
||||
actor_id: &str,
|
||||
(conn, searcher): &(&Connection, &Searcher),
|
||||
) -> Result<Delete> {
|
||||
let actor = User::find_by_ap_url(conn, actor_id)?;
|
||||
let post = Post::find_by_ap_url(conn, id)?;
|
||||
let can_delete = post
|
||||
.get_authors(conn)?
|
||||
impl FromId<PlumeRocket> for Post {
|
||||
type Error = Error;
|
||||
type Object = LicensedArticle;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Self::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, article: LicensedArticle) -> Result<Self> {
|
||||
let conn = &*c.conn;
|
||||
let searcher = &c.searcher;
|
||||
let license = article.custom_props.license_string().unwrap_or_default();
|
||||
let article = article.object;
|
||||
|
||||
let (blog, authors) = article
|
||||
.object_props
|
||||
.attributed_to_link_vec::<Id>()?
|
||||
.into_iter()
|
||||
.fold((None, vec![]), |(blog, mut authors), link| {
|
||||
let url: String = link.into();
|
||||
match User::from_id(&c, &url, None) {
|
||||
Ok(u) => {
|
||||
authors.push(u);
|
||||
(blog, authors)
|
||||
}
|
||||
Err(_) => (blog.or_else(|| Blog::from_id(&c, &url, None).ok()), authors),
|
||||
}
|
||||
});
|
||||
|
||||
let cover = article
|
||||
.object_props
|
||||
.icon_object::<Image>()
|
||||
.ok()
|
||||
.and_then(|img| Media::from_activity(&c, &img).ok().map(|m| m.id));
|
||||
|
||||
let title = article.object_props.name_string()?;
|
||||
let post = Post::insert(
|
||||
conn,
|
||||
NewPost {
|
||||
blog_id: blog?.id,
|
||||
slug: title.to_kebab_case(),
|
||||
title,
|
||||
content: SafeString::new(&article.object_props.content_string()?),
|
||||
published: true,
|
||||
license,
|
||||
// FIXME: This is wrong: with this logic, we may use the display URL as the AP ID. We need two different fields
|
||||
ap_url: article
|
||||
.object_props
|
||||
.url_string()
|
||||
.or_else(|_| article.object_props.id_string())?,
|
||||
creation_date: Some(article.object_props.published_utctime()?.naive_utc()),
|
||||
subtitle: article.object_props.summary_string()?,
|
||||
source: article.ap_object_props.source_object::<Source>()?.content,
|
||||
cover_id: cover,
|
||||
},
|
||||
searcher,
|
||||
)?;
|
||||
|
||||
for author in authors {
|
||||
PostAuthor::insert(
|
||||
conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: author.id,
|
||||
},
|
||||
)?;
|
||||
}
|
||||
|
||||
// save mentions and tags
|
||||
let mut hashtags = md_to_html(&post.source, "", false, None)
|
||||
.2
|
||||
.into_iter()
|
||||
.map(|s| s.to_camel_case())
|
||||
.collect::<HashSet<_>>();
|
||||
if let Some(serde_json::Value::Array(tags)) = article.object_props.tag.clone() {
|
||||
for tag in tags {
|
||||
serde_json::from_value::<link::Mention>(tag.clone())
|
||||
.map(|m| Mention::from_activity(conn, &m, post.id, true, true))
|
||||
.ok();
|
||||
|
||||
serde_json::from_value::<Hashtag>(tag.clone())
|
||||
.map_err(Error::from)
|
||||
.and_then(|t| {
|
||||
let tag_name = t.name_string()?;
|
||||
Ok(Tag::from_activity(
|
||||
conn,
|
||||
&t,
|
||||
post.id,
|
||||
hashtags.remove(&tag_name),
|
||||
))
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
}
|
||||
Ok(post)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Create, &PlumeRocket> for Post {
|
||||
type Error = Error;
|
||||
type Output = Post;
|
||||
|
||||
fn activity(self, _c: &PlumeRocket, _actor: User, _id: &str) -> Result<Post> {
|
||||
// TODO: check that _actor is actually one of the author?
|
||||
Ok(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Delete, &PlumeRocket> for Post {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
let can_delete = self
|
||||
.get_authors(&c.conn)?
|
||||
.into_iter()
|
||||
.any(|a| actor.id == a.id);
|
||||
if can_delete {
|
||||
post.delete(&(conn, searcher))
|
||||
self.delete(&c.conn, &c.searcher).map(|_| ())
|
||||
} else {
|
||||
Err(Error::Unauthorized)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct PostUpdate {
|
||||
pub ap_url: String,
|
||||
pub title: Option<String>,
|
||||
pub subtitle: Option<String>,
|
||||
pub content: Option<String>,
|
||||
pub cover: Option<i32>,
|
||||
pub source: Option<String>,
|
||||
pub license: Option<String>,
|
||||
pub tags: Option<serde_json::Value>,
|
||||
}
|
||||
|
||||
impl FromId<PlumeRocket> for PostUpdate {
|
||||
type Error = Error;
|
||||
type Object = LicensedArticle;
|
||||
|
||||
fn from_db(_: &PlumeRocket, _: &str) -> Result<Self> {
|
||||
// Always fail because we always want to deserialize the AP object
|
||||
Err(Error::NotFound)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, updated: LicensedArticle) -> Result<Self> {
|
||||
Ok(PostUpdate {
|
||||
ap_url: updated.object.object_props.id_string()?,
|
||||
title: updated.object.object_props.name_string().ok(),
|
||||
subtitle: updated.object.object_props.summary_string().ok(),
|
||||
content: updated.object.object_props.content_string().ok(),
|
||||
cover: updated
|
||||
.object
|
||||
.object_props
|
||||
.icon_object::<Image>()
|
||||
.ok()
|
||||
.and_then(|img| Media::from_activity(&c, &img).ok().map(|m| m.id)),
|
||||
source: updated
|
||||
.object
|
||||
.ap_object_props
|
||||
.source_object::<Source>()
|
||||
.ok()
|
||||
.map(|x| x.content),
|
||||
license: updated.custom_props.license_string().ok(),
|
||||
tags: updated.object.object_props.tag.clone(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Update, &PlumeRocket> for PostUpdate {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
let conn = &*c.conn;
|
||||
let searcher = &c.searcher;
|
||||
let mut post = Post::from_id(c, &self.ap_url, None).map_err(|(_, e)| e)?;
|
||||
|
||||
if !post.is_author(conn, actor.id)? {
|
||||
// TODO: maybe the author was added in the meantime
|
||||
return Err(Error::Unauthorized);
|
||||
}
|
||||
|
||||
if let Some(title) = self.title {
|
||||
post.slug = title.to_kebab_case();
|
||||
post.title = title;
|
||||
}
|
||||
|
||||
if let Some(content) = self.content {
|
||||
post.content = SafeString::new(&content);
|
||||
}
|
||||
|
||||
if let Some(subtitle) = self.subtitle {
|
||||
post.subtitle = subtitle;
|
||||
}
|
||||
|
||||
post.cover_id = self.cover;
|
||||
|
||||
if let Some(source) = self.source {
|
||||
post.source = source;
|
||||
}
|
||||
|
||||
if let Some(license) = self.license {
|
||||
post.license = license;
|
||||
}
|
||||
|
||||
let mut txt_hashtags = md_to_html(&post.source, "", false, None)
|
||||
.2
|
||||
.into_iter()
|
||||
.map(|s| s.to_camel_case())
|
||||
.collect::<HashSet<_>>();
|
||||
if let Some(serde_json::Value::Array(mention_tags)) = self.tags {
|
||||
let mut mentions = vec![];
|
||||
let mut tags = vec![];
|
||||
let mut hashtags = vec![];
|
||||
for tag in mention_tags {
|
||||
serde_json::from_value::<link::Mention>(tag.clone())
|
||||
.map(|m| mentions.push(m))
|
||||
.ok();
|
||||
|
||||
serde_json::from_value::<Hashtag>(tag.clone())
|
||||
.map_err(Error::from)
|
||||
.and_then(|t| {
|
||||
let tag_name = t.name_string()?;
|
||||
if txt_hashtags.remove(&tag_name) {
|
||||
hashtags.push(t);
|
||||
} else {
|
||||
tags.push(t);
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.ok();
|
||||
}
|
||||
post.update_mentions(conn, mentions)?;
|
||||
post.update_tags(conn, tags)?;
|
||||
post.update_hashtags(conn, hashtags)?;
|
||||
}
|
||||
|
||||
post.update(conn, searcher)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoId for Post {
|
||||
fn into_id(self) -> Id {
|
||||
Id::new(self.ap_url.clone())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::inbox::{inbox, tests::fill_database, InboxResult};
|
||||
use crate::safe_string::SafeString;
|
||||
use crate::tests::rockets;
|
||||
use diesel::Connection;
|
||||
|
||||
// creates a post, get it's Create activity, delete the post,
|
||||
// "send" the Create to the inbox, and check it works
|
||||
#[test]
|
||||
fn self_federation() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let (_, users, blogs) = fill_database(&r);
|
||||
let post = Post::insert(
|
||||
conn,
|
||||
NewPost {
|
||||
blog_id: blogs[0].id,
|
||||
slug: "yo".into(),
|
||||
title: "Yo".into(),
|
||||
content: SafeString::new("Hello"),
|
||||
published: true,
|
||||
license: "WTFPL".to_string(),
|
||||
creation_date: None,
|
||||
ap_url: String::new(), // automatically updated when inserting
|
||||
subtitle: "Testing".into(),
|
||||
source: "Hello".into(),
|
||||
cover_id: None,
|
||||
},
|
||||
&r.searcher,
|
||||
)
|
||||
.unwrap();
|
||||
PostAuthor::insert(
|
||||
conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: users[0].id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let create = post.create_activity(conn).unwrap();
|
||||
post.delete(conn, &r.searcher).unwrap();
|
||||
|
||||
match inbox(&r, serde_json::to_value(create).unwrap()).unwrap() {
|
||||
InboxResult::Post(p) => {
|
||||
assert!(p.is_author(conn, users[0].id).unwrap());
|
||||
assert_eq!(p.source, "Hello".to_owned());
|
||||
assert_eq!(p.blog_id, blogs[0].id);
|
||||
assert_eq!(p.content, SafeString::new("Hello"));
|
||||
assert_eq!(p.subtitle, "Testing".to_owned());
|
||||
assert_eq!(p.title, "Yo".to_owned());
|
||||
}
|
||||
_ => panic!("Unexpected result"),
|
||||
};
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn licensed_article_serde() {
|
||||
let mut article = Article::default();
|
||||
article.object_props.set_id_string("Yo".into()).unwrap();
|
||||
let mut license = Licensed::default();
|
||||
license.set_license_string("WTFPL".into()).unwrap();
|
||||
let full_article = LicensedArticle::new(article, license);
|
||||
|
||||
let json = serde_json::to_value(full_article).unwrap();
|
||||
let article_from_json: LicensedArticle = serde_json::from_value(json).unwrap();
|
||||
assert_eq!(
|
||||
"Yo",
|
||||
&article_from_json.object.object_props.id_string().unwrap()
|
||||
);
|
||||
assert_eq!(
|
||||
"WTFPL",
|
||||
&article_from_json.custom_props.license_string().unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn licensed_article_deserialization() {
|
||||
let json = json!({
|
||||
"type": "Article",
|
||||
"id": "https://plu.me/~/Blog/my-article",
|
||||
"attributedTo": ["https://plu.me/@/Admin", "https://plu.me/~/Blog"],
|
||||
"content": "Hello.",
|
||||
"name": "My Article",
|
||||
"summary": "Bye.",
|
||||
"source": {
|
||||
"content": "Hello.",
|
||||
"mediaType": "text/markdown"
|
||||
},
|
||||
"published": "2014-12-12T12:12:12Z",
|
||||
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
|
||||
});
|
||||
let article: LicensedArticle = serde_json::from_value(json).unwrap();
|
||||
assert_eq!(
|
||||
"https://plu.me/~/Blog/my-article",
|
||||
&article.object.object_props.id_string().unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,13 +4,13 @@ use diesel::{self, ExpressionMethods, QueryDsl, RunQueryDsl};
|
|||
|
||||
use notifications::*;
|
||||
use plume_common::activity_pub::{
|
||||
inbox::{Deletable, FromActivity, Notify},
|
||||
Id, IntoId, PUBLIC_VISIBILTY,
|
||||
inbox::{AsObject, FromId},
|
||||
Id, IntoId, PUBLIC_VISIBILITY,
|
||||
};
|
||||
use posts::Post;
|
||||
use schema::reshares;
|
||||
use users::User;
|
||||
use {Connection, Error, Result};
|
||||
use {Connection, Error, PlumeRocket, Result};
|
||||
|
||||
#[derive(Clone, Queryable, Identifiable)]
|
||||
pub struct Reshare {
|
||||
|
@ -69,37 +69,14 @@ impl Reshare {
|
|||
.set_object_link(Post::get(conn, self.post_id)?.into_id())?;
|
||||
act.object_props.set_id_string(self.ap_url.clone())?;
|
||||
act.object_props
|
||||
.set_to_link(Id::new(PUBLIC_VISIBILTY.to_string()))?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
act.object_props
|
||||
.set_cc_link_vec(vec![Id::new(self.get_user(conn)?.followers_endpoint)])?;
|
||||
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromActivity<Announce, Connection> for Reshare {
|
||||
type Error = Error;
|
||||
|
||||
fn from_activity(conn: &Connection, announce: Announce, _actor: Id) -> Result<Reshare> {
|
||||
let user = User::from_url(conn, announce.announce_props.actor_link::<Id>()?.as_ref())?;
|
||||
let post =
|
||||
Post::find_by_ap_url(conn, announce.announce_props.object_link::<Id>()?.as_ref())?;
|
||||
let reshare = Reshare::insert(
|
||||
conn,
|
||||
NewReshare {
|
||||
post_id: post.id,
|
||||
user_id: user.id,
|
||||
ap_url: announce.object_props.id_string().unwrap_or_default(),
|
||||
},
|
||||
)?;
|
||||
reshare.notify(conn)?;
|
||||
Ok(reshare)
|
||||
}
|
||||
}
|
||||
|
||||
impl Notify<Connection> for Reshare {
|
||||
type Error = Error;
|
||||
|
||||
fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
pub fn notify(&self, conn: &Connection) -> Result<()> {
|
||||
let post = self.get_post(conn)?;
|
||||
for author in post.get_authors(conn)? {
|
||||
Notification::insert(
|
||||
|
@ -113,19 +90,8 @@ impl Notify<Connection> for Reshare {
|
|||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Deletable<Connection, Undo> for Reshare {
|
||||
type Error = Error;
|
||||
|
||||
fn delete(&self, conn: &Connection) -> Result<Undo> {
|
||||
diesel::delete(self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(conn, notification_kind::RESHARE, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
|
||||
pub fn build_undo(&self, conn: &Connection) -> Result<Undo> {
|
||||
let mut act = Undo::default();
|
||||
act.undo_props
|
||||
.set_actor_link(User::get(conn, self.user_id)?.into_id())?;
|
||||
|
@ -133,17 +99,88 @@ impl Deletable<Connection, Undo> for Reshare {
|
|||
act.object_props
|
||||
.set_id_string(format!("{}#delete", self.ap_url))?;
|
||||
act.object_props
|
||||
.set_to_link(Id::new(PUBLIC_VISIBILTY.to_string()))?;
|
||||
act.object_props.set_cc_link_vec::<Id>(vec![])?;
|
||||
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY.to_string())])?;
|
||||
act.object_props
|
||||
.set_cc_link_vec(vec![Id::new(self.get_user(conn)?.followers_endpoint)])?;
|
||||
|
||||
Ok(act)
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_id(id: &str, actor_id: &str, conn: &Connection) -> Result<Undo> {
|
||||
let reshare = Reshare::find_by_ap_url(conn, id)?;
|
||||
let actor = User::find_by_ap_url(conn, actor_id)?;
|
||||
if actor.id == reshare.user_id {
|
||||
reshare.delete(conn)
|
||||
impl AsObject<User, Announce, &PlumeRocket> for Post {
|
||||
type Error = Error;
|
||||
type Output = Reshare;
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, id: &str) -> Result<Reshare> {
|
||||
let conn = &*c.conn;
|
||||
let reshare = Reshare::insert(
|
||||
conn,
|
||||
NewReshare {
|
||||
post_id: self.id,
|
||||
user_id: actor.id,
|
||||
ap_url: id.to_string(),
|
||||
},
|
||||
)?;
|
||||
reshare.notify(conn)?;
|
||||
trinity-1686a
commented
see previous comment see previous comment
|
||||
Ok(reshare)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromId<PlumeRocket> for Reshare {
|
||||
type Error = Error;
|
||||
type Object = Announce;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Reshare::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, act: Announce) -> Result<Self> {
|
||||
let res = Reshare::insert(
|
||||
&c.conn,
|
||||
NewReshare {
|
||||
post_id: Post::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = act.announce_props.object_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
user_id: User::from_id(
|
||||
c,
|
||||
&{
|
||||
let res: String = act.announce_props.actor_link::<Id>()?.into();
|
||||
res
|
||||
},
|
||||
None,
|
||||
)
|
||||
.map_err(|(_, e)| e)?
|
||||
.id,
|
||||
ap_url: act.object_props.id_string()?,
|
||||
},
|
||||
)?;
|
||||
res.notify(&c.conn)?;
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsObject<User, Undo, &PlumeRocket> for Reshare {
|
||||
type Error = Error;
|
||||
type Output = ();
|
||||
|
||||
fn activity(self, c: &PlumeRocket, actor: User, _id: &str) -> Result<()> {
|
||||
let conn = &*c.conn;
|
||||
if actor.id == self.user_id {
|
||||
diesel::delete(&self).execute(conn)?;
|
||||
|
||||
// delete associated notification if any
|
||||
if let Ok(notif) = Notification::find(&conn, notification_kind::RESHARE, self.id) {
|
||||
diesel::delete(¬if).execute(conn)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::Unauthorized)
|
||||
}
|
||||
|
|
|
@ -7,11 +7,11 @@ pub use self::searcher::*;
|
|||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::{Query, Searcher};
|
||||
use diesel::Connection;
|
||||
use std::env::temp_dir;
|
||||
use std::str::FromStr;
|
||||
|
||||
use blogs::tests::fill_database;
|
||||
use plume_common::activity_pub::inbox::Deletable;
|
||||
use plume_common::utils::random_hex;
|
||||
use post_authors::*;
|
||||
use posts::{NewPost, Post};
|
||||
|
@ -19,7 +19,7 @@ pub(crate) mod tests {
|
|||
use tests::db;
|
||||
|
||||
pub(crate) fn get_searcher() -> Searcher {
|
||||
let dir = temp_dir().join("plume-test");
|
||||
let dir = temp_dir().join(&format!("plume-test-{}", random_hex()));
|
||||
if dir.exists() {
|
||||
Searcher::open(&dir)
|
||||
} else {
|
||||
|
@ -96,11 +96,10 @@ pub(crate) mod tests {
|
|||
|
||||
#[test]
|
||||
fn open() {
|
||||
let dir = temp_dir().join(format!("plume-test-{}", random_hex()));
|
||||
{
|
||||
get_searcher()
|
||||
}; //make sure $tmp/plume-test-tantivy exist
|
||||
|
||||
let dir = temp_dir().join("plume-test");
|
||||
Searcher::create(&dir).unwrap();
|
||||
}
|
||||
Searcher::open(&dir).unwrap();
|
||||
}
|
||||
|
||||
|
@ -118,62 +117,65 @@ pub(crate) mod tests {
|
|||
#[test]
|
||||
fn search() {
|
||||
let conn = &db();
|
||||
let searcher = get_searcher();
|
||||
let blog = &fill_database(conn).1[0];
|
||||
let author = &blog.list_authors(conn).unwrap()[0];
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let searcher = get_searcher();
|
||||
let blog = &fill_database(conn).1[0];
|
||||
let author = &blog.list_authors(conn).unwrap()[0];
|
||||
|
||||
let title = random_hex()[..8].to_owned();
|
||||
let title = random_hex()[..8].to_owned();
|
||||
|
||||
let mut post = Post::insert(
|
||||
conn,
|
||||
NewPost {
|
||||
blog_id: blog.id,
|
||||
slug: title.clone(),
|
||||
title: title.clone(),
|
||||
content: SafeString::new(""),
|
||||
published: true,
|
||||
license: "CC-BY-SA".to_owned(),
|
||||
ap_url: "".to_owned(),
|
||||
creation_date: None,
|
||||
subtitle: "".to_owned(),
|
||||
source: "".to_owned(),
|
||||
cover_id: None,
|
||||
},
|
||||
&searcher,
|
||||
)
|
||||
.unwrap();
|
||||
PostAuthor::insert(
|
||||
conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: author.id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let mut post = Post::insert(
|
||||
conn,
|
||||
NewPost {
|
||||
blog_id: blog.id,
|
||||
slug: title.clone(),
|
||||
title: title.clone(),
|
||||
content: SafeString::new(""),
|
||||
published: true,
|
||||
license: "CC-BY-SA".to_owned(),
|
||||
ap_url: "".to_owned(),
|
||||
creation_date: None,
|
||||
subtitle: "".to_owned(),
|
||||
source: "".to_owned(),
|
||||
cover_id: None,
|
||||
},
|
||||
&searcher,
|
||||
)
|
||||
.unwrap();
|
||||
PostAuthor::insert(
|
||||
conn,
|
||||
NewPostAuthor {
|
||||
post_id: post.id,
|
||||
author_id: author.id,
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
searcher.commit();
|
||||
assert_eq!(
|
||||
searcher.search_document(conn, Query::from_str(&title).unwrap(), (0, 1))[0].id,
|
||||
post.id
|
||||
);
|
||||
searcher.commit();
|
||||
assert_eq!(
|
||||
searcher.search_document(conn, Query::from_str(&title).unwrap(), (0, 1))[0].id,
|
||||
post.id
|
||||
);
|
||||
|
||||
let newtitle = random_hex()[..8].to_owned();
|
||||
post.title = newtitle.clone();
|
||||
post.update(conn, &searcher).unwrap();
|
||||
searcher.commit();
|
||||
assert_eq!(
|
||||
searcher.search_document(conn, Query::from_str(&newtitle).unwrap(), (0, 1))[0].id,
|
||||
post.id
|
||||
);
|
||||
assert!(searcher
|
||||
.search_document(conn, Query::from_str(&title).unwrap(), (0, 1))
|
||||
.is_empty());
|
||||
let newtitle = random_hex()[..8].to_owned();
|
||||
post.title = newtitle.clone();
|
||||
post.update(conn, &searcher).unwrap();
|
||||
searcher.commit();
|
||||
assert_eq!(
|
||||
searcher.search_document(conn, Query::from_str(&newtitle).unwrap(), (0, 1))[0].id,
|
||||
post.id
|
||||
);
|
||||
assert!(searcher
|
||||
.search_document(conn, Query::from_str(&title).unwrap(), (0, 1))
|
||||
.is_empty());
|
||||
|
||||
post.delete(&(conn, &searcher)).unwrap();
|
||||
searcher.commit();
|
||||
assert!(searcher
|
||||
.search_document(conn, Query::from_str(&newtitle).unwrap(), (0, 1))
|
||||
.is_empty());
|
||||
post.delete(conn, &searcher).unwrap();
|
||||
searcher.commit();
|
||||
assert!(searcher
|
||||
.search_document(conn, Query::from_str(&newtitle).unwrap(), (0, 1))
|
||||
.is_empty());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use blogs::Blog;
|
||||
use lists::{self, ListType};
|
||||
use plume_common::activity_pub::inbox::WithInbox;
|
||||
use plume_common::activity_pub::inbox::AsActor;
|
||||
use posts::Post;
|
||||
use tags::Tag;
|
||||
use users::User;
|
||||
|
|
|
@ -12,7 +12,7 @@ use openssl::{
|
|||
};
|
||||
use plume_common::activity_pub::{
|
||||
ap_accept_header,
|
||||
inbox::{Deletable, WithInbox},
|
||||
inbox::{AsActor, FromId},
|
||||
sign::{gen_keypair, Signer},
|
||||
ActivityStream, ApSignature, Id, IntoId, PublicKey,
|
||||
};
|
||||
|
@ -43,7 +43,7 @@ use posts::Post;
|
|||
use safe_string::SafeString;
|
||||
use schema::users;
|
||||
use search::Searcher;
|
||||
use {ap_url, Connection, Error, Result, CONFIG};
|
||||
use {ap_url, Connection, Error, PlumeRocket, Result};
|
||||
|
||||
pub type CustomPerson = CustomObject<ApSignature, Person>;
|
||||
|
||||
|
@ -168,7 +168,7 @@ impl User {
|
|||
.unwrap_or(&0)
|
||||
> &0;
|
||||
if !has_other_authors {
|
||||
Post::get(conn, post_id)?.delete(&(conn, searcher))?;
|
||||
Post::get(conn, post_id)?.delete(conn, searcher)?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -230,27 +230,36 @@ impl User {
|
|||
.map_err(Error::from)
|
||||
}
|
||||
|
||||
pub fn find_by_fqn(conn: &Connection, fqn: &str) -> Result<User> {
|
||||
pub fn find_by_fqn(c: &PlumeRocket, fqn: &str) -> Result<User> {
|
||||
let from_db = users::table
|
||||
.filter(users::fqn.eq(fqn))
|
||||
.limit(1)
|
||||
.load::<User>(conn)?
|
||||
.load::<User>(&*c.conn)?
|
||||
.into_iter()
|
||||
.next();
|
||||
if let Some(from_db) = from_db {
|
||||
Ok(from_db)
|
||||
} else {
|
||||
User::fetch_from_webfinger(conn, fqn)
|
||||
User::fetch_from_webfinger(c, fqn)
|
||||
}
|
||||
}
|
||||
|
||||
fn fetch_from_webfinger(conn: &Connection, acct: &str) -> Result<User> {
|
||||
fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result<User> {
|
||||
let link = resolve(acct.to_owned(), true)?
|
||||
.links
|
||||
.into_iter()
|
||||
.find(|l| l.mime_type == Some(String::from("application/activity+json")))
|
||||
.ok_or(Error::Webfinger)?;
|
||||
User::fetch_from_url(conn, link.href.as_ref()?)
|
||||
User::from_id(c, link.href.as_ref()?, None).map_err(|(_, e)| e)
|
||||
}
|
||||
|
||||
pub fn fetch_remote_interact_uri(acct: &str) -> Result<String> {
|
||||
resolve(acct.to_owned(), true)?
|
||||
.links
|
||||
.into_iter()
|
||||
.find(|l| l.rel == "http://ostatus.org/schema/1.0/subscribe")
|
||||
.and_then(|l| l.template)
|
||||
.ok_or(Error::Webfinger)
|
||||
}
|
||||
|
||||
fn fetch(url: &str) -> Result<CustomPerson> {
|
||||
|
@ -274,97 +283,8 @@ impl User {
|
|||
Ok(json)
|
||||
}
|
||||
|
||||
pub fn fetch_from_url(conn: &Connection, url: &str) -> Result<User> {
|
||||
User::fetch(url)
|
||||
.and_then(|json| User::from_activity(conn, &json, Url::parse(url)?.host_str()?))
|
||||
}
|
||||
|
||||
fn from_activity(conn: &Connection, acct: &CustomPerson, inst: &str) -> Result<User> {
|
||||
let instance = Instance::find_by_domain(conn, inst).or_else(|_| {
|
||||
Instance::insert(
|
||||
conn,
|
||||
NewInstance {
|
||||
name: inst.to_owned(),
|
||||
public_domain: inst.to_owned(),
|
||||
local: false,
|
||||
// We don't really care about all the following for remote instances
|
||||
long_description: SafeString::new(""),
|
||||
short_description: SafeString::new(""),
|
||||
default_license: String::new(),
|
||||
open_registrations: true,
|
||||
short_description_html: String::new(),
|
||||
long_description_html: String::new(),
|
||||
},
|
||||
)
|
||||
})?;
|
||||
|
||||
if acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.preferred_username_string()?
|
||||
.contains(&['<', '>', '&', '@', '\'', '"'][..])
|
||||
{
|
||||
return Err(Error::InvalidValue);
|
||||
}
|
||||
let user = User::insert(
|
||||
conn,
|
||||
NewUser {
|
||||
username: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.preferred_username_string()
|
||||
.unwrap(),
|
||||
display_name: acct.object.object_props.name_string()?,
|
||||
outbox_url: acct.object.ap_actor_props.outbox_string()?,
|
||||
inbox_url: acct.object.ap_actor_props.inbox_string()?,
|
||||
is_admin: false,
|
||||
summary: acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
summary_html: SafeString::new(
|
||||
&acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
),
|
||||
email: None,
|
||||
hashed_password: None,
|
||||
instance_id: instance.id,
|
||||
ap_url: acct.object.object_props.id_string()?,
|
||||
public_key: acct
|
||||
.custom_props
|
||||
.public_key_publickey()?
|
||||
.public_key_pem_string()?,
|
||||
private_key: None,
|
||||
shared_inbox_url: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.endpoints_endpoint()
|
||||
.and_then(|e| e.shared_inbox_string())
|
||||
.ok(),
|
||||
followers_endpoint: acct.object.ap_actor_props.followers_string()?,
|
||||
avatar_id: None,
|
||||
},
|
||||
)?;
|
||||
|
||||
let avatar = Media::save_remote(
|
||||
conn,
|
||||
acct.object
|
||||
.object_props
|
||||
.icon_image()?
|
||||
.object_props
|
||||
.url_string()?,
|
||||
&user,
|
||||
);
|
||||
|
||||
if let Ok(avatar) = avatar {
|
||||
user.set_avatar(conn, avatar.id)?;
|
||||
}
|
||||
|
||||
Ok(user)
|
||||
pub fn fetch_from_url(c: &PlumeRocket, url: &str) -> Result<User> {
|
||||
User::fetch(url).and_then(|json| User::from_activity(c, json))
|
||||
}
|
||||
|
||||
pub fn refetch(&self, conn: &Connection) -> Result<()> {
|
||||
|
@ -688,10 +608,11 @@ impl User {
|
|||
.ap_actor_props
|
||||
.set_followers_string(self.followers_endpoint.clone())?;
|
||||
|
||||
let mut endpoints = Endpoint::default();
|
||||
endpoints
|
||||
.set_shared_inbox_string(ap_url(&format!("{}/inbox/", CONFIG.base_url.as_str())))?;
|
||||
actor.ap_actor_props.set_endpoints_endpoint(endpoints)?;
|
||||
if let Some(shared_inbox_url) = self.shared_inbox_url.clone() {
|
||||
let mut endpoints = Endpoint::default();
|
||||
endpoints.set_shared_inbox_string(shared_inbox_url)?;
|
||||
actor.ap_actor_props.set_endpoints_endpoint(endpoints)?;
|
||||
}
|
||||
|
||||
let mut public_key = PublicKey::default();
|
||||
public_key.set_id_string(format!("{}#main-key", self.ap_url))?;
|
||||
|
@ -728,7 +649,7 @@ impl User {
|
|||
links: vec![
|
||||
Link {
|
||||
rel: String::from("http://webfinger.net/rel/profile-page"),
|
||||
mime_type: None,
|
||||
mime_type: Some(String::from("text/html")),
|
||||
href: Some(self.ap_url.clone()),
|
||||
template: None,
|
||||
},
|
||||
|
@ -748,22 +669,19 @@ impl User {
|
|||
href: Some(self.ap_url.clone()),
|
||||
template: None,
|
||||
},
|
||||
Link {
|
||||
rel: String::from("http://ostatus.org/schema/1.0/subscribe"),
|
||||
mime_type: None,
|
||||
href: None,
|
||||
template: Some(format!(
|
||||
"{}/remote_interact?{{uri}}",
|
||||
self.get_instance(conn)?.public_domain
|
||||
)),
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
pub fn from_url(conn: &Connection, url: &str) -> Result<User> {
|
||||
User::find_by_ap_url(conn, url).or_else(|_| {
|
||||
// The requested user was not in the DB
|
||||
// We try to fetch it if it is remote
|
||||
if Url::parse(&url)?.host_str()? != CONFIG.base_url.as_str() {
|
||||
User::fetch_from_url(conn, url)
|
||||
} else {
|
||||
Err(Error::NotFound)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn set_avatar(&self, conn: &Connection, id: i32) -> Result<()> {
|
||||
diesel::update(self)
|
||||
.set(users::avatar_id.eq(id))
|
||||
|
@ -807,7 +725,100 @@ impl IntoId for User {
|
|||
|
||||
impl Eq for User {}
|
||||
|
||||
impl WithInbox for User {
|
||||
impl FromId<PlumeRocket> for User {
|
||||
type Error = Error;
|
||||
type Object = CustomPerson;
|
||||
|
||||
fn from_db(c: &PlumeRocket, id: &str) -> Result<Self> {
|
||||
Self::find_by_ap_url(&c.conn, id)
|
||||
}
|
||||
|
||||
fn from_activity(c: &PlumeRocket, acct: CustomPerson) -> Result<Self> {
|
||||
let url = Url::parse(&acct.object.object_props.id_string()?)?;
|
||||
let inst = url.host_str()?;
|
||||
let instance = Instance::find_by_domain(&c.conn, inst).or_else(|_| {
|
||||
Instance::insert(
|
||||
&c.conn,
|
||||
NewInstance {
|
||||
name: inst.to_owned(),
|
||||
public_domain: inst.to_owned(),
|
||||
local: false,
|
||||
// We don't really care about all the following for remote instances
|
||||
long_description: SafeString::new(""),
|
||||
short_description: SafeString::new(""),
|
||||
default_license: String::new(),
|
||||
open_registrations: true,
|
||||
short_description_html: String::new(),
|
||||
long_description_html: String::new(),
|
||||
},
|
||||
)
|
||||
})?;
|
||||
|
||||
let username = acct.object.ap_actor_props.preferred_username_string()?;
|
||||
|
||||
if username.contains(&['<', '>', '&', '@', '\'', '"', ' ', '\t'][..]) {
|
||||
return Err(Error::InvalidValue);
|
||||
}
|
||||
|
||||
let user = User::insert(
|
||||
&c.conn,
|
||||
NewUser {
|
||||
display_name: acct
|
||||
.object
|
||||
.object_props
|
||||
.name_string()
|
||||
.unwrap_or_else(|_| username.clone()),
|
||||
username,
|
||||
outbox_url: acct.object.ap_actor_props.outbox_string()?,
|
||||
inbox_url: acct.object.ap_actor_props.inbox_string()?,
|
||||
is_admin: false,
|
||||
summary: acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
summary_html: SafeString::new(
|
||||
&acct
|
||||
.object
|
||||
.object_props
|
||||
.summary_string()
|
||||
.unwrap_or_default(),
|
||||
),
|
||||
email: None,
|
||||
hashed_password: None,
|
||||
instance_id: instance.id,
|
||||
ap_url: acct.object.object_props.id_string()?,
|
||||
public_key: acct
|
||||
.custom_props
|
||||
.public_key_publickey()?
|
||||
.public_key_pem_string()?,
|
||||
private_key: None,
|
||||
shared_inbox_url: acct
|
||||
.object
|
||||
.ap_actor_props
|
||||
.endpoints_endpoint()
|
||||
.and_then(|e| e.shared_inbox_string())
|
||||
.ok(),
|
||||
followers_endpoint: acct.object.ap_actor_props.followers_string()?,
|
||||
avatar_id: None,
|
||||
},
|
||||
)?;
|
||||
|
||||
if let Ok(icon) = acct.object.object_props.icon_image() {
|
||||
if let Ok(url) = icon.object_props.url_string() {
|
||||
let avatar = Media::save_remote(&c.conn, url, &user);
|
||||
|
||||
if let Ok(avatar) = avatar {
|
||||
user.set_avatar(&c.conn, avatar.id)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(user)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsActor<&PlumeRocket> for User {
|
||||
fn get_inbox_url(&self) -> String {
|
||||
self.inbox_url.clone()
|
||||
}
|
||||
|
@ -890,9 +901,10 @@ impl NewUser {
|
|||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use diesel::Connection;
|
||||
use instance::{tests as instance_tests, Instance};
|
||||
use search::tests::get_searcher;
|
||||
use tests::db;
|
||||
use tests::{db, rockets};
|
||||
use Connection as Conn;
|
||||
|
||||
pub(crate) fn fill_database(conn: &Conn) -> Vec<User> {
|
||||
|
@ -932,136 +944,181 @@ pub(crate) mod tests {
|
|||
|
||||
#[test]
|
||||
fn find_by() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
let test_user = NewUser::new_local(
|
||||
conn,
|
||||
"test".to_owned(),
|
||||
"test user".to_owned(),
|
||||
false,
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_name(conn, "test", Instance::get_local(conn).unwrap().id)
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
let test_user = NewUser::new_local(
|
||||
conn,
|
||||
"test".to_owned(),
|
||||
"test user".to_owned(),
|
||||
false,
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_name(conn, "test", Instance::get_local(conn).unwrap().id)
|
||||
.unwrap()
|
||||
.id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_fqn(&r, &test_user.fqn).unwrap().id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_email(conn, "test@example.com").unwrap().id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_ap_url(
|
||||
conn,
|
||||
&format!(
|
||||
"https://{}/@/{}/",
|
||||
Instance::get_local(conn).unwrap().public_domain,
|
||||
"test"
|
||||
)
|
||||
)
|
||||
.unwrap()
|
||||
.id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_fqn(conn, &test_user.fqn).unwrap().id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_email(conn, "test@example.com").unwrap().id
|
||||
);
|
||||
assert_eq!(
|
||||
test_user.id,
|
||||
User::find_by_ap_url(
|
||||
conn,
|
||||
&format!(
|
||||
"https://{}/@/{}/",
|
||||
Instance::get_local(conn).unwrap().public_domain,
|
||||
"test"
|
||||
)
|
||||
)
|
||||
.unwrap()
|
||||
.id
|
||||
);
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn delete() {
|
||||
let conn = &db();
|
||||
let inserted = fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn);
|
||||
|
||||
assert!(User::get(conn, inserted[0].id).is_ok());
|
||||
inserted[0].delete(conn, &get_searcher()).unwrap();
|
||||
assert!(User::get(conn, inserted[0].id).is_err());
|
||||
assert!(User::get(conn, inserted[0].id).is_ok());
|
||||
inserted[0].delete(conn, &get_searcher()).unwrap();
|
||||
assert!(User::get(conn, inserted[0].id).is_err());
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn admin() {
|
||||
let conn = &db();
|
||||
let inserted = fill_database(conn);
|
||||
let local_inst = Instance::get_local(conn).unwrap();
|
||||
let mut i = 0;
|
||||
while local_inst.has_admin(conn).unwrap() {
|
||||
assert!(i < 100); //prevent from looping indefinitelly
|
||||
local_inst
|
||||
.main_admin(conn)
|
||||
.unwrap()
|
||||
.revoke_admin_rights(conn)
|
||||
.unwrap();
|
||||
i += 1;
|
||||
}
|
||||
inserted[0].grant_admin_rights(conn).unwrap();
|
||||
assert_eq!(inserted[0].id, local_inst.main_admin(conn).unwrap().id);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn);
|
||||
let local_inst = Instance::get_local(conn).unwrap();
|
||||
let mut i = 0;
|
||||
while local_inst.has_admin(conn).unwrap() {
|
||||
assert!(i < 100); //prevent from looping indefinitelly
|
||||
local_inst
|
||||
.main_admin(conn)
|
||||
.unwrap()
|
||||
.revoke_admin_rights(conn)
|
||||
.unwrap();
|
||||
i += 1;
|
||||
}
|
||||
inserted[0].grant_admin_rights(conn).unwrap();
|
||||
assert_eq!(inserted[0].id, local_inst.main_admin(conn).unwrap().id);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn update() {
|
||||
let conn = &db();
|
||||
let inserted = fill_database(conn);
|
||||
let updated = inserted[0]
|
||||
.update(
|
||||
conn,
|
||||
"new name".to_owned(),
|
||||
"em@il".to_owned(),
|
||||
"<p>summary</p><script></script>".to_owned(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(updated.display_name, "new name");
|
||||
assert_eq!(updated.email.unwrap(), "em@il");
|
||||
assert_eq!(updated.summary_html.get(), "<p>summary</p>");
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let inserted = fill_database(conn);
|
||||
let updated = inserted[0]
|
||||
.update(
|
||||
conn,
|
||||
"new name".to_owned(),
|
||||
"em@il".to_owned(),
|
||||
"<p>summary</p><script></script>".to_owned(),
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(updated.display_name, "new name");
|
||||
assert_eq!(updated.email.unwrap(), "em@il");
|
||||
assert_eq!(updated.summary_html.get(), "<p>summary</p>");
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn auth() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
let test_user = NewUser::new_local(
|
||||
conn,
|
||||
"test".to_owned(),
|
||||
"test user".to_owned(),
|
||||
false,
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
let test_user = NewUser::new_local(
|
||||
conn,
|
||||
"test".to_owned(),
|
||||
"test user".to_owned(),
|
||||
false,
|
||||
"Hello I'm a test",
|
||||
"test@example.com".to_owned(),
|
||||
User::hash_pass("test_password").unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert!(test_user.auth("test_password"));
|
||||
assert!(!test_user.auth("other_password"));
|
||||
assert!(test_user.auth("test_password"));
|
||||
assert!(!test_user.auth("other_password"));
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_local_page() {
|
||||
let conn = &db();
|
||||
fill_database(conn);
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
fill_database(conn);
|
||||
|
||||
let page = User::get_local_page(conn, (0, 2)).unwrap();
|
||||
assert_eq!(page.len(), 2);
|
||||
assert!(page[0].username <= page[1].username);
|
||||
let page = User::get_local_page(conn, (0, 2)).unwrap();
|
||||
assert_eq!(page.len(), 2);
|
||||
assert!(page[0].username <= page[1].username);
|
||||
|
||||
let mut last_username = User::get_local_page(conn, (0, 1)).unwrap()[0]
|
||||
.username
|
||||
.clone();
|
||||
for i in 1..User::count_local(conn).unwrap() as i32 {
|
||||
let page = User::get_local_page(conn, (i, i + 1)).unwrap();
|
||||
assert_eq!(page.len(), 1);
|
||||
assert!(last_username <= page[0].username);
|
||||
last_username = page[0].username.clone();
|
||||
}
|
||||
assert_eq!(
|
||||
User::get_local_page(conn, (0, User::count_local(conn).unwrap() as i32 + 10))
|
||||
.unwrap()
|
||||
.len() as i64,
|
||||
User::count_local(conn).unwrap()
|
||||
);
|
||||
let mut last_username = User::get_local_page(conn, (0, 1)).unwrap()[0]
|
||||
.username
|
||||
.clone();
|
||||
for i in 1..User::count_local(conn).unwrap() as i32 {
|
||||
let page = User::get_local_page(conn, (i, i + 1)).unwrap();
|
||||
assert_eq!(page.len(), 1);
|
||||
assert!(last_username <= page[0].username);
|
||||
last_username = page[0].username.clone();
|
||||
}
|
||||
assert_eq!(
|
||||
User::get_local_page(conn, (0, User::count_local(conn).unwrap() as i32 + 10))
|
||||
.unwrap()
|
||||
.len() as i64,
|
||||
User::count_local(conn).unwrap()
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn self_federation() {
|
||||
let r = rockets();
|
||||
let conn = &*r.conn;
|
||||
conn.test_transaction::<_, (), _>(|| {
|
||||
let users = fill_database(conn);
|
||||
|
||||
let ap_repr = users[0].to_activity(conn).unwrap();
|
||||
users[0].delete(conn, &*r.searcher).unwrap();
|
||||
let user = User::from_activity(&r, ap_repr).unwrap();
|
||||
|
||||
assert_eq!(user.username, users[0].username);
|
||||
assert_eq!(user.display_name, users[0].display_name);
|
||||
assert_eq!(user.outbox_url, users[0].outbox_url);
|
||||
assert_eq!(user.inbox_url, users[0].inbox_url);
|
||||
assert_eq!(user.instance_id, users[0].instance_id);
|
||||
assert_eq!(user.ap_url, users[0].ap_url);
|
||||
assert_eq!(user.public_key, users[0].public_key);
|
||||
assert_eq!(user.shared_inbox_url, users[0].shared_inbox_url);
|
||||
assert_eq!(user.followers_endpoint, users[0].followers_endpoint);
|
||||
assert_eq!(user.avatar_url(conn), users[0].avatar_url(conn));
|
||||
assert_eq!(user.fqn, users[0].fqn);
|
||||
assert_eq!(user.summary_html, users[0].summary_html);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
58
po/plume-front/af.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 19:54\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Afrikaans\n"
|
||||
"Language: af_ZA\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: af\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
59
po/plume-front/ar.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
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: 2019-04-17 19:54\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\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"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ar\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "العنوان"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "العنوان الثانوي أو الملخص"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "الوسوم"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "الرخصة"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "الغلاف"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "نشر كتابا"
|
57
po/plume-front/bg.po
Normal file
|
@ -0,0 +1,57 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Bulgarian\n"
|
||||
"Language: bg_BG\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: bg\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
57
po/plume-front/ca.po
Normal file
|
@ -0,0 +1,57 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Catalan\n"
|
||||
"Language: ca_ES\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ca\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
58
po/plume-front/cs.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Czech\n"
|
||||
"Language: cs_CZ\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: cs\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Otevřít editor formátovaného textu"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Nadpis"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Podnadpis, nebo shrnutí"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Napište sem svůj článek. Markdown je podporován."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Zbývá kolem {} znaků"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Tagy"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licence"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Titulka"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Tohle je koncept"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Zveřejnit"
|
58
po/plume-front/cy.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-06 15:05\n"
|
||||
"Last-Translator: AnaGelez <ana@gelez.xyz>\n"
|
||||
"Language-Team: Welsh\n"
|
||||
"Language: cy_GB\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 == 3) ? 3 : ((n == 6) ? 4 : 5))));\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: cy\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/da.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Danish\n"
|
||||
"Language: da_DK\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: da\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/de.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: German\n"
|
||||
"Language: de_DE\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: de\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Untertitel oder Übersicht"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Schreibe deinen Artikel hier. Markdown ist unterstützt."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Ungefähr {} Zeichen übrig"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Lizenz"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Einband"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Dies ist ein Entwurf"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Veröffentlichen"
|
58
po/plume-front/el.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Greek\n"
|
||||
"Language: el_GR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: el\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
|
@ -1,53 +1,57 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: plume-front\n"
|
||||
"Project-Id-Version: plume\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
|
||||
"PO-Revision-Date: 2018-06-15 16:33-0700\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: en\n"
|
||||
"PO-Revision-Date: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: English\n"
|
||||
"Language: en_US\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: en\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:110
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:57
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
# plume-front/src/editor.rs:61
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:68
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:46
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:96
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:97
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:100
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:167
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:111
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
|
58
po/plume-front/eo.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Esperanto\n"
|
||||
"Language: eo_UY\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: eo\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Malfermi la riĉan redaktilon"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titolo"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Subtitolo aŭ resumo"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Verku vian artikolon ĉi tie. Markdown estas subtenita."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Proksimume {} signoj restantaj"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Etikedoj"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Permesilo"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Kovro"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Malfinias"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Eldoni"
|
58
po/plume-front/es.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Language: es_ES\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: es-ES\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Abrir el editor de texto enriquecido"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Subtítulo o resumen"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Escriba su artículo aquí. Puede utilizar Markdown."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Quedan unos {} caracteres"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licencia"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Cobertura"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Esto es un borrador"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publicar"
|
58
po/plume-front/fa.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Persian\n"
|
||||
"Language: fa_IR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: fa\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/fi.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Finnish\n"
|
||||
"Language: fi_FI\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: fi\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
|
@ -1,53 +1,58 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: plume-front\n"
|
||||
"Project-Id-Version: plume\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
|
||||
"PO-Revision-Date: 2018-06-15 16:33-0700\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: fr\n"
|
||||
"PO-Revision-Date: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: French\n"
|
||||
"Language: fr_FR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: fr\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:110
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
msgstr "Ouvrir l'éditeur de texte avancé"
|
||||
|
||||
# plume-front/src/editor.rs:57
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
|
||||
# plume-front/src/editor.rs:61
|
||||
msgid "Subtitle or summary"
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Sous-titre ou résumé"
|
||||
|
||||
# plume-front/src/editor.rs:68
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Écrivez votre article ici. Vous pouvez utiliser du Markdown."
|
||||
|
||||
# plume-front/src/editor.rs:46
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
msgstr "Environ {} caractères restant"
|
||||
|
||||
# plume-front/src/editor.rs:96
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
msgstr "Étiquettes"
|
||||
|
||||
# plume-front/src/editor.rs:97
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
msgstr "Licence"
|
||||
|
||||
# plume-front/src/editor.rs:100
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
msgstr "Illustration"
|
||||
|
||||
# plume-front/src/editor.rs:167
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
msgstr "Ceci est un brouillon"
|
||||
|
||||
# plume-front/src/editor.rs:111
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publier"
|
||||
|
|
58
po/plume-front/gl.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Galician\n"
|
||||
"Language: gl_ES\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: gl\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Abra o editor de texto enriquecido"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Subtítulo ou resumo"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Escriba aquí o seu artigo: pode utilizar Markdown."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Dispón de {} caracteres restantes"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licenza"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Portada"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Este é un borrador"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publicar"
|
58
po/plume-front/he.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hebrew\n"
|
||||
"Language: he_IL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: he\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/hi.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:14\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hindi\n"
|
||||
"Language: hi_IN\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hi\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "शीर्षक"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "उपशीर्षक या सारांश"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "अपना आर्टिकल या लेख यहाँ लिखें. Markdown उपलब्ध है."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "लगभग {} अक्षर बाकी हैं"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "टैग्स"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "लाइसेंस"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "पब्लिश करें"
|
59
po/plume-front/hr.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Croatian\n"
|
||||
"Language: hr_HR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hr\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Naslov"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Podnaslov ili sažetak"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Tagovi"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licenca"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Objavi"
|
58
po/plume-front/hu.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"Language: hu_HU\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hu\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/it.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Italian\n"
|
||||
"Language: it_IT\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: it\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Apri il compositore di testo avanzato"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titolo"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Sottotitolo o sommario"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Scrivi qui il tuo articolo. È supportato il Markdown."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Circa {} caratteri rimasti"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Etichette"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licenza"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Copertina"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Questa è una bozza"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Pubblica"
|
58
po/plume-front/ja.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Language: ja_JP\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ja\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "リッチテキストエディターを開く"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "タイトル"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "サブタイトルまたは概要"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "投稿をここに書きます。Markdown がサポートされています。"
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "残り約 {} 文字"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "タグ"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "ライセンス"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "カバー"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "これは下書きです"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "公開"
|
58
po/plume-front/ko.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Korean\n"
|
||||
"Language: ko_KR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ko\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
53
po/plume-front/nb.po
Normal file
|
@ -0,0 +1,53 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: plume-front\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
|
||||
"PO-Revision-Date: 2018-06-15 16:33-0700\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: nb\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"
|
||||
|
||||
# plume-front/src/editor.rs:115
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:145
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:156
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:167
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:243
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:244
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:247
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:267
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:274
|
||||
msgid "Publish"
|
||||
msgstr ""
|
58
po/plume-front/nl.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Language: nl_NL\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: nl\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/no.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Norwegian\n"
|
||||
"Language: no_NO\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: no\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
59
po/plume-front/pl.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Polish\n"
|
||||
"Language: pl_PL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
|
||||
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
|
||||
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: pl\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Otwórz edytor tekstu sformatowanego"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Tytuł"
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Napisz swój artykuł tutaj. Markdown jest obsługiwany."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Pozostało w okolicy {} znaków"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Tagi"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licencja"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Okładka"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "To jest szkic"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Opublikuj"
|
|
@ -12,42 +12,42 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
# plume-front/src/editor.rs:115
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
# plume-front/src/editor.rs:145
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
# plume-front/src/editor.rs:156
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
# plume-front/src/editor.rs:167
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
# plume-front/src/editor.rs:243
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
# plume-front/src/editor.rs:244
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
# plume-front/src/editor.rs:247
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
# plume-front/src/editor.rs:267
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
# plume-front/src/editor.rs:274
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
|
58
po/plume-front/pt.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-18 07:05\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Language: pt_PT\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: pt-PT\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Legenda ou resumo"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Escreva seu artigo aqui. Markdown pode ser usado."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Cerca de {} caracteres restantes"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licença"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Capa"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Isso é um rascunho"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publicar"
|
59
po/plume-front/ro.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Romanian\n"
|
||||
"Language: ro_RO\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n"
|
||||
"%100<20)) ? 1 : 2);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ro\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Deschide editorul de text"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titlu"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Subtitlu sau rezumat"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Scrie articolul tău aici. Markdown este acceptat."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "În apropiere de {} caractere rămase"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Etichete"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licenţă"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Coperta"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Aceasta este o ciornă"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publică"
|
59
po/plume-front/ru.po
Normal file
|
@ -0,0 +1,59 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Russian\n"
|
||||
"Language: ru_RU\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 "
|
||||
"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 "
|
||||
"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ru\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
58
po/plume-front/sk.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Slovak\n"
|
||||
"Language: sk_SK\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: sk\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr "Otvor editor formátovaného textu"
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Nadpis"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Zhrnutie, alebo podnadpis"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Tu napíš svoj článok. Markdown je podporovaný."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Zostáva asi {} znakov"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Štítky"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licencia"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Obálka"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "Toto je koncept"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Zverejniť"
|
58
po/plume-front/sl.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 19:55\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Slovenian\n"
|
||||
"Language: sl_SI\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: sl\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Naslov"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Oznake"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licenca"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr "To je osnutek"
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Objavi"
|
||||
|
58
po/plume-front/sr.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Serbian (Latin)\n"
|
||||
"Language: sr_CS\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: sr-CS\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Naslov"
|
||||
|
||||
# plume-front/src/editor.rs:149
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
58
po/plume-front/sv.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Swedish\n"
|
||||
"Language: sv_SE\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: sv-SE\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
#, fuzzy
|
||||
msgid "Subtitle, or summary"
|
||||
msgstr "Undertitel eller sammanfattning"
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr "Skriv din artikel här. Markdown stöds."
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr "Ungefär {} karaktärer kvar"
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr "Taggar"
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr "Licens"
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr "Omslag"
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr "Publicera"
|
58
po/plume-front/tr.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/uk.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Ukrainian\n"
|
||||
"Language: uk_UA\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: uk\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/vi.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Vietnamese\n"
|
||||
"Language: vi_VN\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: vi\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
58
po/plume-front/zh.po
Normal file
|
@ -0,0 +1,58 @@
|
|||
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: 2019-04-17 18:15\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Language: zh_CN\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: zh-CN\n"
|
||||
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
|
||||
|
||||
# plume-front/src/editor.rs:114
|
||||
msgid "Open the rich text editor"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:143
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:147
|
||||
msgid "Subtitle or summary"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:154
|
||||
msgid "Write your article here. Markdown is supported."
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:165
|
||||
msgid "Around {} characters left"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:228
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:229
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:232
|
||||
msgid "Cover"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:252
|
||||
msgid "This is a draft"
|
||||
msgstr ""
|
||||
|
||||
# plume-front/src/editor.rs:259
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
807
po/plume/af.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:48\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Afrikaans\n"
|
||||
"Language: af_ZA\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: af\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
1408
po/plume/ar.po
828
po/plume/bg.po
Normal file
|
@ -0,0 +1,828 @@
|
|||
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: 2019-04-19 08:17\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Bulgarian\n"
|
||||
"Language: bg_BG\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: bg\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "{0} хареса(ха) вашата статия."
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr "{0} ви спомена(ха)."
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr "{0} подсили(ха) вашата статия."
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr "Вече съществува блог със същото име."
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr "Вие не сте автор на този блог."
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Нова публикация"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr "По избор"
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr "Влез"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr "Потребителско име или имейл"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "Парола"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Конфигурация"
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr "Писти Pluma {0}"
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "Последни статии"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "Aдминистрация"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr "Име"
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr "Позволете на всеки да се регистрира"
|
||||
|
||||
msgid "Short description"
|
||||
msgstr "Кратко описание"
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr "Поддържа се от Markdown"
|
||||
|
||||
msgid "Long description"
|
||||
msgstr "Дълго описание"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr "Лиценз по подразбиране"
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr "Запаметете тези настройките"
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr "Заглавие"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr "Нова статия"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] "Има Един автор в този блог: "
|
||||
msgstr[1] "Има {0} автора в този блог: "
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr "Все още няма публикации."
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr "Нов блог"
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr "Създайте блог"
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr "Създайте блог"
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr "Написано от {0}"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr "Тази статия се разпространява под {0} лиценз."
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] "Едно харесване"
|
||||
msgstr[1] "{0} харесвания"
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr "Това вече не ми харесва"
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr "Добавете вашите"
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] "Едно Подсилване"
|
||||
msgstr[1] "{0} Подсилвания"
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
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 "Comments"
|
||||
msgstr "Коментари"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr "Вашият коментар"
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr "Публикувайте коментар"
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr "Все още няма коментари. Бъдете първите!"
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr "Публикувайте"
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr "Потребителско име"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr "С {0}"
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr "Какво е Pluma?"
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
msgstr "Pluma е децентрализиран двигател за блогове."
|
||||
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr "Отговори"
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Известия"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr "Pluma"
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "Меню"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Контролен панел"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Излез"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "Моят профил"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Влез"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "Регистрация"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr "За тази инстанция"
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "Изходен код"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr "Вашият контролен панел"
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr "Вашият Блог"
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
"Все още нямате блог. Създайте свой собствен или поискайте да се присъедините "
|
||||
"към някой друг."
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr "Започнете нов блог"
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr "Администратор"
|
||||
|
||||
msgid "It is you"
|
||||
msgstr "Това си ти"
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr "Редактиране на вашият профил"
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr "Отворен на {0}"
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr "Редактирайте профила си"
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr "Вашият профил"
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr "Показвано име"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "Електронна поща"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr "Резюме"
|
||||
|
||||
msgid "Update account"
|
||||
msgstr "Актуализиране на профил"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr "Наскоро подсилен"
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr "Създай профил"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr "Потвърждение на парола"
|
||||
|
||||
msgid ""
|
||||
"Apologies, but registrations are closed on this particular instance. You "
|
||||
"can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr "Вътрешна грешка в сървъра"
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr "Възникна грешка от ваша страна."
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
"Извиняваме се за това. Ако смятате, че това е грешка, моля докладвайте я."
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr "Не можахме да намерим тази страница."
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr "Не сте упълномощени."
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
824
po/plume/ca.po
Normal file
|
@ -0,0 +1,824 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Catalan\n"
|
||||
"Language: ca_ES\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ca\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "A {0} l’ha agradat el vostre article."
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr "{0} us ha esmentat."
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Apunt nou"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr "Reinicialització de contrasenya"
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr "Reinicialitza la contrasenya"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr "Adreça electrónica"
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr "Opcional"
|
||||
|
||||
msgid "Send password reset link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check your inbox!"
|
||||
msgstr "Reviseu la vostra safata d’entrada."
|
||||
|
||||
msgid ""
|
||||
"We sent a mail to the address you gave us, with a link to reset your "
|
||||
"password."
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "Contrasenya"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr "Contrasenya nova"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr "Confirmació"
|
||||
|
||||
msgid "Update password"
|
||||
msgstr "Actualitza la contrasenya"
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr "Instàncies"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configuració"
|
||||
|
||||
msgid "Users"
|
||||
msgstr "Usuaris"
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr "Desbloca"
|
||||
|
||||
msgid "Block"
|
||||
msgstr "Bloca"
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr "Quant a {0}"
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "Darrers articles"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr "Us donem la benvinguda a {}"
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "Administració"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr "Cerca avançada"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr "Títol"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr "Autors"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr "Títol del blog"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr "Escrit en aquesta llengua"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Llengua"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr "Publicat segons aquesta llicència"
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr "Resultats de la cerca «{0}»"
|
||||
|
||||
msgid "Search result"
|
||||
msgstr "Resultats de la cerca"
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr "La vostra consulta no ha produït cap resultat"
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr "Edita «{}»"
|
||||
|
||||
msgid "Description"
|
||||
msgstr "Descripció"
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr "Actualitza el blog"
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr "Suprimeix permanentment aquest blog"
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr "Icona per a {}"
|
||||
|
||||
msgid "New article"
|
||||
msgstr "Article nou"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Edita"
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] "Hi ha 1 autor en aquest blog: "
|
||||
msgstr[1] "Hi ha {0} autors en aquest blog: "
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr "Encara no hi ha cap apunt."
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr "Blog nou"
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr "Crea un blog"
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr "Crea un blog"
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr "Articles amb l’etiqueta «{0}»"
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr "Escrit per {0}"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr "Suprimeix aquest article"
|
||||
|
||||
msgid "Draft"
|
||||
msgstr "Esborrany"
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr "Tots els drets reservats."
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr "Això ja no m’agrada"
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
|
||||
"article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr "Comentaris"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr "El vostre comentari"
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr "Envia el comentari"
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr "Publica"
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 ""
|
||||
|
||||
msgid "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Actualitza"
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr "Actualitza o publica"
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "I'm from this instance"
|
||||
msgstr "Quant a aquesta instància"
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr "Nom d’usuari"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr "Mostra-ho tot"
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr "Per {0}"
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr "Què és el Plume?"
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr "Suprimeix aquest comentari"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Cap"
|
||||
|
||||
msgid "No description"
|
||||
msgstr "Cap descripció"
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacions"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "Menú"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Finalitza la sessió"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "El meu compte"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Inicia la sessió"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "Registre"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr "Quant a aquesta instància"
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "Codi font"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr "Puja"
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Suprimeix"
|
||||
|
||||
msgid "Details"
|
||||
msgstr "Detalls"
|
||||
|
||||
msgid "Media details"
|
||||
msgstr "Detalls del fitxer multimèdia"
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr "Torna a la galeria"
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr "Sintaxi Markdown"
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
msgid "Send"
|
||||
msgstr "Envia"
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr "Articles"
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr "Subscriptors"
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr "Subscripcions"
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr "Els vostres blogs"
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr "El vostre perfil"
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "Adreça electrònica"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr "Resum"
|
||||
|
||||
msgid "Update account"
|
||||
msgstr "Actualitza el compte"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
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 ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
853
po/plume/cs.po
Normal file
|
@ -0,0 +1,853 @@
|
|||
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: 2019-04-18 19:40\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Czech\n"
|
||||
"Language: cs_CZ\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: cs\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr "{0} komentoval/a váš článek."
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr "{0} vás odebírá."
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "{0} si oblíbil/a váš článek."
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr "{0} vás zmínil/a."
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr "{0} povýšil/a váš článek."
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr "Avatar uživatele {0}"
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
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:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr "Blog s rovnakým názvem již existuje."
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr "Nemáte oprávnění zmazat tento blog."
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr "Nemáte oprávnění upravovat tento blog."
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
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:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr "Toto médium nelze použít jako banner blogu."
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
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/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:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr "Tento příspěvek ještě není publikován."
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
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:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr "Nejste autorem tohto blogu."
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Nový příspěvek"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr "Upravit {0}"
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
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:51
|
||||
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:181
|
||||
msgid "Password reset"
|
||||
msgstr "Obnovit heslo"
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr "Zde je odkaz na obnovení vášho hesla: {0}"
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr "Vaše heslo bylo úspěšně obnoveno."
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr "Omlouváme se, ale odkaz vypršel. Zkuste to znovu"
|
||||
|
||||
# src/routes/user.rs:136
|
||||
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:244
|
||||
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:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr "Pro úpravu vášho profilu musíte být přihlášeni"
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr "Obnovte své heslo"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr "E-mail"
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr "Nepovinné"
|
||||
|
||||
msgid "Send password reset link"
|
||||
msgstr "Poslat odkaz na obnovení hesla"
|
||||
|
||||
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 "Log in"
|
||||
msgstr "Přihlásit se"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr "Uživatelské jméno, nebo email"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr "Nové heslo"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr "Potvrzení"
|
||||
|
||||
msgid "Update password"
|
||||
msgstr "Aktualizovat heslo"
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr "Správa {0}"
|
||||
|
||||
msgid "Instances"
|
||||
msgstr "Instance"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Nastavení"
|
||||
|
||||
msgid "Users"
|
||||
msgstr "Uživatelé"
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr "Odblokovat"
|
||||
|
||||
msgid "Block"
|
||||
msgstr "Blokovat"
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr "O {0}"
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr "Domov pro <em>{0}</em> lidí"
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr "Co napsali <em>{0}</em> článků"
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr "A jsou napojeni na <em>{0}</em> dalších instancí"
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr "Správcem je"
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr "Beží na Plume {0}"
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr "Všechny články Fediversa"
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "Nejposlednejší články"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr "Vaše zdroje"
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr "Federované zdroje"
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr "Místni zdroje"
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr "Vítejte na {}"
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr "Články z {}"
|
||||
|
||||
msgid "Ban"
|
||||
msgstr "Zakázat"
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr "Ještě tu nic není k vidění. Zkuste odebírat obsah od více lidí."
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "Správa"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr "Pojmenování"
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr "Povolit komukoli se zde zaregistrovat"
|
||||
|
||||
msgid "Short description"
|
||||
msgstr "Stručný popis"
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr "Markdown syntaxe je podporována"
|
||||
|
||||
msgid "Long description"
|
||||
msgstr "Detailní popis"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr "Výchozí licence článků"
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr "Uložit tyhle nastavení"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr "Váš dotaz"
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr "Pokročilé vyhledávání"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr "Nadpis článku odpovídající těmto slovům"
|
||||
|
||||
msgid "Title"
|
||||
msgstr "Nadpis"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr "Podnadpis odpovídající těmto slovům"
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr "Podnadpis"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr "Obsah odpovídající těmto slovům"
|
||||
|
||||
msgid "Body content"
|
||||
msgstr "Tělo článku"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr "Od tohoto data"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr "Do tohoto data"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr "Obsahuje tyto štítky"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Tagy"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr "Zveřejněno na jedné z těchto instancí"
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr "Doména instance"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr "Zveřejněno na jedném z těchto autorů"
|
||||
|
||||
msgid "Authors"
|
||||
msgstr "Autoři"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr "Zveřejněno na jedném z těchto blogů"
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr "Název blogu"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr "Napsané v tomto jazyce"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Jazyk"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr "Publikováno pod touto licenci"
|
||||
|
||||
msgid "Article license"
|
||||
msgstr "Licence článku"
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr "Výsledky hledání pro \"{0}\""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr "Výsledek hledání"
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr "Žádný výsledek nenalzen pro váš dotaz"
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr "Žádné další výsledeky pro váše zadaní"
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr "Upravit \"{}\""
|
||||
|
||||
msgid "Description"
|
||||
msgstr "Popis"
|
||||
|
||||
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"
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr "Ikonka blogu"
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr "Blog banner"
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr "Aktualizovat blog"
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr "Nebezpečná zóna"
|
||||
|
||||
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."
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr "Trvale smazat tento blog"
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr "Nový článek"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Upravit"
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] "Tento blog má jednoho autora: "
|
||||
msgstr[1] "Na tomto blogu jsou {0} autoři: "
|
||||
msgstr[2] "Tento blog má {0} autorů: "
|
||||
msgstr[3] "Tento blog má {0} autorů: "
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr "Ještě zde nejsou k vidění žádné příspěvky."
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr "Nový Blog"
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr "Vytvořit blog"
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr "Vytvořit blog"
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr "Články pod štítkem \"{0}\""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr "Zatím tu nejsou žádné články s takovým štítkem"
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr "Napsal/a {0}"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Jste si jisti?"
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr "Vymazat tento článek"
|
||||
|
||||
msgid "Draft"
|
||||
msgstr "Koncept"
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr "Všechna práva vyhrazena."
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr "Tento článek je pod {0} licencí."
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Odhlásit se z odběru"
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr "Přihlásit se k odběru"
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] "Jedno oblíbení"
|
||||
msgstr[1] "{0} oblíbili"
|
||||
msgstr[2] "{0} oblíbili"
|
||||
msgstr[3] "{0} oblíbili"
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr "Tohle se mi už nelíbí"
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr "Přidejte váš"
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] "Jedno boostnoutí"
|
||||
msgstr[1] "{0} boostnoutí"
|
||||
msgstr[2] "{0} boostnoutí"
|
||||
msgstr[3] "{0} boostnoutí"
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
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 "Comments"
|
||||
msgstr "Komentáře"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr "Varování o obsahu"
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr "Váš komentář"
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr "Odeslat komentář"
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr "Zatím bez komentáře. Buďte první, kdo zareaguje!"
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr "Interagujte s {}"
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr "Pro interakci se přihlaste"
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr "Pro interakci zadejte své úplné uživatelské jméno"
|
||||
|
||||
msgid "Publish"
|
||||
msgstr "Zveřejnit"
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr "Klasický editor (jakékoli změny budou ztraceny)"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr "Nahrát média"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr "Štítky, oddělené čárkami"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr "Licence"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr "Nechte políčko prázdné pro vyhrazení všech práv"
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr "Ilustrace"
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr "Tohle je koncept, neveřejnit ho ještě."
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Aktualizovat"
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr "Aktualizovat, nebo publikovat"
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr "Publikovat svůj příspěvek"
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr "Jsem z téhle instance"
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr "Jsem z jiné instance"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr "Příklad: user@plu.me"
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr "Pokračujte na vaši instanci"
|
||||
|
||||
msgid "View all"
|
||||
msgstr "Zobrazit všechny"
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr "Od {0}"
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr "Co je Plume?"
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr "Vytvořit váš účet"
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr "Přečtěte si podrobná pravidla"
|
||||
|
||||
msgid "Respond"
|
||||
msgstr "Odpovědět"
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr "Odstranit tento komentář"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Žádné"
|
||||
|
||||
msgid "No description"
|
||||
msgstr "Bez popisu"
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Notifikace"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr "Plume"
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "Nabídka"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Nástěnka"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásit se"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "Můj účet"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Přihlásit se"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "Vytvořit účet"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr "O této instanci"
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "Zdrojový kód"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr "Matrix místnost"
|
||||
|
||||
msgid "Your media"
|
||||
msgstr "Vaše média"
|
||||
|
||||
msgid "Upload"
|
||||
msgstr "Nahrát"
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr "Zatím nemáte nahrané žádné média."
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr "Upozornení na obsah: {0}"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
|
||||
msgid "Details"
|
||||
msgstr "Podrobnosti"
|
||||
|
||||
msgid "Media details"
|
||||
msgstr "Podrobnosti média"
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr "Přejít zpět do galerie"
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr "Markdown syntaxe"
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr "Pro vložení tohoto média zkopírujte tento kód do vašich článků:"
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr "Použít jak avatar"
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr "Nahrávaní médií"
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr "Užitečné pro zrakově postižené lidi a také pro informace o licencování"
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr "Ponechat prázdne, pokud žádná není potřebná"
|
||||
|
||||
msgid "File"
|
||||
msgstr "Soubor"
|
||||
|
||||
msgid "Send"
|
||||
msgstr "Odeslat"
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr "Odběry uživatele {0}"
|
||||
|
||||
msgid "Articles"
|
||||
msgstr "Články"
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr "Odběratelé"
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr "Odběry"
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr "Vaše nástěnka"
|
||||
|
||||
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í."
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr "Začít nový blog"
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr "Váše návrhy"
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr "Přejít do galerie"
|
||||
|
||||
msgid "Admin"
|
||||
msgstr "Administrátor"
|
||||
|
||||
msgid "It is you"
|
||||
msgstr "To jste vy"
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr "Upravit profil"
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr "Otevřít na {0}"
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr "Odběratelé uživatele {0}"
|
||||
|
||||
msgid "Edit your account"
|
||||
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 "Upload an avatar"
|
||||
msgstr "Nahrát avatara"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr "Zobrazované jméno"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr "Souhrn"
|
||||
|
||||
msgid "Update account"
|
||||
msgstr "Aktualizovat účet"
|
||||
|
||||
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."
|
||||
|
||||
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."
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom kanál"
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr "Nedávno podpořené"
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr "Vytvořit účet"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
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 "Follow {}"
|
||||
msgstr "Následovat {}"
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr "Pro následování se přihlášte"
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr "Pro následovaní zadejte své úplné uživatelské jméno"
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr "Vnitřní chyba serveru"
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr "Neco se pokazilo na naší strane."
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr "Omlouváme se. Pokud si myslíte, že jde o chybu, prosím nahlašte ji."
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr "Stránka nenalezena"
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr "Tu stránku jsme nemohli najít."
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
msgstr "Odkaz, který vás sem přivedl je asi porušen."
|
||||
|
||||
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 "You are not authorized."
|
||||
msgstr "Nemáte oprávnění."
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr "Obsah, který jste poslali, nelze zpracovat."
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr "Možná to bylo příliš dlouhé."
|
789
po/plume/cy.po
Normal file
|
@ -0,0 +1,789 @@
|
|||
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: 2019-04-06 15:05\n"
|
||||
"Last-Translator: AnaGelez <ana@gelez.xyz>\n"
|
||||
"Language-Team: Welsh\n"
|
||||
"Language: cy_GB\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 == 3) ? 3 : ((n == 6) ? 4 : 5))));\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: cy\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:169
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:214
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:253
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:271
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:47
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:92
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:120
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:138
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:145
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:190
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:47
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:148
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:187
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:287
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description - byline"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions'"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors can manage various blogs, each as an unique 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 "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
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 ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[4] ""
|
||||
msgstr[5] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boost"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[4] ""
|
||||
msgstr[5] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in, or use your Fediverse account to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
msgstr[4] ""
|
||||
msgstr[5] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to like"
|
||||
msgstr ""
|
||||
|
807
po/plume/da.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Danish\n"
|
||||
"Language: da_DK\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: da\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
1490
po/plume/de.po
807
po/plume/el.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Greek\n"
|
||||
"Language: el_GR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: el\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
949
po/plume/en.po
823
po/plume/eo.po
Normal file
|
@ -0,0 +1,823 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Esperanto\n"
|
||||
"Language: eo_UY\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: eo\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr "Vi ne estas permesita redakti ĉi tiun blogon."
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr "Ĉi tiu skribaĵo ankoraŭ ne estas eldonita."
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
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:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr "Vi ne estas la verkisto de ĉi tiu blogo."
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Nova skribaĵo"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr "Ensaluti"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "Pasvorto"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Serĉi"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr "Verkistoj"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr "Blogtitolo"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr "Lingvo"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr "Eldonita sub ĉi tiu permesilo"
|
||||
|
||||
msgid "Article license"
|
||||
msgstr "Artikola permesilo"
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Redakti"
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr "Krei blogon"
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Malaboni"
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr "Aboni"
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
|
||||
"article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr "Eldoni"
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr "Uzantnomo"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr "Respondi"
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Elsaluti"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "Mia konto"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Ensaluti"
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr "Sendi"
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr "Viaj Blogoj"
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr "Ekigi novan blogon"
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr "Administristo"
|
||||
|
||||
msgid "It is you"
|
||||
msgstr "Ĝi estas vi"
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr "Redakti vian profilon"
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr "Malfermi en {0}"
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr "Via profilo"
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "Retpoŝtadreso"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Apologies, but registrations are closed on this particular instance. You "
|
||||
"can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr "Eble ĝi estis tro longa."
|
1396
po/plume/es.po
807
po/plume/fa.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-18 06:16\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Persian\n"
|
||||
"Language: fa_IR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: fa\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
807
po/plume/fi.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Finnish\n"
|
||||
"Language: fi_FI\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: fi\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
1540
po/plume/fr.po
1529
po/plume/gl.po
813
po/plume/he.po
Normal file
|
@ -0,0 +1,813 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hebrew\n"
|
||||
"Language: he_IL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: he\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
826
po/plume/hi.po
Normal file
|
@ -0,0 +1,826 @@
|
|||
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: 2019-04-18 11:41\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hindi\n"
|
||||
"Language: hi_IN\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hi\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr "{0} ने आपके लेख पे कॉमेंट किया है"
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr "{0} ने आपको सब्सक्राइब किया है"
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "{0} ने आपके लेख को लाइक किया"
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr "{0} ने आपको मेंशन किया"
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr "{0} ने आपके आर्टिकल को बूस्ट किया"
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr "{0} का avtar"
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr "नया ब्लॉग बनाने के लिए आपको लोग इन करना होगा"
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr "ये नाम से पहले ही एक ब्लॉग है"
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr "आपको ये ब्लॉग डिलीट करने की अनुमति नहीं है"
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr "आपको ये ब्लॉग में बदलाव करने की अनुमति नहीं है"
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr "इस फोटो को ब्लॉग आइकॉन के लिए इस्तेमाल नहीं कर सकते"
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr "इस media को blog banner के लिए इस्तेमाल नहीं कर सकते"
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr "Post को like करने के लिए आपको log in करना होगा"
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr "Notifications देखने के लिए आपको log in करना होगा"
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr "इस post को publish नहीं किया गया है"
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr "नया post लिखने के लिए आपको log in करना होगा"
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr "आप इस blog के लेखक नहीं हैं"
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "नया post"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr "Edit करें {0}"
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
"आपके अकाउंट के बारे में पर्याप्त जानकारी नहीं मिल पायी. कृपया जांच करें की आपका यूजरनाम "
|
||||
"सही है."
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr "Post reshare करने के लिए आपको log in करना होगा"
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr "पासवर्ड रीसेट करें"
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr "आपका पासवर्ड रिसेट करने का लिंक: {0}"
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr "आपका पासवर्ड रिसेट कर दिया गया है"
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr "क्षमा करें, लेकिन लिंक इस्तेमाल करने की अवधि समाप्त हो चुकी है. फिर कोशिश करें"
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr "डैशबोर्ड पर जाने के लिए, लोग इन करें"
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr "सब्सक्राइब करने के लिए, लोग इन करें"
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr "प्रोफाइल में बदलाव करने के लिए, लोग इन करें"
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr "पासवर्ड रिसेट करें"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr "इ-मेल"
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr "वैकल्पिक"
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr "लौग इन"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr "यूजरनेम या इ-मेल"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "पासवर्ड"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr "नया पासवर्ड"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr "पुष्टीकरण"
|
||||
|
||||
msgid "Update password"
|
||||
msgstr "पासवर्ड अपडेट करें"
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr "{0} का संचालन"
|
||||
|
||||
msgid "Instances"
|
||||
msgstr "इन्सटेंस"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "कॉन्फ़िगरेशन"
|
||||
|
||||
msgid "Users"
|
||||
msgstr "उसेर्स"
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr "अनब्लॉक करें"
|
||||
|
||||
msgid "Block"
|
||||
msgstr "ब्लॉक करें"
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr "{0} के बारे में"
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr "यहाँ <em>{0}</em> यूज़र्स हैं"
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr "जिन्होनें <em>{0}</em> आर्टिकल्स लिखे हैं"
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr "और <em>{0}</em> इन्सटेंसेस से जुड़े हैं"
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr "द्वारा संचालित"
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr "Plume {0} का इस्तेमाल कर रहे हैं"
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr "फेडिवेर्से के सारे आर्टिकल्स"
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "नवीनतम लेख"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr "आपकी फीड"
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr "फ़ेडरेटेड फीड"
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr "लोकल फीड"
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr "{} में स्वागत"
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr "{} के आर्टिकल्स"
|
||||
|
||||
msgid "Ban"
|
||||
msgstr "बन करें"
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr "कंटेंट देखने के लिए अन्य लोगों को सब्सक्राइब करें"
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "संचालन"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr "नाम"
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr "किसी को भी रजिस्टर करने की अनुमति दें"
|
||||
|
||||
msgid "Short description"
|
||||
msgstr "संक्षिप्त वर्णन"
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr "मार्कडौं सिंटेक्स उपलब्ध है"
|
||||
|
||||
msgid "Long description"
|
||||
msgstr "दीर्घ वर्णन"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr "डिफ़ॉल्ट आलेख लायसेंस"
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr "इन सेटिंग्स को सेव करें"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "ढूंढें"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr "आपके प्रश्न"
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr "एडवांस्ड सर्च"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr "सर्च से मैच करने वाले लेख शीर्षक"
|
||||
|
||||
msgid "Title"
|
||||
msgstr "शीर्षक"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr "सर्च से मैच करने वाले लेख उपशीर्षक"
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr "उपशीर्षक-byline"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr "इन शब्दों से मैच करने वाला कंटेंट"
|
||||
|
||||
msgid "Body content"
|
||||
msgstr "बॉडी कंटेंट"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr "इस तारीख से"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr "इस तारीख तक"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr "इन टैग्स से युक्त"
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "टैग्स"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr "इन इन्सटेंसेस में पोस्ट किया गया"
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr "इंस्टैंस डोमेन"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr "इन लेखकों द्वारा पोस्ट किये गए आर्टिकल्स"
|
||||
|
||||
msgid "Authors"
|
||||
msgstr "लेखक"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr "इन ब्लोग्स में से एक ब्लॉग पर पोस्ट किया गया"
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr "ब्लॉग टाइटल"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr "इन भाषाओँ में लिखे गए"
|
||||
|
||||
msgid "Language"
|
||||
msgstr "भाषा"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr "इस लिसेंसे के साथ पब्लिश किया गया"
|
||||
|
||||
msgid "Article license"
|
||||
msgstr "आर्टिकल लाइसेंस"
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr "{0} के लिए सर्च रिजल्ट"
|
||||
|
||||
msgid "Search result"
|
||||
msgstr "सर्च रिजल्ट"
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr "आपकी जांच के लिए रिजल्ट"
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr "आपकी जांच के लिए और रिजल्ट्स नहीं है"
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr "{0} में बदलाव करें"
|
||||
|
||||
msgid "Description"
|
||||
msgstr "वर्णन"
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr "आप गैलरी में फोटो दाल कर, उनका ब्लॉग आइकॉन या बैनर के लिए उपयोग कर सकते हैं"
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr "फोटो अपलोड करें"
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr "ब्लॉग आइकॉन"
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr "ब्लॉग बैनर"
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr "ब्लॉग अपडेट करें"
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr "खतरे का क्षेत्र"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr "सावधानी रखें, यहाँ पे कोई भी किया गया कार्य कैंसिल नहीं किया जा सकता"
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr "इस ब्लॉग को स्थाई रूप से हटाएं"
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr "{} का आइकॉन"
|
||||
|
||||
msgid "New article"
|
||||
msgstr "नया लेख"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
|
||||
"article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr "अपडेट"
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr "अपडेट या पब्लिश"
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "I'm from this instance"
|
||||
msgstr "इंस्टैंस के बारे में जानकारी"
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr "अपना अकाउंट बनाएं"
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "सूचनाएँ"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr "प्लूम"
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "मेंन्यू"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "डैशबोर्ड"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "लॉग आउट"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "मेरा अकाउंट"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "लॉग इन करें"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "अकाउंट रजिस्टर करें"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr "इंस्टैंस के बारे में जानकारी"
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "सोर्स कोड"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr "मैट्रिक्स रूम"
|
||||
|
||||
msgid "Your media"
|
||||
msgstr "आपकी मीडिया"
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr "आपका डैशबोर्ड"
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr "आपके ब्लोग्स"
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr "आपके कोई ब्लोग्स नहीं हैं. आप स्वयं ब्लॉग बना सकते हैं या किसी और ब्लॉग से जुड़ सकते हैं"
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr "नया ब्लॉग बनाएं"
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr "आपके ड्राफ्ट्स"
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr "गैलरी में जाएँ"
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr "अपने अकाउंट में बदलाव करें"
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr "आपकी प्रोफाइल"
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "ईमेल"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr "सारांश"
|
||||
|
||||
msgid "Update account"
|
||||
msgstr "अकाउंट अपडेट करें"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr "सावधानी रखें, यहाँ पे कोई भी किया गया कार्य कैंसिल नहीं किया जा सकता"
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr "खाता रद्द करें"
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr "माफ़ करें, एडमिन होने की वजह से, आप अपना इंस्टैंस नहीं छोड़ सकते"
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Apologies, but registrations are closed on this particular instance. You "
|
||||
"can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
827
po/plume/hr.po
Normal file
|
@ -0,0 +1,827 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Croatian\n"
|
||||
"Language: hr_HR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hr\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr "{0} komentira na vaš članak."
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "{0} se svidio vaš članak."
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr "Ovaj post još nije objavljen."
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr "Ti ne autor ovog bloga."
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Novi članak"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr "Uredi {0}"
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr "Poništavanje zaporke"
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr "Administracija od {0}"
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguracija"
|
||||
|
||||
msgid "Users"
|
||||
msgstr "Korisnici"
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr "Odblokiraj"
|
||||
|
||||
msgid "Block"
|
||||
msgstr "Blokirati"
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr "O {0}"
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "Najnoviji članci"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr "Federalni kanala"
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr "Lokalnog kanala"
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr "Dobrodošli u {0}"
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr "Članci iz {}"
|
||||
|
||||
msgid "Ban"
|
||||
msgstr "Zabraniti"
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "Administracija"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr "Kratki opis"
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr "Markdown sintaksa je podržana"
|
||||
|
||||
msgid "Long description"
|
||||
msgstr "Dugi opis"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Traži"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr "Opasna zona"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
|
||||
"article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Obavijesti"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr "Plume"
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "Izbornik"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Upravljačka ploča"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Odjaviti se"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "Moj račun"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Prijaviti se"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "Registrirajte se"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "Izvorni kod"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr "Članci"
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr "Uredite svoj račun"
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr "Tvoj Profil"
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "E-pošta"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr "Sažetak"
|
||||
|
||||
msgid "Update account"
|
||||
msgstr "Ažuriraj račun"
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr "Izbrišite svoj račun"
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Apologies, but registrations are closed on this particular instance. You "
|
||||
"can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
807
po/plume/hu.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"Language: hu_HU\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: hu\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
1534
po/plume/it.po
1518
po/plume/ja.po
804
po/plume/ko.po
Normal file
|
@ -0,0 +1,804 @@
|
|||
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: 2019-04-18 06:16\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Korean\n"
|
||||
"Language: ko_KR\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ko\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
960
po/plume/nb.po
807
po/plume/nl.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-17 20:49\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Language: nl_NL\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: nl\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
807
po/plume/no.po
Normal file
|
@ -0,0 +1,807 @@
|
|||
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: 2019-04-18 06:16\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Norwegian\n"
|
||||
"Language: no_NO\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-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: no\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr ""
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
1539
po/plume/pl.po
|
@ -40,23 +40,27 @@ msgstr ""
|
|||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:169
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:214
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:253
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:271
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:47
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64,27 +68,31 @@ msgstr ""
|
|||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:92
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:120
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:138
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:145
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:190
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:47
|
||||
# src/routes/posts.rs:630
|
||||
msgid "Couldn't obtain enough information about your account. Please make sure your username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
|
@ -104,70 +112,58 @@ msgstr ""
|
|||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:148
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:187
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:287
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume"
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Menu"
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgid "Send password reset link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgid "Check your inbox!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log Out"
|
||||
msgid "We sent a mail to the address you gave us, with a link to reset your password."
|
||||
msgstr ""
|
||||
|
||||
msgid "My account"
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log In"
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Register"
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
msgid "About this instance"
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Source code"
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
|
@ -188,30 +184,62 @@ msgstr ""
|
|||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ban"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr ""
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description - byline"
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
|
@ -227,183 +255,7 @@ msgstr ""
|
|||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> users"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions'"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors can manage various blogs, each as an unique 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 "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your query"
|
||||
|
@ -495,38 +347,137 @@ msgstr ""
|
|||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Check your inbox!"
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "We sent a mail to the address you gave us, with a link to reset your password."
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send password reset link"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
|
@ -575,146 +526,93 @@ msgstr ""
|
|||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgid "I'm from this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boost"
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in, or use your Fediverse account to interact with this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit comment"
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid CSRF token"
|
||||
msgid "By {0}"
|
||||
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 "What is Plume?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgid "Authors can manage multiple blogs, each as its own website."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
msgid "Articles are also visible on other Plume instances, and you can interact with them directly from other platforms like Mastodon."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgid "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgid "Respond"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgid "Delete this comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgid "Plume"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgid "Log Out"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgid "Log In"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgid "About this instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
|
@ -732,21 +630,6 @@ msgstr ""
|
|||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
|
@ -762,8 +645,155 @@ msgstr ""
|
|||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to boost"
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to like"
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Apologies, but registrations are closed on this particular instance. You can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
||||
|
|
1429
po/plume/pt.po
828
po/plume/ro.po
Normal file
|
@ -0,0 +1,828 @@
|
|||
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: 2019-04-18 06:16\n"
|
||||
"Last-Translator: Ana Gelez (AnaGelez)\n"
|
||||
"Language-Team: Romanian\n"
|
||||
"Language: ro_RO\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n"
|
||||
"%100<20)) ? 1 : 2);\n"
|
||||
"X-Generator: crowdin.com\n"
|
||||
"X-Crowdin-Project: plume\n"
|
||||
"X-Crowdin-Language: ro\n"
|
||||
"X-Crowdin-File: /master/po/plume/plume.pot\n"
|
||||
|
||||
# src/template_utils.rs:68
|
||||
msgid "{0} commented on your article."
|
||||
msgstr "{0} a comentat pe articolul tău."
|
||||
|
||||
# src/template_utils.rs:69
|
||||
msgid "{0} is subscribed to you."
|
||||
msgstr "{0} este abonat la tine."
|
||||
|
||||
# src/template_utils.rs:70
|
||||
msgid "{0} liked your article."
|
||||
msgstr "{0} i-a plăcut articolul tău."
|
||||
|
||||
# src/template_utils.rs:71
|
||||
msgid "{0} mentioned you."
|
||||
msgstr "{0} te-a menționat."
|
||||
|
||||
# src/template_utils.rs:72
|
||||
msgid "{0} boosted your article."
|
||||
msgstr "{0} impulsionat articolul tău."
|
||||
|
||||
# src/template_utils.rs:108
|
||||
msgid "{0}'s avatar"
|
||||
msgstr "Avatarul lui {0}"
|
||||
|
||||
# src/routes/blogs.rs:70
|
||||
msgid "To create a new blog, you need to be logged in"
|
||||
msgstr "Pentru a crea un nou blog, trebuie sa fii logat"
|
||||
|
||||
# src/routes/blogs.rs:109
|
||||
msgid "A blog with the same name already exists."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:172
|
||||
msgid "You are not allowed to delete this blog."
|
||||
msgstr "Nu aveți permisiunea de a șterge acest blog."
|
||||
|
||||
# src/routes/blogs.rs:217
|
||||
msgid "You are not allowed to edit this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:262
|
||||
msgid "You can't use this media as a blog icon."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/blogs.rs:280
|
||||
msgid "You can't use this media as a blog banner."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/likes.rs:51
|
||||
msgid "To like a post, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/notifications.rs:29
|
||||
msgid "To see your notifications, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:93
|
||||
msgid "This post isn't published yet."
|
||||
msgstr "Acest post nu a fost publicată încă."
|
||||
|
||||
# src/routes/posts.rs:122
|
||||
msgid "To write a new post, you need to be logged in"
|
||||
msgstr "Pentru a scrie un post nou, trebuie să fii logat"
|
||||
|
||||
# src/routes/posts.rs:140
|
||||
msgid "You are not an author of this blog."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/posts.rs:147
|
||||
msgid "New post"
|
||||
msgstr "Postare nouă"
|
||||
|
||||
# src/routes/posts.rs:192
|
||||
msgid "Edit {0}"
|
||||
msgstr "Editare {0}"
|
||||
|
||||
# src/routes/posts.rs:630
|
||||
msgid ""
|
||||
"Couldn't obtain enough information about your account. Please make sure your "
|
||||
"username is correct."
|
||||
msgstr ""
|
||||
|
||||
# src/routes/reshares.rs:51
|
||||
msgid "To reshare a post, you need to be logged in"
|
||||
msgstr "Pentru a redistribui un post, trebuie să fii logat"
|
||||
|
||||
# src/routes/session.rs:181
|
||||
msgid "Password reset"
|
||||
msgstr "Resetare parolă"
|
||||
|
||||
# src/routes/session.rs:182
|
||||
msgid "Here is the link to reset your password: {0}"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/session.rs:259
|
||||
msgid "Your password was successfully reset."
|
||||
msgstr "Parola dumneavoastră a fost resetată cu succes."
|
||||
|
||||
# src/routes/session.rs:263
|
||||
msgid "Sorry, but the link expired. Try again"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:136
|
||||
msgid "To access your dashboard, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:244
|
||||
msgid "To subscribe to someone, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
# src/routes/user.rs:344
|
||||
msgid "To edit your profile, you need to be logged in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:220
|
||||
msgid "Optional"
|
||||
msgstr "Opţional"
|
||||
|
||||
msgid "Send password reset link"
|
||||
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 "Log in"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username, or email"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password"
|
||||
msgstr "Parolă"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration of {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instances"
|
||||
msgstr "Instanțe"
|
||||
|
||||
msgid "Configuration"
|
||||
msgstr "Configurare"
|
||||
|
||||
msgid "Users"
|
||||
msgstr "Utilizatori"
|
||||
|
||||
msgid "Unblock"
|
||||
msgstr "Deblochează"
|
||||
|
||||
msgid "Block"
|
||||
msgstr "Bloc"
|
||||
|
||||
msgid "About {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Home to <em>{0}</em> people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who wrote <em>{0}</em> articles"
|
||||
msgstr ""
|
||||
|
||||
msgid "And are connected to <em>{0}</em> other instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administred by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Runs Plume {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "All the articles of the Fediverse"
|
||||
msgstr "Toate articolele Fediverse"
|
||||
|
||||
msgid "Latest articles"
|
||||
msgstr "Ultimele articole"
|
||||
|
||||
msgid "Your feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Federated feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Local feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Welcome to {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles from {}"
|
||||
msgstr "Articolele de la {}"
|
||||
|
||||
msgid "Ban"
|
||||
msgstr "Interzice"
|
||||
|
||||
msgid "Nothing to see here yet. Try subscribing to more people."
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration"
|
||||
msgstr "Administrație"
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Name"
|
||||
msgstr "Nume"
|
||||
|
||||
msgid "Allow anyone to register here"
|
||||
msgstr ""
|
||||
|
||||
msgid "Short description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax is supported"
|
||||
msgstr ""
|
||||
|
||||
msgid "Long description"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Default article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save these settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Caută"
|
||||
|
||||
msgid "Your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced search"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Article title matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Title"
|
||||
msgstr "Titlu"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Subtitle matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Subtitle - byline"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Content matching these words"
|
||||
msgstr ""
|
||||
|
||||
msgid "Body content"
|
||||
msgstr "Conţinut de corp"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "From this date"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "To this date"
|
||||
msgstr "La această dată"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Containing these tags"
|
||||
msgstr ""
|
||||
|
||||
msgid "Tags"
|
||||
msgstr "Etichete"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these instances"
|
||||
msgstr ""
|
||||
|
||||
msgid "Instance domain"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted by one of these authors"
|
||||
msgstr ""
|
||||
|
||||
msgid "Authors"
|
||||
msgstr "Autori"
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Posted on one of these blogs"
|
||||
msgstr "Postat pe unul dintre aceste bloguri"
|
||||
|
||||
msgid "Blog title"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Written in this language"
|
||||
msgstr "Scris în această limbă"
|
||||
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:305
|
||||
msgid "Published under this license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Article license"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Search result"
|
||||
msgstr ""
|
||||
|
||||
msgid "No result for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "No more results for your query"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit \"{}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can upload images to your gallery, to use them as blog icons, or banners."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload images"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "Blog banner"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Danger zone"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be reversed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Permanently delete this blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "{}'s icon"
|
||||
msgstr ""
|
||||
|
||||
msgid "New article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editare"
|
||||
|
||||
msgid "There's one author on this blog: "
|
||||
msgid_plural "There are {0} authors on this blog: "
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "No posts to see here yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "New Blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles tagged \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "There are currently no articles with such a tag"
|
||||
msgstr ""
|
||||
|
||||
msgid "Written by {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Sînteți sigur?"
|
||||
|
||||
msgid "Delete this article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Draft"
|
||||
msgstr "Ciornă"
|
||||
|
||||
msgid "All rights reserved."
|
||||
msgstr ""
|
||||
|
||||
msgid "This article is under the {0} license."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Dezabonare"
|
||||
|
||||
msgid "Subscribe"
|
||||
msgstr "Abonare"
|
||||
|
||||
msgid "One like"
|
||||
msgid_plural "{0} likes"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "I don't like this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add yours"
|
||||
msgstr ""
|
||||
|
||||
msgid "One boost"
|
||||
msgid_plural "{0} boosts"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
msgid "I don't want to boost this anymore"
|
||||
msgstr ""
|
||||
|
||||
msgid "Boost"
|
||||
msgstr "Boost"
|
||||
|
||||
msgid ""
|
||||
"{0}Log in{1}, or {2}use your Fediverse account{3} to interact with this "
|
||||
"article"
|
||||
msgstr ""
|
||||
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Content warning"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your comment"
|
||||
msgstr "Comentariul tău"
|
||||
|
||||
msgid "Submit comment"
|
||||
msgstr ""
|
||||
|
||||
msgid "No comments yet. Be the first to react!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Interact with {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to interact"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic editor (any changes will be lost)"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Subtitle"
|
||||
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 "Upload media"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Tags, separated by commas"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Leave it empty to reserve all rights"
|
||||
msgstr ""
|
||||
|
||||
msgid "Illustration"
|
||||
msgstr "Ilustraţie"
|
||||
|
||||
msgid "This is a draft, don't publish it yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Update"
|
||||
msgstr "Actualizare"
|
||||
|
||||
msgid "Update, or publish"
|
||||
msgstr ""
|
||||
|
||||
msgid "Publish your post"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "I'm from this instance"
|
||||
msgstr "Despre această instanță"
|
||||
|
||||
msgid "I'm from another instance"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Username"
|
||||
msgstr "Nume utilizator"
|
||||
|
||||
# src/template_utils.rs:225
|
||||
msgid "Example: user@plu.me"
|
||||
msgstr ""
|
||||
|
||||
msgid "Continue to your instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "View all"
|
||||
msgstr ""
|
||||
|
||||
msgid "By {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "What is Plume?"
|
||||
msgstr "Ce este Plume?"
|
||||
|
||||
msgid "Plume is a decentralized blogging engine."
|
||||
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 "Create your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read the detailed rules"
|
||||
msgstr ""
|
||||
|
||||
msgid "Respond"
|
||||
msgstr "Răspuns"
|
||||
|
||||
msgid "Delete this comment"
|
||||
msgstr "Şterge comentariul"
|
||||
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
msgid "Notifications"
|
||||
msgstr "Notificări"
|
||||
|
||||
msgid "Plume"
|
||||
msgstr "Plume"
|
||||
|
||||
msgid "Menu"
|
||||
msgstr "Meniu"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Tablou de bord"
|
||||
|
||||
msgid "Log Out"
|
||||
msgstr "Deconectare"
|
||||
|
||||
msgid "My account"
|
||||
msgstr "Contul meu"
|
||||
|
||||
msgid "Log In"
|
||||
msgstr "Autentificare"
|
||||
|
||||
msgid "Register"
|
||||
msgstr "Înregistrare"
|
||||
|
||||
msgid "About this instance"
|
||||
msgstr "Despre această instanță"
|
||||
|
||||
msgid "Source code"
|
||||
msgstr "Cod sursă"
|
||||
|
||||
msgid "Matrix room"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your media"
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any media yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Content warning: {0}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media details"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go back to the gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Markdown syntax"
|
||||
msgstr ""
|
||||
|
||||
msgid "Copy it into your articles, to insert this media:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use as an avatar"
|
||||
msgstr ""
|
||||
|
||||
msgid "Media upload"
|
||||
msgstr ""
|
||||
|
||||
msgid "Useful for visually impaired people, as well as licensing information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave it empty, if none is needed"
|
||||
msgstr ""
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
msgid "{0}'s subscriptions"
|
||||
msgstr ""
|
||||
|
||||
msgid "Articles"
|
||||
msgstr "Articole"
|
||||
|
||||
msgid "Subscribers"
|
||||
msgstr "Abonaţi"
|
||||
|
||||
msgid "Subscriptions"
|
||||
msgstr "Abonamente"
|
||||
|
||||
msgid "Your Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Blogs"
|
||||
msgstr ""
|
||||
|
||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Start a new blog"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Drafts"
|
||||
msgstr ""
|
||||
|
||||
msgid "Go to your gallery"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
msgid "It is you"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your profile"
|
||||
msgstr "Editează-ți profilul"
|
||||
|
||||
msgid "Open on {0}"
|
||||
msgstr "Deschide la {0}"
|
||||
|
||||
msgid "{0}'s subscribers"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your Profile"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To change your avatar, upload it to your gallery and then select from there."
|
||||
msgstr ""
|
||||
|
||||
msgid "Upload an avatar"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
msgid "Update account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Be very careful, any action taken here can't be cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete your account"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, but as an admin, you can't leave your own instance."
|
||||
msgstr ""
|
||||
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Recently boosted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create an account"
|
||||
msgstr ""
|
||||
|
||||
# src/template_utils.rs:217
|
||||
msgid "Password confirmation"
|
||||
msgstr "Confirmarea parolei"
|
||||
|
||||
msgid ""
|
||||
"Apologies, but registrations are closed on this particular instance. You "
|
||||
"can, however, find a different one."
|
||||
msgstr ""
|
||||
|
||||
msgid "Follow {}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Login to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter your full username to follow"
|
||||
msgstr ""
|
||||
|
||||
msgid "Internal server error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Something broke on our side."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||
msgstr ""
|
||||
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "We couldn't find this page."
|
||||
msgstr ""
|
||||
|
||||
msgid "The link that led you here may be broken."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
msgid "You are not authorized."
|
||||
msgstr ""
|
||||
|
||||
msgid "The content you sent can't be processed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maybe it was too long."
|
||||
msgstr ""
|
First return a
Result<Blog, _>
, optional convert it to aResult<Option<Blog>,...>
so that if the error is not found, we can fetch the blog instead of not knowing it ever, but if the error is anything else, it's still an error