Compare commits

...

112 Commits

Author SHA1 Message Date
KitaitiMakoto 5885cb5b09 Merge pull request 'Release 0.6.0' (#855) from release0.6.0 into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/855
2020-12-29 07:31:59 +00:00
Kitaiti Makoto f5ca464b16 Fix Matrix room ID in README 2020-12-29 16:29:43 +09:00
Kitaiti Makoto 1c40d5d3bc Add release date to CHANGELOG 2020-12-29 16:27:29 +09:00
Kitaiti Makoto 7e1abc527f Re-version to v0.6.0 2020-12-29 16:27:20 +09:00
KitaitiMakoto 39b2ef72fd Merge pull request 'Update CHANGELOG' (#854) from changelog into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/854
2020-12-28 13:19:41 +00:00
Kitaiti Makoto 17b081a21f Mark 0.6.0 unreleased 2020-12-28 22:18:46 +09:00
Kitaiti Makoto c482b1b552 Run cargo fmt 2020-12-28 22:15:45 +09:00
Kitaiti Makoto 8b16b9aaa4 Add changelog about support for RTL languages 2020-12-28 22:15:14 +09:00
KitaitiMakoto 11acc4172c Merge pull request 'add support for right to left languages in post content' (#853) from bidi-md into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/853
Reviewed-by: KitaitiMakoto <kitaitimakoto@noreply@joinplu.me>
2020-12-28 12:22:24 +00:00
Trinity Pointard 6187c62cb3 add bidi via forked pulldown-cmark 2020-12-27 21:02:37 +01:00
Trinity Pointard d6b5b9a721 upgrade to pulldown v0.8 2020-12-27 20:38:23 +01:00
KitaitiMakoto 80675f85f3 Merge pull request 'resynth1943/patch-1' (#852) from resynth1943/patch-1 into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/852
2020-12-27 16:44:10 +00:00
Resynth 07a6be424f Update alias 2020-12-26 12:48:39 +00:00
KitaitiMakoto 8cc56d8d81 Merge pull request 'Validate proofing for all activities' (#851) from prevent-spoof into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/851
2020-12-24 06:23:49 +00:00
Resynth f8cabcc904 Change riot.im link to matrix.to 2020-12-23 20:59:22 +00:00
Kitaiti Makoto d6a946f5b9 Validate spoofing for all activities 2020-12-22 16:31:12 +09:00
Kitaiti Makoto 2a5a2ec4d2 (cargo-release) start next development iteration {{next_version}} 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 106e9417d3 (cargo-release) version {{version}} 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 2660efec16 Define tag-name for cargo-release 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 1eaa5a6e31 Add pre-release-hook to release.toml of subcrates to prevent running
one of root crate
2020-12-19 11:24:59 +00:00
Kitaiti Makoto b2c26f03e8 Pull master branch from Crowdin 2020-12-19 11:24:59 +00:00
Kitaiti Makoto a75cdaa870 Move security fix to next release in CHANGELOG 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 2047355d46 Validate attributedTo in the case it is an object 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 17bbcd1a4b Add changelog about security fix 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 5c8170a97d Validate spoofing of Create activity 2020-12-19 11:24:59 +00:00
Kitaiti Makoto beaeaf743a Add test for preventing spoofing 2020-12-19 11:24:59 +00:00
Kitaiti Makoto fe641620a6 Update translations 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 3e1a6e61ad Add *.pot 2020-12-19 11:24:59 +00:00
Kitaiti Makoto 45b46838ae Merge branch 'main' of git.joinplu.me:Plume/Plume into main 2020-12-19 07:26:11 +09:00
Kitaiti Makoto 46cdde8687 (cargo-release) start next development iteration {{next_version}} 2020-12-19 07:22:24 +09:00
Kitaiti Makoto 6b0dfb729c (cargo-release) version {{version}} 2020-12-19 07:22:19 +09:00
Kitaiti Makoto 75a4d1abf1 Define tag-name for cargo-release 2020-12-19 07:03:40 +09:00
Kitaiti Makoto 984c0cda6b Add pre-release-hook to release.toml of subcrates to prevent running
one of root crate
2020-12-19 06:57:09 +09:00
Kitaiti Makoto 902612a470 Pull master branch from Crowdin 2020-12-19 06:21:59 +09:00
Kitaiti Makoto e311d4d423 Move security fix to next release in CHANGELOG 2020-12-19 06:04:23 +09:00
Kitaiti Makoto aa33c8e7d3 Merge branch 'validate-attributed-to' into main 2020-12-19 06:01:45 +09:00
Kitaiti Makoto 60e6d49319 Update translations 2020-12-19 05:59:58 +09:00
Kitaiti Makoto 6dbd9b76fb Add *.pot 2020-12-19 05:56:36 +09:00
KitaitiMakoto e3877d3022 Fill changelogs for the next release (#842)
Clarify purpose of adding Vazir font

Fill changelogs for the next release

Co-authored-by: Kitaiti Makoto <KitaitiMakoto@gmail.com>
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/842
2020-12-18 14:30:51 +00:00
KitaitiMakoto 4c11df65dc Merge pull request 'Pull request template' (#848) from pr-template into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/848
2020-12-13 10:03:21 +00:00
Kitaiti Makoto f8cfb8cacf Move GitHub pull request template 2020-12-13 19:01:55 +09:00
Kitaiti Makoto 9a7e10b560 Merge branch 'main' of git.joinplu.me:Plume/Plume into main 2020-12-13 19:01:16 +09:00
KitaitiMakoto e131330175 Add guide to GitHub pull request (#847)
Add guide to pull request

Co-authored-by: Kitaiti Makoto <KitaitiMakoto@gmail.com>
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/847
2020-12-13 09:57:48 +00:00
KITAITI Makoto b9066cb7d0 Update issue templates
Guide to use Gitea issues.
2020-12-13 18:50:50 +09:00
KitaitiMakoto 4c4d9fafd5 Merge pull request 'Fix CI environment' (#843) from fix-ci-env into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/843
2020-12-10 16:31:16 +00:00
Kitaiti Makoto bbdf2a8293 Merge branch 'main' into validate-attributed-to 2020-12-11 01:14:22 +09:00
KitaitiMakoto 0d3e1a233f Merge pull request 'Update Cargo.lock' (#844) from cargo-lock into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/844
2020-12-10 16:13:37 +00:00
Kitaiti Makoto 712bc2afbe Update Cargo.lock 2020-12-11 01:12:15 +09:00
Kitaiti Makoto 2eadb80435 Validate attributedTo in the case it is an object 2020-12-11 00:35:20 +09:00
Kitaiti Makoto de05b9e176 Add changelog about security fix 2020-12-09 23:45:56 +09:00
Kitaiti Makoto 5bf1e81f0b Merge branch 'main' into validate-attributed-to 2020-12-09 23:43:29 +09:00
Kitaiti Makoto 55abbff9b8 Use Caddy v2 on build env 2020-12-08 21:51:09 +09:00
Kitaiti Makoto 5f89401a7c Update Rust on buildenv image 2020-12-08 20:06:21 +09:00
KitaitiMakoto 7bd3c1b01e Merge pull request 'Fix #763 Update Dockerfile.dev' (#841) from update-dockerfile-dev into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/841
2020-12-07 02:06:00 +00:00
KitaitiMakoto 961806247c Merge branch 'main' into update-dockerfile-dev 2020-12-07 02:05:34 +00:00
Kitaiti Makoto ac7ffae121 Update plumeorg/plume-buildenv used on CI 2020-12-07 07:50:33 +09:00
Kitaiti Makoto 5321f3cf18 Add clang dependency in Dockerfile.dev 2020-12-07 07:47:11 +09:00
KitaitiMakoto 5099a00c6b Merge pull request 'better-caching' (#840) from better-caching into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/840
2020-12-06 17:32:33 +00:00
KitaitiMakoto d44c034f6a Merge branch 'main' into better-caching 2020-12-06 17:31:53 +00:00
KitaitiMakoto 963e742dcf Merge pull request 'Run cargo fmt' (#839) from fmt into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/839
2020-12-06 17:05:39 +00:00
Kitaiti Makoto 50462204e8 Run cargo fmt 2020-12-07 02:04:37 +09:00
KitaitiMakoto 174ed738bd Merge pull request 'Update Docker image for testing' (#838) from update-build-image into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/838
2020-12-06 17:02:22 +00:00
Kitaiti Makoto f8d098f353 Update Docker image for testing 2020-12-07 01:58:41 +09:00
KitaitiMakoto f5b18dffaf cargo release helper (again) (#835)
remove tag-prefix deletion

as discussed here: https://github.com/igalic/Plume/pull/1

Update all versions numbers

Update Crowdin config to v3 + Pull translations with cargo release

Follow a more standard CHANGELOG format

add release.toml configuration file for cargo-release

and also add overrides in all other crates, since we only have one
CHANGELOG.md: https://github.com/sunng87/cargo-release/issues/205
we might wanna have that looked at or fixed

ignore .vscode/

add / backfill Changelog.md

Co-authored-by: Mina Galić <me+git@igalic.co>
Co-authored-by: Ana Gelez <ana@gelez.xyz>
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/835
2020-12-06 15:52:27 +00:00
KitaitiMakoto 002d1f1720 Merge pull request 'Update distro of Docker image for testing' (#834) from test-buster into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/834
2020-12-06 13:28:54 +00:00
Kitaiti Makoto 23a5634035 Update distro of Docker image for testing 2020-12-06 22:26:30 +09:00
Kitaiti Makoto 5cd8ae9106 Validate spoofing of Create activity 2020-12-03 19:20:10 +09:00
Kitaiti Makoto 350697f89a Run cargo fmt 2020-12-03 19:20:10 +09:00
Kitaiti Makoto 569979374f Add test for preventing spoofing 2020-12-03 19:20:10 +09:00
KitaitiMakoto 3c666080a9 Merge pull request 'Keep tags as-is' (#832) from KitaitiMakoto/Plume:keep-tag into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/832
Reviewed-by: kiwii <kiwii@noreply@joinplu.me>
2020-11-22 16:21:42 +00:00
Kitaiti Makoto 4e6d7b70cf Keep tags as-is 2020-11-22 22:24:43 +09:00
kiwii a59f167771 Merge pull request 'PR #818 from Github' (#831) from gh-pr-818 into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/831
2020-11-22 11:45:47 +00:00
Ana Gelez f28ab19dc0 Merge branch 'serra-allgood/#754-display-error-for-duplicated-blocklist-email' of https://github.com/serra-allgood/Plume into gh-pr-818 2020-11-22 12:43:46 +01:00
KitaitiMakoto 6dd4080d65 Merge pull request 'Remove link to unimplemented page(timeline edit)' (#827) from KitaitiMakoto/Plume:feed-edit-button into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/827
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-11-15 17:10:55 +00:00
Kitaiti Makoto eac76e6806 Merge remote-tracking branch 'upstream/main' into feed-edit-button 2020-11-12 00:05:42 +09:00
trinity-1686a 0cd26dfbf4 fix test following ldap udpate
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/828
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-10-08 19:18:04 +00:00
Trinity Pointard 3de009713d try fixing clippy and fmt 2020-10-08 20:24:03 +02:00
Trinity Pointard 69bcb01715 fix test following ldap udpate 2020-10-08 19:59:54 +02:00
trinity-1686a 9ec2d93f50 implement login via LDAP
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/826
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-10-08 16:11:35 +00:00
Trinity Pointard 4da9b24cb1 cargo fmt 2020-10-07 23:40:27 +02:00
Trinity Pointard f40634aa97 address comments 2020-10-07 23:39:38 +02:00
Kitaiti Makoto 83282e0736 Remove link to unimplemented page 2020-10-06 19:47:35 +09:00
Serra Allgood 43fde90387 Fix displaying not found page when submitting a duplicated blocklist email
Signed-off-by: Serra Allgood <serra@allgood.dev>
2020-10-05 20:17:30 -07:00
Trinity Pointard ccba8163c9 fix compilation issue with cli 2020-10-04 23:53:14 +02:00
Trinity Pointard 8975b0f9e9 cargo fmt 2020-10-04 12:18:54 +02:00
Trinity Pointard d626f3366d add support for ldap 2020-10-04 12:18:22 +02:00
Trinity Pointard b24f195e10 refactor login
first step toward ldap
should have no functionnal change
2020-10-03 13:21:31 +02:00
Mina Galić 003dcf861a Merge pull request 'CSS Fix: My title is displayed at the wrong position on Webkit browsers' (#825) from quentin/Plume:pr/flex into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/825
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-09-29 07:15:06 +00:00
Quentin Dufour 5d8efa77a3 Fix title 2020-09-25 11:19:24 +02:00
kiwii fb6d49cc6e Merge pull request 'GPU acceleration for the mobile menu' (#818) from gpu-acceleration into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/818
Reviewed-by: kiwii <kiwii@noreply@joinplu.me>
2020-08-27 10:29:34 +00:00
Mina Galić 48776939f4 Merge branch 'main' into gpu-acceleration 2020-08-19 19:53:39 +00:00
Marek Ľach 104b6c1d0c GPU acceleration for the mobile menu
Reimplements #810, but for all browsers.
2020-08-19 21:34:07 +02:00
Mina Galić 3881927550 Merge pull request 'mobile-margins' (#817) from mobile-margins into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/817
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-08-19 11:35:04 +00:00
Ana Gelez 0bec13edc0 Improve responsiveness 2020-08-11 20:13:27 +02:00
Ana Gelez 191d6da486 Move header-related style to _header.scss
It seems to fix the overflowing menu items on small screens too
2020-08-11 20:13:27 +02:00
kiwii 9aaff1a484 Merge pull request 'Use result of local storage insert operation to suppress Clippy' (#810) from KitaitiMakoto/Plume:suppress-clippy into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/810
Reviewed-by: kiwii <kiwii@noreply@joinplu.me>
2020-07-25 17:28:26 +00:00
Kitaiti Makoto 36fd55a7e4 Use result of local storage insert operation to suppress Clippy 2020-07-25 20:13:41 +09:00
kiwii fc474bf8d1 Merge pull request '[BUG FIX]Make it possible to switch to rich text editor' (#808) from KitaitiMakoto/Plume:richtexteditor into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/808
Reviewed-by: kiwii <kiwii@noreply@joinplu.me>
2020-07-23 18:25:53 +00:00
Kitaiti Makoto a050deb557 [BUG FIX]Make it possible to switch to rich text editor 2020-07-23 23:36:09 +09:00
kiwii 6de9a1f1c8 Merge pull request 'Recreate search index if its format is outdated' (#802) from KitaitiMakoto/Plume:invalid-index into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/802
Reviewed-by: Mina Galić <me+git@igalic.co>
2020-07-19 12:04:43 +00:00
Kitaiti Makoto 5e30bede40 Don't care about needless return value of closures 2020-07-19 08:24:17 +09:00
Kitaiti Makoto 5cca66b346 Add action user can take to error message 2020-07-19 07:16:34 +09:00
Kitaiti Makoto 484659fde2 Run cargo fmt 2020-07-18 22:52:39 +09:00
Kitaiti Makoto 5fc827c1c9 Re-initialize search index when recreating is failed 2020-07-18 21:00:58 +09:00
Kitaiti Makoto 50753b3a65 Recreate search index if its format is outdated 2020-07-18 09:40:58 +09:00
Kitaiti Makoto c5d03d300b Cause IndexInvalidDataError when search index is invalid 2020-07-18 09:40:47 +09:00
kiwii 010eac6c4a Merge pull request 'upgrade rocket* to the latest stable' (#800) from igalic/Plume:update/rocket into main
Reviewed-on: https://git.joinplu.me/Plume/Plume/pulls/800
Reviewed-by: kiwii <kiwii@noreply@joinplu.me>
2020-07-17 13:39:12 +00:00
Mina Galić a107d35492 upgrade rocket* to the latest stable
before we embark on upgrading to async, and all the refactoring that
this will bring on us (see #797 & #799), we should keep our `main`
branch as stable and current as possible.
Let's start by upgrading rocket and its dependencies.
2020-07-17 09:38:55 +02:00
Kitaiti Makoto f9beb2383b Update lindera-tantivy to v0.1.3 2020-07-05 17:59:51 +02:00
Chosto 7e78cffcaa Bump Docker base images to buster flavor (#797) 2020-07-02 12:46:56 +02:00
Ana Gelez 719fec0828 Add a comment 2020-06-25 22:26:44 +02:00
Ana Gelez 90fdade566 Better caching
Based on @trinity-1686a's patch: https://github.com/Plume-org/Plume/issues/786#issuecomment-647170325
2020-06-25 22:20:31 +02:00
134 changed files with 27117 additions and 20734 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ executors:
type: boolean
default: false
docker:
- image: plumeorg/plume-buildenv:v0.0.9
- image: plumeorg/plume-buildenv:v0.3.0
- image: <<#parameters.postgres>>circleci/postgres:9.6-alpine<</parameters.postgres>><<^parameters.postgres>>alpine:latest<</parameters.postgres>>
environment:
POSTGRES_USER: postgres
+2 -5
View File
@@ -1,6 +1,3 @@
localhost:443 {
proxy / localhost:7878 {
transparent
}
tls self_signed
localhost {
reverse_proxy localhost:7878
}
+7 -5
View File
@@ -1,14 +1,17 @@
FROM debian:stretch-20190326
FROM debian:buster-20201117
ENV PATH="/root/.cargo/bin:${PATH}"
#install native/circleci/build dependancies
RUN apt update &&\
apt install -y --no-install-recommends git ssh tar gzip ca-certificates default-jre&&\
apt install -y --no-install-recommends binutils-dev build-essential cmake curl gcc gettext git libcurl4-openssl-dev libdw-dev libelf-dev libiberty-dev libpq-dev libsqlite3-dev libssl-dev make openssl pkg-config postgresql postgresql-contrib python zlib1g-dev python3-pip zip unzip libclang-dev&&\
echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" \
| tee -a /etc/apt/sources.list.d/caddy-fury.list &&\
apt update &&\
apt install -y --no-install-recommends binutils-dev build-essential cmake curl gcc gettext git libcurl4-openssl-dev libdw-dev libelf-dev libiberty-dev libpq-dev libsqlite3-dev libssl-dev make openssl pkg-config postgresql postgresql-contrib python zlib1g-dev python3-pip zip unzip libclang-dev clang caddy&&\
rm -rf /var/lib/apt/lists/*
#install and configure rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2020-01-15 -y &&\
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2020-12-07 -y &&\
rustup component add rustfmt clippy &&\
rustup component add rust-std --target wasm32-unknown-unknown
@@ -24,8 +27,7 @@ COPY cargo_config /root/.cargo/config
#install selenium for front end tests
RUN pip3 install selenium
#install and configure caddy
RUN curl https://getcaddy.com | bash -s personal
#configure caddy
COPY Caddyfile /Caddyfile
#install crowdin
+9
View File
@@ -45,3 +45,12 @@ ROCKET_ADDRESS=127.0.0.1
#PLUME_LOGO_192=icons/trwnh/paragraphs/plumeParagraphs192.png
#PLUME_LOGO_256=icons/trwnh/paragraphs/plumeParagraphs256.png
#PLUME_LOGO_512=icons/trwnh/paragraphs/plumeParagraphs512.png
## LDAP CONFIG ##
# the object that will be bound is "${USER_NAME_ATTR}=${username},${BASE_DN}"
#LDAP_ADDR=ldap://127.0.0.1:1389
#LDAP_BASE_DN="ou=users,dc=your-org,dc=eu"
#LDAP_USER_NAME_ATTR=cn
#LDAP_USER_MAIL_ATTR=mail
#LDAP_TLS=false
+10
View File
@@ -7,6 +7,16 @@ assignees: ''
---
<!--
We would appreciated if you report a bug at our Gitea instance's issue page:
https://git.joinplu.me/Plume/Plume/issues
You can login to the Gitea with your GitHub account.
We welcome to receive bug reports here, GitHub, too.
-->
<!-- Describe your bug, explaining how to reproduce it, and what was expected -->
@@ -7,6 +7,15 @@ assignees: ''
---
<!--
We would appreciated if you request a feature at our Gitea instance's issue page:
https://git.joinplu.me/Plume/Plume/issues
You can login to the Gitea with your GitHub account.
We welcome to receive feature requests here, GitHub, too.
-->
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+7
View File
@@ -0,0 +1,7 @@
<!--
We would appreciated if you report a bug at our Gitea instance's pull request page:
https://git.joinplu.me/Plume/Plume/pulls
You can login to the Gitea with your GitHub account.
We welcome to receive pull requests here, GitHub, too.
-->
+1
View File
@@ -18,3 +18,4 @@ tags.*
search_index
.buildconfig
__pycache__
.vscode/
+191
View File
@@ -0,0 +1,191 @@
# Changelog
<!-- next-header -->
## [Unreleased] - ReleaseDate
## [[0.6.0]] - 2020-12-29
### Added
- Vazir font for better support of languages written in Arabic script (#787)
- Login via LDAP (#826)
- cargo-release (#835)
- Care about weak ETag header for better caching (#840)
- Support for right to left languages in post content (#853)
### Changed
- Bump Docker base images to Buster flavor (#797)
- Upgrade Rocket to 0.4.5 (#800)
- Keep tags as-is (#832)
- Update Docker image for testing (#838)
- Update Dockerfile.dev (#841)
### Fixed
- Recreate search index if its format is outdated (#802)
- Make it possible to switch to rich text editor (#808)
- Fix margins for the mobile devices (#817)
- GPU acceleration for the mobile menu (#818)
- Natural title position for RtoL languages (#825)
- Remove link to unimplemented page (#827)
- Fix displaying not found page when submitting a duplicated blocklist email (#831)
### Security
- Validate spoofing of Create activity
## [0.5.0] - 2020-06-21
### Added
- Email blocklisting (#718)
- Syntax highlighting (#691)
- Persian localization (#782)
- Switchable tokenizer - enables Japanese full-text search (#776)
- Make database connections configurable by environment variables (#768)
### Changed
- Display likes and boost on post cards (#744)
- Rust 2018 (#726)
- Bump to LLVM to 9.0.0 to fix ARM builds (#737)
- Remove dependency on runtime-fmt (#773)
- Drop the -alpha suffix in release names, it is implied that Plume is not stable yet because of the 0 major version (Plume 1.0.0 will be the first stable release).
### Fixed
- Fix parsing of mentions inside a Markdown code block (be430c6)
- Fix RSS issues (#720)
- Fix Atom feed (#764)
- Fix default theme (#746)
- Fix shown password on remote interact pages (#741)
- Allow unicode hashtags (#757)
- Fix French grammar for for 0 (#760)
- Don't show boosts and likes for "all" and "local" in timelines (#781)
- Fix liking and boosting posts on remote instances (#762)
## [0.4.0] - 2019-12-23
### Added
- Add support for generic timeline (#525)
- Federate user deletion (#551)
- import migrations and don't require diesel_cli for admins (#555)
- Cache local instance (#572)
- Initial RTL support #575 (#577)
- Confirm deletion of blog (#602)
- Make a distinction between moderators and admins (#619)
- Theming (#624)
- Add clap to plume in order to print help and version (#631)
- Add Snapcraft metadata and install/maintenance hooks (#666)
- Add environmental variable to control path of media (#683)
- Add autosaving to the editor (#688)
- CI: Upload artifacts to pull request deploy environment (#539)
- CI: Upload artifact of wasm binary (#571)
### Changed
- Update follow_remote.rs.html grammar (#548)
- Add some feedback when performing some actions (#552)
- Theme update (#553)
- Remove the new index lock tantivy uses (#556)
- Reduce reqwest timeout to 5s (#557)
- Improve notification management (#561)
- Fix occurrences of 'have been' to 'has been' (#578) + Direct follow-up to #578 (#603)
- Store password reset requests in database (#610)
- Use futures and tokio to send activities (#620)
- Don't ignore dotenv errors (#630)
- Replace the input! macro with an Input builder (#646)
- Update default license (#659)
- Paginate the outbox responses. Fixes #669 (#681)
- Use the "classic" editor by default (#697)
- Fix issue #705 (#708)
- Make comments in styleshhets a bit clearer (#545)
- Rewrite circleci config (#558)
- Use openssl instead of sha256sum for build.rs (#568)
- Update dependencies (#574)
- Refactor code to use Shrinkwraprs and diesel-derive-newtype (#598)
- Add enum containing all successful route returns (#614)
- Update dependencies which depended on nix -- fixes arm32 builds (#615)
- Update some documents (#616)
- Update dependencies (#643)
- Make the comment syntax consistent across all CSS (#487)
### Fixed
- Remove r (#535)
- Fix certain improper rendering of forms (#560)
- make hashtags work in profile summary (#562)
- Fix some federation issue (#573)
- Prevent comment form submit button distortion on iOS (#592)
- Update textarea overflow to scroll (#609)
- Fix arm builds (#612)
- Fix theme caching (#647)
- Fix issue #642, frontend not in English if the user language does not exist (#648)
- Don't index drafts (#656)
- Fill entirely user on creation (#657)
- Delete notification on user deletion (#658)
- Order media so that latest added are top (#660)
- Fix logo URL (#664)
- Snap: Ensure cargo-web doesn't erroneously adopt our workspace. (#667)
- Snap: Another fix for building (#668)
- Snap: Fix build for non-Tier-1 Rust platforms (#672)
- Don't split sentences for translations (#677)
- Escape href quotation marks (#678)
- Re-add empty strings in translation (#682)
- Make the search index creation during migration respect SEARCH_INDEX (#689)
- Fix the navigation menu not opening on touch (#690)
- Make search items optional (#693)
- Various snap fixes (#698)
- Fix #637 : Markdown footnotes (#700)
- Fix lettre (#706)
- CI: Fix Crowdin upload (#576)
### Removed
- Remove the Canapi dependency (#540)
- Remove use of Rust in migrations (#704)
## [0.3.0] - 2019-04-19
### Added
- Cover for articles (#299, #387)
- Password reset (#448)
- New editor (#293, #458, #482, #483, #486, #530)
- Search (#324, #375, #445)
- Edit blogs (#460, #494, #497)
- Hashtags in articles (#283, #295)
- API endpoints (#245, #285, #307)
- A bunch of new translations! (#479, #501, #506, #510, #512, #514)
### Changed
- Federation improvements (#216, #217, #357, #364, #399, #443, #446, #455, #502, #519)
- Improved build process (#281, #374, #392, #402, #489, #498, #503, #511, #513, #515, #528)
### Fixes
- UI usability fixes (#370, #386, #401, #417, #418, #444, #452, #480, #516, #518, #522, #532)
## [0.2.0] - 2018-09-12
### Added
- Article publishing, or save as a draft
- Like, or boost an article
- Basic Markdown editor
- Federated commenting system
- User account creation
- Limited federation on other platforms and subscribing to users
- Ability to create multiple blogs
<!-- next-url -->
[Unreleased]: https://github.com/Plume-org/Plume/compare/0.6.0...HEAD
[[0.6.0]]: https://github.com/Plume-org/Plume/compare/0.5.0...0.6.0
[0.5.0]: https://github.com/Plume-org/Plume/compare/0.4.0-alpha-4...0.5.0
[0.4.0]: https://github.com/Plume-org/Plume/compare/0.3.0-alpha-2...0.4.0-alpha-4
[0.3.0]: https://github.com/Plume-org/Plume/compare/0.2.0-alpha-1...0.3.0-alpha-2
[0.2.0]: https://github.com/Plume-org/Plume/releases/tag/0.2.0-alpha-1
Generated
+1157 -833
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,7 +1,7 @@
[package]
authors = ["Plume contributors"]
name = "plume"
version = "0.4.0"
version = "0.6.0"
repository = "https://github.com/Plume-org/Plume"
edition = "2018"
@@ -20,8 +20,8 @@ heck = "0.3.0"
lettre = "0.9.2"
lettre_email = "0.9.2"
num_cpus = "1.10"
rocket = "0.4.2"
rocket_contrib = { version = "0.4.2", features = ["json"] }
rocket = "0.4.5"
rocket_contrib = { version = "0.4.5", features = ["json"] }
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
rpassword = "4.0"
scheduled-thread-pool = "0.2.2"
+2 -2
View File
@@ -1,4 +1,4 @@
FROM rust:1-stretch as builder
FROM rust:1-buster as builder
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
@@ -28,7 +28,7 @@ RUN cargo install --path ./ --force --no-default-features --features postgres
RUN cargo install --path plume-cli --force --no-default-features --features postgres
RUN cargo clean
FROM debian:stretch-slim
FROM debian:buster-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
+3 -2
View File
@@ -1,4 +1,4 @@
FROM rust:1-stretch
FROM rust:1-buster
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
@@ -10,7 +10,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
make \
openssl \
libssl-dev
libssl-dev\
clang
WORKDIR /scratch
COPY script/wasm-deps.sh .
+1 -1
View File
@@ -34,7 +34,7 @@ rules and thematics, but they can all communicate with each other.
## Get involved
If you want to have regular news about the project, the best place is probably [our blog](https://fediverse.blog/~/PlumeDev), or our Matrix room: [`#plume:disroot.org`](https://riot.im/app/#/room/#plume:disroot.org).
If you want to have regular news about the project, the best place is probably [our blog](https://fediverse.blog/~/PlumeDev), or our Matrix room: [`#plume-blog:matrix.org`](https://matrix.to/#/#plume-blog:matrix.org).
If you want to contribute more, a good first step is to read [our contribution guides](https://docs.joinplu.me/contribute). We accept all kind of contribution:
+28 -1
View File
@@ -40,7 +40,7 @@ main header.article {
display: flex;
flex-direction: column;
justify-content: end;
justify-content: flex-end;
h1, .article-info {
text-align: center;
@@ -490,3 +490,30 @@ input:checked ~ .cw-container > .cw-text {
display: inline;
}
}
// Small screens
@media screen and (max-width: 600px) {
#plume-editor header {
flex-direction: column-reverse;
button {
flex: 0 0 0;
}
}
.popup {
top: 10vh;
bottom: 10vh;
left: 1vw;
right: 1vw;
}
main article {
margin: 2.5em .5em;
max-width: none;
}
main .article-meta > *, main .article-meta .comments, main .article-meta > .banner > * {
margin: 0 5%;
}
}
+5 -1
View File
@@ -490,6 +490,10 @@ figure {
/// Small screens
@media screen and (max-width: 600px) {
body > main > *, .h-feed > * {
margin: 1em;
}
main .article-meta {
> *, .comments {
margin: 0 5%;
@@ -535,7 +539,7 @@ figure {
margin: 0;
& > * {
max-width: 100%;
max-width: 100% !important;
}
}
+91
View File
@@ -205,6 +205,7 @@ body > header {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
transform: translateZ(0);
opacity: 0;
font-size: 0.9em;
white-space: nowrap;
@@ -221,3 +222,93 @@ body > header {
}
}
}
// Small screens
@media screen and (max-width: 600px) {
@keyframes menuOpening {
from {
transform: scaleX(0);
transform-origin: left;
opacity: 0;
}
to {
transform: scaleX(1);
transform-origin: left;
opacity: 1;
}
}
body > header {
flex-direction: column;
nav#menu {
display: inline-flex;
z-index: 21;
}
#content {
display: none;
appearance: none;
text-align: center;
z-index: 20;
}
}
body > header:focus-within #content, #content.show {
position: fixed;
display: flex;
flex-direction: column;
justify-content: flex-start;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
animation: 0.2s menuOpening;
&::before {
content: "";
position: absolute;
transform: skewX(-10deg);
top: 0;
left: -20%;
width: 100%;
height: 100%;
z-index: -10;
background: $primary;
}
> nav {
flex-direction: column;
align-items: flex-start;
a {
display: flex;
flex-direction: row;
align-items: center;
margin: 0;
padding: 1rem 1.5rem;
color: $background;
font-size: 1.4em;
font-weight: 300;
&.title { font-size: 1.8em; }
> *:first-child { width: 3rem; }
> img:first-child { height: 3rem; }
> *:last-child { margin-left: 1rem; }
> nav hr {
display: block;
margin: 0;
width: 100%;
border: solid $background 0.1rem;
}
.mobile-label { display: initial; }
}
}
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
"project_identifier": "plume"
"api_key_env": CROWDIN_API_KEY
"project_id": 352097
"api_token_env": "CROWDIN_API_KEY"
preserve_hierarchy: true
files:
- source: /po/plume/plume.pot
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-api"
version = "0.4.0"
version = "0.6.0"
authors = ["Plume contributors"]
edition = "2018"
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-cli"
version = "0.4.0"
version = "0.6.0"
authors = ["Plume contributors"]
edition = "2018"
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+1 -1
View File
@@ -132,7 +132,7 @@ fn new<'a>(args: &ArgMatches<'a>, conn: &Connection) {
role,
&bio,
email,
User::hash_pass(&password).expect("Couldn't hash password"),
Some(User::hash_pass(&password).expect("Couldn't hash password")),
)
.expect("Couldn't save new user");
}
+4 -3
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-common"
version = "0.4.0"
version = "0.6.0"
authors = ["Plume contributors"]
edition = "2018"
@@ -14,7 +14,7 @@ heck = "0.3.0"
hex = "0.3"
hyper = "0.12.33"
openssl = "0.10.22"
rocket = "0.4.0"
rocket = "0.4.5"
reqwest = "0.9"
serde = "1.0"
serde_derive = "1.0"
@@ -30,4 +30,5 @@ version = "0.4"
[dependencies.pulldown-cmark]
default-features = false
version = "0.2.0"
git = "https://git.joinplu.me/Plume/pulldown-cmark"
branch = "bidi-plume"
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+25
View File
@@ -164,6 +164,11 @@ where
Some(x) => x,
None => return Inbox::NotHandled(ctx, act, InboxError::InvalidActor(None)),
};
if Self::is_spoofed_activity(&actor_id, &act) {
return Inbox::NotHandled(ctx, act, InboxError::InvalidObject(None));
}
// Transform this actor to a model (see FromId for details about the from_id function)
let actor = match A::from_id(
ctx,
@@ -222,6 +227,26 @@ where
Inbox::Failed(err) => Err(err),
}
}
fn is_spoofed_activity(actor_id: &str, act: &serde_json::Value) -> bool {
use serde_json::Value::{Array, Object, String};
let attributed_to = act["object"].get("attributedTo");
if attributed_to.is_none() {
return false;
}
let attributed_to = attributed_to.unwrap();
match attributed_to {
Array(v) => v.iter().all(|i| match i {
String(s) => s != actor_id,
Object(obj) => obj.get("id").map_or(true, |s| s != actor_id),
_ => false,
}),
String(s) => s != actor_id,
Object(obj) => obj.get("id").map_or(true, |s| s != actor_id),
_ => false,
}
}
}
/// Get the ActivityPub ID of a JSON value.
+50 -37
View File
@@ -1,12 +1,11 @@
use heck::CamelCase;
use openssl::rand::rand_bytes;
use pulldown_cmark::{html, Event, Options, Parser, Tag};
use pulldown_cmark::{html, CodeBlockKind, CowStr, Event, LinkType, Options, Parser, Tag};
use regex_syntax::is_word_character;
use rocket::{
http::uri::Uri,
response::{Flash, Redirect},
};
use std::borrow::Cow;
use std::collections::HashSet;
use syntect::html::ClassedHTMLGenerator;
use syntect::parsing::SyntaxSet;
@@ -51,10 +50,10 @@ enum State {
fn to_inline(tag: Tag<'_>) -> Tag<'_> {
match tag {
Tag::Header(_) | Tag::Table(_) | Tag::TableHead | Tag::TableRow | Tag::TableCell => {
Tag::Heading(_) | Tag::Table(_) | Tag::TableHead | Tag::TableRow | Tag::TableCell => {
Tag::Paragraph
}
Tag::Image(url, title) => Tag::Link(url, title),
Tag::Image(typ, url, title) => Tag::Link(typ, url, title),
t => t,
}
}
@@ -66,21 +65,31 @@ fn highlight_code<'a>(
evt: Event<'a>,
) -> Option<Vec<Event<'a>>> {
match evt {
Event::Start(Tag::CodeBlock(lang)) => {
if lang.is_empty() {
Some(vec![Event::Start(Tag::CodeBlock(lang))])
} else {
*context = Some(HighlighterContext { content: vec![] });
Some(vec![Event::Start(Tag::CodeBlock(lang))])
Event::Start(Tag::CodeBlock(kind)) => {
match &kind {
CodeBlockKind::Fenced(lang) if !lang.is_empty() => {
*context = Some(HighlighterContext { content: vec![] });
}
_ => {}
}
Some(vec![Event::Start(Tag::CodeBlock(kind))])
}
Event::End(Tag::CodeBlock(x)) => {
Event::End(Tag::CodeBlock(kind)) => {
let mut result = vec![];
if let Some(ctx) = context.take() {
let lang = if let CodeBlockKind::Fenced(lang) = &kind {
if lang.is_empty() {
unreachable!();
} else {
lang
}
} else {
unreachable!();
};
let syntax_set = SyntaxSet::load_defaults_newlines();
let syntax = syntax_set.find_syntax_by_token(&x).unwrap_or_else(|| {
let syntax = syntax_set.find_syntax_by_token(&lang).unwrap_or_else(|| {
syntax_set
.find_syntax_by_name(&x)
.find_syntax_by_name(&lang)
.unwrap_or_else(|| syntax_set.find_syntax_plain_text())
});
let mut html = ClassedHTMLGenerator::new(&syntax, &syntax_set);
@@ -90,7 +99,7 @@ fn highlight_code<'a>(
let q = html.finalize();
result.push(Event::Html(q.into()));
}
result.push(Event::End(Tag::CodeBlock(x)));
result.push(Event::End(Tag::CodeBlock(kind)));
*context = None;
Some(result)
}
@@ -113,10 +122,10 @@ fn flatten_text<'a>(state: &mut Option<String>, evt: Event<'a>) -> Option<Vec<Ev
prev_txt.push_str(&txt);
(Some(prev_txt), vec![])
}
None => (Some(txt.into_owned()), vec![]),
None => (Some(txt.into_string()), vec![]),
},
e => match state.take() {
Some(prev) => (None, vec![Event::Text(Cow::Owned(prev)), e]),
Some(prev) => (None, vec![Event::Text(CowStr::Boxed(prev.into())), e]),
None => (None, vec![e]),
},
};
@@ -156,42 +165,45 @@ fn process_image<'a, 'b>(
) -> Event<'a> {
if let Some(ref processor) = *processor {
match evt {
Event::Start(Tag::Image(id, title)) => {
Event::Start(Tag::Image(typ, id, title)) => {
if let Some((url, cw)) = id.parse::<i32>().ok().and_then(processor.as_ref()) {
if let (Some(cw), false) = (cw, inline) {
// there is a cw, and where are not inline
Event::Html(Cow::Owned(format!(
r#"<label for="postcontent-cw-{id}">
Event::Html(CowStr::Boxed(
format!(
r#"<label for="postcontent-cw-{id}">
<input type="checkbox" id="postcontent-cw-{id}" checked="checked" class="cw-checkbox">
<span class="cw-container">
<span class="cw-text">
{cw}
</span>
<img src="{url}" alt=""#,
id = random_hex(),
cw = cw,
url = url
)))
id = random_hex(),
cw = cw,
url = url
)
.into(),
))
} else {
Event::Start(Tag::Image(Cow::Owned(url), title))
Event::Start(Tag::Image(typ, CowStr::Boxed(url.into()), title))
}
} else {
Event::Start(Tag::Image(id, title))
Event::Start(Tag::Image(typ, id, title))
}
}
Event::End(Tag::Image(id, title)) => {
Event::End(Tag::Image(typ, id, title)) => {
if let Some((url, cw)) = id.parse::<i32>().ok().and_then(processor.as_ref()) {
if inline || cw.is_none() {
Event::End(Tag::Image(Cow::Owned(url), title))
Event::End(Tag::Image(typ, CowStr::Boxed(url.into()), title))
} else {
Event::Html(Cow::Borrowed(
Event::Html(CowStr::Borrowed(
r#""/>
</span>
</label>"#,
))
}
} else {
Event::End(Tag::Image(id, title))
Event::End(Tag::Image(typ, id, title))
}
}
e => e,
@@ -231,19 +243,19 @@ pub fn md_to_html<'a>(
// Ignore headings, images, and tables if inline = true
.scan((vec![], inline), inline_tags)
.scan(&mut DocumentContext::default(), |ctx, evt| match evt {
Event::Start(Tag::CodeBlock(_)) | Event::Start(Tag::Code) => {
Event::Start(Tag::CodeBlock(_)) => {
ctx.in_code = true;
Some((vec![evt], vec![], vec![]))
}
Event::End(Tag::CodeBlock(_)) | Event::End(Tag::Code) => {
Event::End(Tag::CodeBlock(_)) => {
ctx.in_code = false;
Some((vec![evt], vec![], vec![]))
}
Event::Start(Tag::Link(_, _)) => {
Event::Start(Tag::Link(_, _, _)) => {
ctx.in_link = true;
Some((vec![evt], vec![], vec![]))
}
Event::End(Tag::Link(_, _)) => {
Event::End(Tag::Link(_, _, _)) => {
ctx.in_link = false;
Some((vec![evt], vec![], vec![]))
}
@@ -264,6 +276,7 @@ pub fn md_to_html<'a>(
let mention = text_acc;
let short_mention = mention.splitn(1, '@').next().unwrap_or("");
let link = Tag::Link(
LinkType::Inline,
format!("{}@/{}/", base_url, &mention).into(),
short_mention.to_owned().into(),
);
@@ -294,8 +307,8 @@ pub fn md_to_html<'a>(
}
let hashtag = text_acc;
let link = Tag::Link(
format!("{}tag/{}", base_url, &hashtag.to_camel_case())
.into(),
LinkType::Inline,
format!("{}tag/{}", base_url, &hashtag).into(),
hashtag.to_owned().into(),
);
@@ -460,11 +473,11 @@ mod tests {
fn test_inline() {
assert_eq!(
md_to_html("# Hello", None, false, None).0,
String::from("<h1>Hello</h1>\n")
String::from("<h1 dir=\"auto\">Hello</h1>\n")
);
assert_eq!(
md_to_html("# Hello", None, true, None).0,
String::from("<p>Hello</p>\n")
String::from("<p dir=\"auto\">Hello</p>\n")
);
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-front"
version = "0.4.0"
version = "0.6.0"
authors = ["Plume contributors"]
edition = "2018"
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+7 -1
View File
@@ -269,7 +269,13 @@ pub fn init() -> Result<(), EditorError> {
let editor_button = document().create_element("a")?;
js! { @{&editor_button}.href = "#"; }
editor_button.add_event_listener(|_: ClickEvent| {
window().local_storage().remove("basic-editor");
if window()
.local_storage()
.insert("basic-editor", "false")
.is_err()
{
console!(log, "Failed to write into local storage");
}
window().history().go(0).ok(); // refresh
});
editor_button.append_child(
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-macro"
version = "0.4.0"
version = "0.6.0"
authors = ["Trinity Pointard <trinity.pointard@insa-rennes.fr>"]
edition = "2018"
description = "Plume procedural macros"
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+4 -3
View File
@@ -1,6 +1,6 @@
[package]
name = "plume-models"
version = "0.4.0"
version = "0.6.0"
authors = ["Plume contributors"]
edition = "2018"
@@ -13,9 +13,10 @@ guid-create = "0.1"
heck = "0.3.0"
itertools = "0.8.0"
lazy_static = "1.0"
ldap3 = "0.7.1"
migrations_internals= "1.4.0"
openssl = "0.10.22"
rocket = "0.4.0"
rocket = "0.4.5"
rocket_i18n = { git = "https://github.com/Plume-org/rocket_i18n", rev = "e922afa7c366038b3433278c03b1456b346074f2" }
reqwest = "0.9"
scheduled-thread-pool = "0.2.2"
@@ -30,7 +31,7 @@ whatlang = "0.7.1"
shrinkwraprs = "0.2.1"
diesel-derive-newtype = "0.1.2"
glob = "0.3.0"
lindera-tantivy = { version = "0.1.2", optional = true }
lindera-tantivy = { version = "0.1.3", optional = true }
[dependencies.chrono]
features = ["serde"]
Binary file not shown.
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
pre-release-hook = ["cargo", "fmt"]
pre-release-replacements = []
+38
View File
@@ -20,6 +20,7 @@ pub struct Config {
pub logo: LogoConfig,
pub default_theme: String,
pub media_directory: String,
pub ldap: Option<LdapConfig>,
}
#[derive(Debug, Clone)]
@@ -240,6 +241,42 @@ impl SearchTokenizerConfig {
}
}
pub struct LdapConfig {
pub addr: String,
pub base_dn: String,
pub tls: bool,
pub user_name_attr: String,
pub mail_attr: String,
}
fn get_ldap_config() -> Option<LdapConfig> {
let addr = var("LDAP_ADDR").ok();
let base_dn = var("LDAP_BASE_DN").ok();
match (addr, base_dn) {
(Some(addr), Some(base_dn)) => {
let tls = var("LDAP_TLS").unwrap_or_else(|_| "false".to_owned());
let tls = match tls.as_ref() {
"1" | "true" | "TRUE" => true,
"0" | "false" | "FALSE" => false,
_ => panic!("Invalid LDAP configuration : tls"),
};
let user_name_attr = var("LDAP_USER_NAME_ATTR").unwrap_or_else(|_| "cn".to_owned());
let mail_attr = var("LDAP_USER_MAIL_ATTR").unwrap_or_else(|_| "mail".to_owned());
Some(LdapConfig {
addr,
base_dn,
tls,
user_name_attr,
mail_attr,
})
}
(None, None) => None,
(_, _) => {
panic!("Invalid LDAP configuration : both LDAP_ADDR and LDAP_BASE_DN must be set")
}
}
}
lazy_static! {
pub static ref CONFIG: Config = Config {
base_url: var("BASE_URL").unwrap_or_else(|_| format!(
@@ -267,5 +304,6 @@ lazy_static! {
default_theme: var("DEFAULT_THEME").unwrap_or_else(|_| "default-light".to_owned()),
media_directory: var("MEDIA_UPLOAD_DIRECTORY")
.unwrap_or_else(|_| "static/media".to_owned()),
ldap: get_ldap_config(),
};
}
+202
View File
@@ -173,6 +173,97 @@ pub(crate) mod tests {
});
}
#[test]
fn spoof_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[1].ap_url,
"inReplyTo": posts[0].ap_url,
"content": "Hello.",
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
},
"type": "Create",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn spoof_comment_by_object_with_id() {
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": {
"id": users[1].ap_url
},
"inReplyTo": posts[0].ap_url,
"content": "Hello.",
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
},
"type": "Create",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn spoof_comment_by_object_without_id() {
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": {},
"inReplyTo": posts[0].ap_url,
"content": "Hello.",
"to": [plume_common::activity_pub::PUBLIC_VISIBILITY]
},
"type": "Create",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn create_post() {
let r = rockets();
@@ -214,6 +305,117 @@ pub(crate) mod tests {
});
}
#[test]
fn spoof_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[1].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",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn spoof_post_by_object_with_id() {
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": [
{"id": users[1].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",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn spoof_post_by_object_without_id() {
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": [{}, 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",
});
assert!(matches!(
super::inbox(&r, act.clone()),
Err(super::Error::Inbox(
box plume_common::activity_pub::inbox::InboxError::InvalidObject(_),
))
));
Ok(())
});
}
#[test]
fn delete_comment() {
use crate::comments::*;
+1
View File
@@ -1,6 +1,7 @@
#![feature(try_trait)]
#![feature(never_type)]
#![feature(proc_macro_hygiene)]
#![feature(box_patterns)]
#[macro_use]
extern crate diesel;
+1 -3
View File
@@ -11,7 +11,7 @@ use activitypub::{
};
use chrono::{NaiveDateTime, TimeZone, Utc};
use diesel::{self, BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl, SaveChangesDsl};
use heck::{CamelCase, KebabCase};
use heck::KebabCase;
use plume_common::{
activity_pub::{
inbox::{AsObject, FromId},
@@ -622,7 +622,6 @@ impl FromId<PlumeRocket> for Post {
let mut hashtags = md_to_html(&post.source, None, 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 {
for tag in tags {
@@ -762,7 +761,6 @@ impl AsObject<User, Update, &PlumeRocket> for PostUpdate {
let mut txt_hashtags = md_to_html(&post.source, None, 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![];
+16 -3
View File
@@ -5,10 +5,10 @@ use crate::{
use chrono::Datelike;
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl};
use itertools::Itertools;
use std::{cmp, fs::create_dir_all, path::Path, sync::Mutex};
use std::{cmp, fs::create_dir_all, io, path::Path, sync::Mutex};
use tantivy::{
collector::TopDocs, directory::MmapDirectory, schema::*, Index, IndexReader, IndexWriter,
ReloadPolicy, Term,
ReloadPolicy, TantivyError, Term,
};
use whatlang::{detect as detect_lang, Lang};
@@ -18,6 +18,7 @@ pub enum SearcherError {
WriteLockAcquisitionError,
IndexOpeningError,
IndexEditionError,
InvalidIndexDataError,
}
pub struct Searcher {
@@ -135,7 +136,19 @@ impl Searcher {
.reader_builder()
.reload_policy(ReloadPolicy::Manual)
.try_into()
.map_err(|_| SearcherError::IndexCreationError)?,
.map_err(|e| {
if let TantivyError::IOError(err) = e {
let err: io::Error = err.into();
if err.kind() == io::ErrorKind::InvalidData {
// Search index was created in older Tantivy format.
SearcherError::InvalidIndexDataError
} else {
SearcherError::IndexCreationError
}
} else {
SearcherError::IndexCreationError
}
})?,
index,
})
}
+127 -18
View File
@@ -1,8 +1,8 @@
use crate::{
ap_url, blocklisted_emails::BlocklistedEmail, blogs::Blog, db_conn::DbConn, follows::Follow,
instance::*, medias::Media, notifications::Notification, post_authors::PostAuthor, posts::Post,
safe_string::SafeString, schema::users, search::Searcher, timeline::Timeline, Connection,
Error, PlumeRocket, Result, ITEMS_PER_PAGE,
ap_url, blocklisted_emails::BlocklistedEmail, blogs::Blog, config::CONFIG, db_conn::DbConn,
follows::Follow, instance::*, medias::Media, notifications::Notification,
post_authors::PostAuthor, posts::Post, safe_string::SafeString, schema::users,
search::Searcher, timeline::Timeline, Connection, Error, PlumeRocket, Result, ITEMS_PER_PAGE,
};
use activitypub::{
activity::Delete,
@@ -14,6 +14,7 @@ use activitypub::{
use bcrypt;
use chrono::{NaiveDateTime, Utc};
use diesel::{self, BelongingToDsl, ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl};
use ldap3::{LdapConn, Scope, SearchEntry};
use openssl::{
hash::MessageDigest,
pkey::{PKey, Private},
@@ -292,11 +293,116 @@ impl User {
bcrypt::hash(pass, 10).map_err(Error::from)
}
pub fn auth(&self, pass: &str) -> bool {
self.hashed_password
.clone()
.map(|hashed| bcrypt::verify(pass, hashed.as_ref()).unwrap_or(false))
.unwrap_or(false)
fn ldap_register(conn: &Connection, name: &str, password: &str) -> Result<User> {
if CONFIG.ldap.is_none() {
return Err(Error::NotFound);
}
let ldap = CONFIG.ldap.as_ref().unwrap();
let mut ldap_conn = LdapConn::new(&ldap.addr).map_err(|_| Error::NotFound)?;
let ldap_name = format!("{}={},{}", ldap.user_name_attr, name, ldap.base_dn);
let bind = ldap_conn
.simple_bind(&ldap_name, password)
.map_err(|_| Error::NotFound)?;
if bind.success().is_err() {
return Err(Error::NotFound);
}
let search = ldap_conn
.search(
&ldap_name,
Scope::Base,
"(|(objectClass=person)(objectClass=user))",
vec![&ldap.mail_attr],
)
.map_err(|_| Error::NotFound)?
.success()
.map_err(|_| Error::NotFound)?;
for entry in search.0 {
let entry = SearchEntry::construct(entry);
let email = entry.attrs.get("mail").and_then(|vec| vec.first());
if let Some(email) = email {
let _ = ldap_conn.unbind();
return NewUser::new_local(
conn,
name.to_owned(),
name.to_owned(),
Role::Normal,
"",
email.to_owned(),
None,
);
}
}
let _ = ldap_conn.unbind();
Err(Error::NotFound)
}
fn ldap_login(&self, password: &str) -> bool {
if let Some(ldap) = CONFIG.ldap.as_ref() {
let mut conn = if let Ok(conn) = LdapConn::new(&ldap.addr) {
conn
} else {
return false;
};
let name = format!(
"{}={},{}",
ldap.user_name_attr, &self.username, ldap.base_dn
);
if let Ok(bind) = conn.simple_bind(&name, password) {
bind.success().is_ok()
} else {
false
}
} else {
false
}
}
pub fn login(conn: &Connection, ident: &str, password: &str) -> Result<User> {
let local_id = Instance::get_local()?.id;
let user = match User::find_by_email(conn, ident) {
Ok(user) => Ok(user),
_ => User::find_by_name(conn, ident, local_id),
}
.and_then(|u| {
if u.instance_id == local_id {
Ok(u)
} else {
Err(Error::NotFound)
}
});
match user {
Ok(user) if user.hashed_password.is_some() => {
if bcrypt::verify(password, user.hashed_password.as_ref().unwrap()).unwrap_or(false)
{
Ok(user)
} else {
Err(Error::NotFound)
}
}
Ok(user) => {
if user.ldap_login(password) {
Ok(user)
} else {
Err(Error::NotFound)
}
}
e => {
if let Ok(user) = User::ldap_register(conn, ident, password) {
return Ok(user);
}
// if no user was found, and we were unable to auto-register from ldap
// fake-verify a password, and return an error.
let other = User::get(&*conn, 1)
.expect("No user is registered")
.hashed_password;
other.map(|pass| bcrypt::verify(password, &pass));
e
}
}
}
pub fn reset_password(&self, conn: &Connection, pass: &str) -> Result<()> {
@@ -983,7 +1089,7 @@ impl NewUser {
role: Role,
summary: &str,
email: String,
password: String,
password: Option<String>,
) -> Result<User> {
let (pub_key, priv_key) = gen_keypair();
let instance = Instance::get_local()?;
@@ -1001,7 +1107,7 @@ impl NewUser {
summary: summary.to_owned(),
summary_html: SafeString::new(&utils::md_to_html(&summary, None, false, None).0),
email: Some(email),
hashed_password: Some(password),
hashed_password: password,
instance_id: instance.id,
public_key: String::from_utf8(pub_key).or(Err(Error::Signature))?,
private_key: Some(String::from_utf8(priv_key).or(Err(Error::Signature))?),
@@ -1043,7 +1149,7 @@ pub(crate) mod tests {
Role::Admin,
"Hello there, I'm the admin",
"admin@example.com".to_owned(),
"invalid_admin_password".to_owned(),
Some("invalid_admin_password".to_owned()),
)
.unwrap();
let user = NewUser::new_local(
@@ -1053,7 +1159,7 @@ pub(crate) mod tests {
Role::Normal,
"Hello there, I'm no one",
"user@example.com".to_owned(),
"invalid_user_password".to_owned(),
Some("invalid_user_password".to_owned()),
)
.unwrap();
let other = NewUser::new_local(
@@ -1063,7 +1169,7 @@ pub(crate) mod tests {
Role::Normal,
"Hello there, I'm someone else",
"other@example.com".to_owned(),
"invalid_other_password".to_owned(),
Some("invalid_other_password".to_owned()),
)
.unwrap();
vec![admin, user, other]
@@ -1082,7 +1188,7 @@ pub(crate) mod tests {
Role::Normal,
"Hello I'm a test",
"test@example.com".to_owned(),
User::hash_pass("test_password").unwrap(),
Some(User::hash_pass("test_password").unwrap()),
)
.unwrap();
assert_eq!(
@@ -1165,12 +1271,15 @@ pub(crate) mod tests {
Role::Normal,
"Hello I'm a test",
"test@example.com".to_owned(),
User::hash_pass("test_password").unwrap(),
Some(User::hash_pass("test_password").unwrap()),
)
.unwrap();
assert!(test_user.auth("test_password"));
assert!(!test_user.auth("other_password"));
assert_eq!(
User::login(conn, "test", "test_password").unwrap().id,
test_user.id
);
assert!(User::login(conn, "test", "other_password").is_err());
Ok(())
});
}
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: af\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ar\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "فتح محرر النصوص الغني"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "العنوان"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "العنوان الثانوي أو الملخص"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "اكتب مقالك هنا. ماركداون مُدَعَّم."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "يتبقا {} حرفا تقريبا"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "الوسوم"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "الرخصة"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "الغلاف"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "هذه مسودة"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "نشر كتابا"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: bg\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Отворете редактора с богат текст"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Заглавие"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Подзаглавие или резюме"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Напишете статията си тук. Поддържа се Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Остават {} знака вляво"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Етикети"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Лиценз"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Основно изображение"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Това е проект"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Публикувай"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ca\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Obre leditor de text enriquit"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Títol"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Subtítol o resum"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Escriviu el vostre article ací. Podeu fer servir el Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Queden uns {} caràcters"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etiquetes"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Llicència"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Coberta"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Açò és un esborrany"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publica"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: cs\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Otevřít editor formátovaného textu"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Nadpis"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Podnadpis, nebo shrnutí"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Sem napište svůj článek. Markdown je podporován."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Zbývá kolem {} znaků"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Tagy"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licence"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Titulka"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Tohle je koncept"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Zveřejnit"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: da\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr " Rich Text Editor (RTE) öffnen"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titel"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Untertitel oder Zusammenfassung"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Schreiben deinen Artikel hier. Markdown wird unterstützt."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Ungefähr {} Zeichen übrig"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Schlagwörter"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Lizenz"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Einband"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Dies ist ein Entwurf"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Veröffentlichen"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: el\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: English\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: en\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Esperanto\n"
"Language: eo_UY\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: eo\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Malfermi la riĉan redaktilon"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titolo"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Verku vian artikolon ĉi tie. Markdown estas subtenita."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Proksimume {} signoj restantaj"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etikedoj"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Permesilo"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Kovro"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Malfinias"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Eldoni"
+19 -13
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Abrir el editor de texto enriquecido"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
msgstr "Subtítulo, o resumen"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Escriba su artículo aquí. Puede utilizar Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Quedan unos {} caracteres"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etiquetas"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licencia"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Cubierta"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Esto es un borrador"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publicar"
+20 -14
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Language: fa_IR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: fa\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "باز کردن ویرایش‌گر غنی"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "عنوان"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "زیرعنوان، یا چکیده"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "مقاله را اینجا بنویسید. از مارک‌داون پشتیبانی می‌شود."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "نزدیک به {} نویسه باقی مانده است"
msgstr "نزدیک به {} حرف باقی مانده است"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "برچسب‌ها"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "پروانه"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
msgstr "تصویر شاخص"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "این، یک پیش‌نویس است"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "انتشار"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: fi\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Avaa edistynyt tekstieditori"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Otsikko"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Alaotsikko tai tiivistelmä"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Kirjoita artikkelisi tähän. Markdown -kuvauskieli on tuettu."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "%{count} merkkiä jäljellä"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Tagit"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Lisenssi"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Kansi"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Tämä on luonnos"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Julkaise"
+19 -13
View File
@@ -3,55 +3,61 @@ msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2019-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \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"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: fr\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Ouvrir l'éditeur de texte avancé"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titre"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Sous-titre ou résumé"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Écrivez votre article ici. Vous pouvez utiliser du Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Environ {} caractères restant"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Étiquettes"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licence"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Illustration"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Ceci est un brouillon"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publier"
+21 -15
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Galician\n"
"Language: gl_ES\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: gl\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Abra o editor de texto enriquecido"
msgstr "Abre o editor de texto enriquecido"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Subtítulo, ou resumo"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Escriba aquí o seu artigo: pode utilizar Markdown."
msgstr "Escribe aquí o teu artigo: podes utilizar Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Dispón de {} caracteres restantes"
msgstr "Dispós de {} caracteres"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etiquetas"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenza"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Portada"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Este é un borrador"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publicar"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: he\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Hindi\n"
"Language: hi_IN\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: hi\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "शीर्षक"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "अपना आर्टिकल या लेख यहाँ लिखें. Markdown उपलब्ध है."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "लगभग {} अक्षर बाकी हैं"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "टैग्स"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "लाइसेंस"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "पब्लिश करें"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Croatian\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: hr\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Tagovi"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Objavi"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_HU\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: hu\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: it\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Apri il compositore di testo avanzato"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titolo"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Sottotitolo, o sommario"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Scrivi qui il tuo articolo. È supportato il Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Circa {} caratteri rimasti"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etichette"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenza"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Copertina"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Questa è una bozza"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Pubblica"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ja\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "リッチテキストエディターを開く"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "タイトル"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "サブタイトル、または概要"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "投稿をここに書きます。Markdown がサポートされています。"
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "残り約 {} 文字"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "タグ"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "ライセンス"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "カバー"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "これは下書きです"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "公開"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ko\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+4
View File
@@ -12,6 +12,10 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:115
msgid "Open the rich text editor"
msgstr ""
+28 -22
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
msgstr "Open de rich-text editor"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
msgstr "Titel"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
msgstr "Ondertitel of samenvatting"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
msgstr "Schrijf hier je artikel. Markdown wordt ondersteund."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
msgstr "Ongeveer {} tekens over"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
msgstr "Tags"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
msgstr "Licentie"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
msgstr "Hoofdafbeelding"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
msgstr "Dit is een concept"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
msgstr "Publiceren"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: no\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: pl\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Otwórz edytor tekstu sformatowanego"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Tytuł"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Podtytuł, lub podsumowanie"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Napisz swój artykuł tutaj. Markdown jest obsługiwany."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Pozostało w okolicy {} znaków"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Tagi"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licencja"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Okładka"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "To jest szkic"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publikuj"
+14 -10
View File
@@ -12,42 +12,46 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: pt-BR\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Abrir o editor de rich text"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Título"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Subtítulo ou resumo"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Escreva seu artigo aqui. Markdown é suportado."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Cerca de {} caracteres restantes"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Tags"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licença"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Capa"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Isso é um rascunho"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publicar"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ro\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Deschide editorul de text"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titlu"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Scrie articolul tău aici. Markdown este acceptat."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "În apropiere de {} caractere rămase"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etichete"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenţă"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Coperta"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Aceasta este o ciornă"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publică"
+25 -19
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: ru\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
msgstr "Заголовок"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
msgstr "Пишите свою статью здесь. Markdown поддерживается."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
msgstr "Осталось около {} символов"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
msgstr "Теги"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
msgstr "Обложка"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
msgstr "Это черновик"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
msgstr "Опубликовать"
+63
View File
@@ -0,0 +1,63 @@
msgid ""
msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Santali\n"
"Language: sat_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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: sat\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "ᱨᱤᱪ ᱚᱞ ᱥᱟᱯᱟᱣᱤᱡ ᱠᱷᱩᱞᱟᱹᱭ ᱢᱮᱸ"
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "ᱴᱭᱴᱚᱞ"
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "ᱥᱟᱹᱵᱴᱟᱭᱴᱟᱹᱞ, ᱟᱨ ᱵᱟᱝ ᱥᱟᱹᱢᱢᱟᱨᱭ"
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "ᱟᱢᱟᱜ ᱚᱱᱚᱞ ᱱᱚᱰᱮ ᱚᱞ ᱛᱟᱢ ᱾ ᱪᱤᱱᱦᱟᱹ ᱥᱟᱯᱯᱚᱴ ᱜᱮᱭᱟ ᱾"
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "ᱡᱷᱚᱛᱚ ᱨᱮ {} ᱡᱤᱱᱤᱥ ᱵᱟᱧᱪᱟᱣᱠᱟᱱᱟ"
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "ᱴᱮᱜᱥ"
# plume-front/src/editor.rs:415
msgid "License"
msgstr "ᱞᱚᱭᱥᱮᱸᱱᱥ"
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "ᱠᱚᱵᱷᱚᱨ"
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "ᱱᱚᱶᱟ ᱫᱚ ᱰᱨᱟᱯᱷᱼᱴ ᱠᱟᱱᱟ"
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "ᱯᱟᱨᱥᱟᱞ"
+63
View File
@@ -0,0 +1,63 @@
msgid ""
msgstr ""
"Project-Id-Version: plume\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-15 16:33-0700\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Sinhala\n"
"Language: si_LK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: si-LK\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Slovak\n"
"Language: sk_SK\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: sk\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Otvor editor formátovaného textu"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Nadpis"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Zhrnutie, alebo podnadpis"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Tu napíš svoj článok. Markdown je podporovaný."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Zostáva asi {} znakov"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Štítky"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licencia"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Obálka"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Toto je koncept"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Zverejniť"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Language: sl_SI\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: sl\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Oznake"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "To je osnutek"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Objavi"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Serbian (Latin)\n"
"Language: sr_CS\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: sr-CS\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Otvori uređivač sa stilizacijom"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Naslov"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Podnaslov, ili sažetak"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Napišite vaš članak ovde. Na raspolaganju vam je Markdown."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Preostalo oko {} znakova"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Markeri"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licenca"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Naslovna strana"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Ovo je nacrt"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Objavi"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: sv-SE\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Titel"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Skriv din artikel här. Markdown stöds."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Ungefär {} karaktärer kvar"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Taggar"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Licens"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Omslag"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Publicera"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: tr\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Zengin metin editörünü (RTE) aç"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Başlık"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr "Alt başlık, veya açıklama"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr "Makaleni buraya yaz. Markdown kullanabilirsin."
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr "Yaklaşık {} karakter kaldı"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr "Etiketler"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr "Lisans"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr "Kapak"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr "Bu bir taslaktır"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr "Yayınla"
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"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-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: uk\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+18 -12
View File
@@ -3,8 +3,8 @@ 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-12-16 21:07\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:56\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: vi\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr "Văn bản của tôi"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr "Tiêu Châu"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
+28 -22
View File
@@ -3,8 +3,8 @@ 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-12-16 21:06\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2020-12-19 09:55\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -12,46 +12,52 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: plume\n"
"X-Crowdin-Project-ID: 352097\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /master/po/plume-front/plume-front.pot\n"
"X-Crowdin-File-ID: 12\n"
# plume-front/src/editor.rs:115
# plume-front/src/editor.rs:189
msgid "Do you want to load the local autosave last edited at {}?"
msgstr ""
# plume-front/src/editor.rs:282
msgid "Open the rich text editor"
msgstr ""
msgstr "打开富文本编辑器"
# plume-front/src/editor.rs:145
# plume-front/src/editor.rs:315
msgid "Title"
msgstr ""
msgstr "标题"
# plume-front/src/editor.rs:149
# plume-front/src/editor.rs:319
msgid "Subtitle, or summary"
msgstr ""
msgstr "副标题或摘要"
# plume-front/src/editor.rs:156
# plume-front/src/editor.rs:326
msgid "Write your article here. Markdown is supported."
msgstr ""
msgstr "在这里写下您的文章。支持 Markdown 语法。"
# plume-front/src/editor.rs:167
# plume-front/src/editor.rs:337
msgid "Around {} characters left"
msgstr ""
msgstr "大约剩余 {} 可输入字符"
# plume-front/src/editor.rs:243
# plume-front/src/editor.rs:414
msgid "Tags"
msgstr ""
msgstr "标签"
# plume-front/src/editor.rs:244
# plume-front/src/editor.rs:415
msgid "License"
msgstr ""
msgstr "许可协议"
# plume-front/src/editor.rs:247
# plume-front/src/editor.rs:418
msgid "Cover"
msgstr ""
msgstr "封面"
# plume-front/src/editor.rs:267
# plume-front/src/editor.rs:438
msgid "This is a draft"
msgstr ""
msgstr "这是一个草稿"
# plume-front/src/editor.rs:274
# plume-front/src/editor.rs:445
msgid "Publish"
msgstr ""
msgstr "发布"
+517 -442
View File
File diff suppressed because it is too large Load Diff
+599 -524
View File
File diff suppressed because it is too large Load Diff
+600 -525
View File
File diff suppressed because it is too large Load Diff
+680 -605
View File
File diff suppressed because it is too large Load Diff
+590 -515
View File
File diff suppressed because it is too large Load Diff
+517 -442
View File
File diff suppressed because it is too large Load Diff
+614 -539
View File
File diff suppressed because it is too large Load Diff
+517 -442
View File
File diff suppressed because it is too large Load Diff
+517 -442
View File
File diff suppressed because it is too large Load Diff
+602 -527
View File
File diff suppressed because it is too large Load Diff
+603 -528
View File
File diff suppressed because it is too large Load Diff
+671 -596
View File
File diff suppressed because it is too large Load Diff
+533 -458
View File
File diff suppressed because it is too large Load Diff
+588 -513
View File
File diff suppressed because it is too large Load Diff
+589 -514
View File
File diff suppressed because it is too large Load Diff
+519 -444
View File
File diff suppressed because it is too large Load Diff
+590 -515
View File
File diff suppressed because it is too large Load Diff
+525 -450
View File
File diff suppressed because it is too large Load Diff

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