Compare commits

..

234 Commits

Author SHA1 Message Date
3cefc0f176 Update docker script to build pgsql variant 2026-03-21 17:32:21 -05:00
1cb346866a Add script to build Docker image from forked code 2026-03-21 17:11:32 -05:00
5cc8c736e7 Add user preference to disable sidebar swipe-to-open on mobile; cleanup migrations + README in prep for long-term fork maintenance 2026-03-21 17:04:05 -05:00
eb5614a03b Merge branch 'master' of code.garrettmills.dev:garrettmills/commafeed 2026-03-21 16:39:28 -05:00
renovate[bot]
fc76d7e609 fix(deps): update dependency @rolldown/plugin-babel to ^0.2.2 2026-03-21 08:51:10 +00:00
renovate[bot]
1b24bf33ed fix(deps): update dependency com.google.protobuf:protobuf-java to v4.34.1 2026-03-20 18:02:04 +00:00
renovate[bot]
58ff378735 fix(deps): update dependency io.github.hakky54:ayza-for-apache5 to v10.0.4 2026-03-19 13:44:43 +00:00
Jérémie Panzer
1cee04a233 Merge pull request #2088 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-3.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.4.0
2026-03-19 00:03:44 +01:00
renovate[bot]
ac11a0efb8 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.4.0 2026-03-18 21:29:01 +00:00
renovate[bot]
f2ea1e3f7a fix(deps): update dependency io.quarkus.platform:quarkus-bom to v3.32.4 2026-03-18 18:07:29 +00:00
Jérémie Panzer
153970c146 Merge pull request #2087 from Athou/renovate/jsdom-29.x
chore(deps): update dependency jsdom to v29
2026-03-18 13:46:24 +01:00
renovate[bot]
c21287e642 chore(deps): update dependency jsdom to v29 2026-03-18 12:13:28 +00:00
Athou
284942a82e add feature-request to the list of exempted labels 2026-03-18 13:00:44 +01:00
Jérémie Panzer
e796916e73 Merge pull request #2085 from Athou/renovate/com.ibm.icu-icu4j-78.x
fix(deps): update dependency com.ibm.icu:icu4j to v78.3
2026-03-18 12:42:41 +01:00
e2a1630adc Add Infrequent tab and corresponding user setting 2026-03-17 21:38:17 -05:00
renovate[bot]
004db1762c fix(deps): update dependency com.ibm.icu:icu4j to v78.3 2026-03-17 22:35:16 +00:00
renovate[bot]
8e05ba8820 chore(deps): update dependency lint-staged to ^16.4.0 (#2083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17 20:33:50 +00:00
renovate[bot]
f4f386b5e5 chore(deps): update dependency lint-staged to ^16.3.4 2026-03-17 09:01:31 +00:00
Jérémie Panzer
ecbf8bec23 Merge pull request #2082 from Athou/renovate/debian-13.x
chore(deps): update debian docker tag to v13.4
2026-03-17 07:29:17 +01:00
renovate[bot]
5d8c09ccda chore(deps): update debian docker tag to v13.4 2026-03-17 00:35:37 +00:00
renovate[bot]
47c5c3d8a0 chore(deps): update dependency io.quarkiverse.playwright:quarkus-playwright to v2.3.3 2026-03-16 21:27:52 +00:00
renovate[bot]
3ddce16d5b chore(deps): update graalvm/setup-graalvm digest to 03e8abf 2026-03-16 18:35:24 +00:00
renovate[bot]
acefdc44d9 chore(deps): lock file maintenance 2026-03-16 01:07:15 +00:00
renovate[bot]
d05c5b9d7f chore(deps): update dependency npm to v11.11.1 2026-03-15 04:53:39 +00:00
renovate[bot]
5d1237d1f4 chore(deps): update ncipollo/release-action digest to 339a818 2026-03-15 01:34:06 +00:00
Athou
6bac8631ac output mantine as its own chunk because it is quite large 2026-03-14 20:20:51 +01:00
Athou
2c803327ad upgrade to vite 8 2026-03-13 22:35:20 +01:00
renovate[bot]
451ae5bc51 chore(deps): update dependency lint-staged to ^16.3.3 2026-03-13 05:46:24 +00:00
renovate[bot]
f41ce8c878 chore(deps): update graalvm/setup-graalvm digest to 6e327d2 2026-03-12 19:12:27 +00:00
renovate[bot]
177c54c813 chore(deps): update dependency maven to v3.9.14 2026-03-12 14:46:09 +00:00
Jérémie Panzer
3765e32fd4 Merge pull request #2079 from Athou/renovate/protobuf-monorepo
fix(deps): update dependency com.google.protobuf:protobuf-java to v4.34.0
2026-03-12 08:19:25 +01:00
renovate[bot]
aab7a16d18 fix(deps): update dependency com.google.protobuf:protobuf-java to v4.34.0 2026-03-12 06:26:40 +00:00
Athou
f2463af63c cel update 2026-03-12 07:25:36 +01:00
renovate[bot]
212c2c3b56 fix(deps): update quarkus.version to v3.32.3 2026-03-11 22:48:05 +00:00
renovate[bot]
3ab00b0cdd chore(deps): update actions/download-artifact digest to 3e5f45b 2026-03-11 17:53:34 +00:00
renovate[bot]
fad85e9299 fix(deps): update dependency org.projectlombok:lombok to v1.18.44 2026-03-11 02:48:12 +00:00
renovate[bot]
3cd5e203e2 fix(deps): update mantine monorepo to ^8.3.16 (#2076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-09 08:40:30 +00:00
Jérémie Panzer
7b081fa870 Merge pull request #2077 from Athou/renovate/biomejs-biome-2.4.x
chore(deps): update dependency @biomejs/biome to v2.4.6
2026-03-09 09:08:37 +01:00
renovate[bot]
5ce22051d4 chore(deps): update dependency @biomejs/biome to v2.4.6 2026-03-09 07:19:20 +00:00
Jérémie Panzer
1e59489fa5 Merge pull request #2078 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2026-03-09 08:18:42 +01:00
renovate[bot]
1e691b1255 chore(deps): lock file maintenance 2026-03-09 01:10:36 +00:00
Jérémie Panzer
61e1bef63f Merge pull request #2074 from Athou/renovate/maven-3.9.x
chore(deps): update dependency maven to v3.9.13
2026-03-07 03:45:01 +01:00
renovate[bot]
46dbb78fbf chore(deps): update dependency maven to v3.9.13 2026-03-07 01:16:46 +00:00
renovate[bot]
99890707b3 chore(deps): update dependency lint-staged to ^16.3.2 2026-03-06 21:20:05 +00:00
Jérémie Panzer
f54c841fdc Merge pull request #2073 from Athou/renovate/react-icons-5.x
fix(deps): update dependency react-icons to ^5.6.0
2026-03-06 17:37:19 +01:00
renovate[bot]
e2a6009ee9 fix(deps): update dependency react-icons to ^5.6.0 2026-03-06 10:39:30 +00:00
Jérémie Panzer
a34dd15040 Merge pull request #2072 from Athou/renovate/docker-build-push-action-7.x
chore(deps): update docker/build-push-action action to v7
2026-03-06 07:20:22 +01:00
renovate[bot]
24c934003d chore(deps): update docker/build-push-action action to v7 2026-03-05 21:51:18 +00:00
renovate[bot]
5300e1a245 chore(deps): update dependency @biomejs/biome to v2.4.5 2026-03-05 18:43:33 +00:00
Jérémie Panzer
90381c670b Merge pull request #2071 from Athou/renovate/org.apache.maven.plugins-maven-resources-plugin-3.x
chore(deps): update dependency org.apache.maven.plugins:maven-resources-plugin to v3.5.0
2026-03-05 14:08:00 +01:00
renovate[bot]
23edea93db chore(deps): update dependency org.apache.maven.plugins:maven-resources-plugin to v3.5.0 2026-03-05 12:25:30 +00:00
Jérémie Panzer
a51712e363 Merge pull request #2070 from Athou/renovate/docker-setup-buildx-action-4.x
chore(deps): update docker/setup-buildx-action action to v4
2026-03-05 13:25:03 +01:00
renovate[bot]
4310e979e1 chore(deps): update docker/setup-buildx-action action to v4 2026-03-05 09:47:18 +00:00
renovate[bot]
f690b76d87 fix(deps): update quarkus.version to v3.32.2 2026-03-05 01:25:51 +00:00
Jérémie Panzer
ac29594b67 Merge pull request #2069 from Athou/renovate/docker-setup-qemu-action-4.x
chore(deps): update docker/setup-qemu-action action to v4
2026-03-04 15:29:50 +01:00
renovate[bot]
93f535bb87 chore(deps): update docker/setup-qemu-action action to v4 2026-03-04 13:38:20 +00:00
Jérémie Panzer
076eb3cf42 Merge pull request #2068 from Athou/renovate/docker-login-action-4.x
chore(deps): update docker/login-action action to v4
2026-03-04 14:35:47 +01:00
Athou
7b2e0fffbd reduce timeout for tests to speed up shutdown 2026-03-04 14:19:56 +01:00
renovate[bot]
8eaab0dbc3 chore(deps): update docker/login-action action to v4 2026-03-04 12:59:09 +00:00
Athou
eaa5bc896e stop the application between tests to make sure that there are no active transactions when we truncate the tables 2026-03-04 13:58:06 +01:00
renovate[bot]
42d1db5fc3 chore(deps): update dependency lint-staged to ^16.3.1 2026-03-04 12:09:08 +00:00
Athou
78c017ddaf wait for tasks to complete when shutting down 2026-03-04 12:49:06 +01:00
renovate[bot]
231551d743 chore(deps): update dependency lint-staged to ^16.3.0 (#2067)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-03 21:56:21 +00:00
Jérémie Panzer
d0984eaba7 Merge pull request #2066 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-3.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.3.0
2026-03-03 06:05:51 +01:00
renovate[bot]
15854a72d1 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.3.0 2026-03-03 01:56:14 +00:00
renovate[bot]
7fd2bf0eda fix(deps): update dependency axios to ^1.13.6 2026-03-02 18:15:22 +00:00
renovate[bot]
6a10a2167e chore(deps): lock file maintenance 2026-03-02 01:25:14 +00:00
Jérémie Panzer
1ba99d255c Merge pull request #2063 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.11.0
2026-03-01 00:43:13 +01:00
renovate[bot]
ff1c2947b6 chore(deps): update dependency npm to v11.11.0 2026-02-28 23:17:20 +00:00
Jérémie Panzer
a690d2e0db Merge pull request #2062 from Athou/renovate/com.puppycrawl.tools-checkstyle-13.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.3.0
2026-03-01 00:16:55 +01:00
renovate[bot]
a3df327396 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.3.0 2026-02-28 20:52:06 +00:00
Jérémie Panzer
ede0016d8e Merge pull request #2060 from Athou/renovate/major-github-artifact-actions
chore(deps): update github artifact actions (major)
2026-02-26 22:57:55 +01:00
renovate[bot]
c19b091795 chore(deps): update github artifact actions 2026-02-26 20:39:27 +00:00
renovate[bot]
9e62c8b9f3 fix(deps): update linguijs monorepo to ^5.9.2 2026-02-26 20:39:23 +00:00
renovate[bot]
9f30dc181c fix(deps): update dependency react-router-dom to ^7.13.1 2026-02-26 18:02:38 +00:00
Jérémie Panzer
37fe44f860 Merge pull request #2059 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.32.1 (minor)
2026-02-25 20:23:16 +01:00
renovate[bot]
68aaab8467 fix(deps): update quarkus.version to v3.32.1 2026-02-25 16:48:25 +00:00
renovate[bot]
b951ed1fcd chore(deps): update debian:13.3 docker digest to 3615a74 2026-02-24 21:53:17 +00:00
Jérémie Panzer
9bd9dc568a Merge pull request #2058 from Athou/renovate/node-24.x
chore(deps): update node.js to v24.14.0
2026-02-24 21:18:33 +01:00
renovate[bot]
29e4356fee chore(deps): update node.js to v24.14.0 2026-02-24 17:22:57 +00:00
renovate[bot]
0ed31eaa99 chore(deps): update dependency @biomejs/biome to v2.4.4 2026-02-23 21:56:45 +00:00
Jérémie Panzer
1e9869b217 Merge pull request #2057 from Athou/renovate/npm-11.10.x
chore(deps): update dependency npm to v11.10.1
2026-02-23 07:21:35 +01:00
renovate[bot]
78cfc2c827 chore(deps): update dependency npm to v11.10.1 2026-02-23 05:33:44 +00:00
renovate[bot]
a6e5a0d125 chore(deps): lock file maintenance 2026-02-23 00:55:55 +00:00
renovate[bot]
ea13aecd27 chore(deps): update dependency @biomejs/biome to v2.4.3 2026-02-22 21:47:30 +00:00
Athou
d838e8f28f fix occasional flicker 2026-02-22 14:36:25 +01:00
Athou
c9a7b9e17c ensure the indicator is not shown above the app header 2026-02-22 11:47:13 +01:00
Athou
8fe2d0bc0e fix typo 2026-02-21 23:58:49 +01:00
Athou
71e2f1e1e6 kill biome on build to prevent unlink errors on Windows 2026-02-21 23:55:08 +01:00
Athou
1ce9d1b9b2 prevent title line wrapping 2026-02-21 23:39:38 +01:00
Athou
b3d6ae467f reduce code duplication 2026-02-21 23:24:03 +01:00
Athou
da8d720dc4 don't show a pointer on hover 2026-02-21 22:58:49 +01:00
Athou
824c38f8ce show unread count on mobile only 2026-02-21 22:52:32 +01:00
Athou
b0579a70d8 Merge branch 'master' of https://github.com/lpoirothattermann/commafeed into lpoirothattermann-master 2026-02-21 22:28:03 +01:00
Athou
f195eb6d0d release 7.0.0 2026-02-21 22:26:40 +01:00
Louis POIROT--HATTERMANN
f9fe2d0976 feat: add unread count badge next to title 2026-02-21 18:54:23 +01:00
renovate[bot]
2aeadc8f67 chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.5 2026-02-21 17:05:08 +00:00
renovate[bot]
ee3eaa1166 chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.5 2026-02-21 12:54:17 +00:00
Athou
5dce143756 rename thunk for consistency 2026-02-20 17:24:31 +01:00
Athou
33a0568895 delay task so that it doesn't run at the same time at OrphanedContentsCleanupTask 2026-02-20 15:55:09 +01:00
Athou
721d728906 prevent SSRF by blocking redirects from public websites to local addresses 2026-02-20 15:07:11 +01:00
Athou
c55cbaf373 add missing translations 2026-02-20 15:05:35 +01:00
Athou
3fd5cfdecd add a setting to mark entries of a feed as read after a number of days (#2041) 2026-02-20 13:24:40 +01:00
Jérémie Panzer
f87d3359c2 Merge pull request #2054 from canoine/patch-10
Update fr/messages.po
2026-02-20 10:12:49 +01:00
canoine
37f27849bd Update fr/messages.po
Not sure for the "Topic" translation...
2026-02-20 09:48:29 +01:00
Athou
6fe326f052 cleanup 2026-02-19 23:21:09 +01:00
Athou
de7e4e9c69 add a button for testing push notification settings 2026-02-19 22:50:34 +01:00
Athou
6861fe303b add a small description for push notifications 2026-02-19 18:01:52 +01:00
Athou
ba3214bf10 remove the possibility to receive notifications when subscribing because that sends a lot of notifications, one for each entry in the feed 2026-02-19 16:08:54 +01:00
Athou
bcce77495a bump dependencies 2026-02-19 14:49:18 +01:00
Athou
a165d2b27e Merge remote-tracking branch 'origin/renovate/patch-quarkus.version' 2026-02-18 21:02:48 +01:00
renovate[bot]
e63714cab0 chore(deps): update dependency @biomejs/biome to ^2.4.0 2026-02-18 21:02:32 +01:00
renovate[bot]
390c21dd91 fix(deps): update quarkus.version to v3.31.4 2026-02-18 19:55:53 +00:00
Jérémie Panzer
9defea9c8e Merge pull request #2052 from Athou/renovate/biomejs-biome-2.x
chore(deps): update dependency @biomejs/biome to v2.4.0
2026-02-18 20:54:35 +01:00
Athou
5906173de7 Merge branch 'lpoirothattermann-master' 2026-02-18 20:53:50 +01:00
Athou
a81de48cfb change the default value of blockLocalAddresses 2026-02-18 20:53:23 +01:00
Athou
2be61e8b1c refactor 2026-02-18 20:37:11 +01:00
renovate[bot]
4d7fc9f354 chore(deps): update dependency @biomejs/biome to v2.4.0 2026-02-18 17:35:31 +00:00
renovate[bot]
e11fd7b3a1 chore(deps): update dependency jsdom to ^28.1.0 2026-02-18 04:37:15 +00:00
renovate[bot]
cc0348b113 chore(deps): update ibm-semeru-runtimes:open-jdk-25.0.2_10-jre docker digest to b02e4cd 2026-02-18 01:48:45 +00:00
Athou
77bb948bf2 remove unnecessary divider 2026-02-17 20:34:24 +01:00
Athou
8e2adcbce4 fix wrong merge conflict resolve 2026-02-17 20:34:06 +01:00
Athou
bb141203a8 fix missing translations 2026-02-17 20:33:59 +01:00
Jérémie Panzer
579c22df65 Merge pull request #2049 from canoine/patch-9
Update fr/messages.po
2026-02-16 21:34:53 +01:00
canoine
694e8291de Update fr/messages.po
New filtering entries translated.
2026-02-16 18:26:03 +01:00
renovate[bot]
367259fd31 chore(deps): lock file maintenance 2026-02-16 02:10:12 +00:00
Louis POIROT--HATTERMANN
e54151d2eb feat: send notification for new entries with Gotify, ntfy or Pushover, configurable per feed. 2026-02-15 18:45:28 +01:00
Jérémie Panzer
ca2c687f26 Merge pull request #2044 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.10.0
2026-02-15 16:20:37 +01:00
Athou
d444a7080d migrate filtering expressions to safer CEL and add a query builder 2026-02-15 16:13:10 +01:00
renovate[bot]
08bfcded7f chore(deps): update dependency @biomejs/biome to v2.3.15 2026-02-15 12:35:42 +00:00
renovate[bot]
1c9e4f978b chore(deps): update dependency vite-tsconfig-paths to ^6.1.1 2026-02-15 01:06:08 +00:00
renovate[bot]
a5f1fba6ee chore(deps): update dependency npm to v11.10.0 2026-02-14 17:37:17 +00:00
renovate[bot]
88f1cf1913 chore(deps): update dependency @types/react to ^19.2.14 2026-02-14 13:35:26 +00:00
renovate[bot]
1fb69d2861 fix(deps): update linguijs monorepo to ^5.9.1 2026-02-14 10:09:00 +00:00
renovate[bot]
3aeff66522 chore(deps): update dependency @vitejs/plugin-react to ^5.1.4 2026-02-13 09:48:06 +00:00
renovate[bot]
114cbe0ec5 chore(deps): update docker/build-push-action digest to 10e90e3 2026-02-12 17:55:15 +00:00
renovate[bot]
bfe94222b7 fix(deps): update quarkus.version to v3.31.3 2026-02-11 21:00:14 +00:00
renovate[bot]
30061abc54 chore(deps): update docker/build-push-action digest to 601a80b 2026-02-11 18:48:17 +00:00
renovate[bot]
126e07489b fix(deps): update dependency axios to ^1.13.5 2026-02-11 13:48:03 +00:00
renovate[bot]
bd2577c089 chore(deps): update docker/build-push-action digest to ee4ca42 2026-02-11 13:15:00 +00:00
renovate[bot]
5039c61e98 chore(deps): update node.js to v24.13.1 2026-02-10 20:28:00 +00:00
renovate[bot]
5f34ab3d7e chore(deps): update dependency vite-tsconfig-paths to ^6.1.0 2026-02-10 17:49:55 +00:00
Athou
fee47427cf verify i18n extraction has been run before committing 2026-02-10 11:32:24 +01:00
renovate[bot]
15c8289a01 chore(deps): update ibm-semeru-runtimes docker tag to open-jdk-25.0.2_10-jre 2026-02-10 00:25:53 +00:00
Athou
141a863079 release 6.2.0 2026-02-09 19:32:22 +01:00
Athou
6fa8d4be34 keep starred entries (#1581) 2026-02-09 06:59:41 +01:00
renovate[bot]
984e8a44d5 chore(deps): lock file maintenance 2026-02-09 01:33:44 +00:00
renovate[bot]
bdb296bce2 chore(deps): update dependency @types/react to ^19.2.13 2026-02-08 14:02:01 +00:00
Jérémie Panzer
955a9084c3 Merge pull request #2042 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.9.0
2026-02-08 05:23:05 +01:00
renovate[bot]
70f486b0eb chore(deps): update dependency npm to v11.9.0 2026-02-07 21:45:56 +00:00
renovate[bot]
0bc383c6a8 chore(deps): update dependency @types/react to ^19.2.11 2026-02-07 13:12:20 +00:00
renovate[bot]
0bb2b36585 chore(deps): update dependency @biomejs/biome to v2.3.14 2026-02-06 16:48:35 +00:00
Jérémie Panzer
9e3a24753a Merge pull request #2040 from Athou/renovate/com.puppycrawl.tools-checkstyle-13.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.2.0
2026-02-06 02:20:48 +01:00
renovate[bot]
f2c400799e chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.2.0 2026-02-05 21:38:36 +00:00
renovate[bot]
25a8c8a7e3 chore(deps): update dependency @vitejs/plugin-react to ^5.1.3 2026-02-05 10:32:18 +00:00
Jérémie Panzer
8f95d89fc6 Merge pull request #2039 from Athou/renovate/jsdom-28.x
chore(deps): update dependency jsdom to v28
2026-02-05 11:30:07 +01:00
renovate[bot]
39b0cdb9d5 chore(deps): update dependency jsdom to v28 2026-02-05 09:42:39 +00:00
renovate[bot]
42e06b848e fix(deps): update quarkus.version to v3.31.2 2026-02-04 17:56:35 +00:00
renovate[bot]
7c3a13b1c4 fix(deps): update mantine monorepo to ^8.3.14 2026-02-04 12:45:49 +00:00
Jérémie Panzer
151248fce2 Merge pull request #2038 from xmgz/master
Update gl messages.po
2026-02-04 07:13:01 +01:00
ghose
6e8d6fe063 Update gl messages.po
up to date gl translation
2026-02-04 04:09:30 +00:00
renovate[bot]
ca2da5e631 chore(deps): update actions/checkout digest to de0fac2 2026-02-03 16:36:24 +00:00
renovate[bot]
6cd3b70201 chore(deps): update debian:13.3 docker digest to 2c91e48 2026-02-03 14:08:51 +00:00
renovate[bot]
2dcfba75b5 chore(deps): update jaywcjlove/markdown-to-html-cli action to v5.0.4 2026-02-03 09:32:58 +00:00
Jérémie Panzer
44a51b03d3 Merge pull request #2037 from Athou/renovate/org.apache.maven.plugins-maven-compiler-plugin-3.x
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.15.0
2026-02-02 06:14:39 +01:00
renovate[bot]
6ee9e9831e chore(deps): lock file maintenance 2026-02-02 01:56:05 +00:00
renovate[bot]
68c717cee8 chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.15.0 2026-02-01 21:36:26 +00:00
Jérémie Panzer
b15fc02c34 Merge pull request #2035 from Athou/renovate/com.puppycrawl.tools-checkstyle-13.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.1.0
2026-02-01 07:38:58 +01:00
renovate[bot]
033ebfb497 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v13.1.0 2026-01-31 20:23:47 +00:00
renovate[bot]
4cceaa7650 fix(deps): update dependency axios to ^1.13.4 2026-01-30 21:51:52 +00:00
renovate[bot]
5df47f1396 chore(deps): update dependency @types/react to ^19.2.10 2026-01-30 12:33:18 +00:00
renovate[bot]
903f35c01b fix(deps): update react monorepo to ^19.2.4 2026-01-29 20:53:17 +00:00
renovate[bot]
6a34f94277 chore(deps): update dependency @biomejs/biome to v2.3.13 2026-01-29 17:09:33 +00:00
Athou
dcc143eb7d upgrade to quarkus 3.31 2026-01-28 18:04:16 +01:00
renovate[bot]
fb47bf27e8 fix(deps): update dependency axios to ^1.13.3 2026-01-28 16:39:42 +00:00
renovate[bot]
dcf969ff2e chore(deps): update docker/login-action digest to c94ce9f 2026-01-28 13:35:35 +00:00
renovate[bot]
32c1318355 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.2.1 2026-01-27 22:36:42 +00:00
Jérémie Panzer
8ca6b89da4 Merge pull request #2033 from Athou/renovate/patch-react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.13.0
2026-01-27 07:21:39 +01:00
renovate[bot]
b46c3a15f3 fix(deps): update dependency react-router-dom to ^7.13.0 2026-01-27 04:49:15 +00:00
renovate[bot]
cbc5e014f7 chore(deps): update dependency vite-tsconfig-paths to ^6.0.5 (#2032)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 04:48:45 +00:00
renovate[bot]
8925b248e4 fix(deps): update linguijs monorepo to ^5.9.0 2026-01-26 22:16:14 +00:00
renovate[bot]
cc6aa2bbc5 chore(deps): update dependency @biomejs/biome to v2.3.12 2026-01-26 17:45:44 +00:00
Athou
1989aaf8b4 release 6.1.1 2026-01-26 15:47:39 +01:00
Athou
c90c91b748 fix old starred entries not loading if they were marked as read (#2031) 2026-01-26 15:45:50 +01:00
Athou
bca23db213 remvoe unused jacoco plugin 2026-01-26 13:39:50 +01:00
renovate[bot]
c9a92d2043 chore(deps): lock file maintenance 2026-01-26 05:00:06 +00:00
renovate[bot]
c48e06fa46 fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.38 2026-01-26 02:10:23 +00:00
renovate[bot]
5529eced91 chore(deps): update dependency vitest to ^4.0.18 2026-01-25 20:53:59 +00:00
Athou
2a0d935471 release 6.1.0 2026-01-25 10:58:32 +01:00
Athou
6c68fda572 make "disable pull to refresh" false by default (#2030) 2026-01-25 10:49:11 +01:00
Jérémie Panzer
861c1fc3dc Merge pull request #2029 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.8.0
2026-01-25 05:04:32 +01:00
renovate[bot]
5971bb4255 chore(deps): update dependency npm to v11.8.0 2026-01-25 01:59:43 +00:00
renovate[bot]
76ba360631 chore(deps): update dependency @types/react to ^19.2.9 2026-01-23 19:59:17 +00:00
renovate[bot]
89d3ff3c90 fix(deps): update quarkus.version to v3.30.8 2026-01-23 12:23:43 +00:00
renovate[bot]
34024a913d fix(deps): update mantine monorepo to ^8.3.13 2026-01-23 10:50:58 +00:00
Athou
a858380121 cleanup 2026-01-23 08:34:10 +01:00
Jérémie Panzer
e1dc870005 Merge pull request #2028 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-3.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.2.0
2026-01-23 02:04:25 +01:00
renovate[bot]
2fc1cac869 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v3.2.0 2026-01-23 00:39:57 +00:00
renovate[bot]
f627ff4958 chore(deps): update dependency @testing-library/react to ^16.3.2 2026-01-22 13:07:35 +00:00
renovate[bot]
5ff8e51948 chore(deps): update dependency io.quarkiverse.playwright:quarkus-playwright to v2.3.2 2026-01-21 22:06:21 +00:00
renovate[bot]
538f25c6bb fix(deps): update quarkus.version to v3.30.7 2026-01-21 15:56:51 +00:00
Jérémie Panzer
65100ba279 Merge pull request #2026 from WangLei1993/master
add Chinese translation for new entry
2026-01-20 20:55:40 +01:00
WangLei1993
79fd470bbf add Chinese translation for new entry 2026-01-21 01:32:16 +08:00
Jérémie Panzer
866d74665b Merge pull request #2025 from canoine/patch-8
Update fr/messages.po
2026-01-20 14:13:04 +01:00
canoine
29da74f038 Update fr/messages.po
New etries translated
2026-01-20 13:56:59 +01:00
Athou
3c8ac35a46 make password match rule reusable 2026-01-20 08:54:48 +01:00
Athou
afe957ba59 create a dedicated password reset page (#2023) 2026-01-19 20:55:26 +01:00
renovate[bot]
7e50e99351 fix(deps): update linguijs monorepo to ^5.8.0 2026-01-19 10:48:25 +00:00
renovate[bot]
62ce462cc8 chore(deps): lock file maintenance 2026-01-19 03:48:36 +00:00
Jérémie Panzer
108cb06f43 Merge pull request #2024 from Athou/renovate/org.codehaus.mojo-properties-maven-plugin-1.x
chore(deps): update dependency org.codehaus.mojo:properties-maven-plugin to v1.3.0
2026-01-19 04:47:18 +01:00
renovate[bot]
95a38675bc chore(deps): update dependency org.codehaus.mojo:properties-maven-plugin to v1.3.0 2026-01-19 00:35:24 +00:00
Athou
714681bc50 don't set "en" as the default language, use the preferred language of the browser (#2018) 2026-01-17 20:09:23 +01:00
Athou
0f8d91d997 close profile menu on scroll (#2019) 2026-01-16 15:53:40 +01:00
Jérémie Panzer
562297a82f Merge pull request #2022 from WangLei1993/master
add Chinese translation for new entry
2026-01-16 15:40:53 +01:00
WangLei1993
b108bf06e5 add Chinese translation for new entry 2026-01-16 22:21:00 +08:00
renovate[bot]
3c819066fd chore(deps): update ibm-semeru-runtimes:open-jdk-25.0.1_8-jre docker digest to e12d5f2 2026-01-16 02:15:00 +00:00
Athou
5f30cb7e2e reuse validation rule 2026-01-16 01:08:25 +01:00
Athou
5a95b95801 validate password in the frontend too (#2017) 2026-01-15 21:36:00 +01:00
renovate[bot]
eb573fdc8b chore(deps): update dependency vitest to ^4.0.17 2026-01-15 14:58:31 +00:00
Jérémie Panzer
238ea54e98 Merge pull request #2020 from canoine/patch-7
Update fr/messages.po
2026-01-15 08:56:05 +01:00
canoine
e4dfc47fb8 Update fr/messages.po
Translation of the new entries.
2026-01-15 07:28:50 +01:00
Jérémie Panzer
a1491c779a Merge pull request #2015 from WangLei1993/master
add Chinese translation for new entry
2026-01-14 20:08:02 +01:00
WangLei1993
dabd7552be add Chinese translation for new entry 2026-01-15 01:06:19 +08:00
Jérémie Panzer
0a4c56af1f Merge pull request #2014 from Athou/renovate/node-24.x
chore(deps): update node.js to v24.13.0
2026-01-13 19:44:55 +01:00
renovate[bot]
c3dae5b92c chore(deps): update node.js to v24.13.0 2026-01-13 14:11:32 +00:00
renovate[bot]
2c3105b526 chore(deps): update debian:13.3 docker digest to 5cf544f 2026-01-13 14:11:28 +00:00
renovate[bot]
20f5081ac8 chore(deps): update dependency @types/react to ^19.2.8 2026-01-13 10:49:24 +00:00
Jérémie Panzer
3091eb9d14 Merge pull request #2013 from Athou/renovate/debian-13.x
chore(deps): update debian docker tag to v13.3
2026-01-13 06:52:42 +01:00
renovate[bot]
5bdda42239 chore(deps): update debian docker tag to v13.3 2026-01-13 04:51:00 +00:00
renovate[bot]
7eda8b7662 chore(deps): update dependency vite-tsconfig-paths to ^6.0.4 2026-01-13 02:08:08 +00:00
renovate[bot]
fc94ce5d2b fix(deps): update mantine monorepo to ^8.3.12 2026-01-12 14:23:32 +00:00
renovate[bot]
e5d7161ab7 chore(deps): lock file maintenance 2026-01-12 01:10:34 +00:00
Jérémie Panzer
f725cb7fa4 Merge pull request #2012 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.12.0
2026-01-10 21:35:47 +01:00
renovate[bot]
830e689fe8 fix(deps): update dependency react-router-dom to ^7.12.0 2026-01-10 20:02:47 +00:00
127 changed files with 10008 additions and 5427 deletions

1
.github/stale.yml vendored
View File

@@ -7,6 +7,7 @@ exemptLabels:
- pinned
- security
- enhancement
- feature-request
- bug
# Label to use when marking an issue as stale
staleLabel: wontfix

View File

@@ -23,13 +23,13 @@ jobs:
steps:
# Checkout
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
# Setup
- name: Set up GraalVM
uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1
uses: graalvm/setup-graalvm@03e8abf916fd0e281b2efe7b2da3378bb0a1d085 # v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
@@ -48,33 +48,33 @@ jobs:
run: mkdir -p target/pages/documentation/custom-css
- name: Convert readme file to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4
with:
source: README.md
output: target/pages/index.html
- name: Convert config documentation to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4
with:
source: commafeed-server/target/quarkus-generated-doc/config/commafeed-server.md
output: target/pages/documentation/index.html
- name: Convert custom css documentation to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4
with:
source: documentation/CUSTOMCSS.md
output: target/pages/documentation/custom-css/index.html
# Upload artifacts
- name: Upload cross-platform app
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
if: matrix.os == 'ubuntu-latest' # we only need to upload the cross-platform artifact once per database
with:
name: commafeed-${{ matrix.database }}-jvm
path: commafeed-server/target/commafeed-*.zip
- name: Upload native executable
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }}
path: commafeed-server/target/commafeed-*-runner*
@@ -98,23 +98,23 @@ jobs:
steps:
# Checkout
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
# Setup
- name: Set up QEMU
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
- name: Install required packages
run: sudo apt-get install -y rename unzip
# Prepare artifacts
- name: Download artifacts
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: commafeed-${{ matrix.database }}-*
path: ./artifacts
@@ -135,7 +135,7 @@ jobs:
# Docker
- name: Login to Container Registry
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
if: ${{ env.DOCKERHUB_USERNAME != '' }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -143,7 +143,7 @@ jobs:
## build but don't push for PRs and renovate
- name: Docker build - native
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
@@ -151,7 +151,7 @@ jobs:
platforms: linux/amd64,linux/arm64/v8
- name: Docker build - jvm
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
@@ -160,7 +160,7 @@ jobs:
## build and push tag
- name: Docker build and push tag - native
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
if: ${{ github.ref_type == 'tag' }}
with:
context: .
@@ -172,7 +172,7 @@ jobs:
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}
- name: Docker build and push tag - jvm
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
if: ${{ github.ref_type == 'tag' }}
with:
context: .
@@ -185,7 +185,7 @@ jobs:
## build and push master
- name: Docker build and push master - native
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
if: ${{ github.ref_name == 'master' }}
with:
context: .
@@ -195,7 +195,7 @@ jobs:
tags: athou/commafeed:master-${{ matrix.database }}
- name: Docker build and push master - jvm
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
if: ${{ github.ref_name == 'master' }}
with:
context: .
@@ -215,12 +215,12 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: commafeed-*
path: ./artifacts
@@ -236,7 +236,7 @@ jobs:
version: ${{ github.ref_name }}
- name: Create GitHub release
uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1
uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1
with:
name: CommaFeed ${{ github.ref_name }}
body: ${{ steps.changelog_reader.outputs.changes }}
@@ -249,7 +249,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0

View File

@@ -1,3 +1,3 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.14/apache-maven-3.9.14-bin.zip

View File

@@ -1,5 +1,28 @@
# Changelog
## [7.0.0]
- Replaced the JEXL filter expression for marking feed entries as read automatically with a user-friendly visual query builder. Expressions are now evaluated with Common Expression Language, which is safer than JEXL and sanboxed by default.
- Added a per-feed setting for sending push notifications to ntfy, Gotify or Pushover when new feed entries are discovered (#1610)
- Added a per-feed setting for marking entries as read after a number of days (#2041)
- The default value of `commafeed.http-client.block-local-addresses` is now false, allowing users to subscribe to feeds only available on their local network. This may be a security risk (SSRF) if your instance is accessible by untrusted users, so you may want to set it to true if you host a public instance of CommaFeed with user registeration enabled.
- When `commafeed.http-client.block-local-addresses` is enabled, SSRF is now also mitigated by blocking public websites redirecting to local ones.
## [6.2.0]
- Starred entries are no longer deleted after a certain amount of time, they are now kept indefinitely. The new `commafeed.database.cleanup.keep-starred-entries` setting can be disabled to restore the previous behavior if you want to keep deleting starred entries during normal entries cleanup (#1581)
## [6.1.1]
- Fix old starred entries not loading if they were marked as read (#2031)
## [6.1.0]
- When clicking on the password reset link, a random password is no longer generated automatically. The user is now redirected to a page where they can set their own password (#2023)
- Use browser preferred language instead of English when using CommaFeed for the first time (#2018)
- The profile menu is now closed when scrolling the page (#2019)
- The "disable pull to refresh" feature is now disabled by default (#2030)
## [6.0.0]
- When booting CommaFeed for the first time, the default "admin" account is no longer created automatically. A setup wizard will guide you through the creation of an admin account

22
README-fork.md Normal file
View File

@@ -0,0 +1,22 @@
# `garrettmills/commafeed`
This is my personal fork of `Athou/commafeed` with some tweaks:
- "Infrequent" tab - like "All" but limits to blogs w/ an average post interval greater than a user-configurable number of days
- User preference to disable the swipe-to-open-menu gesture on mobile
## Building
Use `gmfork-build-docker.sh` to build the JVM Docker image for `linux/amd64`:
You can use the `DB_VARIANT` env var to change which DB the image builds with. By default, it builds the `postgresql` variant.
```sh
DOCKER_REGISTRY=myregistry.example.com DB_VARIANT=h2 ./gmfork-build-docker.sh
```
To run locally:
```sh
docker run -p 8082:8082 $DOCKER_REGISTRY/commafeed-fork:latest
```

View File

@@ -17,6 +17,7 @@ Google Reader inspired self-hosted RSS reader, based on Quarkus and React/TypeSc
- REST API
- Fever-compatible API for native mobile apps
- Can automatically mark articles as read based on user-defined rules
- Push notifications when new articles are published
- Highly customizable with [custom CSS](https://athou.github.io/commafeed/documentation/custom-css) and JavaScript
- [Browser extension](https://github.com/Athou/commafeed-browser-extension)
- Compiles to native code for blazing fast startup and low memory usage

View File

@@ -0,0 +1 @@
cd commafeed-client && npx lint-staged

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.11/schema.json",
"$schema": "https://biomejs.dev/schemas/2.4.7/schema.json",
"formatter": {
"indentStyle": "space",
"indentWidth": 4,

View File

@@ -0,0 +1,3 @@
export default {
"src/**/*.{js,jsx,ts,tsx}": () => ["npm run i18n:extract", "git diff --exit-code commafeed-client/src/locales/en/messages.po"],
}

File diff suppressed because it is too large Load Diff

View File

@@ -12,36 +12,40 @@
"test:ci": "vitest run",
"lint": "biome check",
"lint:fix": "biome check --write",
"i18n:extract": "lingui extract --clean"
"i18n:extract": "lingui extract --clean",
"prepare": "cd .. && husky ./commafeed-client/.husky"
},
"dependencies": {
"@emotion/react": "^11.14.0",
"@fontsource/open-sans": "^5.2.7",
"@lingui/core": "^5.7.0",
"@lingui/react": "^5.7.0",
"@mantine/core": "^8.3.11",
"@mantine/form": "^8.3.11",
"@mantine/hooks": "^8.3.11",
"@mantine/modals": "^8.3.11",
"@mantine/notifications": "^8.3.11",
"@mantine/spotlight": "^8.3.11",
"@lingui/core": "^5.9.3",
"@lingui/react": "^5.9.3",
"@mantine/core": "^8.3.16",
"@mantine/form": "^8.3.16",
"@mantine/hooks": "^8.3.16",
"@mantine/modals": "^8.3.16",
"@mantine/notifications": "^8.3.16",
"@mantine/spotlight": "^8.3.16",
"@monaco-editor/react": "^4.7.0",
"@react-querybuilder/mantine": "^8.14.0",
"@reduxjs/toolkit": "^2.11.2",
"axios": "^1.13.2",
"dayjs": "^1.11.19",
"@rolldown/plugin-babel": "^0.2.2",
"axios": "^1.13.6",
"dayjs": "^1.11.20",
"escape-string-regexp": "^5.0.0",
"interweave": "^13.1.1",
"monaco-editor": "^0.55.1",
"mousetrap": "^1.6.5",
"react": "^19.2.3",
"react": "^19.2.4",
"react-async-hook": "^4.0.0",
"react-contexify": "^6.0.0",
"react-dom": "^19.2.3",
"react-dom": "^19.2.4",
"react-draggable": "^4.5.0",
"react-icons": "^5.5.0",
"react-icons": "^5.6.0",
"react-infinite-scroller": "^1.2.6",
"react-querybuilder": "^8.14.0",
"react-redux": "^9.2.0",
"react-router-dom": "^7.11.0",
"react-router-dom": "^7.13.1",
"react-swipeable": "^7.0.2",
"style-to-object": "^1.0.14",
"throttle-debounce": "^5.0.2",
@@ -50,32 +54,33 @@
"websocket-heartbeat-js": "^1.1.3"
},
"devDependencies": {
"@biomejs/biome": "^2.3.11",
"@lingui/babel-plugin-lingui-macro": "^5.7.0",
"@lingui/cli": "^5.7.0",
"@lingui/vite-plugin": "^5.7.0",
"@biomejs/biome": "^2.4.7",
"@lingui/babel-plugin-lingui-macro": "^5.9.3",
"@lingui/cli": "^5.9.3",
"@lingui/vite-plugin": "^5.9.3",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/mousetrap": "^1.6.15",
"@types/react": "^19.2.7",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/react-infinite-scroller": "^1.2.5",
"@types/throttle-debounce": "^5.0.2",
"@types/tinycon": "^0.6.7",
"@vitejs/plugin-react": "^5.1.2",
"@vitejs/plugin-react": "^6.0.1",
"babel-plugin-react-compiler": "1.0.0",
"jsdom": "^27.4.0",
"husky": "^9.1.7",
"jsdom": "^29.0.0",
"lint-staged": "^16.4.0",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vite": "^8.0.0",
"vite-plugin-checker": "^0.12.0",
"vite-tsconfig-paths": "^6.0.3",
"vitest": "^4.0.16",
"vitest": "^4.1.0",
"yaml": "^2.8.2"
},
"overrides": {
"react-infinite-scroller": {
"react": "^19.2.3"
"react": "^19.2.4"
}
}
}

View File

@@ -6,16 +6,16 @@
<parent>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>6.0.0</version>
<version>7.0.0</version>
</parent>
<artifactId>commafeed-client</artifactId>
<name>CommaFeed Client</name>
<properties>
<!-- renovate: datasource=node-version depName=node -->
<node.version>v24.12.0</node.version>
<node.version>v24.14.0</node.version>
<!-- renovate: datasource=npm depName=npm -->
<npm.version>11.7.0</npm.version>
<npm.version>11.11.1</npm.version>
</properties>
<build>
@@ -72,7 +72,7 @@
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.4.0</version>
<version>3.5.0</version>
<executions>
<execution>
<id>copy web interface to resources</id>
@@ -94,4 +94,49 @@
</plugin>
</plugins>
</build>
<profiles>
<!-- This profile is used to kill the Biome process on Windows -->
<!-- npm ci can fail if Biome is running (e.g., in the IDE) because it locks some files -->
<profile>
<id>kill-biome</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.6.3</version>
<executions>
<execution>
<id>kill-biome</id>
<phase>initialize</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>taskkill</executable>
<arguments>
<argument>/F</argument>
<argument>/IM</argument>
<argument>biome.exe</argument>
</arguments>
<successCodes>
<successCode>0</successCode>
<!-- taskkill returns 128 if the process is not found, which is fine in this case -->
<successCode>128</successCode>
</successCodes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -34,6 +34,7 @@ import { TagDetailsPage } from "@/pages/app/TagDetailsPage"
import { InitialSetupPage } from "@/pages/auth/InitialSetupPage"
import { LoginPage } from "@/pages/auth/LoginPage"
import { PasswordRecoveryPage } from "@/pages/auth/PasswordRecoveryPage"
import { PasswordResetPage } from "@/pages/auth/PasswordResetPage"
import { RegistrationPage } from "@/pages/auth/RegistrationPage"
import { WelcomePage } from "@/pages/WelcomePage"
@@ -88,6 +89,7 @@ function AppRoutes() {
<Route path="login" element={<LoginPage />} />
<Route path="register" element={<RegistrationPage />} />
<Route path="passwordRecovery" element={<PasswordRecoveryPage />} />
<Route path="passwordReset" element={<PasswordResetPage />} />
<Route path="app" element={<Layout header={<Header />} sidebar={<Tree />} sidebarVisible={sidebarVisible} />}>
<Route path="category">
<Route path=":id" element={<FeedEntriesPage sourceType="category" />} />
@@ -193,6 +195,8 @@ function CustomJsHandler() {
document.body.appendChild(script)
setScriptLoaded(true)
return () => script.remove()
}, [scriptLoaded, loading])
return null
@@ -205,6 +209,8 @@ function CustomCssHandler() {
link.type = "text/css"
link.href = "custom_css.css"
document.head.appendChild(link)
return () => link.remove()
}, [])
return null

View File

@@ -17,8 +17,10 @@ import type {
MarkRequest,
Metrics,
MultipleMarkRequest,
PasswordResetConfirmationRequest,
PasswordResetRequest,
ProfileModificationRequest,
PushNotificationSettings,
RegistrationRequest,
ServerInfo,
Settings,
@@ -97,8 +99,11 @@ export const client = {
register: async (req: RegistrationRequest) => await axiosInstance.post("user/register", req),
initialSetup: async (req: InitialSetupRequest) => await axiosInstance.post("user/initialSetup", req),
passwordReset: async (req: PasswordResetRequest) => await axiosInstance.post("user/passwordReset", req),
passwordResetCallback: async (req: PasswordResetConfirmationRequest) => await axiosInstance.post("user/passwordResetCallback", req),
getSettings: async () => await axiosInstance.get<Settings>("user/settings"),
saveSettings: async (settings: Settings) => await axiosInstance.post("user/settings", settings),
sendTestPushNotification: async (settings: PushNotificationSettings) =>
await axiosInstance.post("user/pushNotificationTest", settings),
getProfile: async () => await axiosInstance.get<UserModel>("user/profile"),
saveProfile: async (req: ProfileModificationRequest) => await axiosInstance.post("user/profile", req),
deleteProfile: async () => await axiosInstance.post("user/profile/deleteAccount"),

View File

@@ -18,6 +18,13 @@ const categories: Record<string, Omit<Category, "name">> = {
feeds: [],
position: 1,
},
infrequent: {
id: "infrequent",
expanded: false,
children: [],
feeds: [],
position: 2,
},
}
const sharing: {
@@ -105,6 +112,7 @@ export const Constants = {
tooltip: {
delay: 500,
},
infrequentThresholdDaysDefault: 7,
browserExtensionUrl: "https://github.com/Athou/commafeed-browser-extension",
customCssDocumentationUrl: "https://athou.github.io/commafeed/documentation/custom-css",
bitcoinWalletAddress: "1dymfUxqCWpyD7a6rQSqNy4rLVDBsAr5e",

View File

@@ -40,7 +40,9 @@ export const loadMoreEntries = createAppAsyncThunk("entries/loadMore", async (_,
const state = thunkApi.getState()
const { source } = state.entries
const offset =
state.user.settings?.readingMode === "all" ? state.entries.entries.length : state.entries.entries.filter(e => !e.read).length
state.user.settings?.readingMode === "all" || (source.type === "category" && source.id === "starred")
? state.entries.entries.length
: state.entries.entries.filter(e => !e.read).length
const endpoint = getEndpoint(state.entries.source.type)
const result = await endpoint(buildGetEntriesPaginatedRequest(state, source, offset))
return result.data

View File

@@ -1,5 +1,5 @@
import { configureStore } from "@reduxjs/toolkit"
import { type TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
import { shallowEqual, type TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
import { entriesSlice } from "@/app/entries/slice"
import { redirectSlice } from "@/app/redirect/slice"
import { serverSlice } from "@/app/server/slice"
@@ -41,3 +41,4 @@ export type AppDispatch = typeof store.dispatch
export const useAppDispatch: () => AppDispatch = useDispatch
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
export const useShallowEqualAppSelector: TypedUseSelectorHook<RootState> = selector => useSelector(selector, shallowEqual)

View File

@@ -27,6 +27,7 @@ const createFeed = (id: number, unread: number): Subscription => ({
feedUrl: "",
feedLink: "",
iconUrl: "",
pushNotificationsEnabled: true,
})
const root = createCategory("root")

View File

@@ -28,6 +28,10 @@ export interface Subscription {
position: number
newestItemTime?: number
filter?: string
filterLegacy?: string
pushNotificationsEnabled: boolean
autoMarkAsReadAfterDays?: number
averageEntryIntervalMs?: number
}
export interface Category {
@@ -109,6 +113,8 @@ export interface FeedModificationRequest {
categoryId?: string
position?: number
filter?: string
pushNotificationsEnabled: boolean
autoMarkAsReadAfterDays?: number
}
export interface GetEntriesRequest {
@@ -196,6 +202,12 @@ export interface PasswordResetRequest {
email: string
}
export interface PasswordResetConfirmationRequest {
email: string
token: string
password: string
}
export interface ProfileModificationRequest {
currentPassword: string
email: string
@@ -228,6 +240,8 @@ export interface ServerInfo {
treeReloadInterval: number
forceRefreshCooldownDuration: number
initialSetupRequired: boolean
minimumPasswordLength: number
pushNotificationsEnabled: boolean
}
export interface SharingSettings {
@@ -241,8 +255,18 @@ export interface SharingSettings {
buffer: boolean
}
export type PushNotificationType = "ntfy" | "gotify" | "pushover"
export interface PushNotificationSettings {
type?: PushNotificationType
serverUrl?: string
userId?: string
userSecret?: string
topic?: string
}
export interface Settings {
language: string
language?: string
readingMode: ReadingMode
readingOrder: ReadingOrder
showRead: boolean
@@ -261,8 +285,11 @@ export interface Settings {
unreadCountTitle: boolean
unreadCountFavicon: boolean
disablePullToRefresh: boolean
disableMobileSwipe: boolean
infrequentThresholdDays: number
primaryColor?: string
sharingSettings: SharingSettings
pushNotificationSettings: PushNotificationSettings
}
export interface LocalSettings {

View File

@@ -4,14 +4,17 @@ import { createSlice, isAnyOf, type PayloadAction } from "@reduxjs/toolkit"
import type { LocalSettings, Settings, UserModel, ViewMode } from "@/app/types"
import {
changeCustomContextMenu,
changeDisableMobileSwipe,
changeDisablePullToRefresh,
changeEntriesToKeepOnTopWhenScrolling,
changeExternalLinkIconDisplayMode,
changeInfrequentThresholdDays,
changeLanguage,
changeMarkAllAsReadConfirmation,
changeMarkAllAsReadNavigateToUnread,
changeMobileFooter,
changePrimaryColor,
changePushNotificationSettings,
changeReadingMode,
changeReadingOrder,
changeScrollMarks,
@@ -140,6 +143,14 @@ export const userSlice = createSlice({
if (!state.settings) return
state.settings.disablePullToRefresh = action.meta.arg
})
builder.addCase(changeDisableMobileSwipe.pending, (state, action) => {
if (!state.settings) return
state.settings.disableMobileSwipe = action.meta.arg
})
builder.addCase(changeInfrequentThresholdDays.pending, (state, action) => {
if (!state.settings) return
state.settings.infrequentThresholdDays = action.meta.arg
})
builder.addCase(changePrimaryColor.pending, (state, action) => {
if (!state.settings) return
state.settings.primaryColor = action.meta.arg
@@ -148,6 +159,10 @@ export const userSlice = createSlice({
if (!state.settings) return
state.settings.sharingSettings[action.meta.arg.site] = action.meta.arg.value
})
builder.addCase(changePushNotificationSettings.pending, (state, action) => {
if (!state.settings) return
state.settings.pushNotificationSettings = action.meta.arg
})
builder.addMatcher(
isAnyOf(
@@ -166,8 +181,11 @@ export const userSlice = createSlice({
changeUnreadCountTitle.fulfilled,
changeUnreadCountFavicon.fulfilled,
changeDisablePullToRefresh.fulfilled,
changeDisableMobileSwipe.fulfilled,
changeInfrequentThresholdDays.fulfilled,
changePrimaryColor.fulfilled,
changeSharingSetting.fulfilled
changeSharingSetting.fulfilled,
changePushNotificationSettings.fulfilled
),
() => {
showNotification({

View File

@@ -1,7 +1,7 @@
import { createAppAsyncThunk } from "@/app/async-thunk"
import { client } from "@/app/client"
import { reloadEntries } from "@/app/entries/thunks"
import type { IconDisplayMode, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "@/app/types"
import type { IconDisplayMode, PushNotificationSettings, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "@/app/types"
export const reloadSettings = createAppAsyncThunk("settings/reload", async () => await client.user.getSettings().then(r => r.data))
@@ -131,6 +131,12 @@ export const changeDisablePullToRefresh = createAppAsyncThunk(
}
)
export const changeDisableMobileSwipe = createAppAsyncThunk("settings/disableMobileSwipe", (disableMobileSwipe: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
client.user.saveSettings({ ...settings, disableMobileSwipe })
})
export const changePrimaryColor = createAppAsyncThunk("settings/primaryColor", (primaryColor: string, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
@@ -157,3 +163,24 @@ export const changeSharingSetting = createAppAsyncThunk(
})
}
)
export const changeInfrequentThresholdDays = createAppAsyncThunk(
"settings/infrequentThresholdDays",
(infrequentThresholdDays: number, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
client.user.saveSettings({ ...settings, infrequentThresholdDays })
}
)
export const changePushNotificationSettings = createAppAsyncThunk(
"settings/pushNotificationSettings",
(pushNotificationSettings: PushNotificationSettings, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
client.user.saveSettings({
...settings,
pushNotificationSettings,
})
}
)

View File

@@ -26,20 +26,22 @@ export function flattenCategoryTree(category: TreeCategory): TreeCategory[] {
return categories
}
export function categoryUnreadCount(category?: TreeCategory): number {
export function categoryUnreadCount(category?: TreeCategory, maxFrequencyThresholdMs?: number): number {
if (!category) return 0
return flattenCategoryTree(category)
.flatMap(c => c.feeds)
.filter(f => !maxFrequencyThresholdMs || (f.averageEntryIntervalMs && f.averageEntryIntervalMs >= maxFrequencyThresholdMs))
.map(f => f.unread)
.reduce((total, current) => total + current, 0)
}
export function categoryHasNewEntries(category?: TreeCategory): boolean {
export function categoryHasNewEntries(category?: TreeCategory, maxFrequencyThresholdMs?: number): boolean {
if (!category) return false
return flattenCategoryTree(category)
.flatMap(c => c.feeds)
.filter(f => !maxFrequencyThresholdMs || (f.averageEntryIntervalMs && f.averageEntryIntervalMs >= maxFrequencyThresholdMs))
.some(f => f.hasNewEntries)
}

View File

@@ -0,0 +1,19 @@
import { Trans } from "@lingui/react/macro"
import { Checkbox, type CheckboxProps } from "@mantine/core"
import type { ReactNode } from "react"
import { useAppSelector } from "@/app/store"
export const ReceivePushNotificationsChechbox = (props: CheckboxProps) => {
const pushNotificationsEnabled = useAppSelector(state => state.server.serverInfos?.pushNotificationsEnabled)
const pushNotificationsConfigured = useAppSelector(state => !!state.user.settings?.pushNotificationSettings.type)
const disabled = !pushNotificationsEnabled || !pushNotificationsConfigured
let description: ReactNode = ""
if (!pushNotificationsEnabled) {
description = <Trans>Push notifications are not enabled on this CommaFeed instance.</Trans>
} else if (!pushNotificationsConfigured) {
description = <Trans>Push notifications are not configured in your user settings.</Trans>
}
return <Checkbox label={<Trans>Receive push notifications</Trans>} disabled={disabled} description={description} {...props} />
}

View File

@@ -0,0 +1,118 @@
import { Stack } from "@mantine/core"
import { MantineValueSelector, QueryBuilderMantine } from "@react-querybuilder/mantine"
import {
type CombinatorSelectorProps,
defaultOperators,
defaultRuleProcessorCEL,
type Field,
type FormatQueryOptions,
formatQuery,
QueryBuilder,
type RuleGroupType,
} from "react-querybuilder"
import { isCELIdentifier, isCELMember, isCELStringLiteral, parseCEL } from "react-querybuilder/parseCEL"
import "react-querybuilder/dist/query-builder.css"
const fields: Field[] = [
{ name: "title", label: "Title" },
{ name: "content", label: "Content" },
{ name: "url", label: "URL" },
{ name: "author", label: "Author" },
{ name: "categories", label: "Categories" },
{ name: "titleLower", label: "Title (lower case)" },
{ name: "contentLower", label: "Content (lower case)" },
{ name: "urlLower", label: "URL (lower case)" },
{ name: "authorLower", label: "Author (lower case)" },
{ name: "categoriesLower", label: "Categories (lower case)" },
]
const textOperators = new Set(["=", "!=", "contains", "beginsWith", "endsWith", "doesNotContain", "doesNotBeginWith", "doesNotEndWith"])
function toCelString(query: RuleGroupType): string {
if (query.rules.length === 0) {
return ""
}
const celFormatOptions: FormatQueryOptions = {
format: "cel",
ruleProcessor: (rule, options, meta) => {
if (rule.operator === "matches") {
const escapedValue = String(rule.value).replaceAll("\\", "\\\\").replaceAll('"', String.raw`\"`)
return `${rule.field}.matches("${escapedValue}")`
}
return defaultRuleProcessorCEL(rule, options, meta)
},
}
return formatQuery(query, celFormatOptions)
}
function fromCelString(celString: string): RuleGroupType {
return parseCEL(celString ?? "", {
customExpressionHandler: expr => {
if (
isCELMember(expr) &&
expr.right?.value === "matches" &&
expr.left &&
isCELIdentifier(expr.left) &&
expr.list &&
isCELStringLiteral(expr.list.value[0])
) {
return {
field: expr.left.value,
operator: "matches",
value: JSON.parse(expr.list.value[0].value),
}
}
return null
},
})
}
const getOperators = () => {
const filteredDefault = defaultOperators.filter(op => textOperators.has(op.name))
return [
...filteredDefault,
{
name: "matches",
label: "matches pattern",
},
]
}
function CombinatorSelector(props: Readonly<CombinatorSelectorProps>) {
if (props.rules.length === 0) {
return null
}
return <MantineValueSelector {...props} />
}
interface FilteringExpressionEditorProps {
initialValue: string | undefined
onChange: (value: string) => void
}
export function FilteringExpressionEditor({ initialValue, onChange }: Readonly<FilteringExpressionEditorProps>) {
const handleQueryChange = (newQuery: RuleGroupType) => {
onChange(toCelString(newQuery))
}
return (
<Stack gap="sm">
<QueryBuilderMantine>
<QueryBuilder
fields={fields}
defaultQuery={fromCelString(initialValue ?? "")}
onQueryChange={handleQueryChange}
getOperators={getOperators}
addRuleToNewGroups
resetOnFieldChange={false}
controlClassnames={{ queryBuilder: "queryBuilder-branches" }}
controlElements={{ combinatorSelector: CombinatorSelector }}
/>
</QueryBuilderMantine>
</Stack>
)
}

View File

@@ -12,7 +12,7 @@ import {
} from "@mantine/core"
import { showNotification } from "@mantine/notifications"
import dayjs from "dayjs"
import { type ReactNode, useState } from "react"
import { type ReactNode, useEffect, useState } from "react"
import {
TbChartLine,
TbHeartFilled,
@@ -29,6 +29,7 @@ import {
TbUsers,
TbWorldDownload,
} from "react-icons/tb"
import { throttle } from "throttle-debounce"
import { client } from "@/app/client"
import { redirectToAbout, redirectToAdminUsers, redirectToDonate, redirectToMetrics, redirectToSettings } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
@@ -96,6 +97,14 @@ const viewModeData: ViewModeControlItem[] = [
export function ProfileMenu(props: Readonly<ProfileMenuProps>) {
const [opened, setOpened] = useState(false)
// close profile menu on scroll
useEffect(() => {
const listener = throttle(100, () => setOpened(false))
window.addEventListener("scroll", listener)
return () => window.removeEventListener("scroll", listener)
}, [])
const now = useNow()
const profile = useAppSelector(state => state.user.profile)
const admin = useAppSelector(state => state.user.profile?.admin)

View File

@@ -9,9 +9,11 @@ import { useAppDispatch, useAppSelector } from "@/app/store"
import type { IconDisplayMode, ScrollMode, SharingSettings } from "@/app/types"
import {
changeCustomContextMenu,
changeDisableMobileSwipe,
changeDisablePullToRefresh,
changeEntriesToKeepOnTopWhenScrolling,
changeExternalLinkIconDisplayMode,
changeInfrequentThresholdDays,
changeLanguage,
changeMarkAllAsReadConfirmation,
changeMarkAllAsReadNavigateToUnread,
@@ -44,6 +46,8 @@ export function DisplaySettings() {
const unreadCountTitle = useAppSelector(state => state.user.settings?.unreadCountTitle)
const unreadCountFavicon = useAppSelector(state => state.user.settings?.unreadCountFavicon)
const disablePullToRefresh = useAppSelector(state => state.user.settings?.disablePullToRefresh)
const disableMobileSwipe = useAppSelector(state => state.user.settings?.disableMobileSwipe)
const infrequentThresholdDays = useAppSelector(state => state.user.settings?.infrequentThresholdDays)
const sharingSettings = useAppSelector(state => state.user.settings?.sharingSettings)
const primaryColor = useAppSelector(state => state.user.settings?.primaryColor) || Constants.theme.defaultPrimaryColor
const { _ } = useLingui()
@@ -143,6 +147,61 @@ export function DisplaySettings() {
onChange={async e => await dispatch(changeMobileFooter(e.currentTarget.checked))}
/>
<Switch
label={<Trans>On mobile, disable swipe gesture to open the menu</Trans>}
checked={disableMobileSwipe}
onChange={async e => await dispatch(changeDisableMobileSwipe(e.currentTarget.checked))}
/>
<NumberInput
label={<Trans>Infrequent posts threshold (days)</Trans>}
description={<Trans>Feeds posting less often than this (on average) will appear in the Infrequent view</Trans>}
min={1}
value={infrequentThresholdDays}
onChange={async value => await dispatch(changeInfrequentThresholdDays(+value))}
/>
<Divider label={<Trans>Scrolling</Trans>} labelPosition="center" />
<Switch
label={<Trans>Disable "Pull to refresh" browser behavior</Trans>}
description={<Trans>This setting can cause scrolling issues on some browsers (e.g. Safari)</Trans>}
checked={disablePullToRefresh}
onChange={async e => await dispatch(changeDisablePullToRefresh(e.currentTarget.checked))}
/>
<Radio.Group
label={<Trans>Scroll selected entry to the top of the page</Trans>}
value={scrollMode}
onChange={async value => await dispatch(changeScrollMode(value as ScrollMode))}
>
<Group mt="xs">
{Object.entries(scrollModeOptions).map(e => (
<Radio key={e[0]} value={e[0]} label={e[1]} />
))}
</Group>
</Radio.Group>
<NumberInput
label={<Trans>Entries to keep above the selected entry when scrolling</Trans>}
description={<Trans>Only applies to compact, cozy and detailed modes</Trans>}
min={0}
value={entriesToKeepOnTop}
onChange={async value => await dispatch(changeEntriesToKeepOnTopWhenScrolling(+value))}
/>
<Switch
label={<Trans>Scroll smoothly when navigating between entries</Trans>}
checked={scrollSpeed ? scrollSpeed > 0 : false}
onChange={async e => await dispatch(changeScrollSpeed(e.currentTarget.checked))}
/>
<Switch
label={<Trans>In expanded view, scrolling through entries mark them as read</Trans>}
checked={scrollMarks}
onChange={async e => await dispatch(changeScrollMarks(e.currentTarget.checked))}
/>
<Divider label={<Trans>Browser tab</Trans>} labelPosition="center" />
<Switch
@@ -179,47 +238,6 @@ export function DisplaySettings() {
onChange={async e => await dispatch(changeCustomContextMenu(e.currentTarget.checked))}
/>
<Divider label={<Trans>Scrolling</Trans>} labelPosition="center" />
<Radio.Group
label={<Trans>Scroll selected entry to the top of the page</Trans>}
value={scrollMode}
onChange={async value => await dispatch(changeScrollMode(value as ScrollMode))}
>
<Group mt="xs">
{Object.entries(scrollModeOptions).map(e => (
<Radio key={e[0]} value={e[0]} label={e[1]} />
))}
</Group>
</Radio.Group>
<NumberInput
label={<Trans>Entries to keep above the selected entry when scrolling</Trans>}
description={<Trans>Only applies to compact, cozy and detailed modes</Trans>}
min={0}
value={entriesToKeepOnTop}
onChange={async value => await dispatch(changeEntriesToKeepOnTopWhenScrolling(+value))}
/>
<Switch
label={<Trans>Scroll smoothly when navigating between entries</Trans>}
checked={scrollSpeed ? scrollSpeed > 0 : false}
onChange={async e => await dispatch(changeScrollSpeed(e.currentTarget.checked))}
/>
<Switch
label={<Trans>In expanded view, scrolling through entries mark them as read</Trans>}
checked={scrollMarks}
onChange={async e => await dispatch(changeScrollMarks(e.currentTarget.checked))}
/>
<Switch
label={<Trans>Disable "Pull to refresh" browser behavior</Trans>}
description={<Trans>This setting can cause scrolling issues on some browsers (e.g. Safari)</Trans>}
checked={disablePullToRefresh}
onChange={async e => await dispatch(changeDisablePullToRefresh(e.currentTarget.checked))}
/>
<Divider label={<Trans>Sharing sites</Trans>} labelPosition="center" />
<SimpleGrid cols={2}>

View File

@@ -1,4 +1,3 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Anchor, Box, Button, Checkbox, Divider, Group, Input, PasswordInput, Stack, Text, TextInput } from "@mantine/core"
@@ -13,6 +12,7 @@ import { useAppDispatch, useAppSelector } from "@/app/store"
import type { ProfileModificationRequest } from "@/app/types"
import { reloadProfile } from "@/app/user/thunks"
import { Alert } from "@/components/Alert"
import { useValidationRules } from "@/hooks/useValidationRules"
interface FormData extends ProfileModificationRequest {
newPasswordConfirmation?: string
@@ -23,11 +23,14 @@ export function ProfileSettings() {
const serverInfos = useAppSelector(state => state.server.serverInfos)
const dispatch = useAppDispatch()
const { _ } = useLingui()
const validationRules = useValidationRules()
const form = useForm<FormData>({
validate: {
newPasswordConfirmation: (value, values) => (value !== values.newPassword ? _(msg`Passwords do not match`) : null),
newPassword: validationRules.password,
newPasswordConfirmation: (value, values) => validationRules.passwordConfirmation(value, values.newPassword),
},
validateInputOnChange: true,
})
const { setValues } = form

View File

@@ -0,0 +1,124 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Button, Divider, Group, Select, Stack, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { useEffect } from "react"
import { useAsyncCallback } from "react-async-hook"
import { TbDeviceFloppy, TbSend } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { PushNotificationSettings as PushNotificationSettingsModel } from "@/app/types"
import { changePushNotificationSettings } from "@/app/user/thunks"
import { Alert } from "@/components/Alert"
export function PushNotificationSettings() {
const notificationSettings = useAppSelector(state => state.user.settings?.pushNotificationSettings)
const pushNotificationsEnabled = useAppSelector(state => state.server.serverInfos?.pushNotificationsEnabled)
const { _ } = useLingui()
const dispatch = useAppDispatch()
const form = useForm<PushNotificationSettingsModel>()
useEffect(() => {
if (notificationSettings) form.initialize(notificationSettings)
}, [form.initialize, notificationSettings])
const handleSubmit = (values: PushNotificationSettingsModel) => {
dispatch(changePushNotificationSettings(values))
}
const sendTestPushNotification = useAsyncCallback(client.user.sendTestPushNotification)
const typeInputProps = form.getInputProps("type")
if (!pushNotificationsEnabled) {
return <Trans>Push notifications are not enabled on this CommaFeed instance.</Trans>
}
return (
<form onSubmit={form.onSubmit(handleSubmit)}>
<Stack>
{sendTestPushNotification.status === "success" && (
<Alert level="success" messages={[_(msg`Test notification sent successfully.`)]} />
)}
{sendTestPushNotification.status === "error" && (
<Alert level="error" messages={errorToStrings(sendTestPushNotification.error)} />
)}
<Select
label={<Trans>Push notification service</Trans>}
description={
<Trans>
Receive push notifications when new feed entries are discovered. Enable "Receive push notifications" in the
settings of each feed for which you want to receive notifications.
</Trans>
}
data={[
{ value: "ntfy", label: "ntfy" },
{ value: "gotify", label: "Gotify" },
{ value: "pushover", label: "Pushover" },
]}
clearable
{...typeInputProps}
onChange={value => {
typeInputProps.onChange(value)
form.setFieldValue("serverUrl", "")
form.setFieldValue("topic", "")
form.setFieldValue("userSecret", "")
form.setFieldValue("userId", "")
}}
/>
{form.values.type === "ntfy" && (
<>
<TextInput
label={<Trans>Server URL</Trans>}
placeholder="https://ntfy.sh"
required
{...form.getInputProps("serverUrl")}
/>
<TextInput label={<Trans>Topic</Trans>} placeholder="commafeed" required {...form.getInputProps("topic")} />
<TextInput label={<Trans>Access token</Trans>} {...form.getInputProps("userSecret")} />
</>
)}
{form.values.type === "gotify" && (
<>
<TextInput
label={<Trans>Server URL</Trans>}
placeholder="https://gotify.example.com"
required
{...form.getInputProps("serverUrl")}
/>
<TextInput label={<Trans>App token</Trans>} required {...form.getInputProps("userSecret")} />
</>
)}
{form.values.type === "pushover" && (
<>
<TextInput label={<Trans>User key</Trans>} required {...form.getInputProps("userId")} />
<TextInput label={<Trans>API token</Trans>} required {...form.getInputProps("userSecret")} />
</>
)}
<Group>
<Button variant="default" onClick={async () => await dispatch(redirectToSelectedSource())}>
<Trans>Cancel</Trans>
</Button>
<Button type="submit" leftSection={<TbDeviceFloppy size={16} />}>
<Trans>Save</Trans>
</Button>
<Divider orientation="vertical" />
<Button
variant="outline"
leftSection={<TbSend size={16} />}
onClick={() => sendTestPushNotification.execute(form.values)}
loading={sendTestPushNotification.loading}
>
<Trans>Test</Trans>
</Button>
</Group>
</Stack>
</form>
)
}

View File

@@ -1,7 +1,7 @@
import { Trans } from "@lingui/react/macro"
import { Box, Stack } from "@mantine/core"
import React from "react"
import { TbChevronDown, TbChevronRight, TbInbox, TbStar, TbTag } from "react-icons/tb"
import { TbChevronDown, TbChevronRight, TbClock, TbInbox, TbStar, TbTag } from "react-icons/tb"
import { Constants } from "@/app/constants"
import {
redirectToCategory,
@@ -23,6 +23,7 @@ import { TreeSearch } from "./TreeSearch"
const allIcon = <TbInbox size={16} />
const starredIcon = <TbStar size={16} />
const infrequentIcon = <TbClock size={16} />
const tagIcon = <TbTag size={16} />
const expandedIcon = <TbChevronDown size={16} />
const collapsedIcon = <TbChevronRight size={16} />
@@ -34,6 +35,10 @@ export function Tree() {
const source = useAppSelector(state => state.entries.source)
const tags = useAppSelector(state => state.user.tags)
const showRead = useAppSelector(state => state.user.settings?.showRead)
const infrequentThresholdDays = useAppSelector(
state => state.user.settings?.infrequentThresholdDays ?? Constants.infrequentThresholdDaysDefault
)
const infrequentThresholdMs = infrequentThresholdDays * 24 * 3600 * 1000
const dispatch = useAppDispatch()
const isFeedDisplayed = (feed: Subscription) => {
@@ -95,6 +100,7 @@ export function Tree() {
expanded={false}
level={0}
hasError={false}
hasWarning={false}
onClick={categoryClicked}
/>
)
@@ -110,6 +116,23 @@ export function Tree() {
expanded={false}
level={0}
hasError={false}
hasWarning={false}
onClick={categoryClicked}
/>
)
const infrequentCategoryNode = () => (
<TreeNode
id={Constants.categories.infrequent.id}
type="category"
name={<Trans>Infrequent</Trans>}
icon={infrequentIcon}
unread={categoryUnreadCount(root, infrequentThresholdMs)}
hasNewEntries={categoryHasNewEntries(root, infrequentThresholdMs)}
selected={source.type === "category" && source.id === Constants.categories.infrequent.id}
expanded={false}
level={0}
hasError={false}
hasWarning={false}
onClick={categoryClicked}
/>
)
@@ -118,6 +141,7 @@ export function Tree() {
if (!isCategoryDisplayed(category)) return null
const hasError = !category.expanded && flattenCategoryTree(category).some(c => c.feeds.some(f => f.errorCount > errorThreshold))
const hasWarning = !category.expanded && flattenCategoryTree(category).some(c => c.feeds.some(f => !!f.filterLegacy))
return (
<TreeNode
id={category.id}
@@ -130,6 +154,7 @@ export function Tree() {
expanded={category.expanded}
level={level}
hasError={hasError}
hasWarning={hasWarning}
onClick={categoryClicked}
onIconClick={e => categoryIconClicked(e, category)}
key={category.id}
@@ -151,6 +176,7 @@ export function Tree() {
selected={source.type === "feed" && source.id === String(feed.id)}
level={level}
hasError={feed.errorCount > errorThreshold}
hasWarning={!!feed.filterLegacy}
onClick={feedClicked}
key={feed.id}
/>
@@ -168,6 +194,7 @@ export function Tree() {
selected={source.type === "tag" && source.id === tag}
level={0}
hasError={false}
hasWarning={false}
onClick={tagClicked}
key={tag}
/>
@@ -191,6 +218,7 @@ export function Tree() {
<Box className="cf-tree">
{allCategoryNode()}
{starredCategoryNode()}
{infrequentCategoryNode()}
{root.children.map(c => recursiveCategoryNode(c))}
{root.feeds.map(f => feedNode(f))}
{tags?.map(tag => tagNode(tag))}

View File

@@ -15,6 +15,7 @@ interface TreeNodeProps {
expanded?: boolean
level: number
hasError: boolean
hasWarning: boolean
hasNewEntries: boolean
onClick: (e: React.MouseEvent, id: string) => void
onIconClick?: (e: React.MouseEvent, id: string) => void
@@ -24,15 +25,18 @@ const useStyles = tss
.withParams<{
selected: boolean
hasError: boolean
hasWarning: boolean
hasUnread: boolean
}>()
.create(({ theme, colorScheme, selected, hasError, hasUnread }) => {
.create(({ theme, colorScheme, selected, hasError, hasWarning, hasUnread }) => {
let backgroundColor = "inherit"
if (selected) backgroundColor = colorScheme === "dark" ? theme.colors.dark[4] : theme.colors.gray[1]
let color: string
if (hasError) {
color = theme.colors.red[6]
} else if (hasWarning) {
color = theme.colors.yellow[6]
} else if (colorScheme === "dark") {
color = hasUnread ? theme.colors.dark[0] : theme.colors.dark[3]
} else {
@@ -63,6 +67,7 @@ export function TreeNode(props: Readonly<TreeNodeProps>) {
const { classes } = useStyles({
selected: props.selected,
hasError: props.hasError,
hasWarning: props.hasWarning,
hasUnread: props.unread > 0,
})
return (

View File

@@ -6,7 +6,11 @@ const useStyles = tss.create(() => ({
badge: {
width: "3.2rem",
// for some reason, mantine Badge has "cursor: 'default'"
cursor: "pointer",
cursor: "inherit",
},
indicator: {
// ensure the indicator is not shown above the app header
zIndex: 0,
},
}))
@@ -23,7 +27,15 @@ export function UnreadCount(
const count = props.unreadCount >= 10000 ? "10k+" : props.unreadCount
return (
<Tooltip label={props.unreadCount} disabled={props.unreadCount === count} openDelay={Constants.tooltip.delay}>
<Indicator disabled={!props.showIndicator} size={4} offset={10} position="middle-start">
<Indicator
disabled={!props.showIndicator}
size={4}
offset={10}
position="middle-start"
classNames={{
indicator: classes.indicator,
}}
>
<Badge className={`${classes.badge} cf-badge`} variant="light" fullWidth>
{count}
</Badge>

View File

@@ -0,0 +1,17 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { useAppSelector } from "@/app/store"
export function useValidationRules() {
const minimumPasswordLength = useAppSelector(state => state.server.serverInfos?.minimumPasswordLength)
const { _ } = useLingui()
return {
password: (value: string | undefined) =>
value && minimumPasswordLength && value.length < minimumPasswordLength
? _(msg`Password must be at least ${minimumPasswordLength} characters`)
: null,
passwordConfirmation: (newPasswordConfirmation: string | undefined, newPassword: string | undefined) =>
newPasswordConfirmation && newPasswordConfirmation !== newPassword ? _(msg`Passwords do not match`) : null,
}
}

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed هو مشروع مفتوح المصدر. يتم استضافة المصادر على </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0> هل لديك حساب؟ </0> <1> تسجيل الدخول! </ 1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>مرحبًا،</0><1>أنا جيريمي من بلجيكا وأنا أعمل على CommaFeed في وقت فراغي منذ أكثر من 10 سنوات. شكرًا لاهتمامك بمساعدتي في الاستمرار في دعم CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0> هل تحتاج إلى حساب؟ </0> <1> اشترك! </ 1>"
msgid "About"
msgstr "حول"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "رمز الوصول"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "الإجراءات"
@@ -63,7 +63,7 @@ msgstr "إداري"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "اسم مستخدم المسؤول"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "الكل"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "دائمًا"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "تحليل التغذية"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "إعلان"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "مفتاح API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "رمز API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "رمز التطبيق"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "هل أنت متأكد أنك تريد حذف الفئة <0> {categoryName} </0>؟"
@@ -127,32 +135,37 @@ msgid "Asc"
msgstr "تصاعدي"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "المتغيرات المتاحة هي \"العنوان\" و \"المحتوى\" و \"url\" و \"المؤلف\" و \"الفئات\" ويتم تحويل محتواها إلى أحرف صغيرة لتسهيل مقارنة السلسلة."
msgid "Auto-mark as read"
msgstr "وضع علامة مقروء تلقائيًا"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "العودة"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "العودة لتسجيل الدخول"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "أزرق"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "إضافة المتصفح"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "إضافة المتصفح مطلوبة لـ Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "علامة تبويب المتصفح"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "قم ببناء تعبير تصفية لتحديد ما تريد قراءته. سيتم وضع علامة مقروء على الإدخالات التي لا تتطابق تلقائيًا."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "تأكد من عمل الخلاصة"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "إغلاق القائمة"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "إصدار إضافة متصفح CommaFeed هو {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed متوافق مع Fever API. استخدم عنوان URL التالي في تطبيق الهاتف المتوافق مع Fever. قم بتسجيل الدخول باستخدام اسم المستخدم و <0>مفتاح API</0> الخاص بك."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed التالي العنصر غير المقروء"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "إصدار CommaFeed هو {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,13 +240,18 @@ msgstr "تأكيد"
msgid "Confirm password"
msgstr "تأكيد كلمة المرور"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "تأكيد كلمة المرور"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "دافئ"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "إنشاء حساب مسؤول"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -244,29 +263,33 @@ msgstr "كلمة المرور الحالية"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "كود مخصص"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "قواعد CSS المخصصة التي سيتم تطبيقها"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "كود JS المخصص الذي سيتم تنفيذه عند تحميل الصفحة"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "سيان"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "داكن"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "تاريخ الإنشاء"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "أيام"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "حذف"
@@ -290,11 +313,11 @@ msgstr "تنازلي"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "مفصل"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "تعطيل سلوك المتصفح \"اسحب للتحديث\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "عرض"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "تبرع"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "أدخل كلمة المرور الحالية لتغيير إعدادا
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "عدد الإدخالات التي يجب الاحتفاظ بها فوق الإدخال المحدد عند التمرير"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "عناوين الإدخالات"
#: src/components/Alert.tsx
msgid "Error"
msgstr "خطأ"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "مثال: {مثال}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "موسع"
@@ -374,7 +393,7 @@ msgstr "قم بتصدير اشتراكاتك وفئاتك كملف OPML يمكن
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "خيارات الإضافة"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "موجز URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "تحديث جميع الخلاصات الآن"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "رابط Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "تصفية التعبير"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "حجم الخط"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "التحديث الإجباري للخلاصات غير متاح بعد."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "رابط الخلاصة المولدة"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "الذهاب إلى {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "الأشياء الجيدة"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "عنبي"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "رمادي"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "أخضر"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "المرجع نفسه"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "إذا لم يكن فارغًا ، فسيتم تقييم التعبير إلى \"صواب\" أو \"خطأ\". "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "إذا كان الإدخال لا يتناسب تمامًا مع الشاشة"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "في العرض الموسع ، التمرير عبر الإدخالات
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "نيلي"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "الإعداد الأولي"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "رابط إعادة تعيين كلمة المرور غير صالح. يرجى طلب رابط جديد."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "آخر رسالة تحديث"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "فاتح"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "ليموني"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "رابط"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "رابط الوثائق"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "تسجيل الخروج"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "ضغط مطول"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "وضع علامة كمقروء"
msgid "Mark as read up to here"
msgstr "وضع علامة كمقروءة حتى هنا"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "ضع علامة مقروء على الإدخالات في هذه الخلاصة بعد هذا العدد من الأيام. اتركه فارغًا للتعطيل."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "المقاييس"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "نقرة بالزر الأوسط"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "انتقل إلى اشتراك بإدخال اسمه"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "انتقل إلى الفئة/الخلاصة التالية التي تحتوي على إدخالات غير مقروءة عند تمييز الكل كمقروء"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "أبدا"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "كلمة مرور جديدة"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "كلمة مرور جديدة"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "الأحدث أولاً"
@@ -657,7 +685,7 @@ msgstr "لا مزيد من الإدخالات"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "لا توجد خيارات مشاركة متاحة."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,27 +697,27 @@ msgstr "الأقدم أولا"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "على سطح المكتب"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "على الهاتف"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "على الهاتف، أظهر أزرار الإجراءات في أسفل الشاشة"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "ينطبق فقط على الأوضاع المضغوطة، والدافئة، والمفصلة"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
msgstr "اوووه!"
msgstr "عذراً!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "افتح CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "افتح الرابط"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "افتح الرابط في علامة تبويب خلفية جديدة"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "افتح الرابط في علامة تبويب جديدة"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "افتح القائمة"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "فتح / إغلاق الإدخال الحالي"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "ملف OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "ملف OPML مطلوب"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "برتقالي"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "طلب"
msgstr "ترتيب"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,42 +799,71 @@ msgstr "الفئة الأصل"
msgid "Password"
msgstr "كلمة المرور"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "يجب أن تكون كلمة المرور على الأقل {minimumPasswordLength} أحرف"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "استعادة كلمة المرور"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "كلمات المرور غير متطابقة"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "وردي"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "المنـصب"
msgstr "المنصب"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "السابق"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "اللون الأساسي"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "الملف الشخصي"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "خدمة إشعارات الدفع"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "إشعارات الدفع"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "لم يتم تكوين إشعارات الدفع في إعدادات المستخدم الخاصة بك."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "إشعارات الدفع غير مفعلة في مثيل CommaFeed هذا."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "تلقي إشعارات الدفع"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "تلقي إشعارات الدفع عند اكتشاف إدخالات خلاصة جديدة. قم بتمكين \"تلقي إشعارات الدفع\" في إعدادات كل خلاصة تريد تلقي إشعارات لها."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "استعادة كلمة السر"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "أحمر"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "تحديث"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "تم إغلاق التسجيلات في مثيل CommaFeed هذا"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "إعادة تعيين كلمة المرور"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "نقرة بالزر الأيمن"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "حفظ"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "تمرير الإدخال المحدد إلى أعلى الصفحة"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "قم بالتمرير بسلاسة عند التنقل بين الإدخ
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "التمرير"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "بحث"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "تحديد الخلاصة/الفئة التالية غير المقروءة"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "تحديد الخلاصة/الفئة السابقة غير المقروءة"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "رابط الخادم"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "الحلقة"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "إظهار قائمة السياق الخاصة بـ CommaFeed عند النقر بزر الماوس الأيمن"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "إظهار تأكيد عند وضع علامة مقروء على كافة الإدخالات"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "إظهار قائمة الإدخال (سطح المكتب)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "إظهار قائمة الإدخال (الهاتف)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "إظهار أيقونة الرابط الخارجي"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "إظهار تعليمات اختصار لوحة المفاتيح"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "إظهار القائمة الأصلية (سطح المكتب)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "إظهار أيقونة النجمة"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "إظهار عدد غير المقروء في أيقونة التبويب"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "إظهار عدد غير المقروء في عنوان التبويب"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "النجاح"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "اسحب الرأس لليسار"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "قم بالتبديل إلى النسق الفاتح"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "النظام"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "الكلمات"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "أزرق مخضر"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "اختبار"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "تم إرسال إشعار الاختبار بنجاح."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "عنوان URL للتغذية التي تريد الاشتراك فيه
msgid "Theme"
msgstr "الموضوع"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "تحتوي هذه الخلاصة على فلتر قديم لا يمكن تحريره ولا يتم تطبيقه. يرجى إعادة إنشاء الفلتر باستخدام محرر التعبيرات الجديد. كان تعبير الفلتر القديم هو: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "هذا هو مفتاح API الخاص بك. يمكن استخدامه لبعض عمليات API للقراءة فقط ويمنح الوصول إلى Fever API. استخدم النموذج الموجود في أسفل الصفحة لإنشاء مفتاح API جديد"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "هذا الإعداد يمكن أن يسبب مشاكل في التمرير في بعض المتصفحات (مثل Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,19 +1108,23 @@ msgstr "تبديل قراءة حالة الإدخال الحالي"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "تبديل الشريط الجانبي"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "تبديل الحالة المميزة بنجمة للإدخال الحالي"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "موضوع"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "جرب CommaFeed باستخدام الحساب التجريبي: تجريبي / تجريبي"
msgstr "جرب CommaFeed باستخدام الحساب التجريبي: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "جرب النسخة التجريبية!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "إلغاء النجم"
msgid "Unsubscribe"
msgstr "إلغاء الاشتراك"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "مفتاح المستخدم"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "اسم المستخدم أو البريد الإلكتروني"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "بنفسجي"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "موقع الكتروني"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "مرحباً! يبدو أن هذه هي المرة الأولى التي تقوم فيها بتشغيل CommaFeed. يرجى إنشاء حساب مسؤول للبدء."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "أصفر"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "ليس لديك أي اشتراكات حتى الآن. "
msgstr "ليس لديك أي اشتراكات حتى الآن. لمَ لا تحاول إضافة واحد بالنقر فوق علامة + في أعلى الصفحة؟"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "تم وضع خلاصاتك في قائمة الانتظار للتحديث."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "تم تغيير كلمة المرور الخاصة بك. يمكنك الآن تسجيل الدخول باستخدام كلمة المرور الجديدة."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed és un projecte de codi obert. El codi font està allotjat a </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La sintaxi completa està disponible </0><1>aquí</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Teniu un compte?</0><1>Inicieu la sessió!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Necessites un compte?</0><1>Registreu-vos!</1>"
msgid "About"
msgstr "Sobre"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token d'accés"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Accions"
@@ -63,7 +63,7 @@ msgstr "Administrador"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nom d'usuari de l'administrador"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "Anunci"
msgid "API key"
msgstr "Clau API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token d'API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token d'aplicació"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Esteu segur que voleu suprimir la categoria <0>{categoryName}</0>?"
@@ -127,14 +135,15 @@ msgid "Asc"
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Les variables disponibles són \"títol\", \"contingut\", \"url\" \"autor\" i \"categories\" i el seu contingut es converteix en minúscules per facilitar la comparació de cadenes."
msgid "Auto-mark as read"
msgstr "Marcar com a llegit automàticament"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Enrere"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Torna a iniciar sessió"
@@ -154,6 +163,10 @@ msgstr "Extensió del navegador necessària per a Chrome"
msgid "Browser tab"
msgstr "Pestanya del navegador"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Creeu una expressió de filtratge per indicar què voleu llegir. Les entrades que no coincideixin es marcaran com a llegides automàticament."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "Pestanya del navegador"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,13 +240,18 @@ msgstr "Confirma"
msgid "Confirm password"
msgstr "Confirmeu la contrasenya"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirma la contrasenya"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Acollidor"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Crea un compte d'administrador"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -267,6 +286,10 @@ msgstr "Fosc"
msgid "Date created"
msgstr "Data de creació"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dies"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Eliminar"
@@ -359,10 +382,6 @@ msgstr "Encapçalaments d'entrada"
msgid "Error"
msgstr "Error"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Exemple: {exemple}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Ampliat"
@@ -463,10 +482,6 @@ msgstr "Verd"
msgid "Id"
msgstr "Id"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Si no està buida, una expressió que s'avalua com a \"vertader\" o \"fals\". "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Si l'entrada no encaixa del tot a la pantalla"
@@ -489,7 +504,11 @@ msgstr "Indi"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configuració inicial"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "L'enllaç de restabliment de la contrasenya no és vàlid. Sol·liciteu-ne un de nou."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -589,6 +608,10 @@ msgstr "Marca com a llegit"
msgid "Mark as read up to here"
msgstr "Marca com a llegit fins aquí"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marca les entrades d'aquest feed com a llegides després d'aquest nombre de dies. Deixeu-ho buit per desactivar-lo."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "mètriques"
@@ -634,6 +657,11 @@ msgstr "Mai"
msgid "New password"
msgstr "Contrasenya nova"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Contrasenya nova"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "El més nou primer"
@@ -771,11 +799,15 @@ msgstr "Categoria pare"
msgid "Password"
msgstr "Contrasenya"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "La contrasenya ha de tenir almenys {minimumPasswordLength} caràcters"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Recuperació de contrasenya"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Les contrasenyes no coincideixen"
@@ -800,6 +832,31 @@ msgstr "Color primari"
msgid "Profile"
msgstr "Perfil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Servei de notificacions push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notificacions push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Les notificacions push no estan configurades a la vostra configuració d'usuari."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Les notificacions push no estan activades en aquesta instància de CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Rep notificacions push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Rebre notificacions push quan es descobreixin noves entrades de feed. Activeu \"Rep notificacions push\" a la configuració de cada feed per al qual vulgueu rebre notificacions."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recuperar la contrasenya"
@@ -817,6 +874,11 @@ msgstr "Actualitzar"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Els registres estan tancats en aquesta instància de CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Restableix la contrasenya"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -829,6 +891,7 @@ msgstr "Clic dret"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -861,6 +924,11 @@ msgstr "Selecciona el següent canal/categoria no llegit"
msgid "Select previous unread feed/category"
msgstr "Selecciona el canal/categoria anterior sense llegir"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL del servidor"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Posa el focus a la següent entrada sense obrir-la"
@@ -1005,6 +1073,14 @@ msgstr "Etiquetes"
msgid "Teal"
msgstr "Blau verdós"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Prova"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "La notificació de prova s'ha enviat correctament."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "l'URL del canal al qual us voleu subscriure. "
@@ -1013,6 +1089,11 @@ msgstr "l'URL del canal al qual us voleu subscriure. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Aquest feed té un filtre heretat que no es pot editar i no s'aplica. Torneu a crear el filtre amb el nou editor d'expressions. L'expressió del filtre heretat era: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Aquesta és la vostra clau de l'API. Es pot utilitzar per a algunes operacions de l'API de només lectura i permet accedir a l'API Fever. Utilitzeu el formulari de la part inferior de la pàgina per generar una nova clau d'API."
@@ -1033,6 +1114,10 @@ msgstr "Canvia la barra lateral"
msgid "Toggle starred status of current entry"
msgstr "Commuta l'estat destacat de l'entrada actual"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Tema"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Proveu CommaFeed amb el compte de demostració: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Desestrellar"
msgid "Unsubscribe"
msgstr "Donar-se de baixa"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Clau d'usuari"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1083,7 +1168,7 @@ msgstr "Lloc web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Benvingut! Sembla que aquesta és la primera vegada que executeu CommaFeed. Creeu un compte d'administrador per començar."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
@@ -1096,3 +1181,7 @@ msgstr "Encara no teniu cap subscripció. "
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Els vostres feeds s'han posat a la cua per actualitzar-los."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "La vostra contrasenya s'ha canviat. Ara podeu iniciar la sessió amb la vostra nova contrasenya."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed je open-source projekt. Zdrojové kódy jsou hostovány na </0><1>GitHubu</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Máte účet?</0><1>Přihlaste se!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Ahoj,</0><1>jsem Jérémie z Belgie a na CommaFeed pracuji ve svém volném čase již více než 10 let. Děkuji za váš zájem mi pomoci i nadále podporovat CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Potřebujete účet?</0><1>Zaregistrujte se!</1>"
msgid "About"
msgstr "Asi"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Přístupový token"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Akce"
@@ -63,7 +63,7 @@ msgstr "Správce"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Uživatelské jméno správce"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Všechny"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Vždy"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analyzujte krmivo"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Oznámení"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "Klíč API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token aplikace"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Opravdu chcete smazat kategorii <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Opravdu se chcete odhlásit z odběru <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Vzestupně"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Dostupné proměnné jsou 'název', 'obsah', 'url', 'autor' a 'kategorie' a jejich obsah je převeden na malá písmena, aby se usnadnilo porovnávání řetězců."
msgid "Auto-mark as read"
msgstr "Automaticky označit jako přečtené"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Zpět"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Zpět k přihlášení"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Modrá"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Rozšíření prohlížeče"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Pro Chrome je vyžadováno rozšíření prohlížeče"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Karta prohlížeče"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Vytvořte výraz filtru pro určení toho, co chcete číst. Položky, které neodpovídají, budou automaticky označeny jako přečtené."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Zkontrolujte, zda zdroj funguje"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Zavřít menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Verze rozšíření prohlížeče CommaFeed {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed je kompatibilní s Fever API. Použijte následující URL ve svém mobilním klientovi kompatibilním s Fever. Přihlaste se pomocí svého uživatelského jména a svého <0>klíče API</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed další nepřečtená položka"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed verze {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Potvrdit"
msgid "Confirm password"
msgstr "Potvrďte heslo"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Potvrdit heslo"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Útulný"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Vytvořit účet správce"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Aktuální heslo"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Vlastní kód"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Vlastní pravidla CSS, která budou použita"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Vlastní kód JS, který bude spuštěn při načtení stránky"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Azurová"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Tmavá"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Datum vytvoření"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dní"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Smazat"
@@ -286,15 +309,15 @@ msgstr "Smazat uživatele"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Sestupně"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detailní"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Zakázat chování prohlížeče \"Potažením obnovit\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Displej"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Darovat"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Přetáhněte odkaz na lištu záložek"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -349,20 +372,16 @@ msgstr "Zadejte své aktuální heslo pro změnu nastavení profilu"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Počet položek, které mají zůstat nad vybranou položkou při posouvání"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Hlavičky položek"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Chyba"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Příklad: {příklad}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Rozbaleno"
@@ -374,7 +393,7 @@ msgstr "Exportujte svá předplatná a kategorie jako soubor OPML, který lze im
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Možnosti rozšíření"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL zdroje"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Aktualizovat všechny mé zdroje"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filtrování výrazu"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Velikost písma"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Vynucené stahování zdrojů zatím není k dispozici."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Generovaná adresa URL zdroje"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Přejít na {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Dobroty"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Hroznová"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Šedá"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Zelená"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Pokud není prázdný, výraz vyhodnocený jako 'true' nebo 'false'. "
msgstr "ID"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Pokud se položka nevejde celá na obrazovku"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Pokud narazíte na problém, nahlaste jej prosím na stránce problémů
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importovat"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "V rozšířeném zobrazení je procházením označíte jako přečtené
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigová"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Počáteční nastavení"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Neplatný odkaz pro resetování hesla. Požádejte prosím o nový."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Poslední obnovovací zpráva"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Světlá"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limetková"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Odkaz"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Odkaz na dokumentaci"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,12 +582,12 @@ msgstr "Odhlášení"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Dlouhé stisknutí"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Spravujte uživatele"
msgstr "Spravovat uživatele"
#: src/components/header/Header.tsx
msgid "Mark all as read"
@@ -589,13 +608,17 @@ msgstr "Označit jako přečtené"
msgid "Mark as read up to here"
msgstr "Označit jako přečtené až sem"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Označit položky v tomto zdroji jako přečtené po tomto počtu dní. Pro zakázání ponechte prázdné."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metriky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Kliknutí prostředním tlačítkem"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Přesuňte stránku nahoru"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Přejděte na předplatné zadáním jeho názvu"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Po označení všech položek jako přečtených přejít na další kategorii/zdroj s nepřečtenými položkami"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Nikdy"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nové heslo"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nové heslo"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nejnovější jako první"
@@ -657,11 +685,11 @@ msgstr "Žádné další záznamy"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Nejsou k dispozici žádné možnosti sdílení."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
msgstr "Nic nebylo nalezeno"
msgstr "Nebylo nic nalezeno"
#: src/pages/app/AboutPage.tsx
msgid "Oldest first"
@@ -669,19 +697,19 @@ msgstr "Nejdříve nejstarší"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Na desktopu"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Na mobilu"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Na mobilu zobrazovat akční tlačítka v dolní části obrazovky"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Platí pouze pro režimy kompaktní, útulný a detailní"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Jejda!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Otevřít CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Otevřít odkaz"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Otevřít odkaz na nové kartě na pozadí"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Otevřít odkaz na nové kartě"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Otevřít menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Otevřít/zavřít aktuální položku"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "soubor OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Soubor OPML je vyžadován"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oranžová"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Objednávka"
msgstr "Pořadí"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Rodičovská kategorie"
msgid "Password"
msgstr "Heslo"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Heslo musí mít alespoň {minimumPasswordLength} znaků"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Obnovení hesla"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Hesla se neshodují"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Růžová"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Pozice"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Předchozí"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primární barva"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Služba push oznámení"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push oznámení"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push oznámení nejsou ve vašem uživatelském nastavení nakonfigurována."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push oznámení nejsou na této instanci CommaFeed povolena."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Přijímat push oznámení"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Přijímat push oznámení, když jsou objeveny nové položky zdroje. Povolte \"Přijímat push oznámení\" v nastavení každého zdroje, pro který chcete dostávat oznámení."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Obnovte heslo"
msgstr "Obnovit heslo"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Červená"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Obnovit"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "V této instanci CommaFeed jsou registrace uzavřeny"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Obnovit heslo"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Kliknutí pravým tlačítkem"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Uložit"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Posunout vybranou položku na začátek stránky"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Posouvejte plynule při navigaci mezi položkami"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Posouvání"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,15 +918,20 @@ msgstr "Hledej"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Vybrat další nepřečtený zdroj/kategorii"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Vybrat předchozí nepřečtený zdroj/kategorii"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL serveru"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Zaměřte se na další položku, aniž byste ji otevřeli"
msgstr "Zaměřit se na další položku, aniž byste ji otevřeli"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on previous entry without opening it"
@@ -893,27 +961,27 @@ msgstr "Směna"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Zobrazovat vlastní kontextové menu CommaFeed při kliknutí pravým tlačítkem"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Zobrazovat potvrzení při označování všech položek jako přečtených"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Zobrazit menu položky (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Zobrazit menu položky (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Zobrazovat ikonu externího odkazu"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
msgstr "Zobrazit kanály a kategorie bez nepřečtených položek"
msgstr "Zobrazit zdroje a kategorie bez nepřečtených položek"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show keyboard shortcut help"
@@ -921,25 +989,25 @@ msgstr "Zobrazit nápovědu ke klávesovým zkratkám"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Zobrazit nativní menu (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Zobrazovat ikonu hvězdičky"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Zobrazovat počet nepřečtených v ikoně karty"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Zobrazovat počet nepřečtených v názvu karty"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
msgid "Sign up"
msgstr "Zaregistrujte se"
msgstr "Zaregistrovat se"
#: src/pages/ErrorPage.tsx
msgid "Something bad just happened..."
@@ -982,28 +1050,36 @@ msgstr "Úspěch"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Přejetím po hlavičce doleva"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
msgstr "Přepněte na tmavý motiv"
msgstr "Přepnout na tmavý motiv"
#: src/pages/WelcomePage.tsx
msgid "Switch to light theme"
msgstr "Přepněte na světlé téma"
msgstr "Přepnout na světlý motiv"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Systémový"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr "Značky"
msgstr "Štítky"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Šedozelená"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Testovat"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testovací oznámení bylo úspěšně odesláno."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,25 +1089,34 @@ msgstr "Adresa URL kanálu, k jehož odběru se chcete přihlásit. "
msgid "Theme"
msgstr "Téma"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Tento zdroj má zastaralý filtr, který nelze upravovat a není aplikován. Znovu vytvořte filtr pomocí nového editoru výrazů. Původní výraz filtru byl: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Toto je váš klíč API. Lze jej použít pro některé operace API pouze pro čtení a poskytuje přístup k Fever API. Pro vygenerování nového klíče API použijte formulář v dolní části stránky."
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Toto nastavení může u některých prohlížečů (např. Safari) způsobovat problémy s posouváním"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
msgstr "Přepne stav čtení aktuálního záznamu"
msgstr "Přepnout stav přečtení aktuální položky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Přepnout boční panel"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Přepnout označení hvězdičkou u aktuální položky"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Téma"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Vyzkoušejte CommaFeed s demo účtem: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Vyzkoušejte demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Odstranit hvězdu"
msgid "Unsubscribe"
msgstr "Odhlásit odběr"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Uživatelský klíč"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Uživatelské jméno nebo e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fialová"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1079,20 +1164,24 @@ msgstr "Varování"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Website"
msgstr "Webové stránky"
msgstr "Webová stránka"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Vítejte! Zdá se, že je to poprvé, co spouštíte CommaFeed. Chcete-li začít, vytvořte si účet správce."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Žlutá"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Zatím nemáte žádné předplatné. "
msgstr "Zatím nemáte žádné odběry. Proč nezkusit nějaký přidat kliknutím na znaménko + v horní části stránky?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Vaše zdroje byly zařazeny do fronty k aktualizaci."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Vaše heslo bylo změněno. Nyní se můžete přihlásit pomocí nového hesla."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>Mae CommaFeed yn brosiect ffynhonnell agored. Mae'r ffynonellau wedi'u hysbysebu ar </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>A oes gennych gyfrif?</0><1>Mewngofnodi!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hei,</0><1>Jérémie o Wlad Belg ydw i ac rwyf wedi bod yn gweithio ar CommaFeed yn fy amser sbâr ers dros 10 mlynedd bellach. Diolch am ddangos diddordeb mewn fy helpu i barhau i gefnogi CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Angen cyfrif?</0><1>Ymunwch!</1>"
msgid "About"
msgstr "Ynghylch"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Tocyn mynediad"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Camau gweithredu"
@@ -63,7 +63,7 @@ msgstr "Gweinyddol"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Enw defnyddiwr gweinyddwr"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Pawb"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Bob amser"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Dadansoddi porthiant"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Cyhoeddiad"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "Allwedd API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Tocyn API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Tocyn ap"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Ydych chi'n siŵr eich bod am ddileu categori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Ydych chi'n siŵr eich bod am ddad-danysgrifio o <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Esgynol"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Y newidynnau sydd ar gael yw 'teitl', 'cynnwys', 'url' 'awdur' a 'chategorïau' ac mae eu cynnwys yn cael ei drosi i lythrennau bach er mwyn hwyluso cymhariaeth llinynnol."
msgid "Auto-mark as read"
msgstr "Hunan-farcio fel wedi'i ddarllen"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Yn ôl"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Yn ôl i fewngofnodi"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Glas"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Estyniad porwr"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Mae angen estyniad porwr ar gyfer Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Tab porwr"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Adeiladwch fynegiant hidlo i nodi'r hyn rydych chi am ei ddarllen. Bydd cofnodion nad ydynt yn cyfateb yn cael eu marcio fel rhai wedi'u darllen yn awtomatig."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Gwiriwch fod y porthiant yn gweithio"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Cau'r ddewislen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Fersiwn estyniad porwr CommaFeed {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "Mae CommaFeed yn gydnaws â'r Fever API. Defnyddiwch y URL canlynol yn eich cleient symudol sy'n gydnaws â Fever. Mewngofnodwch gyda'ch enw defnyddiwr a'ch <0>allwedd API</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed eitem nesaf heb ei darllen"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "Fersiwn CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Cadarnhau"
msgid "Confirm password"
msgstr "Cadarnhau'r cyfrinair"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Cadarnhau Cyfrinair"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "clyd"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Creu Cyfrif Gweinyddwr"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Cyfrinair presennol"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Cod arferol"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Rheolau CSS arferol a fydd yn cael eu cymhwyso"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Cod JS arferol a fydd yn cael ei weithredu wrth lwytho'r dudalen"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Tywyll"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Dyddiad creu"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "diwrnodau"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Dileu"
@@ -290,11 +313,11 @@ msgstr "Rhag"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Manwl"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Analluogi ymddygiad porwr \"Tynnu i adnewyddu\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Arddangos"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Cyfrannu"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "Rhowch eich cyfrinair presennol i newid gosodiadau proffil"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Cofnodion i'w cadw uwchben y cofnod a ddewiswyd wrth sgrolio"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Penawdau cofnodion"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Gwall"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "enghraifft: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Ehangu"
@@ -374,7 +393,7 @@ msgstr "Allforio eich tanysgrifiadau a'ch categorïau fel ffeil OPML y gellir ei
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Opsiynau estyniad"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL porthiant"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Cyrchu fy holl borthiannau nawr"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Hidlo mynegiant"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Maint ffont"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Nid yw gorfodi nôl porthiannau ar gael eto."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "url porthiant a gynhyrchir"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Ewch i {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "nwyddau"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Grawnwin"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Llwyd"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Gwyrdd"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Os nad yw'n wag, mynegiad sy'n gwerthuso i 'gwir' neu 'anghywir'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Os nad yw'r cofnod yn ffitio'n gyfan gwbl ar y sgrin"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "Mewn gwedd estynedig, mae sgrolio trwy gofnodion yn nodi eu bod wedi'u d
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigó"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Gosodiad Cychwynnol"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Dolen ailosod cyfrinair annilys. Gofynnwch am un newydd."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Neges adnewyddu ddiwethaf"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Golau"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Leim"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Cyswllt"
msgstr "Dolen"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Dolen i'r ddogfennaeth"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Allgofnodi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Gwasg hir"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Marciwch ei fod wedi'i ddarllen"
msgid "Mark as read up to here"
msgstr "Marciwch fel y darllenwyd hyd yma"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marciwch gofnodion yn y porthiant hwn fel rhai wedi'u darllen ar ôl y nifer hwn o ddiwrnodau. Gadewch yn wag i analluogi."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "metrigau"
msgstr "Metrigau"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Clic canol"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "Llywiwch i danysgrifiad trwy nodi ei enw"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Llywiwch i'r categori/porthiant nesaf gyda chofnodion heb eu darllen wrth farcio pob cofnod fel un wedi'i ddarllen"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Byth"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Cyfrinair newydd"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Cyfrinair Newydd"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Y diweddaraf yn gyntaf"
@@ -657,11 +685,11 @@ msgstr "Dim mwy o gofnodion"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Dim opsiynau rhannu ar gael."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
msgstr "Dim wedi'i ddarganfod"
msgstr "Heb ddarganfod dim"
#: src/pages/app/AboutPage.tsx
msgid "Oldest first"
@@ -669,19 +697,19 @@ msgstr "Hynaf yn gyntaf"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Ar bwrdd gwaith"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Ar ffôn symudol"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Ar ffonau symudol, dangoswch fotymau gweithredu ar waelod y sgrin"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Yn berthnasol i foddau cryno, clyd a manwl yn unig"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Wps!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Agor CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Dolen agored"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Agor dolen mewn tab cefndir newydd"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Agor dolen mewn tab newydd"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Agor dewislen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,28 +758,28 @@ msgstr "Agor / cau'r cofnod cyfredol"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr "allforio OPML"
msgstr "Allforio OPML"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file"
msgstr "ffeil OPML"
msgstr "Ffeil OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Mae angen ffeil OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oren"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "gorchymyn"
msgstr "Trefn"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,42 +799,71 @@ msgstr "Categori Rhiant"
msgid "Password"
msgstr "cyfrinair"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Rhaid i'r cyfrinair fod o leiaf {minimumPasswordLength} nod"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Adfer Cyfrinair"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Nid yw cyfrineiriau yn cyfateb"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Pinc"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Swydd"
msgstr "Safle"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Blaenorol"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Lliw sylfaenol"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Proffil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Gwasanaeth hysbysu gwthio"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Hysbysiadau gwthio"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Nid yw hysbysiadau gwthio wedi'u ffurfweddu yn eich gosodiadau defnyddiwr."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Nid yw hysbysiadau gwthio wedi'u galluogi ar yr achos CommaFeed hwn."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Derbyn hysbysiadau gwthio"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Derbyn hysbysiadau gwthio pan ddarganfyddir cofnodion porthiant newydd. Galluogi \"Derbyn hysbysiadau gwthio\" yng ngosodiadau pob porthiant yr ydych am dderbyn hysbysiadau ar ei gyfer."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Adfer cyfrinair"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Coch"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Adnewyddu"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Mae cofrestriadau ar gau ar yr achos CommaFeed hwn"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Ailosod Cyfrinair"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Clic dde"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Arbed"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Sgroliwch y cofnod a ddewiswyd i frig y dudalen"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Sgroliwch yn esmwyth wrth lywio rhwng cofnodion"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Sgrolio"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Chwilio"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Dewiswch y porthiant/categori nesaf heb ei ddarllen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Dewiswch y porthiant/categori blaenorol heb ei ddarllen"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL y gweinydd"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "shifft"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Dangos dewislen cyd-destun CommaFeed ei hun ar glic dde"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Dangos cadarnhad wrth farcio pob cofnod fel un wedi'i ddarllen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Dangos dewislen cofnodion (penbwrdd)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Dangos dewislen cofnodion (symudol)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Dangos eicon dolen allanol"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Dangos cymorth llwybr byr bysellfwrdd"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Dangos dewislen frodorol (penbwrdd)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Dangos eicon seren"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Dangos nifer heb ei ddarllen yn ffaficon y tab"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Dangos nifer heb ei ddarllen yn nheitl y tab"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Llwyddiant"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Sychwch y pennawd i'r chwith"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Newid i thema golau"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Tagiau"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Corhwyad"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Prawf"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Anfonwyd yr hysbysiad prawf yn llwyddiannus."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "Y URL ar gyfer y porthwr rydych chi am danysgrifio iddo. "
msgid "Theme"
msgstr "Thema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Mae gan y porthiant hwn hen hidlydd na ellir ei olygu ac nid yw'n cael ei gymhwyso. Crëwch yr hidlydd eto gan ddefnyddio'r golygydd mynegiant newydd. Yr hen fynegiant hidlo oedd: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Dyma'ch allwedd API. Gellir ei ddefnyddio ar gyfer rhai gweithrediadau API darllen-yn-unig ac mae'n caniatáu mynediad i'r Fever API. Defnyddiwch y ffurflen ar waelod y dudalen i gynhyrchu allwedd API newydd"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Gall y gosodiad hwn achosi problemau sgrolio ar rai porwyr (e.g. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Toglo statws darllen y cofnod cyfredol"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Toglo bar ochr"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Toglo statws serennog y cofnod cyfredol"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Pwnc"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Rhowch gynnig ar CommaFeed gyda'r cyfrif demo: demo / demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Rhowch gynnig ar y demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "dad-seren"
msgid "Unsubscribe"
msgstr "Dad-danysgrifio"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Allwedd defnyddiwr"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Enw Defnyddiwr neu E-bost"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fioled"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Gwefan"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Croeso! Ymddengys mai dyma'r tro cyntaf i chi redeg CommaFeed. Creuwch gyfrif gweinyddwr i ddechrau."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Melyn"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Nid oes gennych unrhyw danysgrifiadau eto. "
msgstr "Nid oes gennych unrhyw danysgrifiadau eto. Pam na rhoi cynnig ar ychwanegu un trwy glicio ar y marc + ar dop y dudalen?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Mae eich porthiannau wedi'u rhoi mewn ciw i'w hadnewyddu."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Mae eich cyfrinair wedi cael ei newid. Gallwch nawr fewngofnodi gyda'ch cyfrinair newydd."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed er et open-source projekt. Kildekoden er hostet på </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Har du en konto?</0><1>Log ind!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hej,</0><1>jeg er Jérémie fra Belgien, og jeg har arbejdet på CommaFeed i min fritid i over 10 år nu. Tak for din interesse i at hjælpe mig med fortsat at støtte CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Har du brug for en konto?</0><1>Tilmeld dig!</1>"
msgid "About"
msgstr "Omkring"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Adgangstoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Handlinger"
@@ -58,12 +58,12 @@ msgstr "Tilføj bruger"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Administrator"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Administrator brugernavn"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Alle"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Altid"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analyser foder"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Meddelelse"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-nøgle"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Er du sikker på, at du vil slette kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Er du sikker på, at du vil afmelde <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Stigende"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Tilgængelige variabler er 'title', 'content', 'url' 'author' og 'category', og deres indhold konverteres til små bogstaver for at lette strengsammenligning."
msgid "Auto-mark as read"
msgstr "Marker automatisk som læst"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Tilbage"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Tilbage for at logge ind"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blå"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Browserudvidelse"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Browserudvidelse påkrævet til Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Browserfane"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Byg et filterudtryk for at angive, hvad du vil læse. Indlæg, der ikke matcher, vil automatisk blive markeret som læst."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Tjek, at foderet virker"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Luk menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed browserudvidelse version {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed er kompatibel med Fever API. Brug følgende URL i din Fever-kompatible mobilklient. Log ind med dit brugernavn og din <0>API-nøgle</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed næste ulæste element"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed version {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Bekræft"
msgid "Confirm password"
msgstr "Bekræft adgangskode"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Bekræft adgangskode"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Hyggeligt"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Opret administratorkonto"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Nuværende adgangskode"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Brugerdefineret kode"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Brugerdefinerede CSS-regler, der vil blive anvendt"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Brugerdefineret JS-kode, der vil blive eksekveret ved sideindlæsning"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Mørk"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Dato oprettet"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dage"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Slet"
@@ -286,15 +309,15 @@ msgstr "Slet bruger"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Faldende"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detaljeret"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Deaktiver browserens \"Træk for at opdatere\"-adfærd"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,11 +328,11 @@ msgstr "Skærm"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Doner"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
msgstr ""
msgstr "Download"
#: src/pages/app/AboutPage.tsx
msgid "Drag link to bookmark bar"
@@ -323,7 +346,7 @@ msgstr "Træk linket til bogmærkelinjen"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -341,7 +364,7 @@ msgstr "Aktiveret"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Indtast din nuværende adgangskode for at ændre profilindstillinger"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Indlæg der skal holdes over det valgte indlæg ved rulning"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Indlægsoverskrifter"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Fejl"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Eksempel: {eksempel}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Udvidet"
@@ -374,7 +393,7 @@ msgstr "Eksporter dine abonnementer og kategorier som en OPML-fil, der kan impor
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Indstillinger for udvidelse"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -384,19 +403,19 @@ msgstr "Feednavn"
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Feed URL"
msgstr ""
msgstr "Feed URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Hent alle mine feeds nu"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filtrerende udtryk"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Skriftstørrelse"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Tvunget hentning af feeds er endnu ikke tilgængelig."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Genereret feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Gå til {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Godbidder"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Grape"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grå"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Grøn"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Hvis det ikke er tomt, et udtryk, der vurderes til 'sand' eller 'falsk'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Hvis indlægget ikke passer helt på skærmen"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Hvis du støder på et problem, bedes du rapportere det på problemsiden
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importer"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "I udvidet visning markerer du dem som læst, når du ruller gennem poste
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Oprindelig opsætning"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ugyldigt link til nulstilling af adgangskode. Anmod venligst om et nyt."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Sidste opdateringsmeddelelse"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Lys"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Link"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link til dokumentationen"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Log ud"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Langt tryk"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Markér som læst"
msgid "Mark as read up to here"
msgstr "Markér som læst indtil her"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marker indlæg i dette feed som læst efter dette antal dage. Lad stå tomt for at deaktivere."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr ""
msgstr "Metrikker"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Midterklik"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Flyt siden op"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Naviger til et abonnement ved at indtaste dets navn"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Naviger til næste kategori/feed med ulæste indlæg, når alle indlæg markeres som læst"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Aldrig"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Ny adgangskode"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Ny adgangskode"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nyeste først"
@@ -657,7 +685,7 @@ msgstr "Ingen flere poster"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Ingen delingsmuligheder tilgængelige."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Ældst først"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "På desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "På mobil"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "På mobil, vis handlingsknapper i bunden af skærmen"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Gælder kun for tilstandene kompakt, hyggelig og detaljeret"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Hovsa!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Åbn CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Åbent link"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Åbn link i ny baggrundsfane"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Åbn link i ny fane"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Åbn menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Åbn/luk aktuel indgang"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "OPML fil"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-fil er påkrævet"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Orange"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Bestilling"
msgstr "Rækkefølge"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,42 +799,71 @@ msgstr "Forældrekategori"
msgid "Password"
msgstr "Adgangskode"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Adgangskoden skal være på mindst {minimumPasswordLength} tegn"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Gendannelse af adgangskode"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Adgangskoder stemmer ikke overens"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Pink"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr ""
msgstr "Position"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Forrige"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primær farve"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push-meddelelsestjeneste"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push-meddelelser"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push-meddelelser er ikke konfigureret i dine brugerindstillinger."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push-meddelelser er ikke aktiveret på denne CommaFeed-instans."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Modtag push-meddelelser"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Modtag push-meddelelser, når nye feed-indlæg opdages. Aktiver \"Modtag push-meddelelser\" i indstillingerne for hvert feed, du ønsker at modtage meddelelser for."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Gendan adgangskode"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rød"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Opdater"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registreringer er lukket på denne CommaFeed-instans"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Nulstil adgangskode"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Højreklik"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Gem"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Rul valgte indlæg til toppen af siden"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Rul jævnt, når du navigerer mellem poster"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Rulning"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Søg"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Vælg næste ulæste feed/kategori"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Vælg forrige ulæste feed/kategori"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Skift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Vis CommaFeeds egen kontekstmenu ved højreklik"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Vis bekræftelse, når alle indlæg markeres som læst"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Vis indlægsmenu (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Vis indlægsmenu (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Vis eksternt link-ikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Vis hjælp til tastaturgenveje"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Vis indfødt menu (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Vis stjerneikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Vis ulæst antal i fanens favicon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Vis ulæst antal i fanens titel"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -974,7 +1042,7 @@ msgstr "Abonner på feedet"
#: src/pages/app/AboutPage.tsx
msgid "Subscribe URL"
msgstr ""
msgstr "Tilmeldings-URL"
#: src/components/Alert.tsx
msgid "Success"
@@ -982,7 +1050,7 @@ msgstr "Succes"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Stryg overskrift til venstre"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,16 +1062,24 @@ msgstr "Skift til lystema"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tags"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Blågrøn"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testmeddelelse sendt med succes."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL'en til det feed, du vil abonnere på. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Dette feed har et ældre filter, der ikke kan redigeres og ikke anvendes. Genopret venligst filteret ved hjælp af den nye udtrykseditor. Det ældre filterudtryk var: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Dette er din API-nøgle. Den kan bruges til visse skrivebeskyttede API-operationer og giver adgang til Fever API. Brug formularen nederst på siden til at generere en ny API-nøgle"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Denne indstilling kan forårsage rulleproblemer på visse browsere (f.eks. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Skift læsestatus for den aktuelle post"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Skift sidebjælke"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Skift stjernemarkering for aktuel post"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Emne"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Prøv CommaFeed med demokontoen: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Prøv demoen!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1049,16 +1134,16 @@ msgstr "Ulæst"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
msgstr "Fjern stjerne"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Afmeld"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Brugernøgle"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Brugernavn eller e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Hjemmeside"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Velkommen! Det ser ud til at være første gang, du kører CommaFeed. Opret venligst en administratorkonto for at komme i gang."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Gul"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Du har ingen abonnementer endnu. "
msgstr "Du har ingen abonnementer endnu. Hvorfor ikke prøve at tilføje en ved at klikke på +-tegnet øverst på siden?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Dine feeds er blevet sat i kø til opdatering."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Din adgangskode er blevet ændret. Du kan nu logge ind med din nye adgangskode."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed ist ein Open Source Projekt. Der Quellcode wird auf auf </0><1>GitHub</1> gehostet."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Die vollständige Syntax ist </0><1>hier</1> verfügbar<2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Haben Sie ein Konto?</0><1>Melden Sie sich an!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Benötigen Sie ein Konto?</0><1>Hier geht's zur Registrierung!</1>"
msgid "About"
msgstr "Über"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Zugriffstoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Aktionen"
@@ -63,7 +63,7 @@ msgstr "Verwaltung"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Administrator-Benutzername"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "Ankündigung"
msgid "API key"
msgstr "API-Schlüssel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-Token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-Token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Sind Sie sicher, dass Sie die Kategorie <0>{categoryName}</0> löschen möchten?"
@@ -127,20 +135,21 @@ msgid "Asc"
msgstr "Aufsteigend"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Verfügbare Variablen sind „Titel“, „Inhalt“, „URL“, „Autor“ und „Kategorien“, und ihr Inhalt wird in Kleinbuchstaben umgewandelt, um den String-Vergleich zu erleichtern."
msgid "Auto-mark as read"
msgstr "Automatisch als gelesen markieren"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Zurück"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Zurück zum Login"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blau"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
@@ -152,7 +161,11 @@ msgstr "Browser-Erweiterung für Chrome benötigt"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Browsertab"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Erstellen Sie einen Filterausdruck, um anzugeben, was Sie lesen möchten. Einträge, die nicht übereinstimmen, werden automatisch als gelesen markiert."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -192,7 +206,7 @@ msgstr "Menü schließen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Befehl"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
@@ -226,13 +240,18 @@ msgstr "Bestätigen"
msgid "Confirm password"
msgstr "Passwort bestätigen"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Passwort bestätigen"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Gemütlich"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Administrator-Konto erstellen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -256,7 +275,7 @@ msgstr "Einer JS Code der beim Laden der Seite ausgeführt wird"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -267,6 +286,10 @@ msgstr "Dunkel"
msgid "Date created"
msgstr "Erstellungsdatum"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "Tage"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Löschen"
@@ -294,7 +317,7 @@ msgstr "Detailliert"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Browser-Verhalten \"Zum Aktualisieren ziehen\" deaktivieren"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -349,20 +372,16 @@ msgstr "Geben Sie Ihr aktuelles Passwort ein, um die Profileinstellungen zu änd
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Anzahl der Einträge, die beim Scrollen über dem ausgewählten Eintrag bleiben sollen"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Eintragsüberschriften"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Fehler"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Beispiel: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Erweitert"
@@ -392,11 +411,11 @@ msgstr "Alle Feeds jetzt abrufen"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever-API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever-API-URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filterausdruck"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Schriftgröße"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Das Erzwingen des Feed-Abrufs ist noch nicht verfügbar."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -449,23 +468,19 @@ msgstr "Goodies"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Traube"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grau"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Grün"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Wenn nicht leer, ein Ausdruck, der als „wahr“ oder „falsch“ ausgewertet wird."
msgstr "ID"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
@@ -485,11 +500,15 @@ msgstr "In der erweiterten Ansicht werden Einträge beim Scrollen als gelesen ma
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Ersteinrichtung"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ungültiger Link zum Zurücksetzen des Passworts. Bitte fordern Sie einen neuen an."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -523,7 +542,7 @@ msgstr "Hell"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limette"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Verbindung"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link zur Dokumentation"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -589,6 +608,10 @@ msgstr "Als gelesen markieren"
msgid "Mark as read up to here"
msgstr "Bis hierhin als gelesen markieren"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Markieren Sie Einträge in diesem Feed nach dieser Anzahl von Tagen als gelesen. Leer lassen zum Deaktivieren."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metriken"
@@ -615,7 +638,7 @@ msgstr "n.v."
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr ""
msgstr "Name"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Navigate to a subscription by entering its name"
@@ -623,7 +646,7 @@ msgstr "Navigieren Sie zu einem Abonnement, indem Sie seinen Namen eingeben"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigieren Sie zum nächsten Feed/Kategorie mit ungelesenen Einträgen, wenn Sie alle Einträge als gelesen markieren"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -634,6 +657,11 @@ msgstr "Niemals"
msgid "New password"
msgstr "Neues Passwort"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Neues Passwort"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Neueste zuerst"
@@ -657,7 +685,7 @@ msgstr "Keine weiteren Einträge"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Keine Optionen zum Teilen verfügbar."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,11 +697,11 @@ msgstr "Älteste zuerst"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Auf dem Desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Auf dem Handy"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
@@ -681,7 +709,7 @@ msgstr "Auf mobilen Geräten die Aktion-Buttons am unteren Ende des Bildschirms
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Gilt nur für die Modi Kompakt, Gemütlich und Detailliert"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -730,7 +758,7 @@ msgstr "Aktuellen Eintrag öffnen/schließen"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,11 +771,11 @@ msgstr "OPML-Datei"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-Datei ist erforderlich"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Orange"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -771,17 +799,21 @@ msgstr "Übergeordnete Kategorie"
msgid "Password"
msgstr "Passwort"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Passwort muss mindestens {minimumPasswordLength} Zeichen lang sein"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Passwortwiederherstellung"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Passwörter stimmen nicht überein"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -794,19 +826,44 @@ msgstr "Vorheriges"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primärfarbe"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push-Benachrichtigungsdienst"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push-Benachrichtigungen"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push-Benachrichtigungen sind in Ihren Benutzereinstellungen nicht konfiguriert."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push-Benachrichtigungen sind auf dieser CommaFeed-Instanz nicht aktiviert."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Push-Benachrichtigungen erhalten"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Erhalten Sie Push-Benachrichtigungen, wenn neue Feed-Einträge entdeckt werden. Aktivieren Sie \"Push-Benachrichtigungen erhalten\" in den Einstellungen jedes Feeds, für den Sie Benachrichtigungen erhalten möchten."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Kennwort wiederherstellen"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rot"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Aktualisieren"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registrierungen sind für diese CommaFeed-Instanz geschlossen"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Passwort zurücksetzen"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST-API"
@@ -829,6 +891,7 @@ msgstr "Rechtsklick"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -855,11 +918,16 @@ msgstr "Suche"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Nächsten ungelesenen Feed/Kategorie auswählen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Vorherigen ungelesenen Feed/Kategorie auswählen"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -909,7 +977,7 @@ msgstr "Eintragsmenü anzeigen (Handy)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Symbol für externen Link anzeigen"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -925,15 +993,15 @@ msgstr "Natives Menü anzeigen (Desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Stern-Symbol anzeigen"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Anzahl ungelesener Nachrichten im Tab-Favicon anzeigen"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Anzahl ungelesener Nachrichten im Tab-Titel anzeigen"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -994,16 +1062,24 @@ msgstr "Zum Lightmode wechseln"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tags"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Blaugrün"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testbenachrichtigung erfolgreich gesendet."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "Die URL für den Feed, den Sie abonnieren möchten. "
msgid "Theme"
msgstr "Thema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Dieser Feed verfügt über einen veralteten Filter, der nicht bearbeitet werden kann und nicht angewendet wird. Bitte erstellen Sie den Filter mit dem neuen Ausdruckseditor neu. Der veraltete Filterausdruck war: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Dies ist Ihr API-Schlüssel. Er kann für einige schreibgeschützte API-Vorgänge verwendet werden und ermöglicht den Zugriff auf die Fever-API. Verwenden Sie das Formular unten auf der Seite, um einen neuen API-Schlüssel zu generieren"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Diese Einstellung kann auf einigen Browsern (z. B. Safari) zu Scrollproblemen führen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1033,6 +1114,10 @@ msgstr "Sidebar an- und ausschalten"
msgid "Toggle starred status of current entry"
msgstr "Markierungsstatus des aktuellen Eintrags ändern"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Thema"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Testen Sie CommaFeed mit dem Demokonto: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Stern entfernen"
msgid "Unsubscribe"
msgstr "Abbestellen"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Benutzerschlüssel"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Benutzername oder E-Mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violett"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,11 +1168,11 @@ msgstr "Webseite"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Willkommen! Dies scheint das erste Mal zu sein, dass Sie CommaFeed ausführen. Bitte erstellen Sie ein Administrator-Konto, um zu beginnen."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Gelb"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1096,3 +1181,7 @@ msgstr "Sie haben noch keine Abonnements."
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Ihr Feed wurde für die Aktualisierung eingereiht."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Ihr Passwort wurde geändert. Sie können sich nun mit Ihrem neuen Passwort anmelden."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Complete syntax is available </0><1>here</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Have an account?</0><1>Log in!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Need an account?</0><1>Sign up!</1>"
msgid "About"
msgstr "About"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Access token"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Actions"
@@ -98,6 +98,14 @@ msgstr "Announcement"
msgid "API key"
msgstr "API key"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Are you sure you want to delete category <0>{categoryName}</0>?"
@@ -127,14 +135,15 @@ msgid "Asc"
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgid "Auto-mark as read"
msgstr "Auto-mark as read"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Back"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Back to log in"
@@ -154,6 +163,10 @@ msgstr "Browser extension required for Chrome"
msgid "Browser tab"
msgstr "Browser tab"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "Browser tab"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,6 +240,11 @@ msgstr "Confirm"
msgid "Confirm password"
msgstr "Confirm password"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirm Password"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Cozy"
@@ -267,6 +286,10 @@ msgstr "Dark"
msgid "Date created"
msgstr "Date created"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "days"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Delete"
@@ -359,10 +382,6 @@ msgstr "Entry headers"
msgid "Error"
msgstr "Error"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Example: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Expanded"
@@ -386,6 +405,10 @@ msgstr "Feed name"
msgid "Feed URL"
msgstr "Feed URL"
#: src/components/settings/DisplaySettings.tsx
msgid "Feeds posting less often than this (on average) will appear in the Infrequent view"
msgstr "Feeds posting less often than this (on average) will appear in the Infrequent view"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr "Fetch all my feeds now"
@@ -463,10 +486,6 @@ msgstr "Green"
msgid "Id"
msgstr "Id"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "If the entry doesn't entirely fit on the screen"
@@ -487,10 +506,22 @@ msgstr "In expanded view, scrolling through entries mark them as read"
msgid "Indigo"
msgstr "Indigo"
#: src/components/sidebar/Tree.tsx
msgid "Infrequent"
msgstr "Infrequent"
#: src/components/settings/DisplaySettings.tsx
msgid "Infrequent posts threshold (days)"
msgstr "Infrequent posts threshold (days)"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr "Initial Setup"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Invalid password reset link. Please request a new one."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
@@ -589,6 +620,10 @@ msgstr "Mark as read"
msgid "Mark as read up to here"
msgstr "Mark as read up to here"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Mark entries in this feed as read after this number of days. Leave empty to disable."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metrics"
@@ -634,6 +669,11 @@ msgstr "Never"
msgid "New password"
msgstr "New password"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "New Password"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Newest first"
@@ -675,6 +715,10 @@ msgstr "On desktop"
msgid "On mobile"
msgstr "On mobile"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, disable swipe gesture to open the menu"
msgstr "On mobile, disable swipe gesture to open the menu"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr "On mobile, show action buttons at the bottom of the screen"
@@ -771,11 +815,15 @@ msgstr "Parent Category"
msgid "Password"
msgstr "Password"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Password must be at least {minimumPasswordLength} characters"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Password Recovery"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Passwords do not match"
@@ -800,6 +848,31 @@ msgstr "Primary color"
msgid "Profile"
msgstr "Profile"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push notification service"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push notifications"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push notifications are not configured in your user settings."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push notifications are not enabled on this CommaFeed instance."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Receive push notifications"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recover password"
@@ -817,6 +890,11 @@ msgstr "Refresh"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registrations are closed on this CommaFeed instance"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Reset Password"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST API"
@@ -829,6 +907,7 @@ msgstr "Right click"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -861,6 +940,11 @@ msgstr "Select next unread feed/category"
msgid "Select previous unread feed/category"
msgstr "Select previous unread feed/category"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Set focus on next entry without opening it"
@@ -1005,6 +1089,14 @@ msgstr "Tags"
msgid "Teal"
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Test notification sent successfully."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,6 +1105,11 @@ msgstr "The URL for the feed you want to subscribe to. You can also use the webs
msgid "Theme"
msgstr "Theme"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
@@ -1033,6 +1130,10 @@ msgstr "Toggle sidebar"
msgid "Toggle starred status of current entry"
msgstr "Toggle starred status of current entry"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Topic"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Try out CommaFeed with the demo account: demo/demo"
@@ -1056,9 +1157,9 @@ msgstr "Unstar"
msgid "Unsubscribe"
msgstr "Unsubscribe"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr "User created."
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "User key"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1096,3 +1197,7 @@ msgstr "You don't have any subscriptions yet. Why not try adding one by clicking
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Your feeds have been queued for refresh."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Your password has been changed. You can now log in with your new password."

View File

@@ -18,10 +18,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed es un proyecto de código abierto. El código fuente está hospedado en </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La sintaxis completa está disponible </0><1>aquí</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>¿Tienes una cuenta?</0><1>¡Inicia sesión!</1>"
@@ -39,6 +35,10 @@ msgstr "<0>¿Necesitas una cuenta?</0><1>¡Regístrate!</1>"
msgid "About"
msgstr "Acerca de"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token de acceso"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Acciones"
@@ -64,7 +64,7 @@ msgstr "Administrador"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nombre de usuario administrador"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -99,6 +99,14 @@ msgstr "Anuncio"
msgid "API key"
msgstr "Clave API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token de API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token de aplicación"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "¿Estás seguro de que deseas eliminar la categoría <0>{categoryName}</0>?"
@@ -128,20 +136,21 @@ msgid "Asc"
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Las variables disponibles son 'título', 'contenido', 'url', 'autor' y 'categorías' y su contenido se convierte a minúsculas para facilitar la comparación de cadenas."
msgid "Auto-mark as read"
msgstr "Marcar como leído automáticamente"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Atrás"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Volver a iniciar sesión"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Azul"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
@@ -155,6 +164,10 @@ msgstr "Se requiere extensión de navegador para Chrome"
msgid "Browser tab"
msgstr "Pestaña del navegador"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Crea una expresión de filtrado para indicar lo que quieres leer. Las entradas que no coincidan se marcarán como leídas automáticamente."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -162,6 +175,7 @@ msgstr "Pestaña del navegador"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -227,13 +241,18 @@ msgstr "Confirmar"
msgid "Confirm password"
msgstr "Confirmar contraseña"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirmar contraseña"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Acogedor"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Crear cuenta de administrador"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -257,7 +276,7 @@ msgstr "Código JS personalizado que se ejecutará al cargar la página"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cian"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -268,6 +287,10 @@ msgstr "Oscuro"
msgid "Date created"
msgstr "Fecha de creación"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "días"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Borrar"
@@ -295,7 +318,7 @@ msgstr "Detallado"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Desactivar el comportamiento \"Arrastrar para actualizar\" del navegador"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -360,10 +383,6 @@ msgstr "Encabezados de las entradas"
msgid "Error"
msgstr "Error"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Ejemplo: {ejemplo}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Expandido"
@@ -405,11 +424,11 @@ msgstr "Expresión de filtrado"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Tamaño de fuente"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Forzar la actualización de los feeds aún no está disponible."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -450,24 +469,20 @@ msgstr "Golosinas"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Uva"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Gris"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Verde"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Identificación"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Si no está vacía, una expresión que se evalúa como \"verdadera\" o \"falso\". Si es falso, las nuevas entradas de este feed se marcarán como leídas automáticamente."
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Si la entrada no cabe completamente en la pantalla"
@@ -486,11 +501,15 @@ msgstr "En la vista ampliada, al desplazarse por las entradas marcarlas como le
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Índigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configuración inicial"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Enlace de restablecimiento de contraseña no válido. Por favor, solicita uno nuevo."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -524,7 +543,7 @@ msgstr "Claro"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lima"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -534,7 +553,7 @@ msgstr "Enlace"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Enlace a la documentación"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -590,6 +609,10 @@ msgstr "Marcar como leído"
msgid "Mark as read up to here"
msgstr "Marcar como leído hasta aquí"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marcar las entradas de este feed como leídas después de este número de días. Dejar vacío para desactivar."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Métricas"
@@ -624,7 +647,7 @@ msgstr "Navegar a una suscripción introduciendo su nombre"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navegar a la siguiente categoría/feed con entradas no leídas al marcar todas como leídas"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -635,6 +658,11 @@ msgstr "Nunca"
msgid "New password"
msgstr "Nueva contraseña"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nueva contraseña"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Las más recientes primero"
@@ -748,7 +776,7 @@ msgstr "Es necesario un archivo OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Naranja"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -772,17 +800,21 @@ msgstr "Categoría principal"
msgid "Password"
msgstr "Contraseña"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "La contraseña debe tener al menos {minimumPasswordLength} caracteres"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Recuperación de contraseña"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -795,19 +827,44 @@ msgstr "Previo"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Color primario"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Perfil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Servicio de notificaciones push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notificaciones push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Las notificaciones push no están configuradas en tus ajustes de usuario."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Las notificaciones push no están habilitadas en esta instancia de CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Recibir notificaciones push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Recibir notificaciones push cuando se descubran nuevas entradas. Activa \"Recibir notificaciones push\" en los ajustes de cada feed del que quieras recibir notificaciones."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recuperar contraseña"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rojo"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -818,6 +875,11 @@ msgstr "Actualizar"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Los registros están cerrados en esta instancia de CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Restablecer contraseña"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -830,6 +892,7 @@ msgstr "Clic derecho"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -856,11 +919,16 @@ msgstr "Buscar"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Seleccionar el siguiente feed/categoría no leído"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Seleccionar el anterior feed/categoría no leído"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL del servidor"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -1004,7 +1072,15 @@ msgstr "Etiquetas"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Verde azulado"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Probar"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notificación de prueba enviada con éxito."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1014,13 +1090,18 @@ msgstr "La URL del feed al que desea suscribirse. También puede utilizar la URL
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Este feed tiene un filtro heredado que no se puede editar y no se aplica. Por favor, vuelve a crear el filtro usando el nuevo editor de expresiones. La expresión del filtro heredado era: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Esta es su clave API. Se puede utilizar para algunas operaciones API de solo lectura y otorga acceso a Fever API. Utilice el formulario en la parte inferior de la página para generar una nueva clave API"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Este ajuste puede causar problemas de desplazamiento en algunos navegadores (por ejemplo, Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1034,6 +1115,10 @@ msgstr "Alternar barra lateral"
msgid "Toggle starred status of current entry"
msgstr "Alternar estado destacado de la entrada actual"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Tema"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Prueba CommaFeed con la cuenta de demostración: demo/demo"
@@ -1057,9 +1142,9 @@ msgstr "Desmarcar"
msgid "Unsubscribe"
msgstr "Cancelar suscripción"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Clave de usuario"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1072,7 +1157,7 @@ msgstr "Nombre de usuario o correo electrónico"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violeta"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1084,11 +1169,11 @@ msgstr "Sitio web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "¡Bienvenido! Parece que esta es la primera vez que ejecutas CommaFeed. Por favor, crea una cuenta de administrador para empezar."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Amarillo"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1097,3 +1182,7 @@ msgstr "Aún no tienes ninguna suscripción. ¿Por qué no intentas agregar una
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Tus feeds se han puesto en cola para actualizarse."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Tu contraseña ha sido cambiada. Ahora puedes iniciar sesión con tu nueva contraseña."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed یک پروژه متن باز است. سورس‌ها در </0><1>GitHub</1> میزبانی می‌شوند."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>حساب دارید؟</0><1>وارد سیستم شوید!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>سلام،</0><1>من جرمی از بلژیک هستم و بیش از 10 سال است که در اوقات فراغت خود روی CommaFeed کار می کنم. از علاقه شما به کمک به من برای ادامه حمایت از CommaFeed متشکرم.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>به یک حساب نیاز دارید؟</0><1>ثبت نام کنید
msgid "About"
msgstr "در مورد"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "رمز دسترسی"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "اعمال"
@@ -63,7 +63,7 @@ msgstr "مدیر"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "نام کاربری مدیر"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "همه"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "همیشه"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "خوراک را تجزیه و تحلیل کنید"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "اطلاعیه"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "کلید API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "توکن API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "توکن اپلیکیشن"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "آیا مطمئن هستید که می خواهید دسته <0>{categoryName}</0> را حذف کنید؟"
@@ -127,32 +135,37 @@ msgid "Asc"
msgstr "صعودی"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "متغیرهای موجود عبارتند از «عنوان»، «محتوا»، «url» «نویسنده» و «دسته‌ها» و محتوای آن‌ها برای سهولت مقایسه رشته‌ها به حروف کوچک تبدیل می‌شود."
msgid "Auto-mark as read"
msgstr "علامت‌گذاری خودکار به عنوان خوانده شده"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "برگشت"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "بازگشت برای ورود به سیستم"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "آبی"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "افزونه مرورگر"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "برای کروم افزونه مرورگر لازم است"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "زبانه مرورگر"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "یک عبارت فیلتر بسازید تا نشان دهید چه چیزی را می خواهید بخوانید. ورودی هایی که مطابقت ندارند به طور خودکار به عنوان خوانده شده علامت گذاری می شوند."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "بررسی کنید که خوراک کار می کند"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "بستن منو"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "نسخه افزونه مرورگر CommaFeed {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed با Fever API سازگار است. از آدرس زیر در کلاینت موبایل سازگار با Fever استفاده کنید. با نام کاربری و <0>کلید API</0> خود وارد شوید."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "مورد خوانده نشده بعدی CommaFeed"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "نسخه CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "تأیید کنید"
msgid "Confirm password"
msgstr "رمز عبور را تأیید کنید"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "تأیید رمز عبور"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "دنج"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "ایجاد حساب مدیر"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "رمز عبور فعلی"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "کد سفارشی"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "قوانین CSS سفارشی که اعمال خواهد شد"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "کد JS سفارشی که در بارگذاری صفحه اجرا می شود"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "فیروزه‌ای"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "تیره"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "تاریخ ایجاد"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "روز"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "حذف کنید"
@@ -290,11 +313,11 @@ msgstr "توصیف"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "مفصل"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "غیرفعال کردن رفتار مرورگر «کشیدن برای نوسازی»"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "نمایش"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "حمایت مالی"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "رمز عبور فعلی خود را برای تغییر تنظیمات
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "تعداد ورودی‌هایی که هنگام پیمایش باید بالای ورودی انتخاب‌شده باقی بمانند"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "سرصفحه های ورودی"
#: src/components/Alert.tsx
msgid "Error"
msgstr "خطا"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "مثال: {مثال}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "گسترش یافت"
@@ -374,7 +393,7 @@ msgstr "اشتراک ها و دسته های خود را به عنوان یک ف
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "گزینه های افزونه"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL فید"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "اکنون همه فیدهای من را واکشی کن"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL مربوط به Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "بیان فیلتر"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "اندازه قلم"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "واکشی اجباری فیدها هنوز در دسترس نیست."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "آدرس اینترنتی فید تولید شده"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "برو به {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "خوبی ها"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "عنبی"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "خاکستری"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "سبز"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "شناسه"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "اگر خالی نباشد، عبارتی به \"درست\" یا \"نادرست\" ارزیابی می شود. "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "اگر ورودی کاملاً در صفحه نمایش جا نمی شود"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "در نمای بازشده، پیمایش در ورودی‌ها، آن
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "نیلی"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "تنظیمات اولیه"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "لینک بازنشانی رمز عبور نامعتبر است. لطفا درخواست جدید بدهید."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "آخرین پیام تازه کردن"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "روشن"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "لیمویی"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "پیوند"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "پیوند به مستندات"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,12 +582,12 @@ msgstr "خروج"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "فشار طولانی"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "کاربران را مدیریت کنید"
msgstr "مدیریت کاربران"
#: src/components/header/Header.tsx
msgid "Mark all as read"
@@ -589,13 +608,17 @@ msgstr "علامت گذاری به عنوان خوانده شده"
msgid "Mark as read up to here"
msgstr "تا اینجا به عنوان خوانده شده علامت بزنید"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "ورودی های این فید را بعد از این تعداد روز به عنوان خوانده شده علامت گذاری کنید. برای غیرفعال کردن خالی بگذارید."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "متریک"
msgstr "شاخص‌ها"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "کلیک وسط"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "صفحه را به بالا ببرید"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "ناموجود"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "با وارد کردن نام اشتراک، به آن بروید"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "هنگام علامت‌گذاری همه ورودی‌ها به‌عنوان خوانده‌شده، به دسته‌بندی/فید بعدی با ورودی‌های خوانده‌نشده بروید"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "هرگز"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "رمز عبور جدید"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "رمز عبور جدید"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "ابتدا جدیدترین"
@@ -657,7 +685,7 @@ msgstr "ورودی دیگری وجود ندارد"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "هیچ گزینه اشتراک گذاری در دسترس نیست."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,27 +697,27 @@ msgstr "قدیمی ترین اول"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "در دسکتاپ"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "در موبایل"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "در موبایل، دکمه‌های عمل را در پایین صفحه نشان بده"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "فقط برای حالت های فشرده، دنج و مفصل اعمال می شود"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
msgstr "اوه!"
msgstr "اوپس!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "باز کردن CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "پیوند را باز کنید"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "باز کردن پیوند در زبانه پس‌زمینه جدید"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "باز کردن پیوند در زبانه جدید"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "باز کردن منو"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,11 +758,11 @@ msgstr "باز کردن/بستن ورودی فعلی"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr "صادرات OPML"
msgstr "خروجی OPML"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -743,15 +771,15 @@ msgstr "فایل OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "فایل OPML الزامی است"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "نارنجی"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "سفارش"
msgstr "ترتیب"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "دسته والد"
msgid "Password"
msgstr "رمز عبور"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "رمز عبور باید حداقل {minimumPasswordLength} کاراکتر باشد"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "بازیابی رمز عبور"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "گذرواژه ها مطابقت ندارند"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "صورتی"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "موقعیت"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "قبلی"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "رنگ اصلی"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "نمایه"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "سرویس اعلان فشاری"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "اعلان های فشاری"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "اعلان‌های فشاری در تنظیمات کاربر شما پیکربندی نشده‌اند."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "اعلان‌های فشاری در این نمونه CommaFeed فعال نیستند."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "دریافت اعلان های فشاری"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "هنگام کشف ورودی های فید جدید، اعلان های فشاری دریافت کنید. «دریافت اعلان‌های فشاری» را در تنظیمات هر فیدی که می‌خواهید برای آن اعلان‌ها دریافت کنید، فعال کنید."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "بازیابی رمز عبور"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "قرمز"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "تازه کردن"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "ثبت نام در این نمونه CommaFeed بسته شده است"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "بازنشانی رمز عبور"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "راست کلیک"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "ذخیره کنید"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "پیمایش ورودی انتخاب شده به بالای صفحه"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "هنگام پیمایش بین ورودی‌ها به آرامی حرک
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "پیمایش"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "جستجو"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "انتخاب فید/دسته بعدی خوانده نشده"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "انتخاب فید/دسته قبلی خوانده نشده"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "آدرس سرور"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,27 +961,27 @@ msgstr "شیفت"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "نمایش منوی زمینه خود CommaFeed در راست کلیک"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "نمایش تاییدیه هنگام علامت‌گذاری همه ورودی‌ها به عنوان خوانده شده"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "نمایش منوی ورودی (دسکتاپ)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "نمایش منوی ورودی (موبایل)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "نمایش آیکون لینک خارجی"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
msgstr "فیدها و دسته ها را بدون ورودی خوانده نشده نشان دهید"
msgstr "نمایش فیدها و دسته هایی که هیچ ورودی خوانده نشده ای ندارند"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show keyboard shortcut help"
@@ -921,19 +989,19 @@ msgstr "نمایش راهنمایی میانبر صفحه کلید"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "نمایش منوی بومی (دسکتاپ)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "نمایش آیکون ستاره"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "نمایش تعداد خوانده نشده در فاویکون زبانه"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "نمایش تعداد خوانده نشده در عنوان زبانه"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "موفقیت"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "کشیدن هدر به سمت چپ"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -990,20 +1058,28 @@ msgstr "تغییر به تم تیره"
#: src/pages/WelcomePage.tsx
msgid "Switch to light theme"
msgstr "روی زمینه روشن"
msgstr "تغییر به تم روشن"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "سیستم"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr "برچسب ها"
msgstr "برچسبها"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "آبی مایل به سبز"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "تست"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "اعلان تستی با موفقیت ارسال شد."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL فیدی که می خواهید در آن مشترک شوید. "
msgid "Theme"
msgstr "تم"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "این فید دارای یک فیلتر قدیمی است که قابل ویرایش نیست و اعمال نمی‌شود. لطفاً فیلتر را با استفاده از ویرایشگر جدید بازسازی کنید. عبارت فیلتر قدیمی: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "این کلید API شماست. می‌توان از آن برای برخی عملیات API فقط خواندنی استفاده کرد و دسترسی به Fever API را فراهم می‌کند. از فرم پایین صفحه برای تولید کلید جدید استفاده کنید"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "این تنظیم ممکن است در برخی مرورگرها (مانند سافاری) باعث مشکلات پیمایش شود"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "وضعیت خواندن ورودی فعلی را تغییر دهید"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "تغییر وضعیت نوار کناری"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "تغییر وضعیت ستاره‌دار بودن ورودی فعلی"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "موضوع"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "CommaFeed را با حساب آزمایشی امتحان کنید: دم
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "دمو را امتحان کنید!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1049,16 +1134,16 @@ msgstr "خوانده نشده"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
msgstr "برداشتن ستاره"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "لغو اشتراک"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "کلید کاربر"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "نام کاربری یا ایمیل"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "بنفش"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "وب سایت"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "خوش آمدید! به نظر می‌رسد این اولین بار است که CommaFeed را اجرا می‌کنید. لطفاً برای شروع یک حساب مدیر ایجاد کنید."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "زرد"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "شما هنوز هیچ اشتراکی ندارید. "
msgstr "شما هنوز هیچ اشتراکی ندارید. چرا با کلیک روی علامت + در بالای صفحه، یکی را اضافه نمی‌کنید؟"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "فیدهای شما برای نوسازی در صف قرار گرفتند."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "رمز عبور شما تغییر کرد. اکنون می توانید با رمز عبور جدید خود وارد شوید."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed on avoimen lähdekoodin projekti. Lähdekoodia isännöidään osoitteessa </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Onko sinulla tili?</0><1>Kirjaudu sisään!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hei,</0><1>Olen Jérémie Belgiasta ja olen työskennellyt CommaFeedin parissa vapaa-ajallani jo yli 10 vuoden ajan. Kiitos mielenkiinnostasi auttaa minua jatkamaan CommaFeedin tukemista.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Tarvitsetko tilin?</0><1>Rekisteröidy!</1>"
msgid "About"
msgstr "Noin"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Käyttöoikeustunnus"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Toimet"
@@ -63,7 +63,7 @@ msgstr "Järjestelmänvalvoja"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Järjestelmänvalvojan käyttäjänimi"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Kaikki"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Aina"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analysoi syöte"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Ilmoitus"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-avain"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-tunnus"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Sovellustunnus"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Haluatko varmasti poistaa luokan <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Haluatko varmasti peruuttaa kohteen <0>{feedName}</0> tilauksen?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Nouseva"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Käytettävissä olevat muuttujat ovat 'title', 'content', 'url' 'author' ja 'categories', ja niiden sisältö muunnetaan pienillä kirjaimilla merkkijonojen vertailun helpottamiseksi."
msgid "Auto-mark as read"
msgstr "Merkitse automaattisesti luetuksi"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Takaisin"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Takaisin sisäänkirjautumiseen"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Sininen"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Selainlaajennus"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Selainlaajennus vaaditaan Chromessa"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Selaimen välilehti"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Rakenna suodatinlauseke määrittääksesi, mitä haluat lukea. Merkinnät, jotka eivät täsmää, merkitään luetuiksi automaattisesti."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Tarkista, että syöttö toimii"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Sulje valikko"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed-selainlaajennuksen versio {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed on yhteensopiva Fever-API:n kanssa. Käytä seuraavaa URL-osoitetta Fever-yhteensopivassa mobiiliohjelmassasi. Kirjaudu sisään käyttäjätunnuksellasi ja <0>API-avaimellasi</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed seuraava lukematon kohde"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed-versio {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Vahvista"
msgid "Confirm password"
msgstr "Vahvista salasana"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Vahvista salasana"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Viihtyisä"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Luo ylläpitäjän tili"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Nykyinen salasana"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Mukautettu koodi"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Sovellettavat mukautetut CSS-säännöt"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Mukautettu JS-koodi, joka suoritetaan sivun latautuessa"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Syaani"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Tumma"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Luontipäivämäärä"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "päivää"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Poista"
@@ -286,15 +309,15 @@ msgstr "Poista käyttäjä"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Laskeva"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Yksityiskohtainen"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Ota pois käytöstä selaimen \"Vedä päivittääksesi\" -toiminto"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Näyttö"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Lahjoita"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -341,7 +364,7 @@ msgstr "Käytössä"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Anna nykyinen salasanasi muuttaaksesi profiiliasetuksia"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Merkintöjen määrä, joka pidetään valitun merkinnän yläpuolella vieritettäessä"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Merkintöjen otsikot"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Virhe"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Esimerkki: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Laajennettu"
@@ -374,7 +393,7 @@ msgstr "Vie tilauksesi ja luokat OPML-tiedostona, joka voidaan tuoda muihin syö
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Laajennuksen asetukset"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "Syötteen URL-osoite"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Nouda kaikki syötteeni nyt"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever-API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever-API:n URL-osoite"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Suodattava lauseke"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Fonttikoko"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Syötteiden pakotettu nouto ei ole vielä käytettävissä."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Luotu syötteen URL-osoite"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Siirry kohteeseen {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Hyvää"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Viinirypäle"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Harmaa"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Vihreä"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Jos ei tyhjä, lauseke, jonka arvo on \"tosi\" tai \"epätosi\". "
msgstr "Tunnus"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Jos merkintä ei mahdu kokonaan näytölle"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "Merkitse ne luetuiksi laajennetussa näkymässä vierittämällä merkin
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Alkuasetukset"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Virheellinen salasanan palautuslinkki. Pyydä uusi."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Viimeinen päivitysviesti"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Vaalea"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limetinvihreä"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Linkki"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Linkki dokumentaatioon"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Uloskirjautuminen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Pitkä painallus"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Merkitse luetuksi"
msgid "Mark as read up to here"
msgstr "Merkitse luetuksi tähän asti"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Merkitse tämän syötteen merkinnät luetuiksi näin monen päivän kuluttua. Jätä tyhjäksi poistaaksesi käytöstä."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr ""
msgstr "Metriikat"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Keskipainike"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Siirrä sivua ylöspäin"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Siirry tilaukseen kirjoittamalla sen nimi"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Siirry seuraavaan luokkaan/syötteeseen, jossa on lukemattomia merkintöjä, kun kaikki merkinnät merkitään luetuiksi"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Ei koskaan"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Uusi salasana"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Uusi salasana"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Uusin ensin"
@@ -657,7 +685,7 @@ msgstr "Ei enää merkintöjä"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Jakamisvaihtoehtoja ei ole saatavilla."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Vanhin ensin"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Työpöydällä"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Mobiilissa"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Mobiilissa näytä toimintopainikkeet näytön alareunassa"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Koskee vain kompakti-, viihtyisä- ja yksityiskohtainen-tiloja"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Hups!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Avaa CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Avaa linkki"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Avaa linkki uudessa välilehdessä taustalla"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Avaa linkki uudessa välilehdessä"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Avaa valikko"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Avaa/sulje nykyinen merkintä"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "OPML-tiedosto"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-tiedosto vaaditaan"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oranssi"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Tilaus"
msgstr "Järjestys"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Pääluokka"
msgid "Password"
msgstr "Salasana"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Salasanan on oltava vähintään {minimumPasswordLength} merkkiä pitkä"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Salasanan palautus"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Salasanat eivät täsmää"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Vaaleanpunainen"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Sijainti"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Edellinen"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Ensisijainen väri"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profiili"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push-ilmoituspalvelu"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push-ilmoitukset"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push-ilmoituksia ei ole määritetty käyttäjäasetuksissasi."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push-ilmoitukset eivät ole käytössä tässä CommaFeed-instanssissa."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Vastaanota push-ilmoituksia"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Vastaanota push-ilmoituksia, kun uusia syötemerkintöjä löytyy. Ota käyttöön \"Vastaanota push-ilmoituksia\" jokaisen syötteen asetuksissa, josta haluat saada ilmoituksia."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Palauta salasana"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Punainen"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Päivitä"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Tämän CommaFeed-esiintymän rekisteröinnit on suljettu"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Nollaa salasana"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST-API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Oikea napsautus"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Tallenna"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Vieritä valittu merkintä sivun yläreunaan"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Selaa sujuvasti navigoidessasi merkintöjen välillä"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Vieritys"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Etsi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Valitse seuraava lukematon syöte/luokka"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Valitse edellinen lukematon syöte/luokka"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Palvelimen URL-osoite"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,27 +961,27 @@ msgstr "Vaihto"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Näytä CommaFeedin oma kontekstivalikko oikealla napsautuksella"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Näytä vahvistus, kun kaikki merkinnät merkitään luetuiksi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Näytä merkintävalikko (työpöytä)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Näytä merkintävalikko (mobiili)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Näytä ulkoisen linkin kuvake"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
msgstr "Näytä syötteet ja luokat ilman lukemattomia merkintöjä"
msgstr "Näytä syötteet ja luokat, joissa ei ole lukemattomia merkintöjä"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show keyboard shortcut help"
@@ -921,19 +989,19 @@ msgstr "Näytä pikanäppäimen ohje"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Näytä natiivivalikko (työpöytä)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Näytä tähtikuvake"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Näytä lukemattomien määrä välilehden kuvakkeessa"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Näytä lukemattomien määrä välilehden otsikossa"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Onnistui"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Pyyhkäise otsikkoa vasemmalle"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,16 +1062,24 @@ msgstr "Vaihda vaaleaan teemaan"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Järjestelmä"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tunnisteet"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Sinivihreä"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Testi"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testi-ilmoitus lähetetty onnistuneesti."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "Sen syötteen URL-osoite, jonka haluat tilata. "
msgid "Theme"
msgstr "Teema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Tässä syötteessä on vanha suodatin, jota ei voi muokata ja jota ei sovelleta. Luo suodatin uudelleen käyttämällä uutta lauseke-editoria. Vanha suodatinlauseke oli: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Tämä on API-avaimesi. Sitä voidaan käyttää joihinkin vain luku -API-toimintoihin ja se antaa pääsyn Fever-API:iin. Käytä sivun alareunassa olevaa lomaketta uuden API-avaimen luomiseen"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Tämä asetus voi aiheuttaa vieritysongelmia joissakin selaimissa (esim. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Vaihda nykyisen merkinnän lukutila"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Vaihda sivupalkkia"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Vaihda nykyisen merkinnän tähtimerkintää"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Aihe"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Kokeile CommaFeediä demotilillä: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Kokeile demoa!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Poista tähti"
msgid "Unsubscribe"
msgstr "Peruuta tilaus"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Käyttäjäavain"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Käyttäjänimi tai sähköpostiosoite"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violetti"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Verkkosivusto"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Tervetuloa! Näyttää siltä, että suoritat CommaFeediä ensimmäistä kertaa. Luo ylläpitäjän tili aloittaaksesi."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Keltainen"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Sinulla ei ole vielä tilauksia. "
msgstr "Sinulla ei ole vielä tilauksia. Mikset kokeilisi lisätä sellaista napsauttamalla sivun yläreunassa olevaa +-merkkiä?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Syötteesi on asetettu jonoon päivitystä varten."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Salasanasi on vaihdettu. Voit nyt kirjautua sisään uudella salasanallasi."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed est un projet open-source. Les sources sont hébergées sur </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La syntaxe complète est disponible </0><1>ici</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Déjà un compte ?</0><1>Connectez-vous !</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Besoin d'un compte ?</0><1>Enregistrez-vous !</1>"
msgid "About"
msgstr "À propos"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Jeton d'accès"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Actions"
@@ -63,7 +63,7 @@ msgstr "Administrateur"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nom de l'administrateur"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "Annonces"
msgid "API key"
msgstr "Clé API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Jeton API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Jeton Appli"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Êtes-vous sûr de vouloir supprimer la catégorie <0>{categoryName}</0> ?"
@@ -127,14 +135,15 @@ msgid "Asc"
msgstr "Ascendant"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Les variables disponibles sont 'title', 'content', 'url' 'author' et 'categories' et leur contenu est converti en minuscules pour faciliter la comparaison de chaînes."
msgid "Auto-mark as read"
msgstr "Marquer automatiquement comme lu"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Retour"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Retour à la connexion"
@@ -154,6 +163,10 @@ msgstr "L'extension navigateur est nécessaire sur Chrome"
msgid "Browser tab"
msgstr "Onglet navigateur"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Créez une expression régulière pour filtrer ce que vous voulez lire. Les entrées qui ne correspondent pas seront automatiquement marquées comme lues."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "Onglet navigateur"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,13 +240,18 @@ msgstr "Confirmer"
msgid "Confirm password"
msgstr "Confirmer le mot de passe"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirmer le mot de passe"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Cozy"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Créer un compte adminstrateur"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -267,6 +286,10 @@ msgstr "Foncé"
msgid "Date created"
msgstr "Date de création"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "jours"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Effacer"
@@ -359,10 +382,6 @@ msgstr "En-têtes de l'entrée"
msgid "Error"
msgstr "Erreur"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Exemple : {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Vue étendue"
@@ -463,10 +482,6 @@ msgstr "Vert"
msgid "Id"
msgstr "Identifiant"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Si non vide, une expression évaluant à 'vrai' ou 'faux'. Si faux, les nouvelles entrées de ce flux seront marquées comme lues automatiquement."
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Si l'entrée ne tient pas entièrement sur l'écran"
@@ -489,7 +504,11 @@ msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configuration initiale"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Lien de réinitialisation de mot de passse invalide. Recommencez la procédure."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -589,6 +608,10 @@ msgstr "Marquer comme lu"
msgid "Mark as read up to here"
msgstr "Marquer comme lu jusqu'ici"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marquer les entrées de ce flux comme lues après ce nombre de jours. Laissez vide pour désactiver."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Métriques"
@@ -634,6 +657,11 @@ msgstr "Jamais"
msgid "New password"
msgstr "Nouveau mot de passe"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nouveau mot de passe"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Plus récent en premier"
@@ -771,11 +799,15 @@ msgstr "Catégorie parente"
msgid "Password"
msgstr "Mot de passe"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Le mot de passe doit mesurer au moins {minimumPasswordLength} caractères"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Récupération de mot de passe"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas"
@@ -800,6 +832,31 @@ msgstr "Couleur d'ambiance"
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Service de notifications Push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notifications Push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Les notifications Push ne sont pas configurées dans vos préférences."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Les notifications Push ne sont pas disponibles dans cette instance CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Envoyer des notifications Push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Permet de recevoir des notifications Push quand des nouvelles entrées sont découvertes pour un flux. Activez \"Envoyer des notifications Push\" dans les paramètres des flux pour lesquels vous souhaitez être notifié."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Récupérer le mot de passe"
@@ -817,6 +874,11 @@ msgstr "Rafraîchir"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Les inscriptions sont fermées sur cette instance de CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Réinitialiser le mot de passe"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -829,6 +891,7 @@ msgstr "Clic droit"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -861,6 +924,11 @@ msgstr "Sélectionner l'article non lu suivant/la catégorie non lue suivante"
msgid "Select previous unread feed/category"
msgstr "Sélectionner l'article non lu précédent/la catégorie non lue précédente"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL du serveur"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Sélectionner l'article suivant sans l'ouvrir"
@@ -1005,6 +1073,14 @@ msgstr "Marqueurs"
msgid "Teal"
msgstr "Bleu-vert"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notification de test envoyée avec succès."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "L'URL du flux auquel vous souhaitez vous abonner. Vous pouvez aussi utiliser l'URL du site directement et CommaFeed va essayer de trouver le flux dans la page."
@@ -1013,6 +1089,11 @@ msgstr "L'URL du flux auquel vous souhaitez vous abonner. Vous pouvez aussi util
msgid "Theme"
msgstr "Thème"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Ce flux est configuré avec un filtre obsolète, qui ne peut être ni modifié ni appliqué. Vous devez recréer ce filtre à l'aide du nouvel éditeur d'expressions régulières. Le filtre configuré était : <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Ceci est votre clef API. Elle peut être utilisée pour certaines opérations en lecture seule et donne accès à l'API Fever. Utilisez le formulaire en bas de la page pour générer une nouvelle clef API"
@@ -1033,6 +1114,10 @@ msgstr "Montrer/cacher la barre latérale"
msgid "Toggle starred status of current entry"
msgstr "Montrer/cacher le statut favori de l'entrée"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Sujet"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Essayez CommaFeed avec le compte de démonstration : demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Retirer des favoris"
msgid "Unsubscribe"
msgstr "Se désabonner"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Clé utilisateur"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1083,7 +1168,7 @@ msgstr "Site web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Bienvenue ! Il semble que ce soit le premier démarrage de Commafeed. Avant tout, vous devez créer un compte administrateur."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
@@ -1096,3 +1181,7 @@ msgstr "Vous n'avez pas encore d'abonnements. Pourquoi ne pas essayer d'en ajout
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Vos flux sont en cours de rafraîchissement"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Votre mot de passe a été modifié. Vous pouvez vous connecter avec votre nouveau mot de passe."

View File

@@ -9,7 +9,7 @@ msgstr ""
"Language: gl\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-12-27 15:30+0200\n"
"PO-Revision-Date: 2026-02-04 05:30+0200\n"
"Last-Translator: José M. <correoxm@disroot.org>\n"
"Language-Team: gl\n"
"Plural-Forms: \n"
@@ -18,10 +18,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed é un proxecto de código aberto. O código está en </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>A sintaxe completa está dispoñible </0><1>aquí</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Tes unha conta?</0><1>Inicia sesión!</1>"
@@ -39,6 +35,10 @@ msgstr "<0>Necesitas unha conta?</0><1>Crea unha!</1>"
msgid "About"
msgstr "Sobre"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token de acceso"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Accións"
@@ -64,7 +64,7 @@ msgstr "Administración"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Identificador de admin"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -99,6 +99,14 @@ msgstr "Anuncio"
msgid "API key"
msgstr "Clave API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token de API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token de aplicación"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Tes certeza de querer eliminar a categoría <0>{categoryName}</0>?"
@@ -128,14 +136,15 @@ msgid "Asc"
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "As variables dispoñibles son 'título', 'contido', 'url' 'autoría' e 'categorías' e o seu contido convértese a minúsculas para facilitar a comparación de cadeas."
msgid "Auto-mark as read"
msgstr "Marcar automaticamente como lido"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Volver"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Volver para iniciar sesión"
@@ -155,6 +164,10 @@ msgstr "Complemento para o navegador requerido para Chrome"
msgid "Browser tab"
msgstr "Pestana do navegador"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Crea unha expresión de filtrado para indicar o que queres ler. Os artigos que non coincidan marcaranse como lidos automaticamente."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -162,6 +175,7 @@ msgstr "Pestana do navegador"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -227,13 +241,18 @@ msgstr "Confirmar"
msgid "Confirm password"
msgstr "Confirmar contrasinal"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirmar contrasinal"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Acolledor"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Crear conta Admin"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -268,6 +287,10 @@ msgstr "Escuro"
msgid "Date created"
msgstr "Data de creación"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "días"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Eliminar"
@@ -360,10 +383,6 @@ msgstr "Cabeceira dos artigos"
msgid "Error"
msgstr "Erro"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Exemplo: {exemplo}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Ampliado"
@@ -464,10 +483,6 @@ msgstr "Verde"
msgid "Id"
msgstr "Id"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Se non está baleira, unha expresión que se avalía como «true» ou «false». Se é falsa, os novos artigos desta canle marcaranse automaticamente como lidos."
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Se o artigo non se axusta por completo na pantalla"
@@ -490,7 +505,11 @@ msgstr "Índigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configuración inicial"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "A ligazón de restablecemento non é válida. Solicita unha nova."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -590,6 +609,10 @@ msgstr "Marcar como lido"
msgid "Mark as read up to here"
msgstr "Marcar como lido ata aquí"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marcar os artigos desta canle como lidos despois deste número de días. Deixar baleiro para desactivar."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Estatísticas"
@@ -635,6 +658,11 @@ msgstr "Nunca"
msgid "New password"
msgstr "Novo contrasinal"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Novo contrasinal"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Primeiro o máis recente"
@@ -772,11 +800,15 @@ msgstr "Categoría superior"
msgid "Password"
msgstr "Contrasinal"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "O contrasinal ten que ter {minimumPasswordLength} caracteres polo menos"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Recuperación do contrasinal"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Os contrasinais non coinciden"
@@ -801,6 +833,31 @@ msgstr "Cor destacada"
msgid "Profile"
msgstr "Perfil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Servizo de notificacións push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notificacións push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "As notificacións push non están configuradas nos teus axustes de usuario."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "As notificacións push non están activadas nesta instancia de CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Recibir notificacións push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Recibir notificacións push cando se descubran novos artigos. Activa \"Recibir notificacións push\" nos axustes de cada canle para a que queiras recibir notificacións."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recuperar o contrasinal"
@@ -818,6 +875,11 @@ msgstr "Actualizar"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Non se admiten novas contas nesta instancia de CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Restablecer contrasinal"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -830,6 +892,7 @@ msgstr "Botón dereito"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -862,6 +925,11 @@ msgstr "Seleccionar a seguinte canle/categoría sen ler"
msgid "Select previous unread feed/category"
msgstr "Seleccionar a canle/categoría anterior sen ler"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL do servidor"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Establece o foco no seguinte artigo sen abrilo"
@@ -1006,6 +1074,14 @@ msgstr "Etiquetas"
msgid "Teal"
msgstr "Verdoso"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Proba"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notificación de proba enviada correctamente."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "URL da canle á que queres subscribirte. Podes usar a url do sitio web directamente e CommaFeed intentará atopar a canle na páxina."
@@ -1014,6 +1090,11 @@ msgstr "URL da canle á que queres subscribirte. Podes usar a url do sitio web d
msgid "Theme"
msgstr "Decorado"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Esta canle ten un filtro antigo que non se pode editar e que non se aplica. Volve crear o filtro usando o novo editor de expresións. A expresión do filtro antigo era: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Esta é a túa clave da API. Pode usarse para algunhas operacións da API de só-lectura e concede acceso á API Fever. Usa o formulario da parte inferior da páxina para crear unha nova clave da API"
@@ -1034,6 +1115,10 @@ msgstr "Activación do panel lateral"
msgid "Toggle starred status of current entry"
msgstr "Activación do marcado con estrela do artigo actual"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Tema"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Proba CommaFeed coa conta de demostración: demo/demo"
@@ -1057,9 +1142,9 @@ msgstr "Retirar estrela"
msgid "Unsubscribe"
msgstr "Cancelar a subscrición"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Clave de usuario"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1084,7 +1169,7 @@ msgstr "Páxina web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Benvida! Semella que é a primeira vez que executas CommaFeed. Para comezar, crea unha conta de administración."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
@@ -1097,3 +1182,7 @@ msgstr "Aínda non tes ningunha subscrición. Por que non engades unha premendo
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "As túas canles están na cola para ser actualizadas."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "O teu contrasinal cambiou. Xa podes acceder coas novas credenciais."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>A CommaFeed egy nyílt forráskódú projekt. A források a </0><1>GitHubon</1> érhetőek el."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Van fiókja?</0><1>Jelentkezzen be!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Szia,</0><1>Jérémie vagyok Belgiumból, és immár több mint 10 éve foglalkozom a CommaFeeddzel a szabadidőmben. Köszönöm, hogy segítesz a CommaFeed támogatásának folytatásában.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,13 +34,17 @@ msgstr "<0>Fiókra van szüksége?</0><1>Regisztráljon!</1>"
msgid "About"
msgstr "Kb"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Hozzáférési token"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Műveletek"
#: src/components/content/add/AddCategory.tsx
msgid "Add"
msgstr ""
msgstr "Hozzáadás"
#: src/pages/app/AddPage.tsx
msgid "Add category"
@@ -58,12 +58,12 @@ msgstr "Felhasználó hozzáadása"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Adminisztráció"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Adminisztrátor felhasználóneve"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Mind"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Mindig"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Hírcsatorna elemzése"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Bejelentés"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API kulcs"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Biztosan törölni szeretné a(z) <0>{categoryName}</0> kategóriát?"
@@ -124,35 +132,40 @@ msgstr "Biztosan le szeretne iratkozni a következőről: <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Növekvő"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "A rendelkezésre álló változók a következők: 'cím', 'tartalom', 'url' 'szerző' és 'kategóriák', és tartalmukat a rendszer kisbetűssé alakítja a karakterlánc-összehasonlítás megkönnyítése érdekében."
msgid "Auto-mark as read"
msgstr "Automatikus megjelölés olvasottként"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Vissza"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Vissza a bejelentkezéshez"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Kék"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Böngésző kiterjesztés"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Chrome-hoz böngészőbővítmény szükséges"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Böngésző fül"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Hozzon létre egy szűrőkifejezést annak megjelölésére, hogy mit szeretne olvasni. A nem egyező bejegyzések automatikusan olvasottként lesznek megjelölve."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Ellenőrizze, hogy a feed működik-e"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Menü bezárása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed böngészőbővítmény {browserExtensionVersion} verzió."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "A CommaFeed kompatibilis a Fever API-val. Használja a következő URL-t Fever-kompatibilis mobilkliensében. Jelentkezzen be felhasználónevével és <0>API-kulcsával</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed következő olvasatlan elem"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed {version} ({revision}) verzió."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Erősítse meg"
msgid "Confirm password"
msgstr "Erősítse meg a jelszót"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Jelszó megerősítése"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Hangulatos"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Adminisztrátori fiók létrehozása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Jelenlegi jelszó"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Egyedi kód"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Alkalmazandó egyedi CSS szabályok"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Az oldal betöltésekor végrehajtandó egyedi JS kód"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Ciánkék"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Sötét"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Létrehozás dátuma"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "nap"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Törlés"
@@ -286,15 +309,15 @@ msgstr "Felhasználó törlése"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Csökkenő"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Részletes"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "A böngésző „Húzza a frissítéshez” funkciójának letiltása"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Kijelző"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Adományozás"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Húzza a hivatkozást a könyvjelzősávra"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -341,7 +364,7 @@ msgstr "Engedélyezve"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Adja meg jelenlegi jelszavát a profilbeállítások módosításához"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Görgetéskor a kiválasztott bejegyzés felett tartandó bejegyzések száma"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Bejegyzés fejlécek"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Hiba"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Példa: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Kiterjesztve"
@@ -374,7 +393,7 @@ msgstr "Exportálja előfizetéseit és kategóriáit OPML-fájlként, amely imp
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Bővítmény beállításai"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -384,19 +403,19 @@ msgstr "Hírcsatorna neve"
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Feed URL"
msgstr ""
msgstr "Feed URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Összes feed frissítése most"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Szűrő kifejezés"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Betűméret"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "A feedek kényszerített lekérése még nem érhető el."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Hírcsatorna generált URL-je"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Ugrás ide: {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Jók"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Szőlő"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Szürke"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Zöld"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Ha nem üres, akkor 'igaz' vagy 'hamis' értékre kiértékelő kifejezés. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Ha a bejegyzés nem fér el teljesen a képernyőn"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "Kibontott nézetben a bejegyzések görgetése olvasottként jelöli meg
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigókék"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Kezdeti beállítás"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Érvénytelen jelszó-visszaállítási link. Kérjen egy újat."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Utolsó frissítési üzenet"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Világos"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limeszín"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Hivatkozás"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link a dokumentációhoz"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Kijelentkezés"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Hosszú gombnyomás"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Megjelölés olvasottként"
msgid "Mark as read up to here"
msgstr "Megjelölés idáig olvasottként"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Ennyi nap után jelölje meg olvasottként a hírcsatorna bejegyzéseit. Letiltáshoz hagyja üresen."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr ""
msgstr "Metrikák"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Középső kattintás"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Mozgassa felfelé az oldalt"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Navigáljon egy előfizetéshez a nevének megadásával"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigálás a következő olvasatlan bejegyzéseket tartalmazó kategóriára/hírcsatornára, ha minden bejegyzést olvasottnak jelöl"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Soha"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Új jelszó"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Új jelszó"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "A legújabbak először"
@@ -657,7 +685,7 @@ msgstr "Nincs több bejegyzés"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Nincsenek elérhető megosztási lehetőségek."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "A legidősebb első"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Asztali gépen"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Mobilon"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Mobilon mutassa a műveletgombokat a képernyő alján"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Csak a kompakt, hangulatos és részletes módokra vonatkozik"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Hoppá!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "CommaFeed megnyitása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Link megnyitása"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Link megnyitása új háttérlapokon"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Link megnyitása új lapon"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Menü megnyitása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,11 +758,11 @@ msgstr "Aktuális bejegyzés megnyitása/zárása"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr ""
msgstr "OPML exportálás"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -743,15 +771,15 @@ msgstr "OPML fájl"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML fájl megadása kötelező"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Narancssárga"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Rendelés"
msgstr "Sorrend"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Szülő kategória"
msgid "Password"
msgstr "Jelszó"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "A jelszónak legalább {minimumPasswordLength} karakterből kell állnia"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Jelszó helyreállítás"
msgstr "Jelszó helyreállítása"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "A jelszavak nem egyeznek"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rózsaszín"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Pozíció"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Előző"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Elsődleges szín"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push értesítési szolgáltatás"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push értesítések"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "A push értesítések nincsenek konfigurálva a felhasználói beállításokban."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "A push értesítések nincsenek engedélyezve ezen a CommaFeed példányon."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Push értesítések fogadása"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Push értesítések fogadása új feed-bejegyzések felfedezésekor. Engedélyezze a „Push értesítések fogadása” opciót minden olyan feed beállításaiban, amelyről értesítést szeretne kapni."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Jelszó helyreállítása"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Piros"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Frissítés"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "A regisztrációk le vannak zárva ezen a CommaFeed példányon"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Jelszó visszaállítása"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Jobb klikk"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Mentés"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "A kiválasztott bejegyzés görgetése az oldal tetejére"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Sima görgetés, amikor a bejegyzések között navigál"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Görgetés"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Keresés"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Következő olvasatlan feed/kategória kiválasztása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Előző olvasatlan feed/kategória kiválasztása"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Szerver URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -889,31 +957,31 @@ msgstr "Webhelyek megosztása"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Shift"
msgstr ""
msgstr "Shift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "A CommaFeed saját környezeti menüjének megjelenítése jobb gombbal történő kattintáskor"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Megerősítés kérése, ha minden bejegyzést olvasottnak jelöl"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Bejegyzés menü megjelenítése (asztali gép)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Bejegyzés menü megjelenítése (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Külső hivatkozás ikon megjelenítése"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
msgstr "Hírcsatornák és kategóriák megjelenítése olvasatlan bejegyzések nélkül"
msgstr "Az olvasatlan bejegyzés nélküli feedek és kategóriák megjelenítése"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show keyboard shortcut help"
@@ -921,25 +989,25 @@ msgstr "A billentyűparancsok súgójának megjelenítése"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Natív menü megjelenítése (asztali gép)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Csillag ikon megjelenítése"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Olvasatlan darabszám megjelenítése a tab faviconján"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Olvasatlan darabszám megjelenítése a tab címében"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
msgid "Sign up"
msgstr "Regisztráljon"
msgstr "Regisztráció"
#: src/pages/ErrorPage.tsx
msgid "Something bad just happened..."
@@ -948,7 +1016,7 @@ msgstr "Valami rossz történt..."
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Space"
msgstr ""
msgstr "Szóköz"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -982,7 +1050,7 @@ msgstr "Siker"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Fejléc elhúzása balra"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Váltás világos témára"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Rendszer"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Címkék"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Kékeszöld"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Teszt"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "A tesztértesítés sikeresen elküldve."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "Az előfizetni kívánt hírcsatorna URL-je. "
msgid "Theme"
msgstr "Téma"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Ez a feed egy régi szűrővel rendelkezik, amely nem szerkeszthető és nem kerül alkalmazásra. Kérjük, hozza létre újra a szűrőt az új kifejezésszerkesztővel. A régi szűrőkifejezés a következő volt: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Ez az Ön API-kulcsa. Felhasználható néhány írásvédett API-művelethez, és hozzáférést biztosít a Fever API-hoz. Használja az oldal alján található űrlapot egy új API-kulcs létrehozásához"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Ez a beállítás görgetési problémákat okozhat egyes böngészőkben (pl. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Az aktuális bejegyzés olvasási állapotának váltása"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Oldalsáv ki/be"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Az aktuális bejegyzés csillagozott állapotának váltása"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Téma"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Próbálja ki a CommaFeed-et a demo fiókkal: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Próbálja ki a demót!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1049,16 +1134,16 @@ msgstr "Olvasatlan"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
msgstr "Csillag eltávolítása"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Leiratkozás"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Felhasználói kulcs"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Felhasználói név vagy e-mail cím"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Ibolyakék"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,11 +1168,11 @@ msgstr "Webhely"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Üdvözöljük! Úgy tűnik, ez az első alkalom, hogy a CommaFeedet futtatja. Kérjük, hozzon létre egy rendszergazdai fiókot a kezdéshez."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Sárga"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1095,4 +1180,8 @@ msgstr "Még nincs előfizetése. "
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "A feedek bekerültek a frissítési várólistára."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "A jelszava megváltozott. Most már bejelentkezhet az új jelszavával."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed adalah proyek sumber terbuka. Sumbernya di-host di </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Punya akun?</0><1>Masuk!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hai,</0><1>Saya Jérémie dari Belgia dan saya telah mengerjakan CommaFeed di waktu luang saya selama lebih dari 10 tahun sekarang. Terima kasih telah tertarik membantu saya terus mendukung CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Butuh akun?</0><1>Daftar!</1>"
msgid "About"
msgstr "Tentang"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token akses"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Tindakan"
@@ -58,12 +58,12 @@ msgstr "Tambahkan pengguna"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nama pengguna admin"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Semua"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Selalu"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analisis umpan"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Pengumuman"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "kunci API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token aplikasi"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Anda yakin ingin menghapus kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Yakin ingin berhenti berlangganan <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Menaik"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Variabel yang tersedia adalah 'judul', 'konten', 'url' 'penulis' dan 'kategori' dan kontennya diubah menjadi huruf kecil untuk memudahkan perbandingan string."
msgid "Auto-mark as read"
msgstr "Tandai otomatis sebagai telah dibaca"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Kembali"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Kembali untuk masuk"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Biru"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Ekstensi browser"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Ekstensi browser diperlukan untuk Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Tab browser"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Bangun ekspresi filter untuk menunjukkan apa yang ingin Anda baca. Entri yang tidak cocok akan ditandai sebagai telah dibaca secara otomatis."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Periksa apakah umpannya berfungsi"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Tutup menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Ekstensi browser CommaFeed versi {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed kompatibel dengan Fever API. Gunakan URL berikut di klien seluler Anda yang kompatibel dengan Fever. Login dengan nama pengguna dan <0>kunci API</0> Anda."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed item yang belum dibaca berikutnya"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "Versi CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Konfirmasi"
msgid "Confirm password"
msgstr "Konfirmasi kata sandi"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Konfirmasi Kata Sandi"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Nyaman"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Buat Akun Admin"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Kata sandi saat ini"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Kode khusus"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Aturan CSS khusus yang akan diterapkan"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Kode JS khusus yang akan dieksekusi saat pemuatan halaman"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Sian"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Gelap"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Tanggal dibuat"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "hari"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Hapus"
@@ -286,15 +309,15 @@ msgstr "Hapus pengguna"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Menurun"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detail"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Nonaktifkan perilaku browser \"Tarik untuk menyegarkan\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Tampilan"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Donasi"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "Masukkan kata sandi Anda saat ini untuk mengubah pengaturan profil"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Entri yang harus tetap berada di atas entri yang dipilih saat menggulir"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Header entri"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Kesalahan"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Contoh: {contoh}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Diperluas"
@@ -374,7 +393,7 @@ msgstr "Ekspor langganan dan kategori Anda sebagai file OPML yang dapat diimpor
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Opsi ekstensi"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL Umpan"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Ambil semua umpan saya sekarang"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Memfilter ekspresi"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Ukuran font"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Pengambilan paksa umpan belum tersedia."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Url umpan yang dihasilkan"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Buka {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,31 +468,27 @@ msgstr "Pernak-pernik"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Anggur"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Abu-abu"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Hijau"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Jika tidak kosong, ekspresi mengevaluasi ke 'benar' atau 'salah'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Jika entri tidak sepenuhnya muat di layar"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
msgstr "Jika Anda mengalami masalah, harap laporkan di halaman masalah proyek GitHub."
msgstr "Jika Anda menemui masalah, harap laporkan di halaman masalah proyek GitHub."
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
@@ -485,11 +500,15 @@ msgstr "Dalam tampilan yang diperluas, menggulir entri menandainya sebagai telah
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Nila"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Pengaturan Awal"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Tautan pengaturan ulang kata sandi tidak valid. Silakan minta yang baru."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Pesan penyegaran terakhir"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Terang"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limau"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Tautan"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Tautan ke dokumentasi"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Keluar"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Tekan lama"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Tandai sebagai telah dibaca"
msgid "Mark as read up to here"
msgstr "Tandai sebagai telah dibaca sampai di sini"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Tandai entri dalam umpan ini sebagai telah dibaca setelah jumlah hari ini. Biarkan kosong untuk menonaktifkan."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metrik"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Klik tengah"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "Navigasikan ke langganan dengan memasukkan namanya"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigasikan ke kategori/umpan berikutnya dengan entri yang belum dibaca saat menandai semua entri sebagai telah dibaca"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Tidak pernah"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Kata sandi baru"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Kata Sandi Baru"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Terbaru dulu"
@@ -657,7 +685,7 @@ msgstr "Tidak ada entri lagi"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Tidak ada opsi berbagi yang tersedia."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Tertua dulu"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Di desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Di seluler"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Di seluler, tampilkan tombol tindakan di bagian bawah layar"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Hanya berlaku untuk mode ringkas, nyaman, dan detail"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Ups!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Buka CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Buka tautan"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Buka tautan di tab latar belakang baru"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Buka tautan di tab baru"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Buka menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Buka/tutup entri saat ini"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "file OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "File OPML diperlukan"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oranye"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Pesan"
msgstr "Urutan"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Kategori Induk"
msgid "Password"
msgstr "Kata Sandi"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Kata sandi harus minimal {minimumPasswordLength} karakter"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Pemulihan Kata Sandi"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Kata sandi tidak cocok"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Merah Muda"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Posisi"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Sebelumnya"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Warna utama"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Layanan notifikasi push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notifikasi push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Notifikasi push tidak dikonfigurasi dalam pengaturan pengguna Anda."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Notifikasi push tidak diaktifkan pada instans CommaFeed ini."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Terima notifikasi push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Terima notifikasi push saat entri umpan baru ditemukan. Aktifkan \"Terima notifikasi push\" di pengaturan setiap umpan yang ingin Anda terima notifikasinya."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Pulihkan kata sandi"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Merah"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Segarkan"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Pendaftaran ditutup pada instans CommaFeed ini"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Atur Ulang Kata Sandi"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Klik kanan"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Simpan"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Gulir entri yang dipilih ke bagian atas halaman"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Gulir dengan lancar saat menavigasi antar entri"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Menggulir"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Pencarian"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Pilih umpan/kategori belum dibaca berikutnya"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Pilih umpan/kategori belum dibaca sebelumnya"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL Server"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Pergeseran"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Tampilkan menu konteks CommaFeed sendiri pada klik kanan"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Tampilkan konfirmasi saat menandai semua entri sebagai telah dibaca"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Tampilkan menu entri (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Tampilkan menu entri (seluler)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Tampilkan ikon tautan eksternal"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Tampilkan bantuan pintasan keyboard"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Tampilkan menu asli (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Tampilkan ikon bintang"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Tampilkan jumlah yang belum dibaca di favicon tab"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Tampilkan jumlah yang belum dibaca di judul tab"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -948,7 +1016,7 @@ msgstr "Sesuatu yang buruk baru saja terjadi..."
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Space"
msgstr "Luar Angkasa"
msgstr "Spasi"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -982,7 +1050,7 @@ msgstr "Sukses"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Geser header ke kiri"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Beralih ke tema terang"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Sistem"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Tag"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Hijau Kebiruan"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Tes"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notifikasi tes berhasil dikirim."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL untuk umpan yang ingin Anda langgani. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Umpan ini memiliki filter lama yang tidak dapat diedit dan tidak diterapkan. Silakan buat ulang filter menggunakan editor ekspresi baru. Ekspresi filter lama adalah: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Ini adalah kunci API Anda. Ini dapat digunakan untuk beberapa operasi API baca-saja dan memberikan akses ke Fever API. Gunakan formulir di bagian bawah halaman untuk membuat kunci API baru"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Pengaturan ini dapat menyebabkan masalah pengguliran pada beberapa browser (misalnya Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Beralih status baca entri saat ini"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Beralih bilah sisi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Beralih status berbintang entri saat ini"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Topik"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Cobalah CommaFeed dengan akun demo: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Coba demonya!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Hapus bintang"
msgid "Unsubscribe"
msgstr "Berhenti berlangganan"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Kunci pengguna"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Nama Pengguna atau Email"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Situs Web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Selamat datang! Ini sepertinya pertama kalinya Anda menjalankan CommaFeed. Silakan buat akun administrator untuk memulai."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Kuning"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Anda belum memiliki langganan. "
msgstr "Anda belum memiliki langganan. Mengapa tidak mencoba menambahkannya dengan mengklik tanda + di bagian atas halaman?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Umpan Anda telah dimasukkan ke antrean untuk penyegaran."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Kata sandi Anda telah diubah. Sekarang Anda dapat masuk dengan kata sandi baru Anda."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed è un progetto open-source. I sorgenti sono ospitati su </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Hai un account?</0><1>Accedi!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Ehi,</0><1>sono Jérémie dal Belgio e lavoro a CommaFeed nel mio tempo libero da oltre 10 anni. Grazie per l'interesse nell'aiutarmi a continuare a supportare CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Hai bisogno di un account?</0><1>Registrati!</1>"
msgid "About"
msgstr "Circa"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token di accesso"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Azioni"
@@ -63,7 +63,7 @@ msgstr "Ammin"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nome utente amministratore"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Tutto"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Sempre"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analizza feed"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Annuncio"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "Chiave API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token app"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Sei sicuro di voler eliminare la categoria <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Sei sicuro di voler annullare l'iscrizione a <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Le variabili disponibili sono 'titolo', 'contenuto', 'url' 'autore' e 'categorie' e il loro contenuto viene convertito in minuscolo per facilitare il confronto delle stringhe."
msgid "Auto-mark as read"
msgstr "Contrassegna automaticamente come letto"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Indietro"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Torna per accedere"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blu"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Estensione del browser"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Estensione del browser richiesta per Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Scheda del browser"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Crea un'espressione di filtro per indicare cosa vuoi leggere. Le voci che non corrispondono verranno contrassegnate automaticamente come lette."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Verifica che il feed funzioni"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Chiudi menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Versione dell'estensione del browser CommaFeed {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed è compatibile con l'API Fever. Utilizza il seguente URL nel tuo client mobile compatibile con Fever. Accedi con il tuo nome utente e la tua <0>chiave API</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed successivo elemento non letto"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed versione {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,13 +240,18 @@ msgstr "Conferma"
msgid "Confirm password"
msgstr "Conferma password"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Conferma password"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Accogliente"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Crea account amministratore"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -244,29 +263,33 @@ msgstr "Password attuale"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Codice personalizzato"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Regole CSS personalizzate che verranno applicate"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Codice JS personalizzato che verrà eseguito al caricamento della pagina"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Ciano"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Scuro"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Data di creazione"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "giorni"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Elimina"
@@ -286,15 +309,15 @@ msgstr "Elimina utente"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Desc"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Dettagliato"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Disabilita il comportamento del browser \"Trascina per aggiornare\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Visualizzazione"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Dona"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Trascina il collegamento sulla barra dei preferiti"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -349,20 +372,16 @@ msgstr "Inserisci la tua password attuale per modificare le impostazioni del pro
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Voci da mantenere sopra la voce selezionata durante lo scorrimento"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Intestazioni delle voci"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Errore"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Esempio: {esempio}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Espanso"
@@ -374,7 +393,7 @@ msgstr "Esporta le tue iscrizioni e categorie come file OPML che può essere imp
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Opzioni estensione"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL feed"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Aggiorna tutti i miei feed ora"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "API Fever"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL API Fever"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Espressione filtrante"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Dimensione carattere"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "L'aggiornamento forzato dei feed non è ancora disponibile."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "URL feed generato"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Vai a {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Chicche"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Uva"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grigio"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Verde"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Se non è vuota, un'espressione valutata come 'vero' o 'falso'. "
msgstr "ID"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Se la voce non entra interamente nello schermo"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "Nella vista espansa, scorrendo le voci contrassegnale come lette"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indaco"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configurazione iniziale"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Link di ripristino password non valido. Richiedine uno nuovo."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Ultimo messaggio di aggiornamento"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Chiaro"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Collegamento"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link alla documentazione"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Disconnessione"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Pressione prolungata"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Contrassegna come letto"
msgid "Mark as read up to here"
msgstr "Contrassegna come letto fino a qui"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Contrassegna le voci in questo feed come lette dopo questo numero di giorni. Lascia vuoto per disabilitare."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metriche"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Clic centrale"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Sposta la pagina in alto"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/D"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Navigare verso un abbonamento inserendo il suo nome"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Passa alla categoria/feed successivo con voci non lette quando contrassegni tutte le voci come lette"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Mai"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nuova password"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nuova password"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Il più recente prima"
@@ -657,11 +685,11 @@ msgstr "Non ci sono più voci"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Nessuna opzione di condivisione disponibile."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
msgstr "Non è stato trovato nulla"
msgstr "Nessun risultato trovato"
#: src/pages/app/AboutPage.tsx
msgid "Oldest first"
@@ -669,19 +697,19 @@ msgstr "Il più vecchio prima"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Su computer"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Su mobile"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Su mobile, mostra i pulsanti di azione in fondo allo schermo"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Si applica solo alle modalità compatta, accogliente e dettagliata"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Ops!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Apri CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Apri collegamento"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Apri collegamento in una nuova scheda in background"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Apri collegamento in una nuova scheda"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Apri menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Apri/chiudi voce corrente"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -739,15 +767,15 @@ msgstr "Esportazione OPML"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file"
msgstr "file OPML"
msgstr "File OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Il file OPML è richiesto"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Arancione"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -769,19 +797,23 @@ msgstr "Categoria padre"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr ""
msgstr "Password"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "La password deve contenere almeno {minimumPasswordLength} caratteri"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Recupero password"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Le password non corrispondono"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Posizione"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Precedente"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Colore primario"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profilo"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Servizio di notifiche push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notifiche push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Le notifiche push non sono configurate nelle tue impostazioni utente."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Le notifiche push non sono abilitate su questa istanza di CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Ricevi notifiche push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Ricevi notifiche push quando vengono scoperte nuove voci nel feed. Abilita \"Ricevi notifiche push\" nelle impostazioni di ogni feed per cui desideri ricevere notifiche."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recupera password"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rosso"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Aggiorna"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Le registrazioni sono chiuse su questa istanza CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Reimposta password"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -824,11 +886,12 @@ msgstr "API REST"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Clic destro"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Salva"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Scorri la voce selezionata verso la parte superiore della pagina"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Scorrere senza problemi durante la navigazione tra le voci"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Scorrimento"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Cerca"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Seleziona il feed/categoria non letto successivo"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Seleziona il feed/categoria non letto precedente"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL del server"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Cambio"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Mostra il menu contestuale di CommaFeed al clic destro"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Mostra conferma quando contrassegni tutte le voci come lette"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Mostra menu voce (computer)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Mostra menu voce (mobile)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Mostra l'icona del collegamento esterno"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Mostra la guida alle scorciatoie da tastiera"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Mostra menu nativo (computer)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Mostra l'icona a stella"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Mostra il numero di non letti nella favicon della scheda"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Mostra il numero di non letti nel titolo della scheda"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Successo"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Scorri l'intestazione a sinistra"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -990,11 +1058,11 @@ msgstr "Passa al tema scuro"
#: src/pages/WelcomePage.tsx
msgid "Switch to light theme"
msgstr "Passa al tema della luce"
msgstr "Passa al tema chiaro"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Sistema"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Tag"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notifica di prova inviata con successo."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "L'URL del feed a cui vuoi iscriverti. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Questo feed ha un filtro legacy che non può essere modificato e non viene applicato. Ricrea il filtro utilizzando il nuovo editor di espressioni. L'espressione del filtro legacy era: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Questa è la tua chiave API. Può essere utilizzata per alcune operazioni API di sola lettura e garantisce l'accesso all'API Fever. Utilizza il modulo in fondo alla pagina per generare una nuova chiave API"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Questa impostazione può causare problemi di scorrimento su alcuni browser (ad es. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,19 +1108,23 @@ msgstr "Commuta lo stato di lettura della voce corrente"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Attiva/disattiva barra laterale"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Attiva/disattiva stato speciale della voce corrente"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Argomento"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Prova CommaFeed con il conto demo: demo/demo"
msgstr "Prova CommaFeed con l'account demo: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Prova la demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Elimina le stelle"
msgid "Unsubscribe"
msgstr "Annulla iscrizione"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Chiave utente"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Nome utente o e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Viola"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Sito web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Benvenuto! Sembra che sia la prima volta che esegui CommaFeed. Crea un account amministratore per iniziare."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Giallo"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Non hai ancora abbonamenti. "
msgstr "Non hai ancora nessun abbonamento. Perché non provi ad aggiungerne uno cliccando sul segno + in cima alla pagina?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "I tuoi feed sono stati messi in coda per l'aggiornamento."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "La tua password è stata cambiata. Ora puoi accedere con la tua nuova password."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed はオープンソースのプロジェクトです。 ソースは以下でホストされています </0><1>GitHub</1>。"
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>完全な syntax </0><1>こちら</1>で利用可能です<2>。</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>アカウントをお持ちですか?</0><1>ログインしてください!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>アカウントが必要ですか?</0><1>サインアップ!</1>"
msgid "About"
msgstr "About"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "アクセストークン"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "アクション"
@@ -63,7 +63,7 @@ msgstr "管理者"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "管理者ユーザー名"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "お知らせ"
msgid "API key"
msgstr "APIキー"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "APIトークン"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "アプリトークン"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "カテゴリ <0>{categoryName}</0> を削除してもよろしいですか?"
@@ -127,20 +135,21 @@ msgid "Asc"
msgstr "昇順"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "使用可能な変数は「title」、「content」、「url」、「author」、および「categories」であり、それらのコンテンツは文字列の比較を容易にするために小文字に変換されます。"
msgid "Auto-mark as read"
msgstr "自動的に既読にする"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "戻る"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "ログインに戻る"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "ブルー"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
@@ -154,6 +163,10 @@ msgstr "Chromeのブラウザー拡張が必要です"
msgid "Browser tab"
msgstr "ブラウザータブ"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "読みたい内容を指定するためのフィルタ式を作成します。一致しないエントリは自動的に既読としてマークされます。"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "ブラウザータブ"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,13 +240,18 @@ msgstr "確認"
msgid "Confirm password"
msgstr "パスワード確認"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "パスワードの確認"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Cozy"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "管理者アカウントの作成"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -256,7 +275,7 @@ msgstr "ページ読み込み時に実行されるカスタムJSコード"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "シアン"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -267,6 +286,10 @@ msgstr "ダーク"
msgid "Date created"
msgstr "作成日"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "日"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "削除"
@@ -294,7 +317,7 @@ msgstr "詳細"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "ブラウザの「プルして更新」動作を無効にする"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -359,10 +382,6 @@ msgstr "エントリーヘッダー"
msgid "Error"
msgstr "エラー"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "例: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "拡張"
@@ -404,7 +423,7 @@ msgstr "フィルタリング式"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "フォントサイズ"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
@@ -449,24 +468,20 @@ msgstr "グッズ"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "グレープ"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "グレー"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "グリーン"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "ID"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "空でない場合は、'true' または 'false' に評価される式。 'false' の場合、このフィードの新しいエントリーは自動的に既読としてマークされます。"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "エントリーが画面に完全に収まらない場合"
@@ -485,11 +500,15 @@ msgstr "展開ビューでエントリーをスクロールすると、それら
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "インディゴ"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "初期設定"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "無効なパスワードリセットリンクです。新しいリンクをリクエストしてください。"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -523,7 +542,7 @@ msgstr "ライト"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "ライム"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "リンク"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "ドキュメントへのリンク"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -589,6 +608,10 @@ msgstr "既読にする"
msgid "Mark as read up to here"
msgstr "ここまで既読にする"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "この日数経過後に、このフィードのエントリを既読としてマークします。無効にするには空のままにしてください。"
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "メトリックス"
@@ -623,7 +646,7 @@ msgstr "名前を入力してサブスクリプションに移動します"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "すべてのエントリーを既読にするとき、未読エントリーのある次のカテゴリ/フィードに移動する"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -634,6 +657,11 @@ msgstr "しない"
msgid "New password"
msgstr "新しいパスワード"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "新しいパスワード"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "最新順"
@@ -747,7 +775,7 @@ msgstr "OPMLファイルは必要です"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "オレンジ"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -771,17 +799,21 @@ msgstr "親カテゴリ"
msgid "Password"
msgstr "パスワード"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "パスワードは {minimumPasswordLength} 文字以上である必要があります"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "パスワード回復"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "パスワードが一致しません"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "ピンク"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -794,19 +826,44 @@ msgstr "前へ"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "プライマリカラー"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "プロフィール"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "プッシュ通知サービス"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "プッシュ通知"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "ユーザー設定でプッシュ通知が設定されていません。"
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "この CommaFeed インスタンスではプッシュ通知が有効になっていません。"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "プッシュ通知を受け取る"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "新しいフィードエントリが発見されたときにプッシュ通知を受け取ります。通知を受け取りたい各フィードの設定で「プッシュ通知を受け取る」を有効にしてください。"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "パスワードの回復"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "レッド"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "リフレッシュ"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "このCommaFeedインスタンスの登録は終了しています"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "パスワードをリセット"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST API"
@@ -829,6 +891,7 @@ msgstr "右クリック"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -855,11 +918,16 @@ msgstr "検索"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "次の未読フィード/カテゴリを選択"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "前の未読フィード/カテゴリを選択"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "サーバーURL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -1003,7 +1071,15 @@ msgstr "タグ"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "ティール"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "テスト"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "テスト通知が正常に送信されました。"
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "購読したいフィードのURL。ウェブサイトのURLを直接使
msgid "Theme"
msgstr "テーマ"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "このフィードには、編集できず適用もされない古い形式のフィルタがあります。新しい式エディタを使用してフィルタを再作成してください。古いフィルタ式は次のとおりでした: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "これはあなたのAPIキーです。いくつかの読み取り専用API操作に使用できます。これにより、Fever APIへのアクセスが可能になります。ページの下部のフォームを使用して新しいAPIキーを生成します。"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "この設定により、一部のブラウザSafari など)でスクロールの問題が発生する可能性があります。"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1033,6 +1114,10 @@ msgstr "サイドバーを切り替える"
msgid "Toggle starred status of current entry"
msgstr "現在のエントリーのスターステータスを切り替える"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "トピック"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "デモアカウントでCommaFeedを試す: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "スターを外す"
msgid "Unsubscribe"
msgstr "退会"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "ユーザーキー"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "ユーザー名またはメールアドレス"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "バイオレット"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,11 +1168,11 @@ msgstr "ウェブサイト"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "ようこそCommaFeedを初めて実行するようです。開始するには管理者アカウントを作成してください。"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "イエロー"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1096,3 +1181,7 @@ msgstr "まだサブスクリプションがありません。上部の + 記号
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "フィードの更新がキューに登録されました。"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "パスワードが変更されました。新しいパスワードでログインできます。"

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed는 오픈 소스 프로젝트입니다. 소스는 </0><1>GitHub</1>에 호스팅됩니다."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>계정이 있습니까?</0><1>로그인하세요!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>안녕하세요,</0><1>저는 벨기에의 Jérémie이며 10년 넘게 여가 시간에 CommaFeed를 개발해 왔습니다. CommaFeed를 계속 지원할 수 있도록 관심을 가져주셔서 감사합니다.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>계정이 필요하십니까?</0><1>가입하세요!</1>"
msgid "About"
msgstr "정보"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "액세스 토큰"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "액션"
@@ -63,7 +63,7 @@ msgstr "관리자"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "관리자 사용자 이름"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "전체"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "항상"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "피드 분석"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "공지사항"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API 키"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API 토큰"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "앱 토큰"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "<0>{categoryName}</0> 카테고리를 삭제하시겠습니까?"
@@ -127,32 +135,37 @@ msgid "Asc"
msgstr "오름차순"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "사용 가능한 변수는 'title', 'content', 'url' 'author' 및 'categories'이며 해당 내용은 문자열 비교를 쉽게 하기 위해 소문자로 변환됩니다."
msgid "Auto-mark as read"
msgstr "자동으로 읽음 표시"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "뒤로"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "로그인으로 돌아가기"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "블루"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "브라우저 확장 프로그램"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Chrome에는 브라우저 확장 프로그램이 필요합니다"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "브라우저 탭"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "읽고 싶은 항목을 지정하기 위한 필터 표현식을 작성합니다. 일치하지 않는 항목은 자동으로 읽음으로 표시됩니다."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "피드가 작동하는지 확인"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "메뉴 닫기"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed 브라우저 확장 프로그램 버전 {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed는 Fever API와 호환됩니다. Fever 호환 모바일 클라이언트에서 다음 URL을 사용하십시오. 사용자 이름과 <0>API 키</0>로 로그인하십시오."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "다음 읽지 않은 항목을 쉼표로 피드"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed 버전 {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,13 +240,18 @@ msgstr "확인"
msgid "Confirm password"
msgstr "비밀번호 확인"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "비밀번호 확인"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "코지"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "관리자 계정 생성"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -244,29 +263,33 @@ msgstr "현재 비밀번호"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "사용자 정의 코드"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "적용될 사용자 정의 CSS 규칙"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "페이지 로드 시 실행될 사용자 정의 JS 코드"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "시안"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "다크"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "생성 날짜"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "일"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "삭제"
@@ -290,11 +313,11 @@ msgstr "설명"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "상세히"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "브라우저의 \"당겨서 새로고침\" 동작 비활성화"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "디스플레이"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "기부"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "프로필 설정을 변경하려면 현재 비밀번호를 입력하세
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "스크롤 시 선택한 항목 위에 유지할 항목 수"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "항목 헤더"
#: src/components/Alert.tsx
msgid "Error"
msgstr "오류"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "예: {예}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "확장"
@@ -374,7 +393,7 @@ msgstr "구독 및 카테고리를 다른 피드 읽기 서비스에서 가져
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "확장 프로그램 옵션"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "피드 URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "지금 모든 피드 가져오기"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "필터링 표현식"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "글꼴 크기"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "피드 강제 가져오기는 아직 사용할 수 없습니다."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "생성된 피드 URL"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "{0} (으)로 이동"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "굿즈"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "그레이프"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "그레이"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "그린"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "아이디"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "비어 있지 않은 경우 'true' 또는 'false'로 평가되는 표현식입니다. "
msgstr "ID"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "항목이 화면에 완전히 들어맞지 않는 경우"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "확장 보기에서 항목을 스크롤하면 읽은 것으로 표시됩
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "인디고"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "초기 설정"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "유효하지 않은 비밀번호 재설정 링크입니다. 새 링크를 요청하십시오."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "마지막 새로고침 메시지"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "라이트"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "라임"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "링크"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "문서 링크"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "로그아웃"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "길게 누르기"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "읽은 상태로 표시"
msgid "Mark as read up to here"
msgstr "여기까지 읽은 것으로 표시"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "이 피드의 항목을 이 일수 후에 읽음으로 표시합니다. 비활성화하려면 비워 두십시오."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "메트릭스"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "중간 클릭"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "이름을 입력하여 구독으로 이동"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "모든 항목을 읽음으로 표시할 때 읽지 않은 항목이 있는 다음 카테고리/피드로 이동"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "안 함"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "새 비밀번호"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "새 비밀번호"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "최신순"
@@ -657,7 +685,7 @@ msgstr "더 이상 항목이 없습니다"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "사용 가능한 공유 옵션이 없습니다."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "가장 오래된 것부터"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "데스크톱에서"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "모바일에서"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "모바일에서는 화면 하단에 작업 버튼 표시"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "컴팩트, 코지, 상세 모드에만 적용됩니다."
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "앗!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "CommaFeed 열기"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "링크 열기"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "새 백그라운드 탭에서 링크 열기"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "새 탭에서 링크 열기"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "메뉴 열기"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "현재 항목 열기/닫기"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "OPML 파일"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML 파일이 필요합니다"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "오렌지"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "주문"
msgstr "순서"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "부모 카테고리"
msgid "Password"
msgstr "비밀번호"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "비밀번호는 {minimumPasswordLength}자 이상이어야 합니다."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "비밀번호 복구"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "비밀번호가 일치하지 않습니다"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "핑크"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "위치"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "이전"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "기본 색상"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "프로필"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "푸시 알림 서비스"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "푸시 알림"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "사용자 설정에서 푸시 알림이 구성되지 않았습니다."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "이 CommaFeed 인스턴스에서는 푸시 알림이 활성화되지 않았습니다."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "푸시 알림 받기"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "새 피드 항목이 발견되면 푸시 알림을 받습니다. 알림을 받으려는 각 피드의 설정에서 \"푸시 알림 받기\"를 활성화하십시오."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "비밀번호 복구"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "레드"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "새로 고침"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "이 CommaFeed 인스턴스에 대한 등록이 마감되었습니다."
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "비밀번호 재설정"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "오른쪽 클릭"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "저장"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "선택한 항목을 페이지 상단으로 스크롤"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "항목 간 탐색 시 부드럽게 스크롤"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "스크롤"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "검색"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "다음 읽지 않은 피드/카테고리 선택"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "이전 읽지 않은 피드/카테고리 선택"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "서버 URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "시프트"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "오른쪽 클릭 시 CommaFeed의 자체 컨텍스트 메뉴 표시"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "모든 항목을 읽음으로 표시할 때 확인 메시지 표시"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "항목 메뉴 표시 (데스크톱)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "항목 메뉴 표시 (모바일)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "외부 링크 아이콘 표시"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "키보드 단축키 도움말 표시"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "기본 메뉴 표시 (데스크톱)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "별표 아이콘 표시"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "탭 파비콘에 읽지 않은 개수 표시"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "탭 제목에 읽지 않은 개수 표시"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "성공"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "헤더를 왼쪽으로 스와이프"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "밝은 테마로 전환"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "시스템"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "태그"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "청록색"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "테스트"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "테스트 알림이 성공적으로 전송되었습니다."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "구독하려는 피드의 URL입니다. "
msgid "Theme"
msgstr "테마"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "이 피드에는 편집할 수 없고 적용되지 않는 기존 필터가 있습니다. 새 표현식 편집기를 사용하여 필터를 다시 만드십시오. 기존 필터 표현식은 <0>{0}</0>이었습니다."
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "이것은 귀하의 API 키입니다. 일부 읽기 전용 API 작업에 사용할 수 있으며 Fever API에 대한 액세스 권한을 부여합니다. 새 API 키를 생성하려면 페이지 하단의 양식을 사용하십시오."
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "이 설정은 일부 브라우저(예: Safari)에서 스크롤 문제를 일으킬 수 있습니다."
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "현재 항목의 읽기 상태 전환"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "사이드바 전환"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "현재 항목의 별표 표시 상태 전환"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "주제"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "데모 계정으로 CommaFeed를 사용해 보세요: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "데모를 시도해 보세요!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "별표 제거"
msgid "Unsubscribe"
msgstr "구독 취소"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "사용자 키"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "사용자 이름 또는 이메일"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "바이올렛"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "웹사이트"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "환영합니다! CommaFeed를 처음 실행하는 것 같습니다. 시작하려면 관리자 계정을 만드십시오."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "옐로우"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "아직 구독이 없습니다. "
msgstr "아직 구독이 없습니다. 페이지 상단의 + 기호를 클릭하여 추가해 보시겠습니까?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "피드가 새로 고침을 위해 대기열에 추가되었습니다."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "비밀번호가 변경되었습니다. 이제 새 비밀번호로 로그인할 수 있습니다."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed ialah projek sumber terbuka. Sumber dihoskan pada </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Ada akaun?</0><1>Log masuk!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hai,</0><1>Saya Jérémie dari Belgium dan saya telah mengusahakan CommaFeed pada masa lapang saya selama lebih 10 tahun sekarang. Terima kasih kerana berminat untuk membantu saya terus menyokong CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Perlukan akaun?</0><1>Daftar!</1>"
msgid "About"
msgstr "Mengenai"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token akses"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Tindakan"
@@ -63,7 +63,7 @@ msgstr "Pentadbir"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nama pengguna pentadbir"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Semua"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Sentiasa"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Menganalisis suapan"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Pengumuman"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "Kunci API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token aplikasi"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Adakah anda pasti mahu memadamkan kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Adakah anda pasti mahu berhenti melanggan <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Menaik"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Pembolehubah yang tersedia ialah 'tajuk', 'kandungan', 'url' 'pengarang' dan 'kategori' dan kandungannya ditukar kepada huruf kecil untuk memudahkan perbandingan rentetan."
msgid "Auto-mark as read"
msgstr "Tanda automatik sebagai dibaca"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Kembali"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Kembali untuk log masuk"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Biru"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Ekstensi penyemak imbas"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Ekstensi penyemak imbas diperlukan untuk Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Tab penyemak imbas"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Bina ungkapan penapis untuk menunjukkan perkara yang anda mahu baca. Entri yang tidak sepadan akan ditandakan sebagai dibaca secara automatik."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Semak sama ada suapan berfungsi"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Tutup menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Ekstensi penyemak imbas CommaFeed versi {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed serasi dengan Fever API. Gunakan URL berikut dalam klien mudah alih serasi Fever anda. Log masuk dengan nama pengguna anda dan <0>kunci API</0> anda."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed item belum dibaca seterusnya"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "Versi CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Sahkan"
msgid "Confirm password"
msgstr "Sahkan kata laluan"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Sahkan Kata Laluan"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Nyaman"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Cipta Akaun Pentadbir"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Kata laluan semasa"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Kod tersuai"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Aturan CSS tersuai yang akan digunakan"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Kod JS tersuai yang akan dilaksanakan semasa memuatkan halaman"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Sian"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Gelap"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Tarikh dibuat"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "hari"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Padam"
@@ -290,11 +313,11 @@ msgstr "Dec"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Terperinci"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Lumpuhkan kelakuan penyemak imbas \"Tarik untuk muat semula\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Paparan"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Derma"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "Masukkan kata laluan semasa anda untuk menukar tetapan profil"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Entri untuk dikekalkan di atas entri yang dipilih semasa menatal"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Kepala entri"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Ralat"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Contoh: {example}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Dikembangkan"
@@ -374,7 +393,7 @@ msgstr "Eksport langganan dan kategori anda sebagai fail OPML yang boleh diimpor
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Pilihan ekstensi"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL Suapan"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Ambil semua suapan saya sekarang"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Ungkapan penapisan"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Saiz fon"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Pengambilan paksa suapan belum lagi tersedia."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Url suapan yang dijana"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Pergi ke {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -445,31 +464,27 @@ msgstr "Pergi ke dokumentasi API."
#: src/pages/app/AboutPage.tsx
msgid "Goodies"
msgstr ""
msgstr "Barangan"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Anggur"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Kelabu"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Hijau"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Jika tidak kosong, ungkapan yang menilai kepada 'benar' atau 'palsu'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Jika entri tidak muat sepenuhnya pada skrin"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Jika anda menghadapi isu, sila laporkan pada halaman isu projek GitHub."
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Import"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "Dalam paparan yang diperluas, menatal melalui entri menandakannya sebaga
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Persediaan Awal"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Pautan tetapan semula kata laluan tidak sah. Sila minta yang baharu."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Mesej muat semula terakhir"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Terang"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limau"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Pautan"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Pautan ke dokumentasi"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Log Keluar"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Tekan lama"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Tandakan sebagai dibaca"
msgid "Mark as read up to here"
msgstr "Tandai sebagai dibaca sehingga di sini"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Tandakan entri dalam suapan ini sebagai dibaca selepas bilangan hari ini. Biarkan kosong untuk melumpuhkan."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metrik"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Klik tengah"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "Navigasi ke langganan dengan memasukkan namanya"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigasi ke kategori/suapan seterusnya dengan entri yang belum dibaca apabila menandakan semua entri sebagai dibaca"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Tidak pernah"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Kata laluan baharu"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Kata Laluan Baharu"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Terbaharu dahulu"
@@ -657,7 +685,7 @@ msgstr "Tiada lagi penyertaan"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Tiada pilihan perkongsian tersedia."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Tertua dahulu"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Pada desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Pada mudah alih"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Pada mudah alih, tunjukkan butang tindakan di bahagian bawah skrin"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Hanya terpakai pada mod padat, nyaman dan terperinci"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Aduh!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Buka CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Buka pautan"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Buka pautan dalam tab latar belakang baharu"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Buka pautan dalam tab baharu"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Buka menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Buka/tutup entri semasa"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "Fail OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Fail OPML diperlukan"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oren"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Perintah"
msgstr "Pesanan"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Kategori Induk"
msgid "Password"
msgstr "Kata Laluan"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Kata laluan mestilah sekurang-kurangnya {minimumPasswordLength} aksara"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Pemulihan Kata Laluan"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Kata laluan tidak sepadan"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Merah jambu"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Kedudukan"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Sebelumnya"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Warna primer"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Perkhidmatan pemberitahuan tolak"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Pemberitahuan tolak"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Pemberitahuan tolak tidak dikonfigurasikan dalam tetapan pengguna anda."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Pemberitahuan tolak tidak didayakan pada contoh CommaFeed ini."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Terima pemberitahuan tolak"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Terima pemberitahuan tolak apabila entri suapan baharu ditemui. Dayakan \"Terima pemberitahuan tolak\" dalam tetapan setiap suapan yang anda ingin terima pemberitahuan."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Pulihkan kata laluan"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Merah"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Muat semula"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Pendaftaran ditutup pada contoh CommaFeed ini"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Tetap Semula Kata Laluan"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REHAT API"
@@ -824,11 +886,12 @@ msgstr "REHAT API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Klik kanan"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Jimat"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Tatal entri yang dipilih ke bahagian atas halaman"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Tatal dengan lancar apabila menavigasi antara entri"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Menatal"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Cari"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Pilih suapan/kategori belum dibaca seterusnya"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Pilih suapan/kategori belum dibaca sebelumnya"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL Pelayan"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Anjakan"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Tunjukkan menu konteks CommaFeed sendiri pada klik kanan"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Tunjukkan pengesahan apabila menandakan semua entri sebagai dibaca"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Tunjukkan menu entri (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Tunjukkan menu entri (mudah alih)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Tunjukkan ikon pautan luaran"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Tunjukkan bantuan pintasan papan kekunci"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Tunjukkan menu asli (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Tunjukkan ikon bintang"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Tunjukkan kiraan belum dibaca dalam favicon tab"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Tunjukkan kiraan belum dibaca dalam tajuk tab"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Kejayaan"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Leret pengepala ke kiri"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Tukar kepada tema cahaya"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Sistem"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Tag"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Ujian"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Pemberitahuan ujian berjaya dihantar."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL untuk suapan yang anda ingin langgan. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Suapan ini mempunyai penapis warisan yang tidak boleh diedit dan tidak digunakan. Sila buat semula penapis menggunakan editor ungkapan baharu. Ungkapan penapis warisan ialah: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Ini ialah kunci API anda. Ia boleh digunakan untuk beberapa operasi API baca sahaja dan memberikan akses kepada Fever API. Gunakan borang di bahagian bawah halaman untuk menjana kunci API baharu"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Tetapan ini boleh menyebabkan isu penatallan pada sesetengah penyemak imbas (cth. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Togol status bacaan entri semasa"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Togol bar sisi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Togol status berbintang entri semasa"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Topik"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Cuba CommaFeed dengan akaun demo: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Cuba demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Nyahbintang"
msgid "Unsubscribe"
msgstr "Nyahlanggan"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Kunci pengguna"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Nama Pengguna atau E-mel"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Laman web"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Selamat datang! Ini nampaknya kali pertama anda menjalankan CommaFeed. Sila cipta akaun pentadbir untuk bermula."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Kuning"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Anda belum mempunyai sebarang langganan lagi. "
msgstr "Anda belum mempunyai sebarang langganan lagi. Mengapa tidak cuba menambah satu dengan mengklik pada tanda + di bahagian atas halaman?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Suapan anda telah dibariskan untuk muat semula."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Kata laluan anda telah ditukar. Anda kini boleh log masuk dengan kata laluan baharu anda."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed er et åpen kildekode-prosjekt. Kildekoden er hostet på </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Har du en konto?</0><1>Logg på!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hei,</0><1>Jeg er Jérémie fra Belgia, og jeg har jobbet med CommaFeed på fritiden i over 10 år nå. Takk for interessen i å hjelpe meg med å fortsette å støtte CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
msgid "About"
msgstr "Omtrent"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Tilgangstoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Handlinger"
@@ -58,12 +58,12 @@ msgstr "Legg til bruker"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Administrator"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Administrator brukernavn"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Alle"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Alltid"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analyser feed"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Kunngjøring"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-nøkkel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Er du sikker på at du vil slette kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Er du sikker på at du vil avslutte abonnementet på <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Stigende"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Tilgjengelige variabler er 'tittel', 'innhold', 'url' 'forfatter' og 'kategorier', og innholdet deres konverteres til små bokstaver for å lette strengsammenligning."
msgid "Auto-mark as read"
msgstr "Marker automatisk som lest"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Tilbake"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Tilbake for å logge inn"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blå"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Nettleserutvidelse"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Nettleserutvidelse kreves for Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Nettleserfane"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Bygg et filteruttrykk for å angi hva du vil lese. Oppføringer som ikke samsvarer, vil bli markert som lest automatisk."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Sjekk at feeden fungerer"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Lukk meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed nettleserutvidelse versjon {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed er kompatibel med Fever API. Bruk følgende URL i din Fever-kompatible mobilklient. Logg inn med brukernavn og din <0>API-nøkkel</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed neste uleste element"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed versjon {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Bekreft"
msgid "Confirm password"
msgstr "Bekreft passord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Bekreft passord"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Koselig"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Opprett administratorkonto"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Gjeldende passord"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Egendefinert kode"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Egendefinerte CSS-regler som vil bli brukt"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Egendefinert JS-kode som vil bli kjørt ved sideinnlasting"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Syan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Mørk"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Dato opprettet"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dager"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Slett"
@@ -286,15 +309,15 @@ msgstr "Slett bruker"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Synkende"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detaljert"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Deaktiver \"Dra for å oppdatere\"-adferd i nettleseren"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Visning"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Doner"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -341,7 +364,7 @@ msgstr "Aktivert"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Skriv inn ditt nåværende passord for å endre profilinnstillinger"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Oppføringer som skal beholdes over valgt oppføring ved rulling"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Oppføringsoverskrifter"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Feil"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Eksempel: {eksempel}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Utvidet"
@@ -374,7 +393,7 @@ msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan impo
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Utvidelsesvalg"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,27 +407,27 @@ msgstr "Feed-URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Hent alle mine feeder nå"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API-URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
msgstr "Filtrerende uttrykk"
msgstr "Filtreringsuttrykk"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Skriftstørrelse"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Tvunget henting av feeder er ikke tilgjengelig ennå."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Generert feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Gå til {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,47 +468,47 @@ msgstr "Godbiter"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Drue"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grå"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Grønn"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Hvis det ikke er tomt, et uttrykk som vurderes til 'sant' eller 'usant'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Hvis oppføringen ikke får plass på skjermen"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
msgstr "Hvis du støter på et problem, vennligst rapporter det på problemsiden til GitHub-prosjektet."
msgstr "Hvis du støter på et problem, vennligst rapporter det på GitHub-prosjektets side for feilmeldinger."
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importer"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "I utvidet visning merker du dem som lest ved å rulle gjennom oppføringer"
msgstr "I utvidet visning vil rulling gjennom oppføringer merke dem som lest"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Innledende oppsett"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ugyldig lenke for tilbakestilling av passord. Vennligst be om en ny."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Siste oppdateringsmelding"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Lys"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Lenke"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Lenke til dokumentasjonen"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Logg ut"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Langt trykk"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Merk som lest"
msgid "Mark as read up to here"
msgstr "Merk som lest frem til her"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marker oppføringer i denne feeden som lest etter dette antall dager. La den stå tom for å deaktivere."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Beregninger"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Midtklikk"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Flytt siden opp"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Naviger til et abonnement ved å skrive inn navnet"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Naviger til neste kategori/feed med uleste oppføringer når du markerer alle oppføringer som lest"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Aldri"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nytt passord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nytt passord"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nyeste først"
@@ -657,7 +685,7 @@ msgstr "Ingen flere oppføringer"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Ingen delingsalternativer tilgjengelig."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,27 +697,27 @@ msgstr "Eldste først"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "På skrivebord"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "På mobil"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "På mobil, vis handlingsknapper nederst på skjermen"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Gjelder kun for kompakt, koselig og detaljert modus"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
msgstr "Beklager!"
msgstr "Oi!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Åpne CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Åpen lenke"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Åpne lenke i ny bakgrunnsfane"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Åpne lenke i ny fane"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Åpne meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,11 +758,11 @@ msgstr "Åpne/lukk gjeldende oppføring"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr "OPML eksport"
msgstr "OPML-eksport"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -743,15 +771,15 @@ msgstr "OPML-fil"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-fil kreves"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oransje"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Ord"
msgstr "Rekkefølge"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Overordnet kategori"
msgid "Password"
msgstr "Passord"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Passordet må være minst {minimumPasswordLength} tegn"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Passordgjenoppretting"
msgstr "Gjenoppretting av passord"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Passordene samsvarer ikke"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Posisjon"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Forrige"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primærfarge"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Skyvevarslingstjeneste"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Skyvevarsler"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Skyvevarsler er ikke konfigurert i brukerinnstillingene dine."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Skyvevarsler er ikke aktivert på denne CommaFeed-forekomsten."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Motta skyvevarsler"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Motta skyvevarsler når nye feedoppføringer blir oppdaget. Aktiver \"Motta skyvevarsler\" i innstillingene for hver feed du ønsker å motta varsler for."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Gjenopprett passord"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rød"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Oppdater"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Tilbakestill passord"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Høyreklikk"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Lagre"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Rull valgt oppføring til toppen av siden"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Rull jevnt når du navigerer mellom oppføringer"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Rulling"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Søk"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Velg neste uleste feed/kategori"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Velg forrige uleste feed/kategori"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Skift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Vis CommaFeeds egen kontekstmeny ved høyreklikk"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Vis bekreftelse når alle oppføringer markeres som lest"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Vis oppføringsmeny (skrivebord)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Vis oppføringsmeny (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Vis ekstern lenke-ikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Vis hurtigtasthjelp"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Vis innebygd meny (skrivebord)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Vis stjerneikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Vis antall uleste i fanens favicon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Vis antall uleste i fanetittelen"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -948,7 +1016,7 @@ msgstr "Noe ille skjedde akkurat..."
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Space"
msgstr ""
msgstr "Mellomrom"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -982,7 +1050,7 @@ msgstr "Suksess"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Sveip overskriften til venstre"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,16 +1062,24 @@ msgstr "Bytt til lystema"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tagger"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testvarsel sendt uten feil."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL-en til feeden du vil abonnere på. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Denne feeden har et utdatert filter som ikke kan redigeres og ikke blir brukt. Vennligst opprett filteret på nytt med den nye uttrykkseditoren. Det utdaterte filteruttrykket var: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Dette er API-nøkkelen din. Den kan brukes til enkelte skrivebeskyttede API-operasjoner og gir tilgang til Fever API. Bruk skjemaet nederst på siden for å generere en ny API-nøkkel"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Denne innstillingen kan forårsake rulleproblemer i enkelte nettlesere (f.eks. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Veksle lesestatus for gjeldende oppføring"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Veksle sidelinje"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Veksle stjernestatus for gjeldende oppføring"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Emne"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Prøv CommaFeed med demokontoen: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Prøv demoen!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1054,11 +1139,11 @@ msgstr "Fjern stjerne"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Avslutt abonnementet"
msgstr "Avslutt abonnement"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Brukernøkkel"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Brukernavn eller e-post"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fiolett"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Nettsted"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Velkommen! Det ser ut til å være første gang du kjører CommaFeed. Vennligst opprett en administratorkonto for å komme i gang."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Gul"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Du har ingen abonnementer ennå. "
msgstr "Du har ingen abonnementer ennå. Hvorfor ikke prøve å legge til ett ved å klikke på +-tegnet øverst på siden?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Feeder er lagt i kø for oppdatering."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Passordet ditt er endret. Du kan nå logge inn med ditt nye passord."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed is een open-source project. De broncode wordt gehost op </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Heb je een account?</0><1>Log in!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hé,</0><1>ik ben Jérémie uit België en ik werk al meer dan 10 jaar in mijn vrije tijd aan CommaFeed. Bedankt voor je interesse om me te helpen CommaFeed te blijven ondersteunen.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Een account nodig?</0><1>Meld je aan!</1>"
msgid "About"
msgstr "Over"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Toegangstoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Acties"
@@ -63,7 +63,7 @@ msgstr "Beheerder"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Gebruikersnaam beheerder"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Alles"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Altijd"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analyseer feed"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Aankondiging"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-sleutel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Weet je zeker dat je categorie <0>{categoryName}</0> wilt verwijderen?"
@@ -124,35 +132,40 @@ msgstr "Weet je zeker dat je je wilt afmelden voor <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Oplopend"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Beschikbare variabelen zijn 'titel', 'inhoud', 'url', 'auteur' en 'categorieën' en hun inhoud wordt geconverteerd naar kleine letters om het vergelijken van tekenreeksen te vergemakkelijken."
msgid "Auto-mark as read"
msgstr "Automatisch als gelezen markeren"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Terug"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Terug naar inloggen"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blauw"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Browser extensie"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Browser extensie vereist voor Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Browsertabblad"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Maak een filterexpressie om aan te geven wat u wilt lezen. Items die niet overeenkomen, worden automatisch als gelezen gemarkeerd."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Controleer of de feed werkt"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Menu sluiten"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed browser extensie versie {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed is compatibel met de Fever API. Gebruik de volgende URL in uw Fever-compatibele mobiele client. Log in met uw gebruikersnaam en uw <0>API-sleutel</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,11 +222,11 @@ msgstr "CommaFeed volgende ongelezen item"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed versie {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
msgstr ""
msgstr "Compact"
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
@@ -226,17 +240,22 @@ msgstr "Bevestigen"
msgid "Confirm password"
msgstr "Bevestig wachtwoord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Bevestig wachtwoord"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Gezellig"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Beheerdersaccount aanmaken"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Huidig wachtwoord"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Aangepaste code"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Aangepaste CSS-regels die worden toegepast"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Aangepaste JS-code die wordt uitgevoerd bij het laden van de pagina"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cyaan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Donker"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Datum gemaakt"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dagen"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Verwijderen"
@@ -290,11 +313,11 @@ msgstr "Beschrijving"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Gedetailleerd"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Schakel browsergedrag \"Pullen om te verversen\" uit"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Weergave"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Doneren"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Link naar bladwijzerbalk slepen"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -341,7 +364,7 @@ msgstr "Ingeschakeld"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Voer uw huidige wachtwoord in om de profielinstellingen te wijzigen"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Items die boven de geselecteerde vermelding moeten blijven tijdens het scrollen"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Itemkoppen"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Fout"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Voorbeeld: {voorbeeld}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Uitgebreid"
@@ -374,7 +393,7 @@ msgstr "Exporteer uw abonnementen en categorieën als een OPML-bestand dat kan w
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Extensie opties"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "Feed-URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Haal nu al mijn feeds op"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API-URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Uitdrukking filteren"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Lettergrootte"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Geforceerd ophalen van feeds is nog niet beschikbaar."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Gegenereerde feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Ga naar {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Goederen"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Druif"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grijs"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Groen"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Indien niet leeg, een uitdrukking die evalueert naar 'true' of 'false'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Als de vermelding niet helemaal op het scherm past"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Als je een probleem tegenkomt, meld dit dan op de pagina met problemen v
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importeren"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "In de uitgevouwen weergave markeert het scrollen door items ze als gelez
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Initiële setup"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ongeldige wachtwoordherstellink. Vraag een nieuwe aan."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Laatste verversingsbericht"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Licht"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limoen"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Link"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link naar de documentatie"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Uitloggen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Lang indrukken"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Markeren als gelezen"
msgid "Mark as read up to here"
msgstr "Markeer als gelezen tot hier"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Markeer items in deze feed als gelezen na dit aantal dagen. Laat leeg om uit te schakelen."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metrieken"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Middelklik"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Verplaats de pagina omhoog"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "n.v.t."
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Navigeer naar een abonnement door de naam in te voeren"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigeer naar de volgende categorie/feed met ongelezen items wanneer alle items als gelezen worden gemarkeerd"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Nooit"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nieuw wachtwoord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nieuw wachtwoord"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nieuwste eerst"
@@ -657,7 +685,7 @@ msgstr "Geen inzendingen meer"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Geen deelopties beschikbaar."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Oudste eerst"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Op desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Op mobiel"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Op mobiel actieknoppen onderaan het scherm tonen"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Geldt alleen voor compacte, gezellige en gedetailleerde modi"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Oeps!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Open CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Link openen"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Open link in nieuw tabblad op de achtergrond"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Open link in nieuw tabblad"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Menu openen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Huidige invoer openen/sluiten"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -743,15 +771,15 @@ msgstr "OPML-bestand"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-bestand is vereist"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oranje"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Bestelling"
msgstr "Volgorde"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Oudercategorie"
msgid "Password"
msgstr "Wachtwoord"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Wachtwoord moet minimaal {minimumPasswordLength} tekens bevatten"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Wachtwoordherstel"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Wachtwoorden komen niet overeen"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Roze"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Positie"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Vorige"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primaire kleur"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profiel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push-notificatieservice"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push-notificaties"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push-notificaties zijn niet geconfigureerd in je gebruikersinstellingen."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push-notificaties zijn niet ingeschakeld op deze CommaFeed-instantie."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Ontvang push-notificaties"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Ontvang push-notificaties wanneer nieuwe feeditems worden ontdekt. Schakel \"Ontvang push-notificaties\" in bij de instellingen van elke feed waarvoor je notificaties wilt ontvangen."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "wachtwoord herstellen"
msgstr "Wachtwoord herstellen"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Rood"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Vernieuwen"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registraties zijn gesloten op deze CommaFeed-instantie"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Wachtwoord herstellen"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST-API"
@@ -824,11 +886,12 @@ msgstr "REST-API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Rechtermuisklik"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Opslaan"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Geselecteerde vermelding naar de bovenkant van de pagina scrollen"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Vloeiend scrollen bij het navigeren tussen items"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Scrollen"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,15 +918,20 @@ msgstr "Zoeken"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Selecteer volgende ongelezen feed/categorie"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Selecteer vorige ongelezen feed/categorie"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Stel de focus in op het volgende item zonder het te openen"
msgstr "Focus op volgende vermelding zonder deze te openen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on previous entry without opening it"
@@ -889,27 +957,27 @@ msgstr "Sites delen"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Shift"
msgstr ""
msgstr "Shift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Toon het eigen contextmenu van CommaFeed bij rechtsklikken"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Toon bevestiging bij het als gelezen markeren van alle items"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Toon itemmenu (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Toon itemmenu (mobiel)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Toon icoon voor externe link"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Toon hulp bij sneltoetsen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Toon native menu (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Toon ster-icoon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Toon aantal ongelezen in tabblad-favicon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Toon aantal ongelezen in tabbladtitel"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,28 +1050,36 @@ msgstr "Succes"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Veeg koptekst naar links"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
msgstr "Overschakelen naar donker thema"
msgstr "Schakel over naar donker thema"
#: src/pages/WelcomePage.tsx
msgid "Switch to light theme"
msgstr "Overschakelen naar lichtthema"
msgstr "Schakel over naar licht thema"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Systeem"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tags"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Groenblauw"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testnotificatie succesvol verzonden."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,25 +1089,34 @@ msgstr "De URL voor de feed waarop u zich wilt abonneren. "
msgid "Theme"
msgstr "Thema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Deze feed heeft een legacy-filter dat niet kan worden bewerkt en niet wordt toegepast. Maak het filter opnieuw met de nieuwe expressie-editor. De legacy-filterexpressie was: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Dit is je API-sleutel. Het kan worden gebruikt voor sommige alleen-lezen API-bewerkingen en geeft toegang tot de Fever API. Gebruik het formulier onderaan de pagina om een nieuwe API-sleutel te genereren"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Deze instelling kan scrollproblemen veroorzaken in sommige browsers (bijv. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
msgstr "Toggle leesstatus van huidige invoer"
msgstr "Leesstatus van huidig item omschakelen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Zijbalk omschakelen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Sterstatus van huidig item omschakelen"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Onderwerp"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Probeer CommaFeed uit met het demo-account: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Probeer de demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Sterren uit"
msgid "Unsubscribe"
msgstr "Afmelden"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Gebruikerssleutel"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1067,11 +1152,11 @@ msgstr "Gebruikersnaam"
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "User Name or E-mail"
msgstr "Gebruikersnaam of e-mailadres"
msgstr "Gebruikersnaam of e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1079,20 +1164,24 @@ msgstr "Waarschuwing"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Website"
msgstr ""
msgstr "Website"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Welkom! Dit lijkt de eerste keer te zijn dat je CommaFeed draait. Maak een beheerdersaccount aan om aan de slag te gaan."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Geel"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Je hebt nog geen abonnementen. "
msgstr "Je hebt nog geen abonnementen. Waarom probeer je er niet een toe te voegen door op het +-teken bovenaan de pagina te klikken?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Je feeds zijn in de wachtrij geplaatst voor verversing."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Je wachtwoord is gewijzigd. Je kunt nu inloggen met je nieuwe wachtwoord."

View File

@@ -15,19 +15,15 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed er eit ope kjeldekode-prosjekt. Kjeldene er hos </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Har du en konto?</0><1>Logg på!</1>"
msgstr "<0>Har du ein konto?</0><1>Logg på!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hei,</0><1>Eg er Jérémie frå Belgia og eg har jobba med CommaFeed på fritida mi i over 10 år no. Takk for at du viser interesse for å hjelpa meg med å fortsetja støtta til CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,9 +34,13 @@ msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
msgid "About"
msgstr "Omtrent"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Tilgangstoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Handlinger"
msgstr "Handlingar"
#: src/components/content/add/AddCategory.tsx
msgid "Add"
@@ -52,18 +52,18 @@ msgstr "Legg til kategori"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Add user"
msgstr "Legg til bruker"
msgstr "Legg til brukar"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Administrator"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Brukarnamn for administrator"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Alle"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Alltid"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -88,16 +88,24 @@ msgstr "En opml-fil er en XML-fil som inneholder feed-URLer og kategorier. "
#: src/components/content/add/Subscribe.tsx
msgid "Analyze feed"
msgstr "Analyser feed"
msgstr "Analyser suap"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Kunngjering"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-nøkkel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Er du sikker på at du vil slette kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Er du sikker på at du vil avslutte abonnementet på <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Stigande"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Tilgjengelige variabler er 'tittel', 'innhold', 'url' 'forfatter' og 'kategorier', og innholdet deres konverteres til små bokstaver for å lette strengsammenligning."
msgid "Auto-mark as read"
msgstr "Marker som lesen automatisk"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Tilbake"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Tilbake for å logge inn"
msgstr "Tilbake for å logga inn"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blå"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Nettlesarutviding"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Nettlesarutviding er påkravd for Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Nettlesarfan"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Bygg eit filteruttrykk for å angis kva du vil lesa. Innlegg som ikkje samsvarar vil bli markerte som lesne automatisk."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,27 +202,27 @@ msgstr "Sjekk at feeden fungerer"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Lukk meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "CommaFeed nettlesarutviding versjon {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed er kompatibel med Fever API. Bruk følgjande URL i din Fever-kompatible mobilklient. Logg inn med brukarnamn og din <0>API-nøkkel</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
msgstr "CommaFeed neste uleste element"
msgstr "CommaFeed neste ulesne element"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed versjon {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Bekreft"
msgid "Confirm password"
msgstr "Bekreft passord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Stadfest passord"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Koselig"
msgstr "Koseleg"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Opprett administratorkonto"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Gjeldende passord"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Eige koden"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Eigne CSS-reglar som vil bli brukte"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Eige JS-kode som vil bli køyrt når sida lastar"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Syan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Mørk"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Dato opprettet"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dagar"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Slett"
@@ -286,15 +309,15 @@ msgstr "Slett bruker"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Søkkande"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detaljert"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Slå av \"Dra for å oppdatera\"-åtferd i nettlesaren"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Visning"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Doner"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -341,7 +364,7 @@ msgstr "Aktivert"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Skriv inn ditt nåværende passord for å endre profilinnstillinger"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Innlegg som skal haldast over det valde innlegget ved rulling"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Overskrifter for innlegg"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Feil"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Eksempel: {eksempel}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Utvidet"
@@ -374,7 +393,7 @@ msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan impo
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Val for utviding"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,27 +407,27 @@ msgstr "Feed-URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Hent alle suapane mine no"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API-URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
msgstr "Filtrerende uttrykk"
msgstr "Filtreringsuttrykk"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Skriftstorleik"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Tvungen henting av suapar er ikkje tilgjengeleg enno."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,11 +452,11 @@ msgstr "Generert feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Gå til {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
msgstr "Gå til visningen Alle"
msgstr "Gå til visninga Alle"
#: src/pages/app/AboutPage.tsx
msgid "Go to the API documentation."
@@ -445,51 +464,51 @@ msgstr "Gå til API-dokumentasjonen."
#: src/pages/app/AboutPage.tsx
msgid "Goodies"
msgstr "Godbiter"
msgstr "Godbitar"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Drue"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grå"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Grøn"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Hvis det ikke er tomt, et uttrykk som vurderes til 'sant' eller 'usant'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Dersom innlegget ikkje får plass på skjermen"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
msgstr "Hvis du støter på et problem, vennligst rapporter det på problemsiden til GitHub-prosjektet."
msgstr "Hvis du støter på eit problem, ver venleg og rapporter det på problemsida til GitHub-prosjektet."
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importer"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "I utvidet visning merker du dem som lest ved å rulle gjennom oppføringer"
msgstr "I utvidet visning vil rulling gjennom oppføringer merke dem som lest"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Fyrsteoppsett"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ugyldig lenke for tilbakestilling av passord. Ver venleg og be om ei ny."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "Siste oppdateringsmelding"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Ljos"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Lenke"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Lenke til dokumentasjonen"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,12 +582,12 @@ msgstr "Logg ut"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Langt trykk"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Administrer brukere"
msgstr "Administrer brukarar"
#: src/components/header/Header.tsx
msgid "Mark all as read"
@@ -589,13 +608,17 @@ msgstr "Merk som lest"
msgid "Mark as read up to here"
msgstr "Merk som lest frem til her"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marker innlegg i denne suapen som lesne etter dette talet på dagar. Lat stå tomt for å slå av."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Beregninger"
msgstr "Metrikk"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Midtklikk"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Flytt siden opp"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Naviger til et abonnement ved å skrive inn navnet"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Naviger til neste kategori/suap med ulesne innlegg når du markerer alle innlegg som lesne"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Aldri"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nytt passord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nytt passord"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nyeste først"
@@ -657,11 +685,11 @@ msgstr "Ingen flere oppføringer"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Ingen delingsval tilgjengelege."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
msgstr "Ingenting funnet"
msgstr "Ingenting funne"
#: src/pages/app/AboutPage.tsx
msgid "Oldest first"
@@ -669,27 +697,27 @@ msgstr "Eldste først"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "På skrivebord"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "På mobil"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "På mobil, vis handlingsknappar nedst på skjermen"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Gjeld berre for kompakt, koseleg og detaljert modus"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
msgstr "Beklager!"
msgstr "Oi!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Opna CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Åpen lenke"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Opna lenke i ny bakgrunnsfane"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Opna lenke i ny fane"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Opna meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,11 +758,11 @@ msgstr "Åpne/lukk gjeldende oppføring"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr "OPML eksport"
msgstr "OPML-eksport"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -743,15 +771,15 @@ msgstr "OPML-fil"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-fil er påkravd"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oransje"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Ord"
msgstr "Rekkefølgje"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Overordnet kategori"
msgid "Password"
msgstr "Passord"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Passordet må vera minst {minimumPasswordLength} teikn"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Passordgjenoppretting"
msgstr "Gjenoppretting av passord"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Passordene samsvarer ikke"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Posisjon"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Førre"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Hovudfarge"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Teneste for skuvvarsling"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Skuvvarslingar"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Skuvvarslingar er ikkje sett opp i brukarinnstillingane dine."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Skuvvarslingar er ikkje slege på i denne CommaFeed-instansen."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Motta skuvvarslingar"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Motta skuvvarslingar når nye suapinnlegg vert funne. Slå på \"Motta skuvvarslingar\" i innstillingane for kvar suap du vil motta varslingar for."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Gjenopprett passord"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Raud"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Oppdater"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Tilbakestill passord"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Høgreklikk"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Lagre"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Rull valt innlegg til toppen av sida"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Rull jevnt når du navigerer mellom oppføringer"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Rulling"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Søk"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Vel neste ulesne suap/kategori"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Vel førre ulesne suap/kategori"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Skift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Vis CommaFeed sin eigen kontekstmeny ved høgreklikk"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Vis stadfesting når du markerer alle innlegg som lesne"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Vis innleggsmeny (skrivebord)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Vis innleggsmeny (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Vis ikon for ekstern lenke"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Vis hurtigtasthjelp"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Vis innebygd meny (skrivebord)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Vis stjerneikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Vis talet på ulesne i favicon for fana"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Vis talet på ulesne i tittelen på fana"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -948,7 +1016,7 @@ msgstr "Noe ille skjedde akkurat..."
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Space"
msgstr ""
msgstr "Mellomrom"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -960,7 +1028,7 @@ msgstr "Stjerne"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Stjerne"
msgstr "Stjernemerka"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
@@ -970,11 +1038,11 @@ msgstr "Abonner"
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe to the feed"
msgstr "Abonner på feeden"
msgstr "Abonner på suapen"
#: src/pages/app/AboutPage.tsx
msgid "Subscribe URL"
msgstr "Abonner URL"
msgstr "Abonner-URL"
#: src/components/Alert.tsx
msgid "Success"
@@ -982,7 +1050,7 @@ msgstr "Suksess"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Sveip overskrifta til venstre"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -990,20 +1058,28 @@ msgstr "Bytt til mørkt tema"
#: src/pages/WelcomePage.tsx
msgid "Switch to light theme"
msgstr "Bytt til lystema"
msgstr "Bytt til lyst tema"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Tags"
msgstr ""
msgstr "Tagger"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testvarsling sendt utan feil."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,25 +1089,34 @@ msgstr "URL-en til feeden du vil abonnere på. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Denne suapen har eit gamalt filter som ikkje kan redigerast og som ikkje vert brukt. Ver venleg og lag filteret på nytt med den nye uttrykkseditoren. Det gamle filteruttrykket var: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Dette er API-nøkkelen din. Han kan brukast til enkelte skrivebeskytta API-handlingar og gjev tilgang til Fever API. Bruk skjemaet nedst på sida for å laga ein ny API-nøkkel"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Denne innstillinga kan valda rulleproblem i enkelte nettlesarar (t.d. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
msgstr "Veksle lesestatus for gjeldende oppføring"
msgstr "Veksle lesestatus for gjeldande innlegg"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Veksle sideoppsett"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Veksle stjernestatus for gjeldende innlegg"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Emne"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,11 +1124,11 @@ msgstr "Prøv CommaFeed med demokontoen: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Prøv demoen!"
#: src/components/header/Header.tsx
msgid "Unread"
msgstr "Ulest"
msgstr "Ulesen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1054,45 +1139,49 @@ msgstr "Fjern stjerne"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Avslutt abonnementet"
msgstr "Avslutt abonnement"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Brukarnøkkel"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
msgstr "Brukernavn"
msgstr "Brukarnamn"
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "User Name or E-mail"
msgstr "Brukernavn eller e-post"
msgstr "Brukarnamn eller e-post"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fiolett"
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Advarsel"
msgstr "Åtvaring"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Website"
msgstr "Nettsted"
msgstr "Nettstad"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Velkomen! Det ser ut til å vera fyrste gongen du køyrer CommaFeed. Ver venleg og opprett ein administratorkonto for å koma i gang."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Gul"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Du har ingen abonnementer ennå. "
msgstr "Du har ingen abonnementer ennå. Hvorfor ikke prøve å legge til ett ved å klikke på +-tegnet øverst på siden?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Suapane dine er lagde i kø for oppdatering."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Passordet ditt er endra. Du kan no logga inn med det nye passordet ditt."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed to projekt o otwartym kodzie źródłowym. Kod źródłowy znajduje się na </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Masz konto?</0><1>Zaloguj się!<//1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hej,</0><1>Jestem Jérémie z Belgii i od ponad 10 lat rozwijam CommaFeed w wolnym czasie. Dziękuję za zainteresowanie pomocą w dalszym wspieraniu projektu CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Potrzebujesz konta?</0><1>Zarejestruj się!</1>"
msgid "About"
msgstr "O"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token dostępu"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Akcje"
@@ -63,7 +63,7 @@ msgstr "Administracja"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nazwa użytkownika administratora"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Wszystkie"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Zawsze"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -92,12 +92,20 @@ msgstr "Analizuj kanał"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Ogłoszenie"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "klucz API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token aplikacji"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Czy na pewno chcesz usunąć kategorię <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Czy na pewno chcesz zrezygnować z subskrypcji <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Rosnąco"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Dostępne zmienne to „tytuł”, „treść”, „adres URL”, „autor” i „kategorie”, a ich zawartość jest konwertowana na małe litery, aby ułatwić porównanie ciągów."
msgid "Auto-mark as read"
msgstr "Automatycznie oznaczaj jako przeczytane"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Powrót"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Powrót do logowania"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Niebieski"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Rozszerzenie przeglądarki"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Wymagane rozszerzenie przeglądarki dla Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Karta przeglądarki"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Zbuduj wyrażenie filtrujące, aby wskazać, co chcesz czytać. Wpisy, które nie pasują, zostaną automatycznie oznaczone jako przeczytane."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Sprawdź, czy kanał działa"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Zamknij menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Wersja rozszerzenia przeglądarki CommaFeed {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed jest kompatybilny z API Fever. Użyj następującego adresu URL w swoim kliencie mobilnym zgodnym z Fever. Zaloguj się przy użyciu swojej nazwy użytkownika i <0>klucza API</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "Przecinek następny nieprzeczytany element"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "Wersja CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Potwierdź"
msgid "Confirm password"
msgstr "Potwierdź hasło"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Potwierdź hasło"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Przytulny"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Utwórz konto administratora"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "aktualne hasło"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Własny kod"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Niestandardowe reguły CSS, które zostaną zastosowane"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Niestandardowy kod JS, który zostanie wykonany po załadowaniu strony"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Błękitny"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Ciemny"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Data utworzenia"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dni"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Usuń"
@@ -290,22 +313,22 @@ msgstr "Opis"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Szczegółowy"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Wyłącz zachowanie przeglądarki „Przeciągnij, aby odświeżyć”"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Wyświetlacz"
msgstr "Wyświetlanie"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Przekaż darowiznę"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Przeciągnij link do paska zakładek"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -349,20 +372,16 @@ msgstr "Wprowadź swoje aktualne hasło, aby zmienić ustawienia profilu"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Wpisy do pozostawienia nad wybranym wpisem podczas przewijania"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Nagłówki wpisów"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Błąd"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Przykład: {przykład}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Rozszerzony"
@@ -374,7 +393,7 @@ msgstr "Eksportuj swoje subskrypcje i kategorie jako plik OPML, który można za
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Opcje rozszerzenia"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL kanału"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Pobierz teraz wszystkie moje kanały"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL API Fever"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Wyrażenie filtrujące"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Rozmiar czcionki"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Wymuszanie pobierania kanałów nie jest jeszcze dostępne."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Wygenerowany adres URL kanału"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Idź do {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Gadżety"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Winogronowy"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Szary"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Zielony"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Identyfikator"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Jeśli nie jest puste, wyrażenie oceniające jako „prawda” lub „fałsz”. "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Jeśli wpis nie mieści się w całości na ekranie"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Jeśli napotkasz problem, zgłoś go na stronie problemów projektu GitH
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importuj"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "W widoku rozszerzonym przewijanie wpisów oznacza je jako przeczytane"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indygo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Wstępna konfiguracja"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Nieprawidłowy link do resetowania hasła. Proszę poprosić o nowy."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,21 +538,21 @@ msgstr "wiadomość o ostatnim odświeżeniu"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Jasny"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limonkowy"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
msgstr "Link"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Link do dokumentacji"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Wyloguj"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Długie naciśnięcie"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Oznacz jako przeczytane"
msgid "Mark as read up to here"
msgstr "Oznacz jako przeczytane do tej pory"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Oznaczaj wpisy w tym kanale jako przeczytane po tej liczbie dni. Pozostaw puste, aby wyłączyć."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metryki"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Kliknięcie środkowym przyciskiem"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -623,17 +646,22 @@ msgstr "Przejdź do subskrypcji, wpisując jej nazwę"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Przejdź do następnej kategorii/kanału z nieprzeczytanymi wpisami po oznaczeniu wszystkich wpisów jako przeczytane"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Nigdy"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nowe hasło"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nowe hasło"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Najnowsze jako pierwsze"
@@ -657,7 +685,7 @@ msgstr "Nie ma więcej wpisów"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Brak dostępnych opcji udostępniania."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Najstarsze jako pierwsze"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Na komputerze"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Na urządzeniu mobilnym"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Na urządzeniu mobilnym pokazuj przyciski akcji na dole ekranu"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Dotyczy tylko trybów kompaktowego, przytulnego i szczegółowego"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Ups!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Otwórz CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Otwórz link"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Otwórz link w nowej karcie w tle"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Otwórz link w nowej karcie"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Otwórz menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,28 +758,28 @@ msgstr "Otwórz/zamknij bieżący wpis"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr "eksport OPML"
msgstr "Eksport OPML"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file"
msgstr "plik OPML"
msgstr "Plik OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Plik OPML jest wymagany"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Pomarańczowy"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Porządek"
msgstr "Kolejność"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Kategoria nadrzędna"
msgid "Password"
msgstr "Hasło"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Hasło musi mieć co najmniej {minimumPasswordLength} znaków"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Odzyskiwanie hasła"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Hasła nie pasują"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Różowy"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Pozycja"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Poprzedni"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Kolor podstawowy"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Usługa powiadomień push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Powiadomienia push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Powiadomienia push nie są skonfigurowane w ustawieniach użytkownika."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Powiadomienia push nie są włączone w tej instancji CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Otrzymuj powiadomienia push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Otrzymuj powiadomienia push, gdy zostaną odkryte nowe wpisy w kanale. Włącz opcję „Otrzymuj powiadomienia push” w ustawieniach każdego kanału, dla którego chcesz otrzymywać powiadomienia."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Odzyskaj hasło"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Czerwony"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Odśwież"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Rejestracje są zamknięte w tej instancji CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Zresetuj hasło"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Prawe kliknięcie"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Zapisz"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Przewiń wybraną pozycję na górę strony"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Przewijaj płynnie podczas nawigowania między wpisami"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Przewijanie"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Szukaj"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Wybierz następny nieprzeczytany kanał/kategorię"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Wybierz poprzedni nieprzeczytany kanał/kategorię"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL serwera"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "zmiana"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Pokazuj własne menu kontekstowe CommaFeed po kliknięciu prawym przyciskiem myszy"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Pokazuj potwierdzenie podczas oznaczania wszystkich wpisów jako przeczytane"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Pokaż menu wpisu (komputer)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Pokaż menu wpisu (urządzenie mobilne)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Pokazuj ikonę linku zewnętrznego"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Pokaż pomoc dotyczącą skrótów klawiaturowych"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Pokaż natywne menu (komputer)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Pokazuj ikonę gwiazdki"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Pokazuj liczbę nieprzeczytanych na ikonie karty"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Pokazuj liczbę nieprzeczytanych w tytule karty"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Sukces"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Przesuń nagłówek w lewo"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Przełącz na jasny motyw"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Systemowy"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Tagi"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Morski"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testowe powiadomienie wysłane pomyślnie."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,33 +1089,42 @@ msgstr "URL kanału, który chcesz subskrybować. "
msgid "Theme"
msgstr "Motyw"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Ten kanał ma stary filtr, którego nie można edytować i który nie jest stosowany. Proszę utworzyć filtr ponownie, korzystając z nowego edytora wyrażeń. Stare wyrażenie filtra to: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "To jest Twój klucz API. Może być używany do niektórych operacji API tylko do odczytu i zapewnia dostęp do API Fever. Użyj formularza na dole strony, aby wygenerować nowy klucz API"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "To ustawienie może powodować problemy z przewijaniem w niektórych przeglądarkach (np. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
msgstr "Przełącz stan odczytu bieżącego wpisu"
msgstr "Przełącz status przeczytania bieżącego wpisu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Przełącz pasek boczny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Przełącz status oznaczenia gwiazdką bieżącego wpisu"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Temat"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Wypróbuj CommaFeed z kontem demo: demo/demo"
msgstr "Wypróbuj CommaFeed na koncie demo: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Wypróbuj demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1049,16 +1134,16 @@ msgstr "Nieprzeczytane"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
msgstr "Usuń gwiazdkę"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Anuluj subskrypcję"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Klucz użytkownika"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Nazwa użytkownika lub e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fioletowy"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Strona internetowa"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Witaj! Wygląda na to, że uruchamiasz CommaFeed po raz pierwszy. Aby rozpocząć, utwórz konto administratora."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Żółty"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Nie masz jeszcze żadnych subskrypcji. "
msgstr "Nie masz jeszcze żadnych subskrypcji. Może spróbujesz dodać jedną, klikając znak + u góry strony?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Twoje kanały zostały zakolejkowane do odświeżenia."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Twoje hasło zostało zmienione. Możesz się teraz zalogować za pomocą nowego hasła."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed é um projeto de código abrto. O código está hospedado no </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Sintaxe completa disponível </0><1>aqui</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Tem uma conta?</0><1>Faça login!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Precisa de uma conta?</0><1>Inscreva-se!</1>"
msgid "About"
msgstr "Sobre"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Token de acesso"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Ações"
@@ -63,7 +63,7 @@ msgstr "Administrador"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Nome de usuário do administrador"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "Aviso"
msgid "API key"
msgstr "chave de API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token de API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token do aplicativo"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Tem certeza de que deseja excluir a categoria <0>{categoryName}</0>?"
@@ -127,14 +135,15 @@ msgid "Asc"
msgstr "Asc"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "As variáveis disponíveis são 'título', 'conteúdo', 'url' 'autor' e 'categorias' e seu conteúdo é convertido em letras minúsculas para facilitar a comparação de strings."
msgid "Auto-mark as read"
msgstr "Marcar automaticamente como lido"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Voltar"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Voltar para logar"
@@ -154,6 +163,10 @@ msgstr "Extensão para o Chrome necessária"
msgid "Browser tab"
msgstr "Aba do navegador"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Crie uma expressão de filtro para indicar o que você deseja ler. As entradas que não corresponderem serão marcadas como lidas automaticamente."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "Aba do navegador"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,13 +240,18 @@ msgstr "Confirmar"
msgid "Confirm password"
msgstr "Confirmar senha"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Confirmar senha"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Aconchegante"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Criar conta de administrador"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -267,6 +286,10 @@ msgstr "Escuro"
msgid "Date created"
msgstr "Data de criação"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dias"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Excluir"
@@ -294,7 +317,7 @@ msgstr "Detalhado"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Desativar o comportamento do navegador \"Puxar para atualizar\""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -359,10 +382,6 @@ msgstr "Cabeçalho das entredas"
msgid "Error"
msgstr "Erro"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Exemplo: {exemplo}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Expandido"
@@ -463,10 +482,6 @@ msgstr "Verde"
msgid "Id"
msgstr "ID"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Se não estiver vazio, uma expressão avaliada como 'true' ou 'false'. "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Se a entrafa não couber por completo na tela"
@@ -489,7 +504,11 @@ msgstr "Índigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Configuração inicial"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Link de redefinição de senha inválido. Solicite um novo."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -589,6 +608,10 @@ msgstr "Marcar como lido"
msgid "Mark as read up to here"
msgstr "Marcar como lido até aqui"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Marcar as entradas neste feed como lidas após este número de dias. Deixe vazio para desativar."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Métricas"
@@ -634,6 +657,11 @@ msgstr "Nunca"
msgid "New password"
msgstr "Nova senha"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nova senha"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Mais novo primeiro"
@@ -771,11 +799,15 @@ msgstr "Categoria Pai"
msgid "Password"
msgstr "Senha"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "A senha deve ter pelo menos {minimumPasswordLength} caracteres"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Recuperação de Senha"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Senhas não coincidem"
@@ -800,6 +832,31 @@ msgstr "Cor primária"
msgid "Profile"
msgstr "Perfil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Serviço de notificação push"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Notificações push"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "As notificações push não estão configuradas nas suas configurações de usuário."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "As notificações push não estão ativadas nesta instância do CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Receber notificações push"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Receba notificações push quando novas entradas de feed forem descobertas. Ative \"Receber notificações push\" nas configurações de cada feed para o qual deseja receber notificações."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Recuperar senha"
@@ -817,6 +874,11 @@ msgstr "Atualizar"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Os registros estão fechados nesta instância do CommaFeed"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Redefinir senha"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "API REST"
@@ -829,6 +891,7 @@ msgstr "Clique com o botão direito"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -861,6 +924,11 @@ msgstr "Selecionar próximo feed/categoria não lido"
msgid "Select previous unread feed/category"
msgstr "Selecionar feed/categoria não lido anterior"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL do servidor"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "Definir o foco na próxima entrada sem abri-la"
@@ -1005,6 +1073,14 @@ msgstr "Etiquetas"
msgid "Teal"
msgstr "Azul petróleo"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Teste"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Notificação de teste enviada com sucesso."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "A URL do feed que você deseja assinar. "
@@ -1013,13 +1089,18 @@ msgstr "A URL do feed que você deseja assinar. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Este feed tem um filtro legado que não pode ser editado e não é aplicado. Recrie o filtro usando o novo editor de expressões. A expressão do filtro legado era: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Esta é sua chave de API. Ela pode ser usada para algumas operações somente leitura da API e concede acesso à API do Fever. Use o formulário abaixo para gerar uma nova chave de API"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Esta configuração pode causar problemas de rolagem em alguns navegadores (ex: Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1033,6 +1114,10 @@ msgstr "Alternar barra lateral"
msgid "Toggle starred status of current entry"
msgstr "Alternar estrela da entrada atual"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Tópico"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Experimente o CommaFeed com a conta demo: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Desestrelar"
msgid "Unsubscribe"
msgstr "Cancelar inscrição"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Chave do usuário"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1083,7 +1168,7 @@ msgstr "Site"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Bem-vindo! Esta parece ser a primeira vez que você está executando o CommaFeed. Crie uma conta de administrador para começar."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
@@ -1096,3 +1181,7 @@ msgstr "Você ainda não tem nenhuma assinatura. "
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Seus feed foram enfileirados para atualização"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Sua senha foi alterada. Agora você pode fazer login com sua nova senha."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed - это проект с открытым исходным кодом. Исходный код доступен по адресу </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Полный синтаксис доступен </0><1>здесь</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Есть аккаунт?</0><1>Войти!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Нужен аккаунт?</0><1>Зарегистрируйтесь!<
msgid "About"
msgstr "О CommaFeed"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Токен доступа"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Действия"
@@ -63,7 +63,7 @@ msgstr "Админ"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Имя администратора"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "Объявление"
msgid "API key"
msgstr "Ключ API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API токен"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Токен приложения"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Вы уверены, что хотите удалить категорию <0>{categoryName}</0>?"
@@ -127,20 +135,21 @@ msgid "Asc"
msgstr "По возрастанию"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Доступными переменными являются «заголовок», «контент», «url», «автор» и «категории», и их содержимое преобразуется в нижний регистр для облегчения сравнения строк."
msgid "Auto-mark as read"
msgstr "Автоматически помечать как прочитанное"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Назад"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Вернуться к входу"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Синий"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
@@ -152,7 +161,11 @@ msgstr "Для браузера Chrome требуется расширение"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Вкладка браузера"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Создайте выражение фильтра, чтобы указать, что вы хотите читать. Записи, которые не соответствуют выражению, будут автоматически помечены как прочитанные."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -192,7 +206,7 @@ msgstr "Закрыть меню"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
@@ -226,13 +240,18 @@ msgstr "Подтвердить"
msgid "Confirm password"
msgstr "Подтвердить пароль"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Подтвердите пароль"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Уютно"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Создать учетную запись администратора"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -256,7 +275,7 @@ msgstr "Пользовательский JS-код, который будет в
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Голубой"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -267,6 +286,10 @@ msgstr "Темная"
msgid "Date created"
msgstr "Дата создания"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "дней"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Удалить"
@@ -294,7 +317,7 @@ msgstr "Подробно"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Отключить поведение браузера «Потяните для обновления»"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -349,20 +372,16 @@ msgstr "Введите текущий пароль, чтобы изменить
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Количество записей, которые должны оставаться над выбранной записью при прокрутке"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Заголовки записей"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Ошибка"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Пример: {пример}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Расширенный"
@@ -404,11 +423,11 @@ msgstr "Выражение фильтрации"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Размер шрифта"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Принудительное получение фидов пока недоступно."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -449,24 +468,20 @@ msgstr "Сладости"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Виноградный"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Серый"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Зеленый"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Идентификатор"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Если не пусто, то выражение, оценивающееся как 'true' или 'false'. Если false, то новые записи для этой ленты будут автоматически помечаться как прочитанные."
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "Если запись не помещается на экране полностью"
@@ -485,11 +500,15 @@ msgstr "В развернутом виде прокрутка записей п
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Индиго"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Начальная настройка"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Неверная ссылка для сброса пароля. Пожалуйста, запросите новую."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -523,7 +542,7 @@ msgstr "Светлая"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Лаймовый"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Ссылка"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Ссылка на документацию"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -589,6 +608,10 @@ msgstr "Отметить как прочитанное"
msgid "Mark as read up to here"
msgstr "Отметить как прочитанное до этого места"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Помечать записи в этом фиде как прочитанные через указанное количество дней. Оставьте пустым, чтобы отключить."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Метрики"
@@ -623,7 +646,7 @@ msgstr "Перейдите к подписке, введя ее имя."
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Переходить к следующей категории/фиду с непрочитанными записями при пометке всех записей как прочитанных"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -634,6 +657,11 @@ msgstr "Никогда"
msgid "New password"
msgstr "Новый пароль"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Новый пароль"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Сначала новые"
@@ -657,7 +685,7 @@ msgstr "Записей больше нет"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Нет доступных вариантов для обмена."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,11 +697,11 @@ msgstr "Сначала самые старые"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "На ПК"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "На телефоне"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
@@ -681,7 +709,7 @@ msgstr "На мобильных устройствах отображать кн
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Применяется только к компактному, уютному и подробному режимам"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -747,7 +775,7 @@ msgstr "Необходим файл OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Оранжевый"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -771,17 +799,21 @@ msgstr "Родительская категория"
msgid "Password"
msgstr "Пароль"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Пароль должен содержать не менее {minimumPasswordLength} символов"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Восстановление пароля"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Пароли не совпадают"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Розовый"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -794,19 +826,44 @@ msgstr "Предыдущий"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Основной цвет"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Профиль"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Служба пуш-уведомлений"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Пуш-уведомления"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Пуш-уведомления не настроены в ваших пользовательских настройках."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Пуш-уведомления не включены в этом экземпляре CommaFeed."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Получать пуш-уведомления"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Получайте пуш-уведомления при обнаружении новых записей в фиде. Включите «Получать пуш-уведомления» в настройках каждого фида, для которого вы хотите получать уведомления."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Восстановить пароль"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Красный"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Обновить"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Регистрация закрыта для этого экземпляра CommaFeed."
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Сброс пароля"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST API"
@@ -829,6 +891,7 @@ msgstr "Правый клик"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -855,11 +918,16 @@ msgstr "Поиск"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Выбрать следующий непрочитанный фид/категорию"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Выбрать предыдущий непрочитанный фид/категорию"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL сервера"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -909,7 +977,7 @@ msgstr "Показать меню входа (телефон)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Показывать значок внешней ссылки"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -925,15 +993,15 @@ msgstr "Показать родное меню (ПК)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Показывать значок звезды"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Показывать количество непрочитанных во вкладке favicon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Показывать количество непрочитанных в заголовке вкладки"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -1003,7 +1071,15 @@ msgstr "Теги"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Бирюзовый"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Тест"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Тестовое уведомление успешно отправлено."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL канала, на который вы хотите подписат
msgid "Theme"
msgstr "Тема"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Этот фид имеет устаревший фильтр, который нельзя редактировать и который не применяется. Пожалуйста, создайте фильтр заново, используя новый редактор выражений. Устаревшее выражение фильтра было: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "Это ваш ключ API. Он может использоваться для некоторых операций API только для чтения и предоставляет доступ к API Fever. Чтобы сгенерировать новый ключ API, воспользуйтесь формой в нижней части страницы"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Этот параметр может вызвать проблемы с прокруткой в некоторых браузерах (например, Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1033,6 +1114,10 @@ msgstr "Переключить боковую панель"
msgid "Toggle starred status of current entry"
msgstr "Переключение статуса избранное для текущей записи"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Тема"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "Попробуйте CommaFeed на демо аккаунте: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Удалить из избранного"
msgid "Unsubscribe"
msgstr "Отписаться"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Ключ пользователя"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Имя пользователя или адрес электронной
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Фиолетовый"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,11 +1168,11 @@ msgstr "Веб-сайт"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Добро пожаловать! Похоже, вы запускаете CommaFeed в первый раз. Пожалуйста, создайте учетную запись администратора, чтобы начать работу."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Желтый"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1096,3 +1181,7 @@ msgstr "У вас еще нет подписок. Почему бы не поп
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Ваши каналы были поставлены в очередь на обновление."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Ваш пароль был изменен. Теперь вы можете войти с новым паролем."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed je open-source projekt. Zdrojové kódy sú hostované na </0><1>GitHub-e</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Máte účet?</0><1>Prihláste sa!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Ahoj,</0><1>som Jérémie z Belgicka a na CommaFeed pracujem vo svojom voľnom čase už viac ako 10 rokov. Ďakujem za záujem pomôcť mi pokračovať v podpore CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Potrebujete účet?</0><1>Zaregistrujte sa!</1>"
msgid "About"
msgstr "Asi"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Prístupový token"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Akcie"
@@ -63,7 +63,7 @@ msgstr "Správca"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Meno správcu"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Všetky"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Vždy"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -88,16 +88,24 @@ msgstr "Súbor opml je súbor XML obsahujúci adresy URL kanálov a kategórie.
#: src/components/content/add/Subscribe.tsx
msgid "Analyze feed"
msgstr "Analyzujte krmivo"
msgstr "Analyzovať feed"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Oznámenie"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "Kľúč API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "Token API"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Token aplikácie"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Naozaj chcete odstrániť kategóriu <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Naozaj chcete zrušiť odber kanála <0>{feedName}</0>?"
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Vzostupne"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Dostupné premenné sú 'názov', 'obsah', 'url', 'autor' a 'kategórie' a ich obsah je skonvertovaný na malé písmená, aby sa uľahčilo porovnávanie reťazcov."
msgid "Auto-mark as read"
msgstr "Automaticky označiť ako prečítané"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Späť"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Späť na prihlásenie"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Modrá"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Rozšírenie prehliadača"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Pre Chrome sa vyžaduje rozšírenie prehliadača"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Karta prehliadača"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Vytvorte výraz filtra na určenie toho, čo chcete čítať. Záznamy, ktoré sa nezhodujú, budú automaticky označené ako prečítané."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Skontrolujte, či feed funguje"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Zatvoriť menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Rozšírenie prehliadača CommaFeed verzie {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed je kompatibilný s Fever API. Vo svojom mobilnom klientovi kompatibilnom s Fever použite nasledujúcu adresu URL. Prihláste sa pomocou svojho používateľského mena a <0>kľúča API</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed ďalšia neprečítaná položka"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "Verzia CommaFeed {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Potvrdiť"
msgid "Confirm password"
msgstr "Potvrďte heslo"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Potvrdiť heslo"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Útulný"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Vytvoriť účet správcu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Aktuálne heslo"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Vlastný kód"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Vlastné pravidlá CSS, ktoré sa použijú"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Vlastný kód JS, ktorý sa vykoná pri načítaní stránky"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Azúrová"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Tmavá"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Dátum vytvorenia"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dni"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Vymazať"
@@ -286,15 +309,15 @@ msgstr "Vymažte používateľa"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Zostupne"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detailný"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Zakázať správanie prehliadača „Potiahnutím obnoviť“"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Displej"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Darovať"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -323,7 +346,7 @@ msgstr "Presuňte odkaz na lištu so záložkami"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
msgstr "E-mail"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -349,20 +372,16 @@ msgstr "Ak chcete zmeniť nastavenia profilu, zadajte svoje aktuálne heslo"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Záznamy, ktoré sa majú ponechať nad vybraným záznamom pri rolovaní"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Hlavičky záznamov"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Chyba"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Príklad: {príklad}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Rozšírené"
@@ -374,7 +393,7 @@ msgstr "Exportujte svoje odbery a kategórie ako súbor OPML, ktorý je možné
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Možnosti rozšírenia"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "URL informačného kanála"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Načítať všetky moje feedy teraz"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Adresa URL rozhrania Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filtrovanie výrazu"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Veľkosť písma"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Vynútené načítanie kanálov ešte nie je k dispozícii."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Generovaná adresa URL informačného kanála"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Prejsť na {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Dobrôtky"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Hroznová"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Sivá"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Zelená"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Ak nie je prázdny, výraz vyhodnotený ako 'pravda' alebo 'nepravda'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Ak sa záznam úplne nezmestí na obrazovku"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Ak narazíte na problém, nahláste ho na stránke problémov projektu G
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importovať"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "V rozšírenom zobrazení ich rolovanie cez položky označí ako preč
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Počiatočné nastavenie"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Neplatný odkaz na obnovenie hesla. Vyžiadajte si prosím nový."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Posledná obnovovacia správa"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Svetlá"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limetková"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Odkaz"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Odkaz na dokumentáciu"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Odhlásenie"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Dlhé stlačenie"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Označiť ako prečítané"
msgid "Mark as read up to here"
msgstr "Označiť ako prečítané až sem"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Označte záznamy v tomto kanáli ako prečítané po tomto počte dní. Ak chcete túto funkciu zakázať, ponechajte prázdne."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metriky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Kliknutie stredným tlačidlom"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Posuňte stránku nahor"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Prejdite na predplatné zadaním jeho názvu"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Pri označovaní všetkých položiek ako prečítaných prejdite na ďalšiu kategóriu/kanál s neprečítanými položkami"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Nikdy"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nové heslo"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nové heslo"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Najnovšie ako prvé"
@@ -657,7 +685,7 @@ msgstr "Žiadne ďalšie záznamy"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Nie sú k dispozícii žiadne možnosti zdieľania."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Najprv najstarší"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Na deesktope"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Na mobile"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "V mobile zobrazovať tlačidlá akcií v spodnej časti obrazovky"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Platí len pre kompaktný, útulný a detailný režim"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Ojoj!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Otvoriť CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Otvoriť odkaz"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Otvoriť odkaz na novej karte na pozadí"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Otvoriť odkaz na novej karte"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Otvoriť menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,7 +758,7 @@ msgstr "Otvoriť/zatvoriť aktuálny záznam"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
@@ -739,19 +767,19 @@ msgstr "Export OPML"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file"
msgstr "súbor OPML"
msgstr "Súbor OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Vyžaduje sa súbor OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Oranžová"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Poriadok"
msgstr "Poradie"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,17 +799,21 @@ msgstr "Rodičovská kategória"
msgid "Password"
msgstr "Heslo"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Heslo musí mať aspoň {minimumPasswordLength} znakov"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Obnovenie hesla"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Heslá sa nezhodujú"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Ružová"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -790,23 +822,48 @@ msgstr "Pozícia"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Predchádzajúci"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primárna farba"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Služba push notifikácií"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push notifikácie"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push notifikácie nie sú nakonfigurované vo vašich používateľských nastaveniach."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push notifikácie nie sú v tejto inštancii CommaFeed povolené."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Prijímať push notifikácie"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Dostávajte push notifikácie, keď sa zistia nové záznamy v kanáloch. Povoľte „Prijímať push notifikácie“ v nastaveniach každého kanála, pre ktorý chcete dostávať notifikácie."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Obnoviť heslo"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Červená"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Obnoviť"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "V tejto inštancii CommaFeed sú registrácie uzavreté"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Obnoviť heslo"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Kliknutie pravým tlačidlom"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Uložiť"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Posunúť vybraný záznam na vrch stránky"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Pri navigácii medzi položkami plynulo rolujte"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Rolovanie"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Hľadaj"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Vybrať ďalší neprečítaný kanál/kategóriu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Vybrať predchádzajúci neprečítaný kanál/kategóriu"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "URL servera"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Smena"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Zobraziť vlastné kontextové menu CommaFeed pri kliknutí pravým tlačidlom"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Zobraziť potvrdenie pri označovaní všetkých záznamov ako prečítaných"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Zobraziť menu záznamu (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Zobraziť menu záznamu (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Zobraziť ikonu externého odkazu"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Zobraziť pomoc s klávesovými skratkami"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Zobraziť natívne menu (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Zobraziť ikonu hviezdičky"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Zobraziť počet neprečítaných v ikone karty"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Zobraziť počet neprečítaných v názve karty"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -948,7 +1016,7 @@ msgstr "Práve sa stalo niečo zlé..."
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Space"
msgstr "Vesmír"
msgstr "Medzera"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -982,7 +1050,7 @@ msgstr "Úspech"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Potiahnutie hlavičky doľava"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Prepnite na svetlú tému"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Systém"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Značky"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Teal"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testovacie oznámenie bolo úspešne odoslané."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,25 +1089,34 @@ msgstr "URL zdroja, na odber ktorého sa chcete prihlásiť. "
msgid "Theme"
msgstr "Téma"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Tento kanál má starší filter, ktorý sa nedá upravovať a nepoužíva sa. Znova vytvorte filter pomocou nového editora výrazov. Pôvodný výraz filtra bol: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Toto je váš kľúč API. Môže sa použiť na niektoré operácie rozhrania API len na čítanie a poskytuje prístup k rozhraniu Fever API. Na vygenerovanie nového kľúča API použite formulár v dolnej časti stránky."
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Toto nastavenie môže spôsobiť problémy s rolovaním v niektorých prehliadačoch (napr. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
msgstr "Prepne stav čítania aktuálneho záznamu"
msgstr "Prepnúť stav čítania aktuálneho záznamu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Prepnúť bočný panel"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Prepnúť stav aktuálneho záznamu s hviezdičkou"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Téma"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Vyskúšajte CommaFeed s demo účtom: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Vyskúšajte demo!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1056,9 +1141,9 @@ msgstr "Odobrať hviezdičku"
msgid "Unsubscribe"
msgstr "Zrušte odber"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Používateľský kľúč"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Meno používateľa alebo e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Fialová"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Webová stránka"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Vitajte! Zdá sa, že CommaFeed spúšťate prvýkrát. Ak chcete začať, vytvorte si účet správcu."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Žltá"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Zatiaľ nemáte žiadne odbery. "
msgstr "Zatiaľ nemáte žiadne odbery. Prečo neskúsite pridať jeden kliknutím na znak + v hornej časti stránky?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Vaše kanály boli zaradené do frontu na obnovenie."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Vaše heslo bolo zmenené. Teraz sa môžete prihlásiť pomocou nového hesla."

View File

@@ -15,11 +15,7 @@ msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
msgstr "<0>CommaFeed är ett projekt med öppen källkod. Källkoden finns på </0><1>GitHub</1>."
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -27,7 +23,7 @@ msgstr "<0>Har du ett konto?</0><1>Logga in!</1>"
#: src/pages/app/DonatePage.tsx
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
msgstr ""
msgstr "<0>Hej,</0><1>jag är Jérémie från Belgien och jag har arbetat på CommaFeed på min fritid i över 10 år nu. Tack för att du visar intresse för att hjälpa mig fortsätta stödja CommaFeed.</1>"
#: src/pages/auth/LoginPage.tsx
msgid "<0>Need an account?</0><1>Sign up!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Behöver du ett konto?</0><1>Registrera dig!</1>"
msgid "About"
msgstr "Ungefär"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Åtkomsttoken"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Handlingar"
@@ -58,12 +58,12 @@ msgstr "Lägg till användare"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Administratörsanvändarnamn"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Alla"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Alltid"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -88,16 +88,24 @@ msgstr "En opml-fil är en XML-fil som innehåller feed-URL:er och kategorier. "
#: src/components/content/add/Subscribe.tsx
msgid "Analyze feed"
msgstr "Analysera foder"
msgstr "Analysera fde"
#: src/components/AnnouncementDialog.tsx
msgid "Announcement"
msgstr ""
msgstr "Meddelande"
#: src/components/settings/ProfileSettings.tsx
msgid "API key"
msgstr "API-nyckel"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API-token"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "App-token"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "Är du säker på att du vill ta bort kategori <0>{categoryName}</0>?"
@@ -124,35 +132,40 @@ msgstr "Är du säker på att du vill avsluta prenumerationen på <0>{feedName}<
#: src/components/header/Header.tsx
msgid "Asc"
msgstr ""
msgstr "Stigande"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Tillgängliga variabler är 'titel', 'innehåll', 'url' 'författare' och 'kategorier' och deras innehåll konverteras till gemener för att underlätta strängjämförelse."
msgid "Auto-mark as read"
msgstr "Markera automatiskt som läst"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Tillbaka"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Tillbaka för att logga in"
msgstr "Tillbaka till inloggning"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Blå"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
msgstr ""
msgstr "Webbläsartillägg"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Webbläsartillägg krävs för Chrome"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Webbläsarflik"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Skapa ett filteruttryck för att ange vad du vill läsa. Poster som inte matchar kommer att markeras som lästa automatiskt."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,19 +202,19 @@ msgstr "Kontrollera att matningen fungerar"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Stäng meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
msgstr ""
msgstr "Webbläsartillägget CommaFeed version {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed är kompatibelt med Fever API. Använd följande URL i din Fever-kompatibla mobilklient. Logga in med ditt användarnamn och din <0>API-nyckel</0>."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -208,7 +222,7 @@ msgstr "CommaFeed nästa olästa objekt"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed version {version} ({revision})."
msgstr ""
msgstr "CommaFeed version {version} ({revision})."
#: src/components/header/ProfileMenu.tsx
msgid "Compact"
@@ -226,17 +240,22 @@ msgstr "Bekräfta"
msgid "Confirm password"
msgstr "Bekräfta lösenord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Bekräfta lösenord"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Mysigt"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Skapa administratörskonto"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
msgstr ""
msgstr "Ctrl"
#: src/components/settings/ProfileSettings.tsx
msgid "Current password"
@@ -244,29 +263,33 @@ msgstr "Aktuellt lösenord"
#: src/pages/app/SettingsPage.tsx
msgid "Custom code"
msgstr ""
msgstr "Egen kod"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom CSS rules that will be applied"
msgstr ""
msgstr "Egna CSS-regler som kommer att tillämpas"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Custom JS code that will be executed on page load"
msgstr ""
msgstr "Egen JS-kod som kommer att köras vid sidladdning"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Mörkt"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Datum skapat"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "dagar"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Ta bort"
@@ -286,15 +309,15 @@ msgstr "Ta bort användare"
#: src/components/header/Header.tsx
msgid "Desc"
msgstr ""
msgstr "Fallande"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detaljerad"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Inaktivera „Dra för att uppdatera”-beteende i webbläsaren"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Visa"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Donera"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -341,7 +364,7 @@ msgstr "Aktiverad"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Enter"
msgstr ""
msgstr "Enter"
#: src/components/settings/ProfileSettings.tsx
msgid "Enter your current password to change profile settings"
@@ -349,20 +372,16 @@ msgstr "Ange ditt nuvarande lösenord för att ändra profilinställningar"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Antal poster att behålla ovanför markerad post vid rullning"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Postrubriker"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Fel"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Exempel: {exempel}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Utökad"
@@ -374,7 +393,7 @@ msgstr "Exportera dina prenumerationer och kategorier som en OPML-fil som kan im
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
msgstr "Tilläggsalternativ"
#: src/components/content/add/Subscribe.tsx
msgid "Feed name"
@@ -388,15 +407,15 @@ msgstr "Flödes-URL"
#: src/components/header/ProfileMenu.tsx
msgid "Fetch all my feeds now"
msgstr ""
msgstr "Hämta alla mina flöden nu"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API-URL"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filtrerande uttryck"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Teckenstorlek"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Tvingad hämtning av flöden är inte tillgänglig än."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -433,7 +452,7 @@ msgstr "Genererad feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}"
msgstr ""
msgstr "Gå till {0}"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Go to the All view"
@@ -449,27 +468,23 @@ msgstr "Godsaker"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Lila"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Grå"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Grön"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Om det inte är tomt, ett uttryck som utvärderas till 'sant' eller 'falskt'. "
msgstr "Id"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Om posten inte får plats helt på skärmen"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -477,7 +492,7 @@ msgstr "Om du stöter på ett problem, vänligen rapportera det på problemsidan
#: src/components/content/add/ImportOpml.tsx
msgid "Import"
msgstr ""
msgstr "Importera"
#: src/components/settings/DisplaySettings.tsx
msgid "In expanded view, scrolling through entries mark them as read"
@@ -485,11 +500,15 @@ msgstr "I utökad vy, rullning genom poster markerar dem som lästa"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "Indigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Initial konfiguration"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Ogiltig länk för återställning av lösenord. Vänligen begär en ny."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Senaste uppdateringsmeddelande"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "Ljust"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Länk"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Länk till dokumentationen"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -563,7 +582,7 @@ msgstr "Logga ut"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Långt tryck"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -589,13 +608,17 @@ msgstr "Markera som läst"
msgid "Mark as read up to here"
msgstr "Markera som läst hit"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Markera poster i detta flöde som lästa efter detta antal dagar. Lämna tomt för att inaktivera."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Mätverk"
msgstr "Mätvärden"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Middle click"
msgstr ""
msgstr "Mittenklick"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Move the page down"
@@ -608,7 +631,7 @@ msgstr "Flytta sidan uppåt"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
@@ -623,17 +646,22 @@ msgstr "Navigera till ett abonnemang genom att ange dess namn"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Navigera till nästa kategori/flöde med olästa poster när alla poster markeras som lästa"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Aldrig"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Nytt lösenord"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Nytt lösenord"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Nyast först"
@@ -657,7 +685,7 @@ msgstr "Inga fler poster"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Inga delningsalternativ tillgängliga."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Äldst först"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "På desktop"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "På mobil"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "På mobil, visa handlingsknappar längst ner på skärmen"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Gäller endast för lägena kompakt, mysigt och detaljerat"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -689,7 +717,7 @@ msgstr "Hoppsan!"
#: src/components/header/Header.tsx
msgid "Open CommaFeed"
msgstr ""
msgstr "Öppna CommaFeed"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open current entry in a new tab"
@@ -706,15 +734,15 @@ msgstr "Öppen länk"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new background tab"
msgstr ""
msgstr "Öppna länk i ny bakgrundsflik"
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Open link in new tab"
msgstr ""
msgstr "Öppna länk i ny flik"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Öppna meny"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -730,11 +758,11 @@ msgstr "Öppna/stäng aktuell ingång"
#: src/pages/app/AddPage.tsx
msgid "OPML"
msgstr ""
msgstr "OPML"
#: src/components/settings/ProfileSettings.tsx
msgid "OPML export"
msgstr ""
msgstr "OPML-export"
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -743,15 +771,15 @@ msgstr "OPML-fil"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML-fil krävs"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Orange"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Beställning"
msgstr "Ordning"
#: src/components/content/add/AddCategory.tsx
msgid "Parent"
@@ -771,42 +799,71 @@ msgstr "Föräldrakategori"
msgid "Password"
msgstr "Lösenord"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Lösenordet måste vara minst {minimumPasswordLength} tecken"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Lösenordsåterställning"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Lösenorden matchar inte"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr ""
msgstr "Position"
#: src/components/header/Header.tsx
msgid "Previous"
msgstr ""
msgstr "Föregående"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Primärfärg"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push-notifieringstjänst"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push-notifieringar"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push-notifieringar är inte konfigurerade i dina användarinställningar."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Push-notifieringar är inte aktiverade på denna CommaFeed-instans."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Ta emot push-notifieringar"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Ta emot push-notifieringar när nya flödesposter upptäcks. Aktivera „Ta emot push-notifieringar” i inställningarna för varje flöde som du vill få notifieringar för."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Återställ lösenord"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Röd"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,18 +874,24 @@ msgstr "Uppdatera"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Registreringar är stängda på denna CommaFeed-instans"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Återställ lösenord"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr ""
msgstr "REST API"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Right click"
msgstr ""
msgstr "Högerklick"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Spara"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Rulla markerad post till toppen av sidan"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Bläddra mjukt när du navigerar mellan poster"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Rullning"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Sök"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Välj nästa olästa flöde/kategori"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Välj föregående olästa flöde/kategori"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Server-URL"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -893,23 +961,23 @@ msgstr "Skift"
#: src/components/settings/DisplaySettings.tsx
msgid "Show CommaFeed's own context menu on right click"
msgstr ""
msgstr "Visa CommaFeeds egna kontextmeny vid högerklick"
#: src/components/settings/DisplaySettings.tsx
msgid "Show confirmation when marking all entries as read"
msgstr ""
msgstr "Visa bekräftelse när alla poster markeras som lästa"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (desktop)"
msgstr ""
msgstr "Visa postmeny (desktop)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show entry menu (mobile)"
msgstr ""
msgstr "Visa postmeny (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Visa ikon för extern länk"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -921,19 +989,19 @@ msgstr "Visa kortkommandohjälp"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Show native menu (desktop)"
msgstr ""
msgstr "Visa infödd meny (desktop)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Visa stjärnikon"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Visa antal olästa i flikikonen"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Visa antal olästa i fliktiteln"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Framgång"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Svep rubriken åt vänster"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Byt till ljustema"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "System"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Taggar"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Blågrön"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Testnotifiering skickades utan fel."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "URL:en för flödet du vill prenumerera på. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Detta flöde har ett gammalt filter som inte kan redigeras och inte tillämpas. Skapa filtret på nytt med den nya uttryckseditorern. Det gamla filteruttrycket var: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Detta är din API-nyckel. Den kan användas för vissa skrivskyddade API-operationer och ger åtkomst till Fever API. Använd formuläret längst ner på sidan för att generera en ny API-nyckel"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Denna inställning kan orsaka rullningsproblem i vissa webbläsare (t.ex. Safari)"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1027,11 +1108,15 @@ msgstr "Växla lässtatus för aktuell post"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle sidebar"
msgstr ""
msgstr "Växla sidofält"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Växla stjärnstatus för aktuell post"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Ämne"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1039,7 +1124,7 @@ msgstr "Prova CommaFeed med demokontot: demo/demo"
#: src/pages/WelcomePage.tsx
msgid "Try the demo!"
msgstr ""
msgstr "Prova demon!"
#: src/components/header/Header.tsx
msgid "Unread"
@@ -1049,16 +1134,16 @@ msgstr "Oläst"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
msgstr "Ta bort stjärna"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Unsubscribe"
msgstr "Avregistrera"
msgstr "Avsluta prenumeration"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Användarnyckel"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Användarnamn eller e-post"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Lila"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,16 +1168,20 @@ msgstr "Webbplats"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Välkommen! Det verkar vara första gången du kör CommaFeed. Skapa ett administratörskonto för att komma igång."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Gul"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Du har inga prenumerationer än. "
msgstr "Du har inga prenumerationer än. Varför inte prova att lägga till en genom att klicka på +-tecknet högst upp på sidan?"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr ""
msgstr "Dina flöden har köats för uppdatering."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Ditt lösenord har ändrats. Du kan nu logga in med ditt nya lösenord."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed açık kaynak kodlu bir proje. Kaynak kodları </0><1>GitHub</1>'da."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Tüm sözdizimi </0><1>burada</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>Hesabınız var mı?</0><1>Giriş yapın!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>Bir hesaba mı ihtiyacınız var?</0><1>Kaydolun!</1>"
msgid "About"
msgstr "Hakkında"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "Erişim jetonu"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "Eylemler"
@@ -63,7 +63,7 @@ msgstr "Yönetici"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "Yönetici kullanıcı adı"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -76,7 +76,7 @@ msgstr "Tümü"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Always"
msgstr ""
msgstr "Her zaman"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "An email has been sent if this address was registered. Check your inbox."
@@ -98,6 +98,14 @@ msgstr "Duyuru"
msgid "API key"
msgstr "API anahtarı"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API jetonu"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "Uygulama jetonu"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "<0>{categoryName}</0> kategorisini silmek istediğinizden emin misiniz?"
@@ -127,20 +135,21 @@ msgid "Asc"
msgstr "Artan"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "Mevcut değişkenler 'title', 'content', 'url' 'yazar' ve 'kategoriler'dir ve dize karşılaştırmasını kolaylaştırmak için içerikleri küçük harfe dönüştürülür."
msgid "Auto-mark as read"
msgstr "Otomatik olarak okundu olarak işaretle"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "Geri"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "Giriş yapmak için geri dön"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
msgstr "Mavi"
#: src/pages/app/AboutPage.tsx
msgid "Browser extension"
@@ -148,11 +157,15 @@ msgstr "Tarayıcı eklentisi"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
msgstr "Chrome için tarayıcı eklentisi gereklidir"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Tarayıcı sekmesi"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "Ne okumak istediğinizi belirtmek için bir filtre ifadesi oluşturun. Eşleşmeyen girişler otomatik olarak okundu olarak işaretlenecektir."
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -161,6 +174,7 @@ msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -188,11 +202,11 @@ msgstr "Feed'in çalışıp çalışmadığını kontrol edin"
#: src/pages/app/Layout.tsx
msgid "Close menu"
msgstr ""
msgstr "Menüyü kapat"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
@@ -200,7 +214,7 @@ msgstr "CommaFeed tarayıcı eklentisi sürüm {browserExtensionVersion}."
#: src/components/settings/ProfileSettings.tsx
msgid "CommaFeed is compatible with the Fever API. Use the following URL in your Fever-compatible mobile client. Login with your username and your <0>API key</0>."
msgstr ""
msgstr "CommaFeed, Fever API ile uyumludur. Fever uyumlu mobil istemcinizde aşağıdaki URL'yi kullanın. Kullanıcı adınız ve <0>API anahtarınız</0> ile giriş yapın."
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed next unread item"
@@ -226,13 +240,18 @@ msgstr "Onayla"
msgid "Confirm password"
msgstr "Şifreyi onayla"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "Şifreyi Onayla"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "Rahat"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "Yönetici Hesabı Oluştur"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -256,17 +275,21 @@ msgstr "Sayfa yüklendiğinde çalıştırılacak özel JS kodu"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
msgstr "Macenta"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
msgstr "Koyu"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Date created"
msgstr "Oluşturulma tarihi"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "gün"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "Sil"
@@ -290,11 +313,11 @@ msgstr "Açılış"
#: src/components/header/ProfileMenu.tsx
msgid "Detailed"
msgstr ""
msgstr "Detaylı"
#: src/components/settings/DisplaySettings.tsx
msgid "Disable \"Pull to refresh\" browser behavior"
msgstr ""
msgstr "Tarayıcının \"Yenilemek için çek\" davranışını devre dışı bırak"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
@@ -305,7 +328,7 @@ msgstr "Ekran"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
msgstr "Bağış Yap"
#: src/components/settings/ProfileSettings.tsx
msgid "Download"
@@ -349,20 +372,16 @@ msgstr "Profil ayarlarını değiştirmek için mevcut şifrenizi girin"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Kaydırma sırasında seçilen girişin üzerinde tutulacak giriş sayısı"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Giriş başlıkları"
#: src/components/Alert.tsx
msgid "Error"
msgstr "Hata"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "Örnek: {örnek}."
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "Genişletilmiş"
@@ -392,11 +411,11 @@ msgstr "Tüm feed'lerimi şimdi çek"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "Fever API URL'si"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
@@ -404,11 +423,11 @@ msgstr "Filtreleme ifadesi"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
msgstr "Yazı boyutu"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "Beslemeleri zorla çekme özelliği henüz mevcut değil."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -449,27 +468,23 @@ msgstr "İyilikler"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
msgstr "Üzüm"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
msgstr "Gri"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
msgstr "Yeşil"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Kimlik"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "Boş değilse, 'doğru' veya 'yanlış' olarak değerlendirilen bir ifade. "
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr ""
msgstr "Eğer giriş ekrana tamamen sığmıyorsa"
#: src/pages/app/AboutPage.tsx
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
@@ -485,11 +500,15 @@ msgstr "Genişletilmiş görünümde, girişler arasında gezinmek onları okund
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
msgstr "İndigo"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "Başlangıç Kurulumu"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "Geçersiz şifre sıfırlama bağlantısı. Lütfen yeni bir tane isteyin."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -519,11 +538,11 @@ msgstr "Son yenileme mesajı"
#: src/components/header/ProfileMenu.tsx
msgid "Light"
msgstr ""
msgstr "ık"
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
msgstr "Limon"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -533,7 +552,7 @@ msgstr "Bağlantı"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
msgstr "Belgelere bağlantı"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
@@ -589,6 +608,10 @@ msgstr "Okundu olarak işaretle"
msgid "Mark as read up to here"
msgstr "Buraya kadar okundu olarak işaretle"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "Bu beslemedeki girişleri şu kadar gün sonra okundu olarak işaretle. Devre dışı bırakmak için boş bırakın."
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "Metrikler"
@@ -623,17 +646,22 @@ msgstr "Adını girerek bir aboneliğe gidin"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
msgstr "Tüm girişleri okundu olarak işaretlerken okunmamış girişleri olan bir sonraki kategoriye/beslemeye git"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
msgstr ""
msgstr "Asla"
#: src/components/settings/ProfileSettings.tsx
msgid "New password"
msgstr "Yeni şifre"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "Yeni Şifre"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "Önce en yenisi"
@@ -657,7 +685,7 @@ msgstr "Başka giriş yok"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "Paylaşım seçeneği mevcut değil."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -669,19 +697,19 @@ msgstr "Önce en eski"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "Masaüstünde"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Mobilde"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
msgstr ""
msgstr "Mobilde, eylem düğmelerini ekranın altında göster"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Yalnızca kompakt, rahat ve detaylı modlar için geçerlidir"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -714,7 +742,7 @@ msgstr "Bağlantıyı yeni sekmede aç"
#: src/pages/app/Layout.tsx
msgid "Open menu"
msgstr ""
msgstr "Menüyü aç"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Open next entry"
@@ -743,11 +771,11 @@ msgstr "OPML dosyası"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "OPML dosyası gereklidir"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
msgstr "Turuncu"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -771,17 +799,21 @@ msgstr "Üst Kategori"
msgid "Password"
msgstr "Şifre"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "Şifre en az {minimumPasswordLength} karakter olmalıdır"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "Parola Kurtarma"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "Parolalar eşleşmiyor"
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
msgstr "Pembe"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
@@ -794,19 +826,44 @@ msgstr "Önceki"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
msgstr "Birincil renk"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "Push bildirim servisi"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "Push bildirimleri"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "Push bildirimleri kullanıcı ayarlarınızda yapılandırılmamış."
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "Bu CommaFeed örneğinde push bildirimleri etkin değil."
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "Push bildirimlerini al"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "Yeni besleme girişleri keşfedildiğinde push bildirimleri alın. Bildirim almak istediğiniz her beslemenin ayarlarında \"Push bildirimlerini al\" seçeneğini etkinleştirin."
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "Şifreyi kurtar"
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
msgstr "Kırmızı"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -817,6 +874,11 @@ msgstr "Yenile"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "Bu CommaFeed örneğinde kayıtlar kapalı"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "Şifreyi Sıfırla"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST API"
@@ -829,6 +891,7 @@ msgstr "Sağ tık"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -836,7 +899,7 @@ msgstr "Kaydet"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll selected entry to the top of the page"
msgstr ""
msgstr "Seçilen girişi sayfanın üstüne kaydır"
#: src/components/settings/DisplaySettings.tsx
msgid "Scroll smoothly when navigating between entries"
@@ -844,7 +907,7 @@ msgstr "Girişler arasında gezinirken sorunsuz ilerleyin"
#: src/components/settings/DisplaySettings.tsx
msgid "Scrolling"
msgstr ""
msgstr "Kaydırma"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
@@ -855,11 +918,16 @@ msgstr "Ara"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Sonraki okunmamış beslemeyi/kategoriyi seç"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Önceki okunmamış beslemeyi/kategoriyi seç"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "Sunucu URL'si"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -909,7 +977,7 @@ msgstr "Giriş menüsünü göster (mobil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Harici bağlantı simgesini göster"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -925,15 +993,15 @@ msgstr "Orijinal tarayıcı menüsünü göster (masaüstü)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Yıldız simgesini göster"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Sekme simgesinde okunmamış sayısını göster"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Sekme başlığında okunmamış sayısını göster"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
@@ -982,7 +1050,7 @@ msgstr "Başarı"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Swipe header to the left"
msgstr ""
msgstr "Başlığı sola kaydır"
#: src/pages/WelcomePage.tsx
msgid "Switch to dark theme"
@@ -994,7 +1062,7 @@ msgstr "Aydınlık temaya geç"
#: src/components/header/ProfileMenu.tsx
msgid "System"
msgstr ""
msgstr "Sistem"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -1003,7 +1071,15 @@ msgstr "Etiketler"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
msgstr "Camgöbeği"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "Test"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "Test bildirimi başarıyla gönderildi."
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -1013,13 +1089,18 @@ msgstr "Abone olmak istediğiniz beslemenin URL'si. "
msgid "Theme"
msgstr "Tema"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "Bu beslemenin düzenlenemeyen ve uygulanmayan eski bir filtresi var. Lütfen yeni ifade düzenleyiciyi kullanarak filtreyi yeniden oluşturun. Eski filtre ifadesi şuydu: <0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr ""
msgstr "Bu sizin API anahtarınızdır. Bazı salt okunur API işlemleri için kullanılabilir ve Fever API'sine erişim sağlar. Yeni bir API anahtarı oluşturmak için sayfanın altındaki formu kullanın"
#: src/components/settings/DisplaySettings.tsx
msgid "This setting can cause scrolling issues on some browsers (e.g. Safari)"
msgstr ""
msgstr "Bu ayar bazı tarayıcılarda (örneğin Safari) kaydırma sorunlarına neden olabilir"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle read status of current entry"
@@ -1031,7 +1112,11 @@ msgstr "Kenar çubuğunu göster/gizle"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Toggle starred status of current entry"
msgstr ""
msgstr "Geçerli girişin yıldızlı durumunu değiştir"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "Konu"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
@@ -1056,9 +1141,9 @@ msgstr "Yıldızı kaldır"
msgid "Unsubscribe"
msgstr "Aboneliği iptal et"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "Kullanıcı anahtarı"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1071,7 +1156,7 @@ msgstr "Kullanıcı Adı veya E-posta"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
msgstr "Menekşe"
#: src/components/Alert.tsx
msgid "Warning"
@@ -1083,11 +1168,11 @@ msgstr "Web sitesi"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "Hoş geldiniz! Görünüşe göre CommaFeed'i ilk kez çalıştırıyorsunuz. Başlamak için lütfen bir yönetici hesabı oluşturun."
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
msgstr "Sarı"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
@@ -1096,3 +1181,7 @@ msgstr "Henüz aboneliğiniz yok. Sayfanın üstündeki + işaretiyle feed ekley
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "Feed'leriniz yenileme için sıraya alındı."
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "Şifreniz değiştirildi. Artık yeni şifrenizle giriş yapabilirsiniz."

View File

@@ -17,10 +17,6 @@ msgstr ""
msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
msgstr "<0>CommaFeed是一个开源项目源码托管在 </0><1>GitHub</1>。"
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>可以使用完整的语法 </0><1>详情</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
msgstr "<0>有帐号吗?</0><1>登录!</1>"
@@ -38,6 +34,10 @@ msgstr "<0>需要一个帐户?</0><1>注册!</1>"
msgid "About"
msgstr "关于"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Access token"
msgstr "访问令牌"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Actions"
msgstr "操作"
@@ -63,7 +63,7 @@ msgstr "管理员"
#: src/pages/auth/InitialSetupPage.tsx
#: src/pages/auth/InitialSetupPage.tsx
msgid "Admin user name"
msgstr ""
msgstr "管理员用户名"
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
@@ -98,6 +98,14 @@ msgstr "公告"
msgid "API key"
msgstr "API 密钥"
#: src/components/settings/PushNotificationSettings.tsx
msgid "API token"
msgstr "API 令牌"
#: src/components/settings/PushNotificationSettings.tsx
msgid "App token"
msgstr "应用令牌"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
msgstr "您确定要删除类别 <0>{categoryName}</0> 吗?"
@@ -127,14 +135,15 @@ msgid "Asc"
msgstr "升序"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
msgstr "可用变量为'title'、'content'、'url'、'author'和'categories',它们的内容被转换为小写以方便字符串比较。"
msgid "Auto-mark as read"
msgstr "自动标记为已读"
#: src/components/content/add/Subscribe.tsx
msgid "Back"
msgstr "返回"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Back to log in"
msgstr "返回登录"
@@ -154,6 +163,10 @@ msgstr "浏览器扩展"
msgid "Browser tab"
msgstr "浏览器标签页"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read automatically."
msgstr "构建过滤表达式以指示您想阅读的内容。不匹配的条目将被自动标记为已读。"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
@@ -161,6 +174,7 @@ msgstr "浏览器标签页"
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
@@ -226,13 +240,18 @@ msgstr "确认"
msgid "Confirm password"
msgstr "确认密码"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Confirm Password"
msgstr "确认密码"
#: src/components/header/ProfileMenu.tsx
msgid "Cozy"
msgstr "宽松"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Create Admin Account"
msgstr ""
msgstr "创建管理员帐号"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Ctrl"
@@ -267,6 +286,10 @@ msgstr "暗黑"
msgid "Date created"
msgstr "创建日期"
#: src/pages/app/FeedDetailsPage.tsx
msgid "days"
msgstr "天"
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Delete"
msgstr "删除"
@@ -359,10 +382,6 @@ msgstr "条目头部"
msgid "Error"
msgstr "错误"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Example: {example}."
msgstr "示例:{示例}。"
#: src/components/header/ProfileMenu.tsx
msgid "Expanded"
msgstr "展开"
@@ -463,10 +482,6 @@ msgstr "绿"
msgid "Id"
msgstr "序号"
#: src/pages/app/FeedDetailsPage.tsx
msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
msgstr "如果不为空,则表达式的计算结果为“真”或“假”。如果为“假”,则此信息流的新条目将自动标记为已读。"
#: src/components/settings/DisplaySettings.tsx
msgid "If the entry doesn't entirely fit on the screen"
msgstr "如果条目不能完全显示在屏幕上"
@@ -489,7 +504,11 @@ msgstr "靛蓝"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Initial Setup"
msgstr ""
msgstr "初始化设置"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Invalid password reset link. Please request a new one."
msgstr "密码重置链接无效,请重新申请。"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
@@ -589,6 +608,10 @@ msgstr "标记为已读"
msgid "Mark as read up to here"
msgstr "标记为已读到这里"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
msgstr "在此天数后将此信息流中的条目标记为已读。留空以禁用。"
#: src/components/header/ProfileMenu.tsx
msgid "Metrics"
msgstr "指标"
@@ -634,6 +657,11 @@ msgstr "从不"
msgid "New password"
msgstr "新密码"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "New Password"
msgstr "新密码"
#: src/pages/app/AboutPage.tsx
msgid "Newest first"
msgstr "最新的优先"
@@ -771,11 +799,15 @@ msgstr "父类别"
msgid "Password"
msgstr "密码"
#: src/hooks/useValidationRules.ts
msgid "Password must be at least {minimumPasswordLength} characters"
msgstr "密码最少需要 {minimumPasswordLength} 个字符"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Password Recovery"
msgstr "密码恢复"
#: src/components/settings/ProfileSettings.tsx
#: src/hooks/useValidationRules.ts
msgid "Passwords do not match"
msgstr "密码不匹配"
@@ -800,6 +832,31 @@ msgstr "主颜色"
msgid "Profile"
msgstr "配置文件"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notification service"
msgstr "推送通知服务"
#: src/pages/app/SettingsPage.tsx
msgid "Push notifications"
msgstr "推送通知"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Push notifications are not configured in your user settings."
msgstr "您的用户设置中未配置推送通知。"
#: src/components/ReceivePushNotificationsChechbox.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Push notifications are not enabled on this CommaFeed instance."
msgstr "此 CommaFeed 实例未启用推送通知。"
#: src/components/ReceivePushNotificationsChechbox.tsx
msgid "Receive push notifications"
msgstr "接收推送通知"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Receive push notifications when new feed entries are discovered. Enable \"Receive push notifications\" in the settings of each feed for which you want to receive notifications."
msgstr "当发现新的信息流条目时接收推送通知。在您希望接收通知的每个信息流设置中启用“接收推送通知”。"
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "Recover password"
msgstr "找回密码"
@@ -817,6 +874,11 @@ msgstr "刷新"
msgid "Registrations are closed on this CommaFeed instance"
msgstr "此 CommaFeed 实例上的注册已关闭"
#: src/pages/auth/PasswordResetPage.tsx
#: src/pages/auth/PasswordResetPage.tsx
msgid "Reset Password"
msgstr "重置密码"
#: src/pages/app/AboutPage.tsx
msgid "REST API"
msgstr "REST API"
@@ -829,6 +891,7 @@ msgstr "右键单击"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
@@ -861,6 +924,11 @@ msgstr "选择下一个未读信息流/类别"
msgid "Select previous unread feed/category"
msgstr "选择上一个未读信息流/类别"
#: src/components/settings/PushNotificationSettings.tsx
#: src/components/settings/PushNotificationSettings.tsx
msgid "Server URL"
msgstr "服务器网址"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "将焦点放在下一个条目而不打开它"
@@ -1005,6 +1073,14 @@ msgstr "标签"
msgid "Teal"
msgstr "青绿"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test"
msgstr "测试"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Test notification sent successfully."
msgstr "测试通知发送成功。"
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "您要订阅的信息流的网址。您也可以直接使用网站的网址CommaFeed 会尝试在页面中找到信息流。"
@@ -1013,6 +1089,11 @@ msgstr "您要订阅的信息流的网址。您也可以直接使用网站的网
msgid "Theme"
msgstr "主题"
#. placeholder {0}: feed.filterLegacy
#: src/pages/app/FeedDetailsPage.tsx
msgid "This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using the new expression editor. The legacy filter expression was: <0>{0}</0>"
msgstr "此信息流具有无法编辑且未应用的旧版过滤器。请使用新的表达式编辑器重新创建过滤器。旧版过滤器表达式为:<0>{0}</0>"
#: src/components/settings/ProfileSettings.tsx
msgid "This is your API key. It can be used for some read-only API operations and grants access to the Fever API. Use the form at the bottom of the page to generate a new API key"
msgstr "这是您的API 密钥它可以被用于Fever API的只读操作及访问授权。使用页面底部的表单生成一个新的API密钥。"
@@ -1033,6 +1114,10 @@ msgstr "切换侧边栏"
msgid "Toggle starred status of current entry"
msgstr "切换当前条目的星标状态"
#: src/components/settings/PushNotificationSettings.tsx
msgid "Topic"
msgstr "主题"
#: src/pages/auth/LoginPage.tsx
msgid "Try out CommaFeed with the demo account: demo/demo"
msgstr "使用演示帐户试用 CommaFeeddemo/demo"
@@ -1056,9 +1141,9 @@ msgstr "取消星标"
msgid "Unsubscribe"
msgstr "取消订阅"
#: src/pages/auth/InitialSetupPage.tsx
msgid "User created."
msgstr ""
#: src/components/settings/PushNotificationSettings.tsx
msgid "User key"
msgstr "用户密钥"
#: src/components/settings/ProfileSettings.tsx
msgid "User name"
@@ -1083,7 +1168,7 @@ msgstr "网站"
#: src/pages/auth/InitialSetupPage.tsx
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
msgstr ""
msgstr "欢迎当前页仅当您第一次使用CommaFeed时出现请创建一个管理员帐号以开始使用。"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
@@ -1096,3 +1181,7 @@ msgstr "您还没有任何订阅。"
#: src/components/header/ProfileMenu.tsx
msgid "Your feeds have been queued for refresh."
msgstr "您的订阅已经进入刷新队列。"
#: src/pages/auth/PasswordResetPage.tsx
msgid "Your password has been changed. You can now log in with your new password."
msgstr "您的密码已更改。您现在可以使用新密码登录。"

View File

@@ -19,10 +19,8 @@ const shownGauges: Record<string, string> = {
"com.commafeed.backend.feed.FeedRefreshEngine.queue.size": "Feed Refresh Engine queue size",
"com.commafeed.backend.feed.FeedRefreshEngine.worker.active": "Feed Refresh Engine active HTTP workers",
"com.commafeed.backend.feed.FeedRefreshEngine.updater.active": "Feed Refresh Engine active database update workers",
"com.commafeed.backend.HttpGetter.pool.max": "HttpGetter max pool size",
"com.commafeed.backend.HttpGetter.pool.size": "HttpGetter current pool size",
"com.commafeed.backend.HttpGetter.pool.leased": "HttpGetter active connections",
"com.commafeed.backend.HttpGetter.pool.pending": "HttpGetter waiting for a connection",
"com.commafeed.backend.feed.FeedRefreshEngine.notifier.active": "Feed Refresh Engine active push notifications workers",
"com.commafeed.backend.feed.FeedRefreshEngine.notifier.queue": "Feed Refresh Engine queued push notifications workers",
"com.commafeed.backend.HttpGetter.cache.size": "HttpGetter cached entries",
"com.commafeed.backend.HttpGetter.cache.memoryUsage": "HttpGetter cache memory usage",
"com.commafeed.frontend.ws.WebSocketSessions.users": "WebSocket users",

View File

@@ -1,10 +1,27 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Anchor, Box, Button, Code, Container, Divider, Group, Input, NumberInput, Stack, Text, TextInput, Title } from "@mantine/core"
import {
Anchor,
Box,
Button,
Code,
Container,
Divider,
Group,
Input,
Alert as MantineAlert,
NumberInput,
Stack,
Text,
TextInput,
Title,
} from "@mantine/core"
import { useForm } from "@mantine/form"
import { openConfirmModal } from "@mantine/modals"
import { useEffect } from "react"
import { useAsync, useAsyncCallback } from "react-async-hook"
import { TbDeviceFloppy, TbTrash } from "react-icons/tb"
import { TbAlertTriangle, TbDeviceFloppy, TbTrash } from "react-icons/tb"
import { useParams } from "react-router-dom"
import { client, errorToStrings } from "@/app/client"
import { redirectToRootCategory, redirectToSelectedSource } from "@/app/redirect/thunks"
@@ -13,46 +30,17 @@ import { reloadTree } from "@/app/tree/thunks"
import type { FeedModificationRequest } from "@/app/types"
import { Alert } from "@/components/Alert"
import { CategorySelect } from "@/components/content/add/CategorySelect"
import { FilteringExpressionEditor } from "@/components/content/edit/FilteringExpressionEditor"
import { Loader } from "@/components/Loader"
import { ReceivePushNotificationsChechbox } from "@/components/ReceivePushNotificationsChechbox"
import { RelativeDate } from "@/components/RelativeDate"
function FilteringExpressionDescription() {
const example = <Code>url.contains('youtube') or (author eq 'athou' and title.contains('github'))</Code>
return (
<div>
<div>
<Trans>
If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read
automatically.
</Trans>
</div>
<div>
<Trans>
Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case
to ease string comparison.
</Trans>
</div>
<div>
<Trans>Example: {example}.</Trans>
</div>
<div>
<Trans>
<span>Complete syntax is available </span>
<a href="https://commons.apache.org/proper/commons-jexl/reference/syntax.html" target="_blank" rel="noreferrer">
here
</a>
<span>.</span>
</Trans>
</div>
</div>
)
}
export function FeedDetailsPage() {
const { id } = useParams()
if (!id) throw new Error("id required")
const apiKey = useAppSelector(state => state.user.profile?.apiKey)
const { _ } = useLingui()
const dispatch = useAppDispatch()
const query = useAsync(async () => await client.feed.get(id), [id])
const feed = query.result?.data
@@ -158,11 +146,36 @@ export function FeedDetailsPage() {
<TextInput label={<Trans>Name</Trans>} {...form.getInputProps("name")} required />
<CategorySelect label={<Trans>Category</Trans>} {...form.getInputProps("categoryId")} clearable />
<NumberInput label={<Trans>Position</Trans>} {...form.getInputProps("position")} required min={0} />
<TextInput
label={<Trans>Filtering expression</Trans>}
description={<FilteringExpressionDescription />}
{...form.getInputProps("filter")}
<ReceivePushNotificationsChechbox {...form.getInputProps("pushNotificationsEnabled", { type: "checkbox" })} />
<NumberInput
label={<Trans>Auto-mark as read</Trans>}
description={<Trans>Mark entries in this feed as read after this number of days. Leave empty to disable.</Trans>}
suffix={` ${_(msg`days`)}`}
{...form.getInputProps("autoMarkAsReadAfterDays")}
min={1}
max={3650}
/>
<Input.Wrapper
label={<Trans>Filtering expression</Trans>}
description={
<Trans>
Build a filter expression to indicate what you want to read. Entries that don't match will be marked as read
automatically.
</Trans>
}
>
{feed.filterLegacy && (
<MantineAlert color="yellow" icon={<TbAlertTriangle />}>
<Trans>
This feed has a legacy filter that cannot be edited and is not applied. Please recreate the filter using
the new expression editor. The legacy filter expression was: <Code>{feed.filterLegacy}</Code>
</Trans>
</MantineAlert>
)}
<Box mt="xs">
<FilteringExpressionEditor initialValue={feed.filter} onChange={value => form.setFieldValue("filter", value)} />
</Box>
</Input.Wrapper>
<Group>
<Button variant="default" onClick={async () => await dispatch(redirectToSelectedSource())}>

View File

@@ -8,9 +8,11 @@ import { Constants } from "@/app/constants"
import type { EntrySourceType } from "@/app/entries/slice"
import { loadEntries } from "@/app/entries/thunks"
import { redirectToCategoryDetails, redirectToFeedDetails, redirectToTagDetails } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { flattenCategoryTree } from "@/app/utils"
import { useAppDispatch, useAppSelector, useShallowEqualAppSelector } from "@/app/store"
import { categoryHasNewEntries, categoryUnreadCount, flattenCategoryTree } from "@/app/utils"
import { FeedEntries } from "@/components/content/FeedEntries"
import { UnreadCount } from "@/components/sidebar/UnreadCount"
import { useMobile } from "@/hooks/useMobile"
import { tss } from "@/tss"
function NoSubscriptionHelp() {
@@ -33,6 +35,12 @@ const useStyles = tss.create(() => ({
sourceWebsiteLink: {
color: "inherit",
textDecoration: "none",
overflow: "hidden",
},
titleText: {
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap",
},
}))
@@ -48,6 +56,33 @@ export function FeedEntriesPage(props: Readonly<FeedEntriesPageProps>) {
const sourceLabel = useAppSelector(state => state.entries.sourceLabel)
const sourceWebsiteUrl = useAppSelector(state => state.entries.sourceWebsiteUrl)
const hasMore = useAppSelector(state => state.entries.hasMore)
const mobile = useMobile()
const sidebarVisible = useAppSelector(state => state.tree.sidebarVisible)
const { unreadCount, hasNewEntries } = useShallowEqualAppSelector(state => {
const root = state.tree.rootCategory
if (!root) return { unreadCount: 0, hasNewEntries: false }
if (props.sourceType === "category") {
const category = id === Constants.categories.all.id ? root : flattenCategoryTree(root).find(c => c.id === id)
return {
unreadCount: categoryUnreadCount(category),
hasNewEntries: categoryHasNewEntries(category),
}
}
if (props.sourceType === "feed") {
const feed = flattenCategoryTree(root)
.flatMap(c => c.feeds)
.find(f => f.id === +id)
return {
unreadCount: feed?.unread ?? 0,
hasNewEntries: !!feed?.hasNewEntries,
}
}
return { unreadCount: 0, hasNewEntries: false }
})
const showUnreadCount = mobile || !sidebarVisible
const dispatch = useAppDispatch()
let title: React.ReactNode = sourceLabel
@@ -89,16 +124,23 @@ export function FeedEntriesPage(props: Readonly<FeedEntriesPageProps>) {
return (
// add some room at the bottom of the page in order to be able to scroll the current entry at the top of the page when expanding
<Box mb={viewport.height * 0.7}>
<Group gap="xl" className="cf-entries-title">
<Group className="cf-entries-title" wrap="nowrap">
{sourceWebsiteUrl && (
<a href={sourceWebsiteUrl} target="_blank" rel="noreferrer" className={classes.sourceWebsiteLink}>
<Title order={3}>{title}</Title>
<Title order={3} className={classes.titleText}>
{title}
</Title>
</a>
)}
{!sourceWebsiteUrl && <Title order={3}>{title}</Title>}
{!sourceWebsiteUrl && (
<Title order={3} className={classes.titleText}>
{title}
</Title>
)}
<ActionIcon onClick={titleClicked} variant="subtle" color={theme.primaryColor}>
<TbEdit size={18} />
</ActionIcon>
{showUnreadCount && <UnreadCount unreadCount={unreadCount} showIndicator={hasNewEntries} />}
</Group>
<FeedEntries />

View File

@@ -79,6 +79,7 @@ export default function Layout(props: Readonly<LayoutProps>) {
const webSocketConnected = useAppSelector(state => state.server.webSocketConnected)
const treeReloadInterval = useAppSelector(state => state.server.serverInfos?.treeReloadInterval)
const mobileFooter = useAppSelector(state => state.user.settings?.mobileFooter)
const disableMobileSwipe = useAppSelector(state => state.user.settings?.disableMobileSwipe)
const sidebarWidth = useAppSelector(state => state.user.localSettings.sidebarWidth)
const headerInFooter = mobile && !isBrowserExtensionPopup && mobileFooter
const dispatch = useAppDispatch()
@@ -164,6 +165,9 @@ export default function Layout(props: Readonly<LayoutProps>) {
const swipeHandlers = useSwipeable({
onSwiping: e => {
if (disableMobileSwipe) {
return
}
const threshold = document.documentElement.clientWidth / 6
if (e.absX > threshold) {
dispatch(setMobileMenuOpen(e.dir === "Right"))

View File

@@ -1,9 +1,10 @@
import { Trans } from "@lingui/react/macro"
import { Container, Tabs } from "@mantine/core"
import { TbCode, TbPhoto, TbUser } from "react-icons/tb"
import { TbBell, TbCode, TbPhoto, TbUser } from "react-icons/tb"
import { CustomCodeSettings } from "@/components/settings/CustomCodeSettings"
import { DisplaySettings } from "@/components/settings/DisplaySettings"
import { ProfileSettings } from "@/components/settings/ProfileSettings"
import { PushNotificationSettings } from "@/components/settings/PushNotificationSettings"
export function SettingsPage() {
return (
@@ -13,6 +14,9 @@ export function SettingsPage() {
<Tabs.Tab value="display" leftSection={<TbPhoto size={16} />}>
<Trans>Display</Trans>
</Tabs.Tab>
<Tabs.Tab value="push-notifications" leftSection={<TbBell size={16} />}>
<Trans>Push notifications</Trans>
</Tabs.Tab>
<Tabs.Tab value="customCode" leftSection={<TbCode size={16} />}>
<Trans>Custom code</Trans>
</Tabs.Tab>
@@ -25,6 +29,10 @@ export function SettingsPage() {
<DisplaySettings />
</Tabs.Panel>
<Tabs.Panel value="push-notifications" pt="xl">
<PushNotificationSettings />
</Tabs.Panel>
<Tabs.Panel value="customCode" pt="xl">
<CustomCodeSettings />
</Tabs.Panel>

View File

@@ -9,11 +9,13 @@ import { redirectToRootCategory } from "@/app/redirect/thunks"
import { useAppDispatch } from "@/app/store"
import type { InitialSetupRequest } from "@/app/types"
import { Alert } from "@/components/Alert"
import { useValidationRules } from "@/hooks/useValidationRules"
import { PageTitle } from "@/pages/PageTitle"
export function InitialSetupPage() {
const dispatch = useAppDispatch()
const { _ } = useLingui()
const validationRules = useValidationRules()
const form = useForm<InitialSetupRequest>({
initialValues: {
@@ -21,6 +23,10 @@ export function InitialSetupPage() {
password: "",
email: "",
},
validate: {
password: validationRules.password,
},
validateInputOnChange: true,
})
const login = useAsyncCallback(client.user.login, {

View File

@@ -0,0 +1,119 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, Title } from "@mantine/core"
import { useForm } from "@mantine/form"
import { useState } from "react"
import { useAsyncCallback } from "react-async-hook"
import { Link, useSearchParams } from "react-router-dom"
import { client, errorToStrings } from "@/app/client"
import { Alert } from "@/components/Alert"
import { useValidationRules } from "@/hooks/useValidationRules"
import { PageTitle } from "@/pages/PageTitle"
interface PasswordResetFormValues {
password: string
passwordConfirmation: string
}
export function PasswordResetPage() {
const [message, setMessage] = useState("")
const [searchParams] = useSearchParams()
const { _ } = useLingui()
const validationRules = useValidationRules()
const email = searchParams.get("email") ?? ""
const token = searchParams.get("token") ?? ""
const form = useForm<PasswordResetFormValues>({
initialValues: {
password: "",
passwordConfirmation: "",
},
validate: {
password: validationRules.password,
passwordConfirmation: (value, values) => validationRules.passwordConfirmation(value, values.password),
},
validateInputOnChange: true,
})
const resetPassword = useAsyncCallback(client.user.passwordResetCallback, {
onSuccess: () => {
setMessage(_(msg`Your password has been changed. You can now log in with your new password.`))
form.reset()
},
})
const isMissingParams = !email || !token
return (
<Container size="xs">
<PageTitle />
<Paper>
<Title order={2} mb="md">
<Trans>Reset Password</Trans>
</Title>
{resetPassword.error && (
<Box mb="md">
<Alert messages={errorToStrings(resetPassword.error)} />
</Box>
)}
{isMissingParams && (
<Box mb="md">
<Alert messages={[_(msg`Invalid password reset link. Please request a new one.`)]} />
</Box>
)}
{message && (
<Box mb="md">
<Alert level="success" messages={[message]} />
</Box>
)}
{!isMissingParams && !message && (
<form
onSubmit={form.onSubmit(values => {
resetPassword.execute({
email,
token,
password: values.password,
})
})}
>
<Stack>
<PasswordInput
label={<Trans>New Password</Trans>}
placeholder={_(msg`New Password`)}
{...form.getInputProps("password")}
size="md"
required
/>
<PasswordInput
label={<Trans>Confirm Password</Trans>}
placeholder={_(msg`Confirm Password`)}
{...form.getInputProps("passwordConfirmation")}
size="md"
required
/>
<Button type="submit" loading={resetPassword.loading}>
<Trans>Reset Password</Trans>
</Button>
</Stack>
</form>
)}
<Center mt="md">
<Group>
<Anchor component={Link} to="/login">
<Trans>Back to log in</Trans>
</Anchor>
</Group>
</Center>
</Paper>
</Container>
)
}

View File

@@ -10,12 +10,14 @@ import { redirectToRootCategory } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { RegistrationRequest } from "@/app/types"
import { Alert } from "@/components/Alert"
import { useValidationRules } from "@/hooks/useValidationRules"
import { PageTitle } from "@/pages/PageTitle"
export function RegistrationPage() {
const serverInfos = useAppSelector(state => state.server.serverInfos)
const dispatch = useAppDispatch()
const { _ } = useLingui()
const validationRules = useValidationRules()
const form = useForm<RegistrationRequest>({
initialValues: {
@@ -23,6 +25,10 @@ export function RegistrationPage() {
password: "",
email: "",
},
validate: {
password: validationRules.password,
},
validateInputOnChange: true,
})
const login = useAsyncCallback(client.user.login, {

View File

@@ -1,25 +1,17 @@
import { lingui } from "@lingui/vite-plugin"
import react from "@vitejs/plugin-react"
import babel from "@rolldown/plugin-babel"
import react, { reactCompilerPreset } from "@vitejs/plugin-react"
import { defineConfig } from "vite"
import checker from "vite-plugin-checker"
import tsconfigPaths from "vite-tsconfig-paths"
// https://vitejs.dev/config/
export default defineConfig(() => ({
plugins: [
react({
babel: {
plugins: [
// support for lingui macros
// needs to be before the react compiler plugin
"@lingui/babel-plugin-lingui-macro",
// react compiler
["babel-plugin-react-compiler", { target: "19" }],
],
},
react(),
babel({
presets: [reactCompilerPreset()],
plugins: ["@lingui/babel-plugin-lingui-macro"],
}),
lingui(),
tsconfigPaths(),
checker({
typescript: true,
biome: {
@@ -43,22 +35,32 @@ export default defineConfig(() => ({
"/logout": "http://localhost:8083",
},
},
build: {
chunkSizeWarningLimit: 3500,
rollupOptions: {
output: {
manualChunks: id => {
// output mantine as its own chunk because it is quite large
if (id.includes("@mantine")) {
return "mantine"
}
},
},
},
resolve: {
tsconfigPaths: true,
},
legacy: {
// required for websocket-heartbeat-js
inconsistentCjsInterop: true,
},
test: {
environment: "jsdom",
globals: true,
setupFiles: "./src/setupTests.ts",
},
build: {
chunkSizeWarningLimit: 4000,
rolldownOptions: {
output: {
codeSplitting: {
groups: [
// output mantine as its own chunk because it is quite large
{
name: "mantine",
test: "@mantine",
},
],
},
},
},
},
}))

View File

@@ -6,13 +6,14 @@
<parent>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>6.0.0</version>
<version>7.0.0</version>
</parent>
<artifactId>commafeed-server</artifactId>
<name>CommaFeed Server</name>
<packaging>quarkus</packaging>
<properties>
<quarkus.version>3.30.6</quarkus.version>
<quarkus.version>3.32.4</quarkus.version>
<querydsl.version>7.1</querydsl.version>
<rome.version>2.1.0</rome.version>
@@ -28,6 +29,12 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- the quarkus bom declares a dependency on an old version of protobuf, we need to override it for cel-java -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>4.34.1</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -55,7 +62,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.2.1</version>
<version>1.3.0</version>
<executions>
<execution>
<goals>
@@ -77,24 +84,14 @@
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
<goal>native-image-agent</goal>
</goals>
<configuration>
<properties>
<quarkus.package.output-name>commafeed-${project.version}</quarkus.package.output-name>
<quarkus.package.runner-suffix>
-${build.database}-${os.detected.name}-${os.detected.arch}-runner
</quarkus.package.runner-suffix>
</properties>
</configuration>
</execution>
</executions>
<configuration>
<properties>
<quarkus.package.output-name>commafeed-${project.version}</quarkus.package.output-name>
<quarkus.package.runner-suffix>
-${build.database}-${os.detected.name}-${os.detected.arch}-runner
</quarkus.package.runner-suffix>
</properties>
</configuration>
</plugin>
<plugin>
<groupId>io.quarkus</groupId>
@@ -165,8 +162,9 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.4</version>
<version>3.5.5</version>
<configuration>
<argLine>@{argLine}</argLine>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<quarkus.datasource.db-kind>${build.database}</quarkus.datasource.db-kind>
@@ -176,7 +174,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.4</version>
<version>3.5.5</version>
<executions>
<execution>
<goals>
@@ -186,14 +184,13 @@
</execution>
</executions>
<configuration>
<argLine>@{argLine}</argLine>
<systemPropertyVariables>
<native.image.path>${project.build.directory}/${project.build.finalName}-runner
</native.image.path>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<quarkus.datasource.db-kind>${build.database}</quarkus.datasource.db-kind>
</systemPropertyVariables>
<!-- fix for java.lang.NoClassDefFoundError: Could not initialize class org.jboss.threads.JDKSpecific$ThreadAccess (#1938) -->
<argLine>--add-opens java.base/java.lang=ALL-UNNAMED</argLine>
</configuration>
<!-- failsafe plugin does not seem to be able to pick up dependencies declared in profiles -->
<dependencies>
@@ -219,61 +216,6 @@
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.14</version>
<configuration>
<!-- excluding SACParserCSS21TokenManager because it causes a "Method too large" exception -->
<excludes>
<exclude>com/steadystate/css/parser/SACParserCSS21TokenManager</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>unit-tests-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco-output/jacoco-unit-tests.exec</destFile>
</configuration>
</execution>
<execution>
<id>integration-tests-agent</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco-output/jacoco-integration-tests.exec</destFile>
</configuration>
</execution>
<execution>
<id>merge</id>
<phase>post-integration-test</phase>
<goals>
<goal>merge</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${project.build.directory}/jacoco-output</directory>
<includes>
<include>*.exec</include>
</includes>
</fileSet>
</fileSets>
</configuration>
</execution>
<execution>
<id>generate-code-coverage-report</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
@@ -301,7 +243,7 @@
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>13.0.0</version>
<version>13.3.0</version>
</dependency>
</dependencies>
<executions>
@@ -330,7 +272,7 @@
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>3.1.0</version>
<version>3.4.0</version>
<?m2e ignore?>
<executions>
<execution>
@@ -359,14 +301,14 @@
<dependency>
<groupId>com.commafeed</groupId>
<artifactId>commafeed-client</artifactId>
<version>6.0.0</version>
<version>7.0.0</version>
</dependency>
<!-- compile-time processors -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
<version>1.18.44</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -378,7 +320,6 @@
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${quarkus.version}</version>
<scope>provided</scope>
</dependency>
@@ -427,7 +368,7 @@
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId>
<version>4.2.37</version>
<version>4.2.38</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
@@ -456,15 +397,9 @@
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl</artifactId>
<version>2.1.1</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
<groupId>dev.cel</groupId>
<artifactId>cel</artifactId>
<version>0.12.0</version>
</dependency>
<dependency>
<groupId>org.passay</groupId>
@@ -499,7 +434,7 @@
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>78.2</version>
<version>78.3</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cssparser</groupId>
@@ -519,7 +454,7 @@
<dependency>
<groupId>io.github.hakky54</groupId>
<artifactId>ayza-for-apache5</artifactId>
<version>10.0.3</version>
<version>10.0.4</version>
</dependency>
<dependency>
<groupId>org.brotli</groupId>
@@ -530,18 +465,13 @@
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-mockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jacoco</artifactId>
<artifactId>quarkus-junit-mockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkiverse.playwright</groupId>
<artifactId>quarkus-playwright</artifactId>
<version>2.3.1</version>
<version>2.3.3</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@@ -1,4 +1,4 @@
FROM ibm-semeru-runtimes:open-jdk-25.0.1_8-jre@sha256:d88c854ca5506a04dd2cdaedb98dcf23d6b1b077aebaf738d5c3c5d8c94fff20
FROM ibm-semeru-runtimes:open-jdk-25.0.2_10-jre@sha256:b02e4cd184d9ece59b01129af1d0a069fa01e4f0f798f0bc4f3ff1a8391ba694
EXPOSE 8082
RUN mkdir -p /commafeed/data

View File

@@ -1,4 +1,4 @@
FROM debian:13.2@sha256:c71b05eac0b20adb4cdcc9f7b052227efd7da381ad10bb92f972e8eae7c6cdc9
FROM debian:13.4@sha256:55a15a112b42be10bfc8092fcc40b6748dc236f7ef46a358d9392b339e9d60e8
ARG TARGETARCH
EXPOSE 8082

View File

@@ -10,7 +10,9 @@ import com.commafeed.security.password.PasswordConstraintValidator;
import io.quarkus.runtime.ShutdownEvent;
import io.quarkus.runtime.StartupEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Singleton
@RequiredArgsConstructor
public class CommaFeedApplication {
@@ -20,6 +22,8 @@ public class CommaFeedApplication {
private final CommaFeedConfiguration config;
public void start(@Observes StartupEvent ev) {
log.info("starting up...");
PasswordConstraintValidator.setMinimumPasswordLength(config.users().minimumPasswordLength());
feedRefreshEngine.start();
@@ -27,6 +31,8 @@ public class CommaFeedApplication {
}
public void stop(@Observes ShutdownEvent ev) {
log.info("shutting down...");
feedRefreshEngine.stop();
taskScheduler.stop();
}

View File

@@ -68,6 +68,12 @@ public interface CommaFeedConfiguration {
@ConfigDocSection
FeedRefresh feedRefresh();
/**
* Push notification settings.
*/
@ConfigDocSection
PushNotifications pushNotifications();
/**
* Database settings.
*/
@@ -86,6 +92,12 @@ public interface CommaFeedConfiguration {
@ConfigDocSection
Websocket websocket();
/**
* Duration to wait for the feed refresh engine and the task scheduler to stop when the application is shutting down.
*/
@WithDefault("2s")
Duration shutdownTimeout();
interface HttpClient {
/**
* User-Agent string that will be used by the http client, leave empty for the default one.
@@ -138,10 +150,9 @@ public interface CommaFeedConfiguration {
* Prevent access to local addresses to mitigate server-side request forgery (SSRF) attacks, which could potentially expose internal
* resources.
*
* You may want to disable this if you subscribe to feeds that are only available on your local network and you trust all users of
* your CommaFeed instance.
* You may want to enable this if you host a public instance of CommaFeed with registrations open.
*/
@WithDefault("true")
@WithDefault("false")
boolean blockLocalAddresses();
/**
@@ -242,6 +253,28 @@ public interface CommaFeedConfiguration {
Duration forceRefreshCooldownDuration();
}
interface PushNotifications {
/**
* Whether to enable push notifications to notify users of new entries in their feeds.
*/
@WithDefault("true")
boolean enabled();
/**
* Amount of threads used to send external notifications about new entries.
*/
@Min(1)
@WithDefault("5")
int threads();
/**
* Maximum amount of notifications that can be queued before new notifications are discarded.
*/
@Min(1)
@WithDefault("100")
int queueCapacity();
}
interface FeedRefreshErrorHandling {
/**
* Number of retries before backoff is applied.
@@ -312,6 +345,12 @@ public interface CommaFeedConfiguration {
@WithDefault("100")
int batchSize();
/**
* Whether to keep starred entries when cleaning up old entries.
*/
@WithDefault("true")
boolean keepStarredEntries();
default Instant statusesInstantThreshold() {
return statusesMaxAge().toMillis() > 0 ? Instant.now().minus(statusesMaxAge()) : null;
}

View File

@@ -0,0 +1,166 @@
package com.commafeed.backend;
import java.net.InetAddress;
import java.net.URI;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.SequencedMap;
import java.util.zip.GZIPInputStream;
import jakarta.inject.Singleton;
import org.apache.hc.client5.http.DnsResolver;
import org.apache.hc.client5.http.SystemDefaultDnsResolver;
import org.apache.hc.client5.http.config.ConnectionConfig;
import org.apache.hc.client5.http.config.TlsConfig;
import org.apache.hc.client5.http.entity.DeflateInputStream;
import org.apache.hc.client5.http.entity.InputStreamFactory;
import org.apache.hc.client5.http.entity.compress.ContentCoding;
import org.apache.hc.client5.http.impl.DefaultRedirectStrategy;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.protocol.RedirectStrategy;
import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.message.BasicHeader;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.util.TimeValue;
import org.apache.hc.core5.util.Timeout;
import org.brotli.dec.BrotliInputStream;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.CommaFeedVersion;
import com.google.common.net.HttpHeaders;
import lombok.RequiredArgsConstructor;
import nl.altindag.ssl.SSLFactory;
import nl.altindag.ssl.apache5.util.Apache5SslUtils;
@Singleton
@RequiredArgsConstructor
public class HttpClientFactory {
private static final DnsResolver DNS_RESOLVER = SystemDefaultDnsResolver.INSTANCE;
private final CommaFeedConfiguration config;
private final CommaFeedVersion version;
public CloseableHttpClient newClient(int poolSize) {
PoolingHttpClientConnectionManager connectionManager = newConnectionManager(config, poolSize);
String userAgent = config.httpClient()
.userAgent()
.orElseGet(() -> String.format("CommaFeed/%s (https://github.com/Athou/commafeed)", version.getVersion()));
return newClient(config, connectionManager, userAgent);
}
private CloseableHttpClient newClient(CommaFeedConfiguration config, HttpClientConnectionManager connectionManager, String userAgent) {
List<Header> headers = new ArrayList<>();
headers.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en"));
headers.add(new BasicHeader(HttpHeaders.PRAGMA, "No-cache"));
headers.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "no-cache"));
SequencedMap<String, InputStreamFactory> contentDecoderMap = new LinkedHashMap<>();
contentDecoderMap.put(ContentCoding.GZIP.token(), GZIPInputStream::new);
contentDecoderMap.put(ContentCoding.DEFLATE.token(), DeflateInputStream::new);
contentDecoderMap.put(ContentCoding.BROTLI.token(), BrotliInputStream::new);
RedirectStrategy redirectStrategy = config.httpClient().blockLocalAddresses()
? new BlockLocalAddressesRedirectStrategy(DNS_RESOLVER)
: new DefaultRedirectStrategy();
return HttpClientBuilder.create()
.useSystemProperties()
.disableAutomaticRetries()
.disableCookieManagement()
.setUserAgent(userAgent)
.setDefaultHeaders(headers)
.setConnectionManager(connectionManager)
.evictExpiredConnections()
.evictIdleConnections(TimeValue.of(config.httpClient().idleConnectionsEvictionInterval()))
.setContentDecoderRegistry(new LinkedHashMap<>(contentDecoderMap))
.setRedirectStrategy(redirectStrategy)
.build();
}
private PoolingHttpClientConnectionManager newConnectionManager(CommaFeedConfiguration config, int poolSize) {
SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
DnsResolver dnsResolver = config.httpClient().blockLocalAddresses() ? new BlockLocalAddressesDnsResolver(DNS_RESOLVER)
: DNS_RESOLVER;
return PoolingHttpClientConnectionManagerBuilder.create()
.setTlsSocketStrategy(Apache5SslUtils.toTlsSocketStrategy(sslFactory))
.setDefaultConnectionConfig(ConnectionConfig.custom()
.setConnectTimeout(Timeout.of(config.httpClient().connectTimeout()))
.setSocketTimeout(Timeout.of(config.httpClient().socketTimeout()))
.setTimeToLive(Timeout.of(config.httpClient().connectionTimeToLive()))
.build())
.setDefaultTlsConfig(TlsConfig.custom().setHandshakeTimeout(Timeout.of(config.httpClient().sslHandshakeTimeout())).build())
.setMaxConnPerRoute(poolSize)
.setMaxConnTotal(poolSize)
.setDnsResolver(dnsResolver)
.build();
}
private static boolean isLocalAddress(InetAddress address) {
return address.isSiteLocalAddress() || address.isAnyLocalAddress() || address.isLinkLocalAddress() || address.isLoopbackAddress()
|| address.isMulticastAddress();
}
private record BlockLocalAddressesDnsResolver(DnsResolver delegate) implements DnsResolver {
@Override
public InetAddress[] resolve(String host) throws UnknownHostException {
InetAddress[] addresses = delegate.resolve(host);
for (InetAddress addr : addresses) {
if (isLocalAddress(addr)) {
throw new UnknownHostException("Access to local address blocked: " + addr.getHostAddress());
}
}
return addresses;
}
@Override
public String resolveCanonicalHostname(String host) throws UnknownHostException {
return delegate.resolveCanonicalHostname(host);
}
}
@RequiredArgsConstructor
private static class BlockLocalAddressesRedirectStrategy extends DefaultRedirectStrategy {
private final DnsResolver delegate;
@Override
public URI getLocationURI(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException {
URI redirectUri = super.getLocationURI(request, response, context);
String host = redirectUri.getHost();
if (host == null) {
throw new HttpException("Redirect URI does not have a host: " + redirectUri);
}
InetAddress[] addresses;
try {
addresses = delegate.resolve(host);
} catch (UnknownHostException e) {
throw new HttpException("Unknown host: " + host);
}
for (InetAddress addr : addresses) {
if (isLocalAddress(addr)) {
throw new HttpException("Access to local address blocked: " + addr.getHostAddress());
}
}
return redirectUri;
}
}
}

View File

@@ -2,58 +2,34 @@ package com.commafeed.backend;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.URI;
import java.net.UnknownHostException;
import java.time.Duration;
import java.time.Instant;
import java.time.InstantSource;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Optional;
import java.util.SequencedMap;
import java.util.concurrent.ExecutionException;
import java.util.stream.Stream;
import java.util.zip.GZIPInputStream;
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.CacheControl;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.hc.client5.http.DnsResolver;
import org.apache.hc.client5.http.SystemDefaultDnsResolver;
import org.apache.hc.client5.http.config.ConnectionConfig;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.config.TlsConfig;
import org.apache.hc.client5.http.entity.DeflateInputStream;
import org.apache.hc.client5.http.entity.InputStreamFactory;
import org.apache.hc.client5.http.entity.compress.ContentCoding;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.protocol.RedirectLocations;
import org.apache.hc.client5.http.utils.DateUtils;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpStatus;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
import org.apache.hc.core5.http.message.BasicHeader;
import org.apache.hc.core5.util.TimeValue;
import org.apache.hc.core5.util.Timeout;
import org.brotli.dec.BrotliInputStream;
import org.jboss.resteasy.reactive.common.headers.CacheControlDelegate;
import com.codahale.metrics.MetricRegistry;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.CommaFeedConfiguration.HttpClientCache;
import com.commafeed.CommaFeedVersion;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.Iterables;
@@ -66,8 +42,6 @@ import lombok.Getter;
import lombok.Lombok;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import nl.altindag.ssl.SSLFactory;
import nl.altindag.ssl.apache5.util.Apache5SslUtils;
/**
* Smart HTTP getter: handles gzip, ssl, last modified and etag headers
@@ -75,49 +49,32 @@ import nl.altindag.ssl.apache5.util.Apache5SslUtils;
@Singleton
@Slf4j
public class HttpGetter {
private static final DnsResolver DNS_RESOLVER = SystemDefaultDnsResolver.INSTANCE;
private final CommaFeedConfiguration config;
private final InstantSource instantSource;
private final CloseableHttpClient client;
private final Cache<HttpRequest, HttpResponse> cache;
public HttpGetter(CommaFeedConfiguration config, InstantSource instantSource, CommaFeedVersion version, MetricRegistry metrics) {
public HttpGetter(CommaFeedConfiguration config, InstantSource instantSource, HttpClientFactory httpClientFactory,
MetricRegistry metrics) {
this.config = config;
this.instantSource = instantSource;
PoolingHttpClientConnectionManager connectionManager = newConnectionManager(config);
String userAgent = config.httpClient()
.userAgent()
.orElseGet(() -> String.format("CommaFeed/%s (https://github.com/Athou/commafeed)", version.getVersion()));
this.client = newClient(connectionManager, userAgent, config.httpClient().idleConnectionsEvictionInterval());
this.client = httpClientFactory.newClient(config.feedRefresh().httpThreads());
this.cache = newCache(config);
metrics.registerGauge(MetricRegistry.name(getClass(), "pool", "max"), () -> connectionManager.getTotalStats().getMax());
metrics.registerGauge(MetricRegistry.name(getClass(), "pool", "size"),
() -> connectionManager.getTotalStats().getAvailable() + connectionManager.getTotalStats().getLeased());
metrics.registerGauge(MetricRegistry.name(getClass(), "pool", "leased"), () -> connectionManager.getTotalStats().getLeased());
metrics.registerGauge(MetricRegistry.name(getClass(), "pool", "pending"), () -> connectionManager.getTotalStats().getPending());
metrics.registerGauge(MetricRegistry.name(getClass(), "cache", "size"), () -> cache == null ? 0 : cache.size());
metrics.registerGauge(MetricRegistry.name(getClass(), "cache", "memoryUsage"),
() -> cache == null ? 0 : cache.asMap().values().stream().mapToInt(e -> ArrayUtils.getLength(e.content)).sum());
}
public HttpResult get(String url)
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException {
public HttpResult get(String url) throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException {
return get(HttpRequest.builder(url).build());
}
public HttpResult get(HttpRequest request)
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException {
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException {
URI uri = URI.create(request.getUrl());
ensureHttpScheme(uri.getScheme());
if (config.httpClient().blockLocalAddresses()) {
ensurePublicAddress(uri.getHost());
}
final HttpResponse response;
if (cache == null) {
response = invoke(request);
@@ -164,22 +121,6 @@ public class HttpGetter {
}
}
private void ensurePublicAddress(String host) throws HostNotAllowedException, UnknownHostException {
if (host == null) {
throw new HostNotAllowedException(null);
}
InetAddress[] addresses = DNS_RESOLVER.resolve(host);
if (Stream.of(addresses).anyMatch(this::isPrivateAddress)) {
throw new HostNotAllowedException(host);
}
}
private boolean isPrivateAddress(InetAddress address) {
return address.isSiteLocalAddress() || address.isAnyLocalAddress() || address.isLinkLocalAddress() || address.isLoopbackAddress()
|| address.isMulticastAddress();
}
private HttpResponse invoke(HttpRequest request) throws IOException {
log.debug("fetching {}", request.getUrl());
@@ -268,50 +209,6 @@ public class HttpGetter {
}
}
private PoolingHttpClientConnectionManager newConnectionManager(CommaFeedConfiguration config) {
SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
int poolSize = config.feedRefresh().httpThreads();
return PoolingHttpClientConnectionManagerBuilder.create()
.setTlsSocketStrategy(Apache5SslUtils.toTlsSocketStrategy(sslFactory))
.setDefaultConnectionConfig(ConnectionConfig.custom()
.setConnectTimeout(Timeout.of(config.httpClient().connectTimeout()))
.setSocketTimeout(Timeout.of(config.httpClient().socketTimeout()))
.setTimeToLive(Timeout.of(config.httpClient().connectionTimeToLive()))
.build())
.setDefaultTlsConfig(TlsConfig.custom().setHandshakeTimeout(Timeout.of(config.httpClient().sslHandshakeTimeout())).build())
.setMaxConnPerRoute(poolSize)
.setMaxConnTotal(poolSize)
.setDnsResolver(DNS_RESOLVER)
.build();
}
private static CloseableHttpClient newClient(HttpClientConnectionManager connectionManager, String userAgent,
Duration idleConnectionsEvictionInterval) {
List<Header> headers = new ArrayList<>();
headers.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en"));
headers.add(new BasicHeader(HttpHeaders.PRAGMA, "No-cache"));
headers.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "no-cache"));
SequencedMap<String, InputStreamFactory> contentDecoderMap = new LinkedHashMap<>();
contentDecoderMap.put(ContentCoding.GZIP.token(), GZIPInputStream::new);
contentDecoderMap.put(ContentCoding.DEFLATE.token(), DeflateInputStream::new);
contentDecoderMap.put(ContentCoding.BROTLI.token(), BrotliInputStream::new);
return HttpClientBuilder.create()
.useSystemProperties()
.disableAutomaticRetries()
.disableCookieManagement()
.setUserAgent(userAgent)
.setDefaultHeaders(headers)
.setConnectionManager(connectionManager)
.evictExpiredConnections()
.evictIdleConnections(TimeValue.of(idleConnectionsEvictionInterval))
.setContentDecoderRegistry(new LinkedHashMap<>(contentDecoderMap))
.build();
}
private static Cache<HttpRequest, HttpResponse> newCache(CommaFeedConfiguration config) {
HttpClientCache cacheConfig = config.httpClient().cache();
if (!cacheConfig.enabled()) {
@@ -333,14 +230,6 @@ public class HttpGetter {
}
}
public static class HostNotAllowedException extends Exception {
private static final long serialVersionUID = 1L;
public HostNotAllowedException(String host) {
super("Host not allowed: " + host);
}
}
@Getter
public static class NotModifiedException extends Exception {
private static final long serialVersionUID = 1L;

View File

@@ -53,6 +53,10 @@ public class Urls {
}
public static String removeTrailingSlash(String url) {
if (url == null) {
return null;
}
if (url.endsWith("/")) {
url = url.substring(0, url.length() - 1);
}

View File

@@ -11,6 +11,7 @@ import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.QFeedEntry;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.dsl.NumberExpression;
import com.querydsl.jpa.impl.JPAQuery;
@Singleton
public class FeedEntryDAO extends GenericDAO<FeedEntry> {
@@ -25,15 +26,21 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
return query().select(ENTRY).from(ENTRY).where(ENTRY.guidHash.eq(guidHash), ENTRY.feed.eq(feed)).limit(1).fetchOne();
}
public List<FeedCapacity> findFeedsExceedingCapacity(long maxCapacity, long max) {
public List<FeedCapacity> findFeedsExceedingCapacity(long maxCapacity, long max, boolean keepStarredEntries) {
NumberExpression<Long> count = ENTRY.id.count();
List<Tuple> tuples = query().select(ENTRY.feed.id, count)
.from(ENTRY)
.groupBy(ENTRY.feed)
JPAQuery<Tuple> query = query().select(ENTRY.feed.id, count).from(ENTRY);
if (keepStarredEntries) {
query.where(Predicates.isNotStarred(ENTRY));
}
return query.groupBy(ENTRY.feed)
.having(count.gt(maxCapacity))
.limit(max)
.fetch();
return tuples.stream().map(t -> new FeedCapacity(t.get(ENTRY.feed.id), t.get(count))).toList();
.fetch()
.stream()
.map(t -> new FeedCapacity(t.get(ENTRY.feed.id), t.get(count)))
.toList();
}
public int delete(Long feedId, long max) {
@@ -44,21 +51,30 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
/**
* Delete entries older than a certain date
*/
public int deleteEntriesOlderThan(Instant olderThan, long max) {
List<FeedEntry> list = query().selectFrom(ENTRY)
public int deleteEntriesOlderThan(Instant olderThan, long max, boolean keepStarredEntries) {
JPAQuery<FeedEntry> query = query().selectFrom(ENTRY)
.where(ENTRY.published.lt(olderThan))
.orderBy(ENTRY.published.asc())
.limit(max)
.fetch();
return delete(list);
.limit(max);
if (keepStarredEntries) {
query.where(Predicates.isNotStarred(ENTRY));
}
return delete(query.fetch());
}
/**
* Delete the oldest entries of a feed
*/
public int deleteOldEntries(Long feedId, long max) {
List<FeedEntry> list = query().selectFrom(ENTRY).where(ENTRY.feed.id.eq(feedId)).orderBy(ENTRY.published.asc()).limit(max).fetch();
return delete(list);
public int deleteOldEntries(Long feedId, long max, boolean keepStarredEntries) {
JPAQuery<FeedEntry> query = query().selectFrom(ENTRY).where(ENTRY.feed.id.eq(feedId)).orderBy(ENTRY.published.asc()).limit(max);
if (keepStarredEntries) {
query.where(Predicates.isNotStarred(ENTRY));
}
return delete(query.fetch());
}
public record FeedCapacity(Long id, Long capacity) {

View File

@@ -18,15 +18,19 @@ import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedEntryTag;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.QFeed;
import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedEntryContent;
import com.commafeed.backend.model.QFeedEntryStatus;
import com.commafeed.backend.model.QFeedEntryTag;
import com.commafeed.backend.model.QFeedSubscription;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.frontend.model.UnreadCount;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.NumberExpression;
import com.querydsl.jpa.impl.JPAQuery;
@Singleton
@@ -34,8 +38,10 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
private static final QFeedEntryStatus STATUS = QFeedEntryStatus.feedEntryStatus;
private static final QFeedEntry ENTRY = QFeedEntry.feedEntry;
private static final QFeed FEED = QFeed.feed;
private static final QFeedEntryContent CONTENT = QFeedEntryContent.feedEntryContent;
private static final QFeedEntryTag TAG = QFeedEntryTag.feedEntryTag;
private static final QFeedSubscription SUBSCRIPTION = QFeedSubscription.feedSubscription;
private final FeedEntryTagDAO feedEntryTagDAO;
private final CommaFeedConfiguration config;
@@ -232,4 +238,58 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
return deleteQuery(STATUS).where(STATUS.id.in(ids)).execute();
}
public long autoMarkAsRead(int limit) {
Instant now = Instant.now();
BooleanBuilder where = new BooleanBuilder();
where.and(SUBSCRIPTION.autoMarkAsReadAfterDays.isNotNull());
where.and(SUBSCRIPTION.autoMarkAsReadAfterDays.gt(0));
NumberExpression<Integer> daysDiff = Expressions.numberTemplate(Integer.class, "TIMESTAMPDIFF(DAY, {0}, {1})", ENTRY.published,
now);
where.and(daysDiff.goe(SUBSCRIPTION.autoMarkAsReadAfterDays));
where.and(buildUnreadPredicate());
List<Tuple> tuples = query().select(ENTRY, STATUS, SUBSCRIPTION)
.from(ENTRY)
.join(ENTRY.feed, FEED)
.join(SUBSCRIPTION)
.on(SUBSCRIPTION.feed.eq(FEED))
.leftJoin(ENTRY.statuses, STATUS)
.on(STATUS.subscription.eq(SUBSCRIPTION))
.where(where)
.limit(limit)
.fetch();
long updated = 0;
// Update existing statuses
List<Long> statusIdsToUpdate = tuples.stream()
.map(t -> t.get(STATUS))
.filter(s -> s != null && s.getId() != null)
.map(FeedEntryStatus::getId)
.distinct()
.toList();
if (!statusIdsToUpdate.isEmpty()) {
updated += updateQuery(STATUS).where(STATUS.id.in(statusIdsToUpdate)).set(STATUS.read, true).execute();
}
// Insert new statuses for entries without existing status
for (Tuple tuple : tuples) {
FeedEntryStatus status = tuple.get(STATUS);
if (status == null || status.getId() == null) {
FeedEntry entry = tuple.get(ENTRY);
FeedSubscription sub = tuple.get(SUBSCRIPTION);
FeedEntryStatus newStatus = new FeedEntryStatus(sub.getUser(), sub, entry);
newStatus.setRead(true);
persist(newStatus);
updated++;
}
}
return updated;
}
}

View File

@@ -0,0 +1,18 @@
package com.commafeed.backend.dao;
import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedEntryStatus;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.JPAExpressions;
import lombok.experimental.UtilityClass;
@UtilityClass
public class Predicates {
private static final QFeedEntryStatus STATUS = QFeedEntryStatus.feedEntryStatus;
public static BooleanExpression isNotStarred(QFeedEntry entry) {
return JPAExpressions.selectOne().from(STATUS).where(STATUS.entry.eq(entry).and(STATUS.starred.isTrue())).notExists();
}
}

View File

@@ -14,7 +14,6 @@ import org.apache.hc.core5.net.URIBuilder;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.HttpGetter.HostNotAllowedException;
import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.HttpGetter.NotModifiedException;
import com.commafeed.backend.HttpGetter.SchemeNotAllowedException;
@@ -98,7 +97,7 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
}
private byte[] fetchForUser(String googleAuthKey, String userId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels")
.queryParam("part", PART_SNIPPET)
.queryParam("key", googleAuthKey)
@@ -108,7 +107,7 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
}
private byte[] fetchForChannel(String googleAuthKey, String channelId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels")
.queryParam("part", PART_SNIPPET)
.queryParam("key", googleAuthKey)
@@ -118,7 +117,7 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
}
private byte[] fetchForPlaylist(String googleAuthKey, String playlistId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/playlists")
.queryParam("part", PART_SNIPPET)
.queryParam("key", googleAuthKey)

View File

@@ -13,7 +13,6 @@ import org.apache.commons.lang3.Strings;
import com.commafeed.backend.Digests;
import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.HttpGetter.HostNotAllowedException;
import com.commafeed.backend.HttpGetter.HttpRequest;
import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.HttpGetter.NotModifiedException;
@@ -46,7 +45,7 @@ public class FeedFetcher {
public FeedFetcherResult fetch(String feedUrl, boolean extractFeedUrlFromHtml, String lastModified, String eTag,
Instant lastPublishedDate, String lastContentHash) throws FeedParsingException, IOException, NotModifiedException,
TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException, NoFeedFoundException {
TooManyRequestsException, SchemeNotAllowedException, NoFeedFoundException {
log.debug("Fetching feed {}", feedUrl);
HttpResult result = getter.get(HttpRequest.builder(feedUrl).lastModified(lastModified).eTag(eTag).build());

View File

@@ -7,6 +7,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -21,6 +22,9 @@ import com.commafeed.backend.dao.FeedDAO;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.model.AbstractModel;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedSubscription;
import com.google.common.util.concurrent.MoreExecutors;
import lombok.extern.slf4j.Slf4j;
@@ -32,40 +36,51 @@ public class FeedRefreshEngine {
private final FeedDAO feedDAO;
private final FeedRefreshWorker worker;
private final FeedRefreshUpdater updater;
private final FeedUpdateNotifier notifier;
private final CommaFeedConfiguration config;
private final Meter refill;
private final BlockingDeque<Feed> queue;
private final ExecutorService feedProcessingLoopExecutor;
private final ExecutorService refillLoopExecutor;
private final ExecutorService refillExecutor;
private final ThreadPoolExecutor workerExecutor;
private final ThreadPoolExecutor databaseUpdaterExecutor;
private ExecutorService feedProcessingLoopExecutor;
private ExecutorService refillLoopExecutor;
private ThreadPoolExecutor refillExecutor;
private ThreadPoolExecutor workerExecutor;
private ThreadPoolExecutor databaseUpdaterExecutor;
private ThreadPoolExecutor notifierExecutor;
public FeedRefreshEngine(UnitOfWork unitOfWork, FeedDAO feedDAO, FeedRefreshWorker worker, FeedRefreshUpdater updater,
CommaFeedConfiguration config, MetricRegistry metrics) {
FeedUpdateNotifier notifier, CommaFeedConfiguration config, MetricRegistry metrics) {
this.unitOfWork = unitOfWork;
this.feedDAO = feedDAO;
this.worker = worker;
this.updater = updater;
this.notifier = notifier;
this.config = config;
this.refill = metrics.meter(MetricRegistry.name(getClass(), "refill"));
this.queue = new LinkedBlockingDeque<>();
metrics.register(MetricRegistry.name(getClass(), "queue", "size"), (Gauge<Integer>) queue::size);
metrics.register(MetricRegistry.name(getClass(), "worker", "active"), (Gauge<Integer>) () -> workerExecutor.getActiveCount());
metrics.register(MetricRegistry.name(getClass(), "updater", "active"),
(Gauge<Integer>) () -> databaseUpdaterExecutor.getActiveCount());
metrics.register(MetricRegistry.name(getClass(), "notifier", "active"), (Gauge<Integer>) () -> notifierExecutor.getActiveCount());
metrics.register(MetricRegistry.name(getClass(), "notifier", "queue"), (Gauge<Integer>) () -> notifierExecutor.getQueue().size());
}
private void createExecutors() {
this.feedProcessingLoopExecutor = Executors.newSingleThreadExecutor();
this.refillLoopExecutor = Executors.newSingleThreadExecutor();
this.refillExecutor = newDiscardingSingleThreadExecutorService();
this.workerExecutor = newBlockingExecutorService(config.feedRefresh().httpThreads());
this.databaseUpdaterExecutor = newBlockingExecutorService(config.feedRefresh().databaseThreads());
metrics.register(MetricRegistry.name(getClass(), "queue", "size"), (Gauge<Integer>) queue::size);
metrics.register(MetricRegistry.name(getClass(), "worker", "active"), (Gauge<Integer>) workerExecutor::getActiveCount);
metrics.register(MetricRegistry.name(getClass(), "updater", "active"), (Gauge<Integer>) databaseUpdaterExecutor::getActiveCount);
this.notifierExecutor = newDiscardingExecutorService(config.pushNotifications().threads(),
config.pushNotifications().queueCapacity());
}
public void start() {
createExecutors();
startFeedProcessingLoop();
startRefillLoop();
}
@@ -152,10 +167,19 @@ public class FeedRefreshEngine {
private void processFeedAsync(Feed feed) {
CompletableFuture.supplyAsync(() -> worker.update(feed), workerExecutor)
.thenApplyAsync(r -> updater.update(r.feed(), r.entries()), databaseUpdaterExecutor)
.whenComplete((data, ex) -> {
if (ex != null) {
log.error("error while processing feed {}", feed.getUrl(), ex);
}
.thenCompose(r -> {
List<CompletableFuture<Void>> futures = r.insertedUnreadEntriesBySubscription().entrySet().stream().map(e -> {
FeedSubscription sub = e.getKey();
List<FeedEntry> entries = e.getValue();
notifier.notifyOverWebsocket(sub, entries);
return CompletableFuture.runAsync(() -> notifier.sendPushNotifications(sub, entries), notifierExecutor);
}).toList();
return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new));
})
.exceptionally(ex -> {
log.error("error while processing feed {}", feed.getUrl(), ex);
return null;
});
}
@@ -178,11 +202,14 @@ public class FeedRefreshEngine {
}
public void stop() {
this.feedProcessingLoopExecutor.shutdownNow();
this.refillLoopExecutor.shutdownNow();
this.refillExecutor.shutdownNow();
this.workerExecutor.shutdownNow();
this.databaseUpdaterExecutor.shutdownNow();
MoreExecutors.shutdownAndAwaitTermination(this.feedProcessingLoopExecutor, config.shutdownTimeout());
MoreExecutors.shutdownAndAwaitTermination(this.refillLoopExecutor, config.shutdownTimeout());
MoreExecutors.shutdownAndAwaitTermination(this.refillExecutor, config.shutdownTimeout());
MoreExecutors.shutdownAndAwaitTermination(this.workerExecutor, config.shutdownTimeout());
MoreExecutors.shutdownAndAwaitTermination(this.databaseUpdaterExecutor, config.shutdownTimeout());
MoreExecutors.shutdownAndAwaitTermination(this.notifierExecutor, config.shutdownTimeout());
queue.clear();
}
/**
@@ -194,6 +221,16 @@ public class FeedRefreshEngine {
return pool;
}
/**
* returns an ExecutorService that discards tasks if the queue is full
*/
private ThreadPoolExecutor newDiscardingExecutorService(int threads, int queueCapacity) {
ThreadPoolExecutor pool = new ThreadPoolExecutor(threads, threads, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(queueCapacity));
pool.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
return pool;
}
/**
* returns an ExecutorService that blocks submissions until a thread is available
*/

View File

@@ -1,5 +1,6 @@
package com.commafeed.backend.feed;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -27,8 +28,6 @@ import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.Models;
import com.commafeed.backend.service.FeedEntryService;
import com.commafeed.backend.service.FeedService;
import com.commafeed.frontend.ws.WebSocketMessageBuilder;
import com.commafeed.frontend.ws.WebSocketSessions;
import com.google.common.util.concurrent.Striped;
import lombok.extern.slf4j.Slf4j;
@@ -44,7 +43,6 @@ public class FeedRefreshUpdater {
private final FeedService feedService;
private final FeedEntryService feedEntryService;
private final FeedSubscriptionDAO feedSubscriptionDAO;
private final WebSocketSessions webSocketSessions;
private final Striped<Lock> locks;
@@ -52,12 +50,11 @@ public class FeedRefreshUpdater {
private final Meter entryInserted;
public FeedRefreshUpdater(UnitOfWork unitOfWork, FeedService feedService, FeedEntryService feedEntryService, MetricRegistry metrics,
FeedSubscriptionDAO feedSubscriptionDAO, WebSocketSessions webSocketSessions) {
FeedSubscriptionDAO feedSubscriptionDAO) {
this.unitOfWork = unitOfWork;
this.feedService = feedService;
this.feedEntryService = feedEntryService;
this.feedSubscriptionDAO = feedSubscriptionDAO;
this.webSocketSessions = webSocketSessions;
locks = Striped.lazyWeakLock(100000);
@@ -67,7 +64,7 @@ public class FeedRefreshUpdater {
private AddEntryResult addEntry(final Feed feed, final Entry entry, final List<FeedSubscription> subscriptions) {
boolean processed = false;
boolean inserted = false;
FeedEntry insertedEntry = null;
Set<FeedSubscription> subscriptionsForWhichEntryIsUnread = new HashSet<>();
// lock on feed, make sure we are not updating the same feed twice at
@@ -90,23 +87,21 @@ public class FeedRefreshUpdater {
locked2 = lock2.tryLock(1, TimeUnit.MINUTES);
if (locked1 && locked2) {
processed = true;
inserted = unitOfWork.call(() -> {
boolean newEntry = false;
FeedEntry feedEntry = feedEntryService.find(feed, entry);
if (feedEntry == null) {
feedEntry = feedEntryService.create(feed, entry);
newEntry = true;
insertedEntry = unitOfWork.call(() -> {
if (feedEntryService.find(feed, entry) != null) {
// entry already exists, nothing to do
return null;
}
if (newEntry) {
entryInserted.mark();
for (FeedSubscription sub : subscriptions) {
boolean unread = feedEntryService.applyFilter(sub, feedEntry);
if (unread) {
subscriptionsForWhichEntryIsUnread.add(sub);
}
FeedEntry feedEntry = feedEntryService.create(feed, entry);
entryInserted.mark();
for (FeedSubscription sub : subscriptions) {
boolean unread = feedEntryService.applyFilter(sub, feedEntry);
if (unread) {
subscriptionsForWhichEntryIsUnread.add(sub);
}
}
return newEntry;
return feedEntry;
});
} else {
log.error("lock timeout for {} - {}", feed.getUrl(), key1);
@@ -122,13 +117,13 @@ public class FeedRefreshUpdater {
lock2.unlock();
}
}
return new AddEntryResult(processed, inserted, subscriptionsForWhichEntryIsUnread);
return new AddEntryResult(processed, insertedEntry, subscriptionsForWhichEntryIsUnread);
}
public boolean update(Feed feed, List<Entry> entries) {
public FeedRefreshUpdaterResult update(Feed feed, List<Entry> entries) {
boolean processed = true;
long inserted = 0;
Map<FeedSubscription, Long> unreadCountBySubscription = new HashMap<>();
Map<FeedSubscription, List<FeedEntry>> insertedUnreadEntriesBySubscription = new HashMap<>();
if (!entries.isEmpty()) {
List<FeedSubscription> subscriptions = null;
@@ -138,8 +133,12 @@ public class FeedRefreshUpdater {
}
AddEntryResult addEntryResult = addEntry(feed, entry, subscriptions);
processed &= addEntryResult.processed;
inserted += addEntryResult.inserted ? 1 : 0;
addEntryResult.subscriptionsForWhichEntryIsUnread.forEach(sub -> unreadCountBySubscription.merge(sub, 1L, Long::sum));
inserted += addEntryResult.insertedEntry != null ? 1 : 0;
addEntryResult.subscriptionsForWhichEntryIsUnread.forEach(sub -> {
if (addEntryResult.insertedEntry != null) {
insertedUnreadEntriesBySubscription.computeIfAbsent(sub, k -> new ArrayList<>()).add(addEntryResult.insertedEntry);
}
});
}
if (inserted == 0) {
@@ -160,17 +159,13 @@ public class FeedRefreshUpdater {
unitOfWork.run(() -> feedService.update(feed));
notifyOverWebsocket(unreadCountBySubscription);
return processed;
return new FeedRefreshUpdaterResult(insertedUnreadEntriesBySubscription);
}
private void notifyOverWebsocket(Map<FeedSubscription, Long> unreadCountBySubscription) {
unreadCountBySubscription.forEach((sub, unreadCount) -> webSocketSessions.sendMessage(sub.getUser(),
WebSocketMessageBuilder.newFeedEntries(sub, unreadCount)));
private record AddEntryResult(boolean processed, FeedEntry insertedEntry, Set<FeedSubscription> subscriptionsForWhichEntryIsUnread) {
}
private record AddEntryResult(boolean processed, boolean inserted, Set<FeedSubscription> subscriptionsForWhichEntryIsUnread) {
public record FeedRefreshUpdaterResult(Map<FeedSubscription, List<FeedEntry>> insertedUnreadEntriesBySubscription) {
}
}

View File

@@ -0,0 +1,50 @@
package com.commafeed.backend.feed;
import java.util.List;
import jakarta.inject.Singleton;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.dao.UserSettingsDAO;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.UserSettings;
import com.commafeed.backend.service.PushNotificationService;
import com.commafeed.frontend.ws.WebSocketMessageBuilder;
import com.commafeed.frontend.ws.WebSocketSessions;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Singleton
@RequiredArgsConstructor
public class FeedUpdateNotifier {
private final CommaFeedConfiguration config;
private final UnitOfWork unitOfWork;
private final UserSettingsDAO userSettingsDAO;
private final WebSocketSessions webSocketSessions;
private final PushNotificationService pushNotificationService;
public void notifyOverWebsocket(FeedSubscription sub, List<FeedEntry> entries) {
if (!entries.isEmpty()) {
webSocketSessions.sendMessage(sub.getUser(), WebSocketMessageBuilder.newFeedEntries(sub, entries.size()));
}
}
public void sendPushNotifications(FeedSubscription sub, List<FeedEntry> entries) {
if (!config.pushNotifications().enabled() || !sub.isPushNotificationsEnabled() || entries.isEmpty()) {
return;
}
UserSettings settings = unitOfWork.call(() -> userSettingsDAO.findByUser(sub.getUser()));
if (settings != null && settings.getPushNotifications() != null && settings.getPushNotifications().getType() != null) {
for (FeedEntry entry : entries) {
pushNotificationService.notify(settings.getPushNotifications(), sub, entry);
}
}
}
}

View File

@@ -98,7 +98,7 @@ public class Feed extends AbstractModel {
private String etagHeader;
/**
* average time between entries in the feed
* average time between entries in the feed in milliseconds
*/
private Long averageEntryInterval;

View File

@@ -43,4 +43,13 @@ public class FeedSubscription extends AbstractModel {
@Column(name = "filtering_expression", length = 4096)
private String filter;
@Column(name = "filtering_expression_legacy", length = 4096)
private String filterLegacy;
@Column(name = "push_notifications_enabled")
private boolean pushNotificationsEnabled;
@Column(name = "auto_mark_as_read_after_days")
private Integer autoMarkAsReadAfterDays;
}

View File

@@ -3,6 +3,8 @@ package com.commafeed.backend.model;
import java.sql.Types;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
@@ -77,6 +79,17 @@ public class UserSettings extends AbstractModel {
ON_MOBILE
}
public enum PushNotificationType {
@JsonProperty("ntfy")
NTFY,
@JsonProperty("gotify")
GOTIFY,
@JsonProperty("pushover")
PUSHOVER
}
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false, unique = true)
private User user;
@@ -132,6 +145,9 @@ public class UserSettings extends AbstractModel {
private boolean unreadCountTitle;
private boolean unreadCountFavicon;
private boolean disablePullToRefresh;
private boolean disableMobileSwipe;
private int infrequentThresholdDays;
private boolean email;
private boolean gmail;
@@ -142,4 +158,28 @@ public class UserSettings extends AbstractModel {
private boolean instapaper;
private boolean buffer;
@Embedded
private PushNotificationUserSettings pushNotifications = new PushNotificationUserSettings();
@Embeddable
@Getter
@Setter
public static class PushNotificationUserSettings {
@Enumerated(EnumType.STRING)
@Column(name = "push_notification_type", length = 16)
private PushNotificationType type;
@Column(name = "push_notification_server_url", length = 1024)
private String serverUrl;
@Column(name = "push_notification_user_id", length = 512)
private String userId;
@Column(name = "push_notification_user_secret", length = 512)
private String userSecret;
@Column(name = "push_notification_topic", length = 256)
private String topic;
}
}

View File

@@ -1,7 +1,7 @@
package com.commafeed.backend.service;
import java.time.Year;
import java.util.concurrent.Callable;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -11,92 +11,71 @@ import java.util.concurrent.TimeoutException;
import jakarta.inject.Singleton;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.JexlException;
import org.apache.commons.jexl2.JexlInfo;
import org.apache.commons.jexl2.MapContext;
import org.apache.commons.jexl2.Script;
import org.apache.commons.jexl2.introspection.JexlMethod;
import org.apache.commons.jexl2.introspection.JexlPropertyGet;
import org.apache.commons.jexl2.introspection.Uberspect;
import org.apache.commons.jexl2.introspection.UberspectImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.LogFactory;
import org.jsoup.Jsoup;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.model.FeedEntry;
import dev.cel.common.CelAbstractSyntaxTree;
import dev.cel.common.CelValidationException;
import dev.cel.common.types.SimpleType;
import dev.cel.compiler.CelCompiler;
import dev.cel.compiler.CelCompilerFactory;
import dev.cel.runtime.CelEvaluationException;
import dev.cel.runtime.CelRuntime;
import dev.cel.runtime.CelRuntimeFactory;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Singleton
public class FeedEntryFilteringService {
private static final JexlEngine ENGINE = initEngine();
private static final CelCompiler CEL_COMPILER = CelCompilerFactory.standardCelCompilerBuilder()
.addVar("title", SimpleType.STRING)
.addVar("titleLower", SimpleType.STRING)
.addVar("author", SimpleType.STRING)
.addVar("authorLower", SimpleType.STRING)
.addVar("content", SimpleType.STRING)
.addVar("contentLower", SimpleType.STRING)
.addVar("url", SimpleType.STRING)
.addVar("urlLower", SimpleType.STRING)
.addVar("categories", SimpleType.STRING)
.addVar("categoriesLower", SimpleType.STRING)
.build();
private static final CelRuntime CEL_RUNTIME = CelRuntimeFactory.standardCelRuntimeBuilder().build();
private final ExecutorService executor = Executors.newCachedThreadPool();
private final CommaFeedConfiguration config;
private static JexlEngine initEngine() {
// classloader that prevents object creation
ClassLoader cl = new ClassLoader() {
@Override
protected Class<?> loadClass(String name, boolean resolve) {
return null;
}
};
// uberspect that prevents access to .class and .getClass()
Uberspect uberspect = new UberspectImpl(LogFactory.getLog(JexlEngine.class)) {
@Override
public JexlPropertyGet getPropertyGet(Object obj, Object identifier, JexlInfo info) {
if ("class".equals(identifier)) {
return null;
}
return super.getPropertyGet(obj, identifier, info);
}
@Override
public JexlMethod getMethod(Object obj, String method, Object[] args, JexlInfo info) {
if ("getClass".equals(method)) {
return null;
}
return super.getMethod(obj, method, args, info);
}
};
JexlEngine engine = new JexlEngine(uberspect, null, null, null);
engine.setStrict(true);
engine.setClassLoader(cl);
return engine;
}
public boolean filterMatchesEntry(String filter, FeedEntry entry) throws FeedEntryFilterException {
if (StringUtils.isBlank(filter)) {
return true;
}
Script script;
try {
script = ENGINE.createScript(filter);
} catch (JexlException e) {
throw new FeedEntryFilterException("Exception while parsing expression " + filter, e);
}
String title = entry.getContent().getTitle() == null ? "" : Jsoup.parse(entry.getContent().getTitle()).text();
String author = entry.getContent().getAuthor() == null ? "" : entry.getContent().getAuthor();
String content = entry.getContent().getContent() == null ? "" : Jsoup.parse(entry.getContent().getContent()).text();
String url = entry.getUrl() == null ? "" : entry.getUrl();
String categories = entry.getContent().getCategories() == null ? "" : entry.getContent().getCategories();
JexlContext context = new MapContext();
context.set("title", entry.getContent().getTitle() == null ? "" : Jsoup.parse(entry.getContent().getTitle()).text().toLowerCase());
context.set("author", entry.getContent().getAuthor() == null ? "" : entry.getContent().getAuthor().toLowerCase());
context.set("content",
entry.getContent().getContent() == null ? "" : Jsoup.parse(entry.getContent().getContent()).text().toLowerCase());
context.set("url", entry.getUrl() == null ? "" : entry.getUrl().toLowerCase());
context.set("categories", entry.getContent().getCategories() == null ? "" : entry.getContent().getCategories().toLowerCase());
Map<String, Object> data = new HashMap<>();
data.put("title", title);
data.put("titleLower", title.toLowerCase());
context.set("year", Year.now().getValue());
data.put("author", author);
data.put("authorLower", author.toLowerCase());
Callable<Object> callable = script.callable(context);
Future<Object> future = executor.submit(callable);
data.put("content", content);
data.put("contentLower", content.toLowerCase());
data.put("url", url);
data.put("urlLower", url.toLowerCase());
data.put("categories", categories);
data.put("categoriesLower", categories.toLowerCase());
Future<Object> future = executor.submit(() -> evaluateCelExpression(filter, data));
Object result;
try {
result = future.get(config.feedRefresh().filteringExpressionEvaluationTimeout().toMillis(), TimeUnit.MILLISECONDS);
@@ -108,11 +87,15 @@ public class FeedEntryFilteringService {
} catch (TimeoutException e) {
throw new FeedEntryFilterException("Took too long evaluating expression " + filter, e);
}
try {
return (boolean) result;
} catch (ClassCastException e) {
throw new FeedEntryFilterException(e.getMessage(), e);
}
return Boolean.TRUE.equals(result);
}
private Object evaluateCelExpression(String expression, Map<String, Object> data)
throws CelValidationException, CelEvaluationException {
CelAbstractSyntaxTree ast = CEL_COMPILER.compile(expression).getAst();
CelRuntime.Program program = CEL_RUNTIME.createProgram(ast);
return program.eval(data);
}
@SuppressWarnings("serial")

View File

@@ -49,14 +49,6 @@ public class FeedSubscriptionService {
});
}
public long subscribe(User user, String url, String title) {
return subscribe(user, url, title, null, 0);
}
public long subscribe(User user, String url, String title, FeedCategory parent) {
return subscribe(user, url, title, parent, 0);
}
public long subscribe(User user, String url, String title, FeedCategory category, int position) {
Integer maxFeedsPerUser = config.database().cleanup().maxFeedsPerUser();
if (maxFeedsPerUser > 0 && feedSubscriptionDAO.count(user) >= maxFeedsPerUser) {

View File

@@ -1,6 +1,5 @@
package com.commafeed.backend.service;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
@@ -18,11 +17,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
// taken from http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html
@SuppressWarnings("serial")
@Slf4j
@RequiredArgsConstructor
@Singleton
public class PasswordEncryptionService implements Serializable {
public class PasswordEncryptionService {
public boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) {
if (StringUtils.isBlank(attemptedPassword)) {

View File

@@ -0,0 +1,180 @@
package com.commafeed.backend.service;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.StringUtils;
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.apache.hc.core5.util.Timeout;
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.HttpClientFactory;
import com.commafeed.backend.Urls;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.UserSettings.PushNotificationUserSettings;
import io.vertx.core.json.JsonObject;
import lombok.extern.slf4j.Slf4j;
@Singleton
@Slf4j
public class PushNotificationService {
private final CloseableHttpClient httpClient;
private final Meter meter;
private final CommaFeedConfiguration config;
public PushNotificationService(HttpClientFactory httpClientFactory, MetricRegistry metrics, CommaFeedConfiguration config) {
this.httpClient = httpClientFactory.newClient(config.pushNotifications().threads());
this.meter = metrics.meter(MetricRegistry.name(getClass(), "notify"));
this.config = config;
}
public void notify(PushNotificationUserSettings settings, FeedSubscription subscription, FeedEntry entry) {
if (!config.pushNotifications().enabled() || settings.getType() == null) {
return;
}
log.debug("sending {} push notification for entry {} in feed {}", settings.getType(), entry.getId(),
subscription.getFeed().getId());
String entryTitle = entry.getContent() != null ? entry.getContent().getTitle() : null;
String entryUrl = entry.getUrl();
String feedTitle = subscription.getTitle();
if (StringUtils.isBlank(entryTitle)) {
entryTitle = "New entry";
}
try {
switch (settings.getType()) {
case NTFY -> sendNtfy(settings, feedTitle, entryTitle, entryUrl);
case GOTIFY -> sendGotify(settings, feedTitle, entryTitle, entryUrl);
case PUSHOVER -> sendPushover(settings, feedTitle, entryTitle, entryUrl);
default -> throw new IllegalStateException("unsupported notification type: " + settings.getType());
}
} catch (IOException e) {
throw new PushNotificationException("Failed to send external notification", e);
}
meter.mark();
}
private void sendNtfy(PushNotificationUserSettings settings, String feedTitle, String entryTitle, String entryUrl) throws IOException {
String serverUrl = Urls.removeTrailingSlash(settings.getServerUrl());
String topic = settings.getTopic();
if (StringUtils.isBlank(serverUrl) || StringUtils.isBlank(topic)) {
log.warn("ntfy notification skipped: missing server URL or topic");
return;
}
HttpPost request = new HttpPost(serverUrl + "/" + topic);
request.setConfig(RequestConfig.custom().setResponseTimeout(Timeout.of(config.httpClient().responseTimeout())).build());
request.addHeader("Title", feedTitle);
request.setEntity(new StringEntity(entryTitle, StandardCharsets.UTF_8));
if (StringUtils.isNotBlank(entryUrl)) {
request.addHeader("Click", entryUrl);
}
if (StringUtils.isNotBlank(settings.getUserSecret())) {
request.addHeader("Authorization", "Bearer " + settings.getUserSecret());
}
httpClient.execute(request, response -> {
if (response.getCode() >= 400) {
throw new PushNotificationException("ntfy notification failed with status " + response.getCode());
}
return null;
});
}
private void sendGotify(PushNotificationUserSettings settings, String feedTitle, String entryTitle, String entryUrl)
throws IOException {
String serverUrl = Urls.removeTrailingSlash(settings.getServerUrl());
String token = settings.getUserSecret();
if (StringUtils.isBlank(serverUrl) || StringUtils.isBlank(token)) {
log.warn("gotify notification skipped: missing server URL or token");
return;
}
JsonObject json = new JsonObject();
json.put("title", feedTitle);
json.put("message", entryTitle);
json.put("priority", 5);
if (StringUtils.isNotBlank(entryUrl)) {
json.put("extras",
new JsonObject().put("client::notification", new JsonObject().put("click", new JsonObject().put("url", entryUrl))));
}
HttpPost request = new HttpPost(serverUrl + "/message");
request.setConfig(RequestConfig.custom().setResponseTimeout(Timeout.of(config.httpClient().responseTimeout())).build());
request.addHeader("X-Gotify-Key", token);
request.setEntity(new StringEntity(json.toString(), ContentType.APPLICATION_JSON));
httpClient.execute(request, response -> {
if (response.getCode() >= 400) {
throw new PushNotificationException("gotify notification failed with status " + response.getCode());
}
return null;
});
}
private void sendPushover(PushNotificationUserSettings settings, String feedTitle, String entryTitle, String entryUrl)
throws IOException {
String token = settings.getUserSecret();
String userKey = settings.getUserId();
if (StringUtils.isBlank(token) || StringUtils.isBlank(userKey)) {
log.warn("pushover notification skipped: missing token or user key");
return;
}
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("token", token));
params.add(new BasicNameValuePair("user", userKey));
params.add(new BasicNameValuePair("title", feedTitle));
params.add(new BasicNameValuePair("message", entryTitle));
if (StringUtils.isNotBlank(entryUrl)) {
params.add(new BasicNameValuePair("url", entryUrl));
}
HttpPost request = new HttpPost("https://api.pushover.net/1/messages.json");
request.setConfig(RequestConfig.custom().setResponseTimeout(Timeout.of(config.httpClient().responseTimeout())).build());
request.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8));
httpClient.execute(request, response -> {
if (response.getCode() >= 400) {
throw new PushNotificationException("pushover notification failed with status " + response.getCode());
}
return null;
});
}
public static class PushNotificationException extends RuntimeException {
private static final long serialVersionUID = -3392881821584833819L;
public PushNotificationException(String message) {
super(message);
}
public PushNotificationException(String message, Throwable cause) {
super(message, cause);
}
}
}

View File

@@ -27,13 +27,13 @@ import lombok.extern.slf4j.Slf4j;
@Singleton
public class DatabaseCleaningService {
private final int batchSize;
private final UnitOfWork unitOfWork;
private final FeedDAO feedDAO;
private final FeedEntryDAO feedEntryDAO;
private final FeedEntryContentDAO feedEntryContentDAO;
private final FeedEntryStatusDAO feedEntryStatusDAO;
private final int batchSize;
private final boolean keepStarredEntries;
private final Meter entriesDeletedMeter;
public DatabaseCleaningService(CommaFeedConfiguration config, UnitOfWork unitOfWork, FeedDAO feedDAO, FeedEntryDAO feedEntryDAO,
@@ -44,6 +44,7 @@ public class DatabaseCleaningService {
this.feedEntryContentDAO = feedEntryContentDAO;
this.feedEntryStatusDAO = feedEntryStatusDAO;
this.batchSize = config.database().cleanup().batchSize();
this.keepStarredEntries = config.database().cleanup().keepStarredEntries();
this.entriesDeletedMeter = metrics.meter(MetricRegistry.name(getClass(), "entriesDeleted"));
}
@@ -53,10 +54,20 @@ public class DatabaseCleaningService {
int deleted;
long entriesTotal = 0;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of feeds without subscriptions");
return;
}
List<Feed> feeds = unitOfWork.call(() -> feedDAO.findWithoutSubscriptions(1));
for (Feed feed : feeds) {
long entriesDeleted;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of feeds without subscriptions");
return;
}
entriesDeleted = unitOfWork.call(() -> feedEntryDAO.delete(feed.getId(), batchSize));
entriesDeletedMeter.mark(entriesDeleted);
entriesTotal += entriesDeleted;
@@ -75,6 +86,11 @@ public class DatabaseCleaningService {
long total = 0;
long deleted;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of contents without entries");
return;
}
deleted = unitOfWork.call(() -> feedEntryContentDAO.deleteWithoutEntries(batchSize));
total += deleted;
log.debug("removed {} contents without entries", total);
@@ -86,21 +102,33 @@ public class DatabaseCleaningService {
log.info("cleaning entries exceeding feed capacity");
long total = 0;
while (true) {
List<FeedCapacity> feeds = unitOfWork.call(() -> feedEntryDAO.findFeedsExceedingCapacity(maxFeedCapacity, batchSize));
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of entries exceeding feed capacity");
return;
}
List<FeedCapacity> feeds = unitOfWork
.call(() -> feedEntryDAO.findFeedsExceedingCapacity(maxFeedCapacity, batchSize, keepStarredEntries));
if (feeds.isEmpty()) {
break;
}
for (final FeedCapacity feed : feeds) {
long remaining = feed.capacity() - maxFeedCapacity;
int deleted;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of entries exceeding feed capacity");
return;
}
final long rem = remaining;
int deleted = unitOfWork.call(() -> feedEntryDAO.deleteOldEntries(feed.id(), Math.min(batchSize, rem)));
deleted = unitOfWork.call(() -> feedEntryDAO.deleteOldEntries(feed.id(), Math.min(batchSize, rem), keepStarredEntries));
entriesDeletedMeter.mark(deleted);
total += deleted;
remaining -= deleted;
log.debug("removed {} entries for feeds exceeding capacity", total);
} while (remaining > 0);
} while (deleted > 0 && remaining > 0);
}
}
log.info("cleanup done: {} entries for feeds exceeding capacity deleted", total);
@@ -111,7 +139,12 @@ public class DatabaseCleaningService {
long total = 0;
long deleted;
do {
deleted = unitOfWork.call(() -> feedEntryDAO.deleteEntriesOlderThan(olderThan, batchSize));
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of old entries");
return;
}
deleted = unitOfWork.call(() -> feedEntryDAO.deleteEntriesOlderThan(olderThan, batchSize, keepStarredEntries));
entriesDeletedMeter.mark(deleted);
total += deleted;
log.debug("removed {} old entries", total);
@@ -124,10 +157,32 @@ public class DatabaseCleaningService {
long total = 0;
long deleted;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping cleanup of old read statuses");
return;
}
deleted = unitOfWork.call(() -> feedEntryStatusDAO.deleteOldStatuses(olderThan, batchSize));
total += deleted;
log.debug("removed {} old read statuses", total);
} while (deleted != 0);
log.info("cleanup done: {} old read statuses deleted", total);
}
public void autoMarkAsRead() {
log.info("marking entries as read based on autoMarkAsReadAfterDays");
long total = 0;
long marked;
do {
if (Thread.currentThread().isInterrupted()) {
log.info("interrupted, stopping marking entries as read");
return;
}
marked = unitOfWork.call(() -> feedEntryStatusDAO.autoMarkAsRead(batchSize));
total += marked;
log.debug("marked {} entries as read", total);
} while (marked != 0);
log.info("cleanup done: marked {} entries as read", total);
}
}

View File

@@ -4,10 +4,8 @@ import jakarta.inject.Singleton;
import org.kohsuke.MetaInfServices;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.dao.UserDAO;
import com.commafeed.backend.service.UserService;
import liquibase.database.Database;
import liquibase.database.core.PostgresDatabase;
@@ -22,8 +20,6 @@ public class DatabaseStartupService {
private final UnitOfWork unitOfWork;
private final UserDAO userDAO;
private final UserService userService;
private final CommaFeedConfiguration config;
public boolean isInitialSetupRequired() {
return unitOfWork.call(userDAO::count) == 0;

View File

@@ -0,0 +1,37 @@
package com.commafeed.backend.task;
import java.util.concurrent.TimeUnit;
import jakarta.inject.Singleton;
import com.commafeed.backend.service.db.DatabaseCleaningService;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Singleton
public class AutoMarkAsReadTask extends ScheduledTask {
private final DatabaseCleaningService cleaner;
@Override
public void run() {
cleaner.autoMarkAsRead();
}
@Override
public long getInitialDelay() {
return 30;
}
@Override
public long getPeriod() {
return 60;
}
@Override
public TimeUnit getTimeUnit() {
return TimeUnit.MINUTES;
}
}

View File

@@ -23,8 +23,8 @@ public abstract class ScheduledTask {
log.error(e.getMessage(), e);
}
};
log.info("registering task {} for execution every {} {}, starting in {} {}", getClass().getSimpleName(), getPeriod(), getTimeUnit(),
getInitialDelay(), getTimeUnit());
log.debug("registering task {} for execution every {} {}, starting in {} {}", getClass().getSimpleName(), getPeriod(),
getTimeUnit(), getInitialDelay(), getTimeUnit());
executor.scheduleWithFixedDelay(runnable, getInitialDelay(), getPeriod(), getTimeUnit());
}
}

View File

@@ -6,24 +6,32 @@ import java.util.concurrent.ScheduledExecutorService;
import jakarta.inject.Singleton;
import io.quarkus.arc.All;
import com.commafeed.CommaFeedConfiguration;
import com.google.common.util.concurrent.MoreExecutors;
import io.quarkus.arc.All;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Singleton
public class TaskScheduler {
private final List<ScheduledTask> tasks;
private final ScheduledExecutorService executor;
private final CommaFeedConfiguration config;
public TaskScheduler(@All List<ScheduledTask> tasks) {
private ScheduledExecutorService executor;
public TaskScheduler(@All List<ScheduledTask> tasks, CommaFeedConfiguration config) {
this.tasks = tasks;
this.executor = Executors.newScheduledThreadPool(tasks.size());
this.config = config;
}
public void start() {
tasks.forEach(task -> task.register(executor));
this.executor = Executors.newScheduledThreadPool(tasks.size());
this.tasks.forEach(task -> task.register(executor));
}
public void stop() {
executor.shutdownNow();
MoreExecutors.shutdownAndAwaitTermination(executor, config.shutdownTimeout());
}
}

View File

@@ -49,4 +49,10 @@ public class ServerInfo implements Serializable {
@Schema(required = true)
private boolean initialSetupRequired;
@Schema(required = true)
private int minimumPasswordLength;
@Schema(required = true)
private boolean pushNotificationsEnabled;
}

View File

@@ -5,6 +5,7 @@ import java.io.Serializable;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import com.commafeed.backend.model.UserSettings.IconDisplayMode;
import com.commafeed.backend.model.UserSettings.PushNotificationType;
import com.commafeed.backend.model.UserSettings.ReadingMode;
import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.backend.model.UserSettings.ScrollMode;
@@ -18,7 +19,7 @@ import lombok.Data;
@RegisterForReflection
public class Settings implements Serializable {
@Schema(description = "user's preferred language, english if none", required = true)
@Schema(description = "user's preferred language, english if none")
private String language;
@Schema(description = "user reads all entries or unread entries only", required = true)
@@ -75,12 +76,40 @@ public class Settings implements Serializable {
@Schema(description = "disable pull to refresh", required = true)
private boolean disablePullToRefresh;
@Schema(description = "disable swipe gesture to open mobile menu", required = true)
private boolean disableMobileSwipe;
@Schema(description = "threshold in days for the infrequent view", required = true)
private int infrequentThresholdDays;
@Schema(description = "primary theme color to use in the UI")
private String primaryColor;
@Schema(description = "sharing settings", required = true)
private SharingSettings sharingSettings = new SharingSettings();
@Schema(description = "push notification settings", required = true)
private PushNotificationSettings pushNotificationSettings = new PushNotificationSettings();
@Schema(description = "User notification settings")
@Data
public static class PushNotificationSettings implements Serializable {
@Schema(description = "notification provider type")
private PushNotificationType type;
@Schema(description = "server URL for ntfy or gotify")
private String serverUrl;
@Schema(description = "user Id")
private String userId;
@Schema(description = "user secret for authentication with the service")
private String userSecret;
@Schema(description = "topic")
private String topic;
}
@Schema(description = "User sharing settings")
@Data
public static class SharingSettings implements Serializable {

View File

@@ -59,9 +59,21 @@ public class Subscription implements Serializable {
@Schema(description = "date of the newest item", type = SchemaType.INTEGER)
private Instant newestItemTime;
@Schema(description = "JEXL string evaluated on new entries to mark them as read if they do not match")
@Schema(description = "CEL string evaluated on new entries to mark them as read if they do not match")
private String filter;
@Schema(description = "JEXL legacy filter")
private String filterLegacy;
@Schema(description = "whether to send push notifications for new entries of this feed", required = true)
private boolean pushNotificationsEnabled;
@Schema(description = "automatically mark entries as read after this many days (null to disable)")
private Integer autoMarkAsReadAfterDays;
@Schema(description = "average time in milliseconds between entries in this feed, null if unknown")
private Long averageEntryIntervalMs;
public static Subscription build(FeedSubscription subscription, UnreadCount unreadCount) {
FeedCategory category = subscription.getCategory();
Feed feed = subscription.getFeed();
@@ -81,6 +93,10 @@ public class Subscription implements Serializable {
sub.setNewestItemTime(unreadCount.getNewestItemTime());
sub.setCategoryId(category == null ? null : String.valueOf(category.getId()));
sub.setFilter(subscription.getFilter());
sub.setFilterLegacy(subscription.getFilterLegacy());
sub.setPushNotificationsEnabled(subscription.isPushNotificationsEnabled());
sub.setAutoMarkAsReadAfterDays(subscription.getAutoMarkAsReadAfterDays());
sub.setAverageEntryIntervalMs(feed.getAverageEntryInterval());
return sub;
}

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