Compare commits

...

375 Commits
5.3.6 ... 5.7.0

Author SHA1 Message Date
Athou
e1f6937802 release 5.7.0 2025-04-04 19:39:29 +02:00
Athou
0c0834b30f fix bookmarklet, React 19 no longer allows 'javascript:' urls 2025-04-04 14:25:21 +02:00
Jérémie Panzer
5ad4b97205 Merge pull request #1747 from flisk/patch-1
don't throw NotModifiedException on etag/lm changes
2025-04-04 11:18:57 +02:00
flisk
c4ec249bc4 don't throw NotModifiedException on etag/lm changes
A well-behaved server should return 304 if our If-Modified-Since and If-None-Match indicate that we don't have the latest version of a resource cached. Having these extra conditions where we consider our local version fresh is not necessary, and may in fact lead to resource updates being missed when only one header changes.

We should instead trust the server to know whether it needs to send us a new resource or not based on the cache headers we provide.
2025-04-04 11:00:47 +02:00
renovate[bot]
cf8d3965d5 chore(deps): update dependency vite to ^6.2.5 2025-04-03 14:51:19 +00:00
renovate[bot]
3903fd9374 chore(deps): update peter-evans/dockerhub-description digest to 432a30c 2025-04-03 09:42:24 +00:00
Jérémie Panzer
77d59dabe8 Merge pull request #1742 from Athou/renovate/testing-library-monorepo
chore(deps): update dependency @testing-library/react to ^16.3.0
2025-04-03 00:37:51 +02:00
Jérémie Panzer
56ca737297 Merge pull request #1743 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.23.0
2025-04-03 00:37:34 +02:00
renovate[bot]
9edb539be3 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.23.0 2025-04-02 19:13:17 +00:00
renovate[bot]
31a773d200 chore(deps): update dependency @testing-library/react to ^16.3.0 2025-04-02 19:13:13 +00:00
renovate[bot]
61355eabf7 chore(deps): update dependency io.quarkus.platform:quarkus-maven-plugin to v3.21.1 2025-04-02 19:12:53 +00:00
Jérémie Panzer
569874e51f Merge pull request #1741 from Athou/renovate/react-monorepo
chore(deps): update react monorepo (minor)
2025-04-02 21:53:31 +09:00
renovate[bot]
00d47901fc chore(deps): update react monorepo 2025-04-02 10:49:12 +00:00
renovate[bot]
d8b4ef55ce chore(deps): lock file maintenance 2025-03-31 22:26:46 +00:00
renovate[bot]
da41a4cab9 fix(deps): update dependency org.projectlombok:lombok to v1.18.38 2025-03-31 19:13:21 +00:00
Jérémie Panzer
8a90ef0471 Merge pull request #1740 from Athou/renovate/vitest-monorepo
chore(deps): update dependency vitest to ^3.1.1
2025-04-01 04:12:48 +09:00
renovate[bot]
b4ab32a578 chore(deps): update dependency vite to ^6.2.4 2025-03-31 16:02:10 +00:00
renovate[bot]
03aa53abc8 chore(deps): update dependency vitest to ^3.1.1 2025-03-31 11:06:04 +00:00
renovate[bot]
2ae5c0cd8e chore(deps): update peter-evans/dockerhub-description digest to 0505d8b 2025-03-31 11:05:32 +00:00
renovate[bot]
cacc632443 chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.3 2025-03-31 07:27:09 +00:00
renovate[bot]
28f865ccfa chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.3 2025-03-31 03:07:34 +00:00
Jérémie Panzer
a4c949e8b3 Merge pull request #1739 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.22.0
2025-03-31 04:49:23 +09:00
renovate[bot]
6098994397 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.22.0 2025-03-30 17:50:39 +00:00
renovate[bot]
5763ca30d6 fix(deps): update dependency react-router-dom to ^7.4.1 2025-03-29 00:17:28 +00:00
Jérémie Panzer
7d039d1001 Merge pull request #1738 from Athou/renovate/react-monorepo
fix(deps): update react monorepo to ^19.1.0 (minor)
2025-03-29 09:16:31 +09:00
renovate[bot]
7fe74af906 fix(deps): update react monorepo to ^19.1.0 2025-03-28 23:25:45 +00:00
renovate[bot]
80b72aa30b fix(deps): update dependency tss-react to ^4.9.16 2025-03-28 10:05:38 +00:00
renovate[bot]
3ba0d241f9 fix(deps): update mantine monorepo to ^7.17.3 2025-03-27 12:04:33 +00:00
renovate[bot]
67428aa0c7 fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.4.3 2025-03-26 23:20:17 +00:00
Jérémie Panzer
b9a0256031 Merge pull request #1737 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.21.0 (minor)
2025-03-27 08:19:41 +09:00
renovate[bot]
f3c2296636 fix(deps): update quarkus.version to v3.21.0 2025-03-26 12:33:20 +00:00
renovate[bot]
b6e8f21975 chore(deps): update ibm-semeru-runtimes:open-21.0.6_7-jre docker digest to fc0d0c8 2025-03-25 01:44:57 +00:00
renovate[bot]
284f80045f chore(deps): update dependency vite to ^6.2.3 2025-03-24 12:07:42 +00:00
renovate[bot]
f589477aa8 chore(deps): lock file maintenance 2025-03-24 02:45:32 +00:00
Jérémie Panzer
29cb296d09 Merge pull request #1733 from Athou/renovate/linguijs-monorepo
fix(deps): update linguijs monorepo to ^5.3.0 (minor)
2025-03-21 21:07:34 +09:00
renovate[bot]
86caa1450a fix(deps): update linguijs monorepo to ^5.3.0 2025-03-21 11:26:04 +00:00
Jérémie Panzer
9dd4b9e67f Merge pull request #1732 from Athou/renovate/patch-react-monorepo
chore(deps): update dependency @types/react to ^19.0.12
2025-03-21 07:09:17 +09:00
renovate[bot]
e2e654f05b chore(deps): update dependency @types/react to ^19.0.12 2025-03-20 16:27:41 +00:00
renovate[bot]
72dbc62b41 fix(deps): update quarkus.version to v3.19.4 2025-03-20 10:58:22 +00:00
renovate[bot]
0a21014668 fix(deps): update dependency axios to ^1.8.4 2025-03-20 06:35:53 +00:00
renovate[bot]
b6d9d2a26c chore(deps): update actions/upload-artifact digest to ea165f8 2025-03-20 01:47:55 +00:00
renovate[bot]
25c3a7748c chore(deps): update actions/download-artifact digest to 95815c3 2025-03-19 20:49:20 +00:00
Jérémie Panzer
b2bcfdd6eb Merge pull request #1731 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.4.0
2025-03-19 21:48:46 +01:00
renovate[bot]
2a978db406 fix(deps): update dependency react-router-dom to ^7.4.0 2025-03-19 17:04:09 +00:00
renovate[bot]
9e40d0d066 chore(deps): update actions/download-artifact digest to cc20338 2025-03-19 02:40:14 +00:00
renovate[bot]
c912650d59 chore(deps): update actions/download-artifact digest to b14cf4c 2025-03-18 19:01:24 +00:00
renovate[bot]
464ebcb471 chore(deps): lock file maintenance 2025-03-18 12:30:06 +00:00
renovate[bot]
463e0e59d7 chore(deps): update debian:12.10 docker digest to 18023f1 2025-03-18 07:34:16 +00:00
Jérémie Panzer
b4e5d8ef20 Merge pull request #1729 from Athou/renovate/patch-react-monorepo
chore(deps): update dependency @types/react to ^19.0.11
2025-03-18 08:33:48 +01:00
renovate[bot]
126905aeb3 chore(deps): update dependency @types/react to ^19.0.11 2025-03-18 04:22:16 +00:00
Jérémie Panzer
1af10d3364 Merge pull request #1727 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2025-03-18 05:20:59 +01:00
Jérémie Panzer
6ad854c019 Merge pull request #1728 from Athou/renovate/com.microsoft.playwright-playwright-1.x
chore(deps): update dependency com.microsoft.playwright:playwright to v1.51.0
2025-03-18 05:20:37 +01:00
Jérémie Panzer
b30117aa4d Merge pull request #1730 from Athou/renovate/debian-12.x
chore(deps): update debian docker tag to v12.10
2025-03-18 05:19:56 +01:00
renovate[bot]
5a66482d1e chore(deps): lock file maintenance 2025-03-18 02:30:37 +00:00
renovate[bot]
2628ec49bb chore(deps): update debian docker tag to v12.10 2025-03-18 02:29:44 +00:00
renovate[bot]
f3d15cf173 chore(deps): update dependency com.microsoft.playwright:playwright to v1.51.0 2025-03-17 23:39:46 +00:00
renovate[bot]
bbcf55ce57 chore(deps): update dependency vitest to ^3.0.9 2025-03-17 23:39:43 +00:00
renovate[bot]
72fc3716e7 chore(deps): update dependency vite-plugin-checker to ^0.9.1 2025-03-17 17:30:58 +00:00
Jérémie Panzer
81a6cfaa88 Merge pull request #1725 from Athou/renovate/com.ibm.icu-icu4j-77.x
fix(deps): update dependency com.ibm.icu:icu4j to v77
2025-03-15 01:14:58 +01:00
renovate[bot]
aed5165ef3 chore(deps): update dependency vite to ^6.2.2 (#1726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-14 23:14:20 +00:00
renovate[bot]
eaf2933726 fix(deps): update mantine monorepo to ^7.17.2 2025-03-14 15:16:11 +00:00
renovate[bot]
39da4d9d36 chore(deps): update docker/login-action digest to 74a5d14 2025-03-14 11:05:08 +00:00
renovate[bot]
e5ebd7ff39 fix(deps): update dependency com.ibm.icu:icu4j to v77 2025-03-14 04:29:10 +00:00
renovate[bot]
b6ae3e4e1e fix(deps): update dependency io.quarkus.platform:quarkus-bom to v3.19.3 2025-03-12 16:05:37 +00:00
renovate[bot]
32d1488352 fix(deps): update dependency axios to ^1.8.3 2025-03-12 10:40:24 +00:00
Athou
b08d0a388f no need to re-render the custom js handler on route change 2025-03-12 10:36:17 +01:00
Athou
7fe004a696 load js when the app is done loading (#1724) 2025-03-12 07:33:44 +01:00
Athou
f620d033b0 DisablePullToRefresh doesn't need to be in HashRouter 2025-03-12 07:21:31 +01:00
Athou
ba071ba71f add the referrer meta (#1724) 2025-03-12 06:37:12 +01:00
Athou
6f3197302d make biome format root files too (package.json, vite config, ...) 2025-03-11 15:50:04 +01:00
Athou
131a8ebf68 remove warning about vite not finding custom code at build time 2025-03-11 15:48:52 +01:00
Athou
8b24c125c2 also skip js tests when skipping tests 2025-03-11 15:36:32 +01:00
Jérémie Panzer
52293376ec Merge pull request #1723 from Athou/renovate/patch-swagger.version
fix(deps): update swagger.version to v2.2.29 (patch)
2025-03-11 07:23:52 +01:00
renovate[bot]
f8ac59af6a fix(deps): update swagger.version to v2.2.29 2025-03-10 23:04:46 +00:00
Athou
5c791e2305 revert corrupted png files 2025-03-10 11:03:43 +01:00
Athou
6641bc0631 don't expose exception message 2025-03-10 10:54:40 +01:00
Jérémie Panzer
da690aa750 Merge pull request #1722 from Athou/line-endings
normalize line endings
2025-03-10 10:50:11 +01:00
Athou
fb7f041454 normalize line endings 2025-03-10 08:48:26 +01:00
renovate[bot]
ec4554c76e chore(deps): lock file maintenance 2025-03-10 03:01:10 +00:00
Athou
068e85fe6e add tests for selectNextUnreadTreeItem 2025-03-08 08:32:46 +01:00
renovate[bot]
ba926c674e fix(deps): update dependency @reduxjs/toolkit to ^2.6.1 2025-03-07 22:23:31 +00:00
renovate[bot]
836f8f14c0 fix(deps): update dependency axios to ^1.8.2 2025-03-07 10:56:42 +00:00
renovate[bot]
eeecac96e1 chore(deps): update dependency vite to ^6.2.1 2025-03-07 05:02:32 +00:00
Jérémie Panzer
ecc62f222a Merge pull request #1721 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.3.0
2025-03-07 06:01:39 +01:00
renovate[bot]
9022f93811 fix(deps): update dependency react-router-dom to ^7.3.0 2025-03-06 22:53:13 +00:00
renovate[bot]
e7225d35b2 chore(deps): update dependency vitest to ^3.0.8 2025-03-06 20:01:28 +00:00
Athou
454fc03038 automerge digest changes 2025-03-06 21:00:28 +01:00
Jérémie Panzer
9c0674fd83 Merge pull request #1720 from Athou/renovate/migrate-config
chore(config): migrate renovate config
2025-03-06 20:57:05 +01:00
Jérémie Panzer
7a20482ddf Merge pull request #1719 from Athou/renovate/pin-dependencies
chore(deps): pin dependencies
2025-03-06 20:55:28 +01:00
renovate[bot]
32ad47ba16 chore(config): migrate config renovate.json 2025-03-06 16:52:01 +00:00
renovate[bot]
fc562cce0f chore(deps): pin dependencies 2025-03-06 16:51:34 +00:00
Athou
b029b251db use renovate best practices 2025-03-06 17:50:54 +01:00
Jérémie Panzer
e3e28e727f Merge pull request #1718 from Athou/renovate/io.github.hakky54-sslcontext-kickstart-for-apache5-9.x
fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9.1.0
2025-03-06 07:08:24 +01:00
Jérémie Panzer
50cb728db7 Merge pull request #1717 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.2.0
2025-03-06 07:08:12 +01:00
renovate[bot]
c654ba4d1b fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9.1.0 2025-03-05 21:32:08 +00:00
renovate[bot]
846e29b15e chore(deps): update dependency npm to v11.2.0 2025-03-05 21:32:05 +00:00
renovate[bot]
f2b4062d73 fix(deps): update quarkus.version to v3.19.2 2025-03-05 19:37:47 +00:00
Athou
9051e6a6db add test to make sure documentation is available 2025-03-05 17:22:53 +01:00
Athou
b733129043 remove the need for selectPreviousUnreadTreeItem by reversing the array if we're going backwards 2025-03-05 07:33:36 +01:00
Athou
d46b571444 select next/previous unread feed/category when marking all as read (#1558) 2025-03-04 21:18:45 +01:00
renovate[bot]
7d744b4ce0 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.4 2025-03-04 13:07:31 +00:00
Jérémie Panzer
801dda912c Merge pull request #1714 from Athou/renovate/org.jsoup-jsoup-1.x
fix(deps): update dependency org.jsoup:jsoup to v1.19.1
2025-03-04 14:06:58 +01:00
renovate[bot]
a20005409a fix(deps): update dependency org.jsoup:jsoup to v1.19.1 2025-03-04 06:23:04 +00:00
renovate[bot]
6f1411d075 fix(deps): update mantine monorepo to ^7.17.1 (#1712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 06:22:47 +00:00
Athou
1aa263a6c0 simplify UnitOfWork code 2025-03-03 22:29:21 +01:00
Jérémie Panzer
9d511ac7dd Merge pull request #1710 from Athou/renovate/graalvm-setup-graalvm-digest
chore(deps): update graalvm/setup-graalvm digest to 01ed653
2025-03-03 21:24:20 +01:00
Athou
122e98cc76 revert to mantine 7.17.0 (#1711) 2025-03-03 21:21:44 +01:00
Athou
e445e5ea39 clarify in the README that if -Pnative is used, database should be specified (#1708) 2025-03-03 16:23:29 +01:00
renovate[bot]
5b9212015b chore(deps): update graalvm/setup-graalvm digest to 01ed653 2025-03-03 15:18:50 +00:00
Jérémie Panzer
293292f341 Merge pull request #1709 from Athou/renovate/graalvm-setup-graalvm-digest
chore(deps): update graalvm/setup-graalvm digest to 271a696
2025-03-03 16:18:21 +01:00
renovate[bot]
57d8a4dbb1 chore(deps): update graalvm/setup-graalvm digest to 271a696 2025-03-03 11:35:48 +00:00
renovate[bot]
e104f531f9 chore(deps): lock file maintenance 2025-03-03 02:42:48 +00:00
Athou
bf1361926f don't host by default 2025-03-02 19:21:07 +01:00
Athou
cc4f4d9eb4 remove dev:typescript, we don't need it anymore with the vite checker plugin 2025-03-02 19:20:24 +01:00
Athou
706bad26f1 use typesafe mocks 2025-03-02 19:18:51 +01:00
Athou
4ecefe6491 reduce tooltip delay for all tests 2025-03-02 19:18:27 +01:00
Athou
937e7353ce build regexp only once 2025-03-02 15:49:02 +01:00
Athou
1dcf76fc0a remove warning about missing index during tests 2025-03-02 15:49:02 +01:00
renovate[bot]
9d794dcad7 fix(deps): update dependency @fontsource/open-sans to ^5.2.5 2025-03-02 15:49:02 +01:00
Athou
d11b666755 remove vitest-mock-extended as vitest now exposes a vi.mocked() function 2025-03-02 15:49:02 +01:00
Athou
7a444e4861 add tests for ActionButton 2025-03-02 15:49:02 +01:00
Athou
5992795579 fix tooltips not showing up in mobile view 2025-03-02 15:49:02 +01:00
Athou
4441d76a7f Merge remote-tracking branch 'origin/renovate/patch-fontsource-monorepo' 2025-03-02 11:39:21 +01:00
Athou
c1305b56e3 insert jakarta imports where javax import were positioned 2025-03-02 11:37:06 +01:00
Athou
cc0440c029 enable quarkus compression (compression in dropwizard was enabled by default) 2025-03-02 09:45:10 +01:00
renovate[bot]
f65591c170 fix(deps): update dependency @fontsource/open-sans to ^5.2.1 2025-03-02 06:57:09 +00:00
Jérémie Panzer
9a32dce9d1 Merge pull request #1707 from Athou/renovate/fontsource-monorepo
fix(deps): update dependency @fontsource/open-sans to ^5.2.0
2025-03-01 19:59:07 +01:00
renovate[bot]
789bd3edae fix(deps): update dependency @fontsource/open-sans to ^5.2.0 2025-03-01 18:15:36 +00:00
renovate[bot]
256cd426d9 fix(deps): update mantine monorepo to ^7.17.1 2025-03-01 10:40:20 +00:00
Jérémie Panzer
58af2da105 Merge pull request #1706 from Athou/renovate/typescript-5.x
chore(deps): update dependency typescript to ^5.8.2
2025-02-28 21:02:58 +01:00
renovate[bot]
e0de397273 chore(deps): update dependency typescript to ^5.8.2 2025-02-28 19:33:23 +00:00
Jérémie Panzer
75cc3cf29c Merge pull request #1705 from Athou/renovate/docker-setup-qemu-action-digest
chore(deps): update docker/setup-qemu-action digest to 2910929
2025-02-28 17:11:02 +01:00
renovate[bot]
af60758e2a chore(deps): update docker/setup-qemu-action digest to 2910929 2025-02-28 14:32:17 +00:00
Jérémie Panzer
01180e95a2 Merge pull request #1704 from Athou/renovate/docker-setup-qemu-action-digest
chore(deps): update docker/setup-qemu-action digest to 5964de0
2025-02-26 21:15:41 +01:00
renovate[bot]
fa683ef7e1 chore(deps): update docker/setup-qemu-action digest to 5964de0 2025-02-26 19:20:27 +00:00
Jérémie Panzer
462d17a429 Merge pull request #1703 from Athou/renovate/docker-setup-buildx-action-digest
chore(deps): update docker/setup-buildx-action digest to b5ca514
2025-02-26 20:20:04 +01:00
Jérémie Panzer
17f71a40d4 Merge pull request #1702 from Athou/renovate/docker-build-push-action-digest
chore(deps): update docker/build-push-action digest to 471d1dc
2025-02-26 20:19:54 +01:00
renovate[bot]
de91a3a05a chore(deps): update docker/setup-buildx-action digest to b5ca514 2025-02-26 16:46:20 +00:00
renovate[bot]
ead587ee88 chore(deps): update docker/build-push-action digest to 471d1dc 2025-02-26 16:46:16 +00:00
Jérémie Panzer
62b3e6fb3a Merge pull request #1700 from Athou/renovate/actions-download-artifact-digest
chore(deps): update actions/download-artifact digest to cc20338
2025-02-26 17:46:01 +01:00
Jérémie Panzer
037ff15045 Merge pull request #1701 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.19.1 (minor)
2025-02-26 17:45:45 +01:00
renovate[bot]
ed35b06934 fix(deps): update quarkus.version to v3.19.1 2025-02-26 15:39:08 +00:00
renovate[bot]
3cfb1a13a7 chore(deps): update actions/download-artifact digest to cc20338 2025-02-26 15:38:48 +00:00
renovate[bot]
d04745d859 fix(deps): update dependency axios to ^1.8.1 2025-02-26 10:29:47 +00:00
Jérémie Panzer
58b18f36c5 Merge pull request #1699 from Athou/renovate/axios-1.x
fix(deps): update dependency axios to ^1.8.0
2025-02-26 08:10:25 +01:00
renovate[bot]
7282d18d8f fix(deps): update dependency axios to ^1.8.0 2025-02-26 06:46:03 +00:00
Jérémie Panzer
8e58fa22b4 Merge pull request #1698 from Athou/renovate/vite-6.x
chore(deps): update dependency vite to ^6.2.0
2025-02-25 05:09:34 +01:00
renovate[bot]
58d6eb2c5a chore(deps): update dependency vite to ^6.2.0 2025-02-25 03:36:32 +00:00
renovate[bot]
2f7c7498e2 chore(deps): update dependency vitest to ^3.0.7 2025-02-24 18:16:11 +00:00
renovate[bot]
bcf8dcd551 chore(deps): lock file maintenance 2025-02-24 05:39:25 +00:00
Jérémie Panzer
511f0a60bb Merge pull request #1697 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.6.0
2025-02-24 06:37:30 +01:00
renovate[bot]
72db0d815f fix(deps): update dependency @reduxjs/toolkit to ^2.6.0 2025-02-24 01:36:04 +00:00
renovate[bot]
280d0b7fdd chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.3 2025-02-23 19:49:59 +00:00
Athou
42e4575cb7 release 5.6.1 2025-02-23 20:49:01 +01:00
Jérémie Panzer
28a4bb403a Merge pull request #1691 from dcelasun/arch-package
Mention Arch package
2025-02-23 20:47:57 +01:00
Athou
cca3c907db documentation is now hosted on github pages 2025-02-23 20:23:02 +01:00
Athou
1a5b932742 upload generated documentation to github pages 2025-02-23 20:05:04 +01:00
Jérémie Panzer
a1d3f3008a Merge pull request #1693 from Athou/renovate/ncipollo-release-action-digest
chore(deps): update ncipollo/release-action digest to 440c8c1
2025-02-23 08:22:14 +01:00
Jérémie Panzer
902f2efbd2 Merge pull request #1694 from Athou/renovate/vitest-mock-extended-3.x
chore(deps): update dependency vitest-mock-extended to v3
2025-02-23 08:21:47 +01:00
renovate[bot]
2e534af146 chore(deps): update dependency vitest-mock-extended to v3 2025-02-22 17:50:06 +00:00
renovate[bot]
23ca30c3c2 chore(deps): update ncipollo/release-action digest to 440c8c1 2025-02-22 17:49:45 +00:00
Athou
517eedad00 Merge branch 'generated-properties' 2025-02-22 11:12:16 +01:00
Jérémie Panzer
216ea1fb42 Merge pull request #1692 from Athou/renovate/actions-upload-artifact-digest
chore(deps): update actions/upload-artifact digest to 4cec3d8
2025-02-22 11:11:34 +01:00
Athou
640d1a0ce3 add a tool to generate a properties file from configuration (#1691) 2025-02-22 08:03:01 +01:00
renovate[bot]
bba7425b5f chore(deps): update actions/upload-artifact digest to 4cec3d8 2025-02-21 22:15:42 +00:00
D. Can Celasun
7a1a49bfb4 Mention Arch package 2025-02-21 13:02:59 +00:00
Jérémie Panzer
e451e6698c Merge pull request #1690 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.14.0
2025-02-21 13:52:18 +01:00
renovate[bot]
9af3f21404 chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.14.0 2025-02-21 09:32:56 +00:00
renovate[bot]
7b14a9c0c2 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.3 2025-02-21 02:12:51 +00:00
Jérémie Panzer
0b65cc9510 Merge pull request #1689 from Athou/renovate/vite-plugin-checker-0.x
chore(deps): update dependency vite-plugin-checker to ^0.9.0
2025-02-20 18:29:10 +01:00
renovate[bot]
7879ab9b61 chore(deps): update dependency vite-plugin-checker to ^0.9.0 2025-02-20 15:11:34 +00:00
Athou
e6bebcafb3 allow iframes in feed entries (#1688) 2025-02-20 10:07:45 +01:00
renovate[bot]
3b465cebb7 fix(deps): update quarkus.version to v3.18.4 2025-02-19 20:28:09 +00:00
renovate[bot]
aeb211be06 chore(deps): update dependency vite to ^6.1.1 2025-02-19 18:26:04 +00:00
Jérémie Panzer
ad992aea7b Merge pull request #1687 from Athou/renovate/docker-build-push-action-digest
chore(deps): update docker/build-push-action digest to 0adf995
2025-02-19 19:25:11 +01:00
renovate[bot]
d848f72a0b chore(deps): update docker/build-push-action digest to 0adf995 2025-02-19 17:00:18 +00:00
Athou
0db087908d remove "jakarta.ws.rs.WebApplicationException" from the errors displayed in the client 2025-02-19 13:08:43 +01:00
Jérémie Panzer
42138d04d6 Merge pull request #1685 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.2.0
2025-02-19 10:16:26 +01:00
renovate[bot]
4522a9d0d5 fix(deps): update dependency react-router-dom to ^7.2.0 2025-02-19 06:32:35 +00:00
Jérémie Panzer
7440fcad0e Merge pull request #1686 from Athou/renovate/react-icons-5.x
fix(deps): update dependency react-icons to ^5.5.0
2025-02-19 07:31:05 +01:00
renovate[bot]
fc51c1882f fix(deps): update dependency react-icons to ^5.5.0 2025-02-19 05:47:14 +00:00
renovate[bot]
e24498b31f chore(deps): update dependency vitest to ^3.0.6 2025-02-18 14:27:16 +00:00
Athou
60fdc79563 don't expose rome's FeedException 2025-02-18 08:57:24 +01:00
Athou
6729ebc6ea throw a specific exception if we can't parse the url's content (#1684) 2025-02-18 07:41:02 +01:00
Athou
c8ff216ce5 README update 2025-02-17 21:23:38 +01:00
Jérémie Panzer
98c4150cfe Merge pull request #1683 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^7.17.0 (minor)
2025-02-17 21:11:53 +01:00
renovate[bot]
128332d710 fix(deps): update mantine monorepo to ^7.17.0 2025-02-17 19:31:07 +00:00
renovate[bot]
eabcb519a4 chore(deps): update react monorepo 2025-02-17 11:01:27 +00:00
renovate[bot]
5e14cead3d chore(deps): lock file maintenance 2025-02-17 01:44:54 +00:00
renovate[bot]
b601f938ff chore(deps): update ibm-semeru-runtimes docker tag to open-21.0.6_7-jre (#1682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-16 21:26:14 +00:00
renovate[bot]
4acfda32d0 chore(deps): update dependency @types/react to ^19.0.9 2025-02-16 13:16:31 +00:00
Athou
54da4e6839 release 5.6.0 2025-02-16 14:14:30 +01:00
Athou
3a6b4c588c PRs and renovate now build the docker images regardless of the branch/tag 2025-02-15 10:20:39 +01:00
Athou
48071b9fd1 PRs now build the docker images but don't push them 2025-02-15 10:18:16 +01:00
Athou
f519aa039f block local addresses to prevent SSRF attacks 2025-02-14 16:20:04 +01:00
Athou
dc3e5476a1 reload the tree when we receive a websocket notification about an unknown feed 2025-02-14 16:16:07 +01:00
Athou
903035ecfc formatting 2025-02-14 16:16:07 +01:00
Athou
13ad57da10 make sure the tree has been reloaded before navigating to the new feed subscription 2025-02-14 16:16:06 +01:00
Athou
44bc24c22a ubuntu-22.04-arm is supposed to be more stable 2025-02-14 16:16:06 +01:00
Athou
97f90405fc try to fix flaky IT test 2025-02-14 16:16:06 +01:00
renovate[bot]
0fc2a0b022 fix(deps): update dependency @monaco-editor/react to ^4.7.0 2025-02-13 19:39:46 +00:00
Jérémie Panzer
89eb641704 Merge pull request #1679 from Athou/renovate/graalvm-setup-graalvm-digest
chore(deps): update graalvm/setup-graalvm digest to b0cb26a
2025-02-13 06:22:29 +01:00
renovate[bot]
c53da9f631 chore(deps): update graalvm/setup-graalvm digest to b0cb26a 2025-02-12 22:32:09 +00:00
renovate[bot]
998868e63a fix(deps): update quarkus.version to v3.18.3 2025-02-12 18:26:21 +00:00
Athou
93f22d2351 reduce max interval to 4h 2025-02-12 18:17:39 +01:00
Athou
c3782bd7d2 also constrain to lower bound 2025-02-12 18:04:56 +01:00
Athou
f330349397 update documentation 2025-02-12 17:31:46 +01:00
Athou
99c973c8c2 change the default value of empirical interval calculation (#1677) 2025-02-12 17:26:38 +01:00
Athou
469420b5bf feed refresh engine previously hardcoded values are now configurable (#1677) 2025-02-12 17:08:20 +01:00
Athou
bde556d41f start to back off when we repeatedly receive a 429 2025-02-12 08:00:27 +01:00
Jérémie Panzer
bf6c2d7beb Merge pull request #1678 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.14.0
2025-02-11 16:03:32 +01:00
renovate[bot]
fa62ca21e0 chore(deps): update node.js to v22.14.0 2025-02-11 11:47:44 +00:00
renovate[bot]
7dcf76da84 fix(deps): update dependency interweave to ^13.1.1 2025-02-10 21:40:32 +01:00
renovate[bot]
3dc80fa762 chore(deps): lock file maintenance 2025-02-10 01:47:04 +00:00
Athou
dbce12492b release 5.5.0 2025-02-09 16:31:06 +01:00
renovate[bot]
85f5eaffec fix(deps): update mantine monorepo to ^7.16.3 2025-02-09 06:12:54 +00:00
Athou
106276351e use React 19 features to be able to remove unmaintained React Helmet 2025-02-07 20:13:13 +01:00
Athou
961fb6a464 redoc upgrade 2025-02-07 19:42:39 +01:00
Jérémie Panzer
ac3d9ef57f Merge pull request #1675 from Athou/renovate/docker-setup-qemu-action-digest
chore(deps): update docker/setup-qemu-action digest to 4574d27
2025-02-06 19:55:54 +01:00
Jérémie Panzer
3478ee4815 Merge pull request #1674 from Athou/renovate/docker-setup-buildx-action-digest
chore(deps): update docker/setup-buildx-action digest to f7ce87c
2025-02-06 19:55:49 +01:00
renovate[bot]
3dc02d7ba1 chore(deps): update docker/setup-qemu-action digest to 4574d27 2025-02-06 16:38:04 +00:00
renovate[bot]
c886f8b83c chore(deps): update docker/setup-buildx-action digest to f7ce87c 2025-02-06 16:38:00 +00:00
renovate[bot]
4a2154d0b3 fix(deps): update quarkus.version to v3.18.2 2025-02-05 19:35:32 +00:00
Jérémie Panzer
ba530d5019 Merge pull request #1673 from Athou/renovate/vite-6.x
chore(deps): update dependency vite to ^6.1.0
2025-02-05 20:34:57 +01:00
renovate[bot]
85b6209c52 chore(deps): update dependency vite to ^6.1.0 2025-02-05 16:58:47 +00:00
Athou
7ff86a5e31 make audio enclosures fill available width 2025-02-05 16:51:23 +01:00
Athou
8edd6a1e2d correctly handle 0 as a Retry-Header value (#1671) 2025-02-05 07:50:10 +01:00
Jérémie Panzer
6e65ed49e9 Merge pull request #1670 from Athou/renovate/com.microsoft.playwright-playwright-1.x
chore(deps): update dependency com.microsoft.playwright:playwright to v1.50.0
2025-02-04 23:29:26 +01:00
renovate[bot]
711b01abfa chore(deps): update dependency com.microsoft.playwright:playwright to v1.50.0 2025-02-04 22:01:19 +00:00
renovate[bot]
c7014ca2a1 chore(deps): update dependency vitest to ^3.0.5 2025-02-03 16:31:55 +00:00
renovate[bot]
a3984cd959 chore(deps): lock file maintenance 2025-02-03 08:00:36 +00:00
Athou
8d85b1bcba tweak tests to be more resilient 2025-02-03 08:55:26 +01:00
Athou
c451eee406 fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.4.2
remove workaround that is no longer needed
2025-02-02 15:58:59 +01:00
Jérémie Panzer
8f42135996 Merge pull request #1669 from Athou/renovate/linguijs-monorepo
fix(deps): update linguijs monorepo to ^5.2.0 (minor)
2025-02-01 16:28:59 +01:00
renovate[bot]
2c26aeed17 fix(deps): update linguijs monorepo to ^5.2.0 2025-02-01 14:12:40 +00:00
renovate[bot]
e2c4aa998b fix(deps): update dependency react-router-dom to ^7.1.5 2025-02-01 13:20:46 +00:00
Athou
c9e3b7f349 renovate already builds on push, don't trigger twice when it opens a PR 2025-02-01 14:19:50 +01:00
Athou
ebb4e52ba7 don't use lingui before it's initialized 2025-02-01 12:32:44 +01:00
Jérémie Panzer
1ddfdfb12e Merge pull request #1666 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.18.1 (minor)
2025-01-31 07:47:00 +01:00
Jérémie Panzer
81f16aea62 Merge pull request #1667 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.1.0
2025-01-31 07:25:16 +01:00
renovate[bot]
429ec193c8 fix(deps): update dependency react-router-dom to ^7.1.4 2025-01-30 18:19:26 +00:00
renovate[bot]
732b714448 chore(deps): update dependency npm to v11.1.0 2025-01-30 01:05:55 +00:00
renovate[bot]
82e0405ad9 fix(deps): update quarkus.version to v3.18.1 2025-01-29 20:55:23 +00:00
Athou
9ef002fcd1 swagger-ui-react is no longer used 2025-01-29 15:06:00 +01:00
Athou
ec938e416c README clarification 2025-01-28 10:32:04 +01:00
Athou
37cf711cbc add support for the Retry-After header sent by OpenRSS 2025-01-27 07:48:19 +01:00
renovate[bot]
de441e4ff7 chore(deps): lock file maintenance 2025-01-27 01:07:29 +00:00
renovate[bot]
46251526b6 fix(deps): update dependency @reduxjs/toolkit to ^2.5.1 2025-01-26 22:09:50 +00:00
Jérémie Panzer
67eeea0b06 Merge pull request #1664 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.21.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.2
2025-01-26 23:09:03 +01:00
renovate[bot]
b49ccc4cd9 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.2 2025-01-26 16:48:25 +00:00
renovate[bot]
8586a8b57b fix(deps): update mantine monorepo to ^7.16.2 2025-01-26 13:53:50 +00:00
Jérémie Panzer
d9f63786a8 Merge pull request #1663 from Athou/renovate/swagger-ui-react-4.x
chore(deps): update dependency @types/swagger-ui-react to ^4.19.0
2025-01-26 14:53:04 +01:00
renovate[bot]
8f0c8b68b9 chore(deps): update dependency @types/swagger-ui-react to ^4.19.0 2025-01-26 12:40:20 +00:00
Jérémie Panzer
15e574c5c4 Merge pull request #1662 from Athou/renovate/docker-build-push-action-digest
chore(deps): update docker/build-push-action digest to ca877d9
2025-01-24 11:21:15 +01:00
renovate[bot]
fe532242b4 chore(deps): update docker/build-push-action digest to ca877d9 2025-01-24 09:35:09 +00:00
renovate[bot]
fb48ff0858 chore(deps): update dependency vitest to ^3.0.4 2025-01-23 21:13:02 +00:00
Athou
8d850639d7 remove branches-ignore because it applies to target branch 2025-01-23 22:11:53 +01:00
Athou
ee73195915 add github actions permissions 2025-01-23 21:50:27 +01:00
Athou
72d9dad61b fix "an artifact with this name already exists on the workflow run" 2025-01-23 21:50:12 +01:00
Athou
fde8dab8cd simplify youtube channels url detection 2025-01-23 21:49:52 +01:00
Athou
dae5efa787 allow next Java LTS version 2025-01-23 21:49:28 +01:00
Jérémie Panzer
3c067140fd Merge pull request #1661 from Athou/renovate/patch-react-monorepo
chore(deps): update dependency @types/react to ^19.0.8
2025-01-23 18:39:30 +01:00
renovate[bot]
4ccbe81e87 chore(deps): update dependency @types/react to ^19.0.8 2025-01-23 13:31:56 +00:00
Jérémie Panzer
3d5d93bb72 Merge pull request #1660 from Athou/renovate/patch-quarkus.version
fix(deps): update quarkus.version to v3.17.8 (patch)
2025-01-22 21:55:17 +01:00
renovate[bot]
4138b6eb9b fix(deps): update quarkus.version to v3.17.8 2025-01-22 18:33:36 +00:00
Jérémie Panzer
9c39c95a9b Merge pull request #1659 from Athou/renovate/pin-dependencies
chore(deps): pin dependencies
2025-01-22 10:53:56 +01:00
Jérémie Panzer
32b2bf99a4 Merge pull request #1658 from Athou/renovate/node-22.13.x
chore(deps): update node.js to v22.13.1
2025-01-22 08:19:38 +01:00
renovate[bot]
cf459876af chore(deps): update node.js to v22.13.1 2025-01-22 06:53:04 +00:00
renovate[bot]
6698bd74b5 chore(deps): pin dependencies 2025-01-22 06:52:59 +00:00
Athou
c81d06e5f3 pin github actions 2025-01-22 07:52:09 +01:00
renovate[bot]
b12a78dc84 fix(deps): update dependency tss-react to ^4.9.15 2025-01-21 21:34:41 +00:00
renovate[bot]
b076587e44 chore(deps): update dependency vitest to ^3.0.3 2025-01-21 17:42:28 +00:00
renovate[bot]
bb12f16bea chore(deps): update dependency vite to ^6.0.11 2025-01-21 12:35:00 +00:00
renovate[bot]
e80caadd12 chore(deps): update dependency vite to ^6.0.10 2025-01-20 21:35:21 +00:00
renovate[bot]
846d93f2b2 chore(deps): lock file maintenance 2025-01-20 19:18:35 +00:00
Steven Conaway
0ed6f6ef9c chore(deps): move to react@^19 (#1657)
* chore(deps): move to react@^19

* chore(deps): manually override old peer dependencies

* chore(deps): upgrade rollup-plugin-visualizer

* chore(deps): remove `package-lock.json` and `node_modules/` and regen lockfile

* chore(deps): remove randomly added dependencies

* chore(deps): change override for react@^19 peer dep
2025-01-20 19:59:42 +01:00
renovate[bot]
15992dcb80 chore(deps): update dependency vite to ^6.0.9 2025-01-20 14:11:24 +00:00
renovate[bot]
1a5c399b54 chore(deps): lock file maintenance 2025-01-20 01:15:47 +00:00
Athou
5e92f9ffb8 we can skip the docker step altogether for PRs 2025-01-19 21:40:30 +01:00
renovate[bot]
71164d1b69 fix(deps): update mantine monorepo to ^7.16.1 2025-01-19 13:51:46 +00:00
renovate[bot]
6947670fe6 fix(deps): update dependency react-router-dom to ^7.1.3 2025-01-17 22:16:53 +00:00
renovate[bot]
30810e37b9 chore(deps): update dependency vitest to ^3.0.2 2025-01-17 21:52:28 +00:00
Athou
b17b2767b0 run CI on pull requests 2025-01-17 22:40:47 +01:00
Athou
d37cf5bbcf release 5.4.0 2025-01-17 17:15:09 +01:00
Athou
045baba705 use github actions to build a native arm64 docker image 2025-01-17 16:12:05 +01:00
renovate[bot]
3623dc8e1d chore(deps): update dependency vitest to ^3.0.1 2025-01-16 20:17:53 +00:00
renovate[bot]
2610c37067 fix(deps): update swagger.version to v2.2.28 2025-01-16 18:17:44 +00:00
renovate[bot]
286b69a646 fix(deps): update dependency react-router-dom to ^7.1.2 2025-01-16 15:56:44 +00:00
Jérémie Panzer
9673f27090 Merge pull request #1656 from Athou/renovate/major-vitest-monorepo
chore(deps): update dependency vitest to v3
2025-01-16 16:55:55 +01:00
renovate[bot]
0722599f6d chore(deps): update dependency vitest to v3 2025-01-16 14:17:05 +00:00
Jérémie Panzer
1df40d8370 Merge pull request #1655 from Athou/renovate/redoc-2.x
fix(deps): update dependency redoc to ^2.3.0
2025-01-16 15:15:28 +01:00
renovate[bot]
457e4ec69e fix(deps): update dependency redoc to ^2.3.0 2025-01-16 13:56:26 +00:00
renovate[bot]
647310a45f fix(deps): update quarkus.version to v3.17.7 2025-01-15 17:22:28 +00:00
renovate[bot]
e85c92f216 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.2 2025-01-15 02:04:18 +00:00
renovate[bot]
d93b0dbfd4 fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.30 2025-01-14 20:40:37 +00:00
Jérémie Panzer
b4e61ef547 Merge pull request #1654 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^7.16.0 (minor)
2025-01-14 14:14:01 +01:00
Jérémie Panzer
71dffbba46 Merge pull request #1653 from Athou/renovate/debian-12.x
chore(deps): update debian docker tag to v12.9
2025-01-14 14:13:51 +01:00
renovate[bot]
2c0b0c4e3b fix(deps): update mantine monorepo to ^7.16.0 2025-01-14 12:49:52 +00:00
renovate[bot]
d868e58e1e chore(deps): update debian docker tag to v12.9 2025-01-14 12:49:31 +00:00
renovate[bot]
90eb2095bf chore(deps): lock file maintenance 2025-01-13 01:27:25 +00:00
Athou
62d3ed16e6 remove DOCTYPE declarations (#1260) 2025-01-10 16:18:49 +01:00
Jérémie Panzer
74f7c48818 Merge pull request #1652 from Athou/renovate/jsdom-26.x
chore(deps): update dependency jsdom to v26
2025-01-10 15:43:55 +01:00
renovate[bot]
23fe9c29ed chore(deps): update dependency jsdom to v26 2025-01-09 10:23:05 +00:00
renovate[bot]
8f7be8278a chore(deps): update dependency typescript to ^5.7.3 (#1651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 05:40:40 +00:00
renovate[bot]
49118b6ea0 fix(deps): update quarkus.version to v3.17.6 2025-01-08 17:50:38 +00:00
Jérémie Panzer
d97bd04ae2 Merge pull request #1649 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-2.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.1
2025-01-08 18:50:20 +01:00
Jérémie Panzer
8d11309b64 Merge pull request #1650 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.13.0
2025-01-08 18:50:07 +01:00
renovate[bot]
68c24e4cb8 chore(deps): update node.js to v22.13.0 2025-01-08 17:21:57 +00:00
renovate[bot]
4e43e0235f chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.1 2025-01-08 15:35:52 +00:00
renovate[bot]
62b79a9625 fix(deps): update mantine monorepo to ^7.15.3 2025-01-08 15:35:49 +00:00
renovate[bot]
cb0706808c chore(deps): lock file maintenance 2025-01-06 02:01:57 +00:00
renovate[bot]
ffd5704b1e chore(deps): update dependency vite to ^6.0.7 2025-01-02 23:21:46 +00:00
Jérémie Panzer
3987077e5a Merge pull request #1647 from Athou/renovate/io.github.hakky54-sslcontext-kickstart-for-apache5-9.x
fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9
2025-01-01 16:02:38 +01:00
renovate[bot]
2e01a76784 fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9 2025-01-01 13:58:06 +00:00
Athou
8254093f5f fix tests failing because pubDate is older than a year 2024-12-30 08:07:03 +01:00
Jérémie Panzer
0b06526756 Merge pull request #1646 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2024-12-30 07:20:00 +01:00
renovate[bot]
06731ae76d chore(deps): lock file maintenance 2024-12-30 00:18:52 +00:00
Jérémie Panzer
9a59453792 Merge pull request #1645 from Athou/renovate/patch-fontsource-monorepo
fix(deps): update dependency @fontsource/open-sans to ^5.1.1
2024-12-29 19:01:50 +01:00
renovate[bot]
c195a52c89 fix(deps): update dependency @fontsource/open-sans to ^5.1.1 2024-12-29 14:30:46 +00:00
Jérémie Panzer
3d7924f953 Merge pull request #1644 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.21.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.1
2024-12-29 10:20:33 +01:00
renovate[bot]
f29efd7fae chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.1 2024-12-28 15:55:17 +00:00
Jérémie Panzer
157bff3c83 Merge pull request #1643 from Athou/renovate/rollup-plugin-visualizer-5.13.x
chore(deps): update dependency rollup-plugin-visualizer to ^5.13.1
2024-12-28 13:41:58 +01:00
renovate[bot]
5c17bbc36d chore(deps): update dependency rollup-plugin-visualizer to ^5.13.1 2024-12-27 11:16:46 +00:00
Jérémie Panzer
c85e72e70c Merge pull request #1642 from Athou/renovate/rollup-plugin-visualizer-5.x
chore(deps): update dependency rollup-plugin-visualizer to ^5.13.0
2024-12-27 12:16:03 +01:00
renovate[bot]
01150f67e1 chore(deps): update dependency rollup-plugin-visualizer to ^5.13.0 2024-12-27 10:55:17 +00:00
Jérémie Panzer
75aca7aa6f Merge pull request #1638 from bestZwei/patch-1
Update zh/messages.po
2024-12-27 05:05:22 +01:00
zwei
affde7e43c Update messages.po
add a few Chinese Translations
2024-12-26 22:49:36 +08:00
renovate[bot]
b9b1b53235 chore(deps): update dependency vite to ^6.0.6 2024-12-26 05:23:50 +00:00
renovate[bot]
708ebb8abc fix(deps): update dependency react-router-dom to ^7.1.1 2024-12-23 18:42:33 +00:00
renovate[bot]
83e763df0a fix(deps): update mantine monorepo to ^7.15.2 2024-12-23 11:22:09 +00:00
Jérémie Panzer
0ff812c1ea Merge pull request #1637 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2024-12-23 12:21:17 +01:00
renovate[bot]
3e9dd6d8e2 chore(deps): lock file maintenance 2024-12-23 10:39:01 +00:00
Jérémie Panzer
23af73e847 Merge pull request #1626 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo (minor)
2024-12-23 11:37:18 +01:00
renovate[bot]
e79e4719fd fix(deps): update mantine monorepo 2024-12-23 10:17:49 +00:00
Jérémie Panzer
23fef98432 Merge pull request #1636 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.1.0
2024-12-21 10:50:32 +01:00
renovate[bot]
22478252e7 fix(deps): update dependency react-router-dom to ^7.1.0 2024-12-21 02:23:37 +00:00
Jérémie Panzer
76b1f3cd35 Merge pull request #1635 from Athou/renovate/vite-6.0.x
chore(deps): update dependency vite to ^6.0.5
2024-12-20 22:47:21 +01:00
renovate[bot]
420d73ec6a chore(deps): update dependency vite to ^6.0.5 2024-12-20 11:53:07 +00:00
renovate[bot]
e0211cfa0c chore(deps): update dependency @types/react to ^18.3.18 2024-12-20 02:18:48 +00:00
renovate[bot]
25a92c651c fix(deps): update quarkus.version to v3.17.5 2024-12-19 20:26:08 +00:00
renovate[bot]
0781205c69 chore(deps): update dependency vite to ^6.0.4 2024-12-19 11:15:48 +00:00
Jérémie Panzer
5102dd5e30 Merge pull request #1613 from Athou/renovate/vite-6.x
chore(deps): update dependency vite to v6
2024-12-16 21:30:14 +01:00
renovate[bot]
6ccfc3fd67 chore(deps): update dependency vite to v6 2024-12-16 20:14:47 +00:00
Athou
2791ed91ab lingui update 2024-12-16 21:11:54 +01:00
Jérémie Panzer
f40c198233 Merge pull request #1634 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11
2024-12-16 20:57:57 +01:00
renovate[bot]
003dc63121 chore(deps): update dependency npm to v11 2024-12-16 19:36:39 +00:00
renovate[bot]
f8ef1e2a99 chore(deps): update dependency @types/react to ^18.3.17 2024-12-16 15:42:17 +00:00
renovate[bot]
14c7078940 fix(deps): update querydsl.version to v6.10.1 2024-12-16 00:30:43 +00:00
Jérémie Panzer
074836d3e8 Merge pull request #1632 from Athou/renovate/querydsl.version
fix(deps): update querydsl.version to v6.10 (minor)
2024-12-14 06:59:55 +01:00
renovate[bot]
0cdbc144b3 fix(deps): update querydsl.version to v6.10 2024-12-13 20:09:27 +00:00
Jérémie Panzer
dc63ec24c0 Merge pull request #1630 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.0
2024-12-12 22:42:41 +01:00
renovate[bot]
6d4c6c36a5 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.0 2024-12-12 20:31:27 +00:00
renovate[bot]
464af5f4d9 fix(deps): update swagger.version to v2.2.27 2024-12-11 18:13:04 +00:00
renovate[bot]
aa94a46a3d fix(deps): update quarkus.version to v3.17.4 2024-12-11 16:27:30 +00:00
renovate[bot]
8542197dc3 chore(deps): update react monorepo 2024-12-11 06:15:47 +00:00
Jérémie Panzer
64d77eaef4 Merge pull request #1628 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.5.0
2024-12-11 07:14:49 +01:00
Jérémie Panzer
675ef8794c Merge pull request #1627 from Athou/renovate/react-redux-9.x
fix(deps): update dependency react-redux to ^9.2.0
2024-12-11 07:14:17 +01:00
renovate[bot]
4bcdbeb516 fix(deps): update dependency @reduxjs/toolkit to ^2.5.0 2024-12-11 04:59:19 +00:00
renovate[bot]
a9f37739fb fix(deps): update dependency react-redux to ^9.2.0 2024-12-11 02:11:18 +00:00
renovate[bot]
5ab0fc19da chore(deps): update dependency @types/react-dom to ^18.3.3 2024-12-09 22:54:32 +00:00
renovate[bot]
7b232425f3 fix(deps): update dependency monaco-editor to ^0.52.2 2024-12-09 19:06:36 +00:00
Jérémie Panzer
c0e7668140 Merge pull request #1625 from Athou/renovate/emotion-monorepo
fix(deps): update dependency @emotion/react to ^11.14.0
2024-12-09 16:02:32 +01:00
renovate[bot]
ae3f059257 fix(deps): update dependency @emotion/react to ^11.14.0 2024-12-09 12:04:31 +00:00
renovate[bot]
d44c7c1e95 fix(deps): update dependency tss-react to ^4.9.14 2024-12-09 07:48:44 +00:00
renovate[bot]
6cd9d134cf chore(deps): update dependency vite-tsconfig-paths to ^5.1.4 2024-12-07 05:53:17 +00:00
renovate[bot]
6f21ba8afc chore(deps): update react monorepo 2024-12-05 19:55:23 +00:00
renovate[bot]
b2fe13c117 chore(deps): update dependency npm to v10.9.2 2024-12-05 01:06:03 +00:00
renovate[bot]
03ece7a262 chore(deps): update dependency @types/react to ^18.3.13 (#1622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 01:05:43 +00:00
renovate[bot]
697fde2d0e chore(deps): update quarkus.version to v3.17.3 2024-12-04 20:09:33 +00:00
renovate[bot]
7f0f85b356 fix(deps): update dependency axios to ^1.7.9 2024-12-04 09:43:27 +00:00
Jérémie Panzer
a7d41debfe Merge pull request #1621 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.12.0
2024-12-04 07:21:31 +01:00
renovate[bot]
57bf758108 chore(deps): update node.js to v22.12.0 2024-12-03 21:03:12 +00:00
Jérémie Panzer
b37d933047 Merge pull request #1620 from Athou/renovate/react-icons-5.x
fix(deps): update dependency react-icons to ^5.4.0
2024-12-03 13:08:38 +01:00
renovate[bot]
80ffef4555 fix(deps): update dependency react-icons to ^5.4.0 2024-12-03 11:31:44 +00:00
renovate[bot]
af5a0002aa fix(deps): update dependency react-router-dom to ^7.0.2 2024-12-03 04:09:43 +00:00
280 changed files with 22909 additions and 22914 deletions

3
.gitattributes vendored Normal file
View File

@@ -0,0 +1,3 @@
* text eol=lf
*.cmd text eol=crlf
*.png binary

View File

@@ -1,183 +1,269 @@
name: ci name: ci
permissions:
contents: read
on: [ push ] on:
push:
pull_request:
env: env:
JAVA_VERSION: 21 JAVA_VERSION: 21
DOCKER_BUILD_SUMMARY: false DOCKER_BUILD_SUMMARY: false
jobs: jobs:
build-linux: build:
runs-on: ubuntu-latest if: github.event_name != 'pull_request' || github.actor != 'renovate[bot]' # renovate already triggers the build on pushes
strategy: strategy:
matrix: matrix:
os: [ "ubuntu-latest", "ubuntu-22.04-arm", "windows-latest" ]
database: [ "h2", "postgresql", "mysql", "mariadb" ] database: [ "h2", "postgresql", "mysql", "mariadb" ]
runs-on: ${{ matrix.os }}
steps: steps:
# Checkout # Checkout
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
fetch-depth: 0 fetch-depth: 0
# Setup # Setup
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set up GraalVM - name: Set up GraalVM
uses: graalvm/setup-graalvm@v1 uses: graalvm/setup-graalvm@01ed653ac833fe80569f1ef9f25585ba2811baab # v1
with: with:
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm" distribution: "graalvm"
cache: "maven" cache: "maven"
- name: Install Playwright dependencies
run: sudo apt-get install -y libgbm1
if: matrix.os != 'windows-latest'
# Build & Test # Build & Test
- name: Build with Maven - name: Build with Maven
run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} -DskipTests=${{ matrix.os == 'windows-latest' && matrix.database != 'h2' }}
# Build pages
- name: Copy generated markdown documentation to /documentation
run: mkdir documentation && cp ./commafeed-server/target/quarkus-generated-doc/config/commafeed-server.md ./documentation/README.md
- name: Generate pages
uses: wranders/markdown-to-pages-action@8d8a750832932ac785f5424c8c5543aa0b26bb9a # v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
out_path: target/pages
files: |-
README.md
documentation/README.md
# Upload artifacts # Upload artifacts
- name: Upload cross-platform app - name: Upload cross-platform app
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
if: matrix.os == 'ubuntu-latest' # we only need to upload the cross-platform artifact once per database
with: with:
name: commafeed-${{ matrix.database }}-jvm name: commafeed-${{ matrix.database }}-jvm
path: commafeed-server/target/commafeed-*.zip path: commafeed-server/target/commafeed-*.zip
- name: Upload native executable - name: Upload native executable
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with: with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }} name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }}
path: commafeed-server/target/commafeed-*-runner path: commafeed-server/target/commafeed-*-runner*
# Docker - name: Upload pages
- name: Login to Container Registry uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
uses: docker/login-action@v3 if: matrix.os == 'ubuntu-latest' && matrix.database == 'h2' # we only need to upload the pages once
if: ${{ github.ref_type == 'tag' || github.ref_name == 'master' }}
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} path: target/pages
password: ${{ secrets.DOCKERHUB_TOKEN }}
## tags docker:
- name: Docker build and push tag - native runs-on: ubuntu-latest
uses: docker/build-push-action@v6 needs: build
if: ${{ github.ref_type == 'tag' }} env:
with: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: true
platforms: linux/amd64
tags: |
athou/commafeed:latest-${{ matrix.database }}
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}
- name: Docker build and push tag - jvm
uses: docker/build-push-action@v6
if: ${{ github.ref_type == 'tag' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
push: true
platforms: linux/amd64,linux/arm64/v8
tags: |
athou/commafeed:latest-${{ matrix.database }}-jvm
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}-jvm
## master
- name: Docker build and push master - native
uses: docker/build-push-action@v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: true
platforms: linux/amd64
tags: athou/commafeed:master-${{ matrix.database }}
- name: Docker build and push master - jvm
uses: docker/build-push-action@v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
push: true
platforms: linux/amd64,linux/arm64/v8
tags: athou/commafeed:master-${{ matrix.database }}-jvm
build-windows:
runs-on: windows-latest
strategy: strategy:
matrix: matrix:
database: [ "h2", "postgresql", "mysql", "mariadb" ] database: [ "h2", "postgresql", "mysql", "mariadb" ]
steps: steps:
# Checkout # Checkout
- name: Configure git to checkout as-is
run: git config --global core.autocrlf false
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
fetch-depth: 0 fetch-depth: 0
# Setup # Setup
- name: Set up GraalVM - name: Set up QEMU
uses: graalvm/setup-graalvm@v1 uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
cache: "maven"
# Build & Test - name: Set up Docker Buildx
- name: Build with Maven uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} -DskipTests=${{ matrix.database != 'h2' }}
# Upload artifacts - name: Install required packages
- name: Upload native executable run: sudo apt-get install -y rename unzip
uses: actions/upload-artifact@v4
# Prepare artifacts
- name: Download artifacts
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with: with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }} pattern: commafeed-${{ matrix.database }}-*
path: commafeed-server/target/commafeed-*-runner.exe path: ./artifacts
merge-multiple: true
- name: Set the exec flag on the native executables
run: chmod +x artifacts/*-runner
- name: Rename native executables to match buildx TARGETARCH
run: |
rename 's/x86_64/amd64/g' artifacts/*
rename 's/aarch_64/arm64/g' artifacts/*
- name: Unzip jvm package
run: |
unzip artifacts/*-jvm.zip -d artifacts/extracted-jvm-package
rename 's/commafeed-.*/quarkus-app/g' artifacts/extracted-jvm-package/*
# Docker
- name: Login to Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ env.DOCKERHUB_USERNAME != '' }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
## build but don't push for PRs and renovate
- name: Docker build - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: false
platforms: linux/amd64,linux/arm64/v8
- name: Docker build - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
push: false
platforms: linux/amd64,linux/arm64/v8
## build and push tag
- name: Docker build and push tag - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
if: ${{ github.ref_type == 'tag' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: ${{ env.DOCKERHUB_USERNAME != '' }}
platforms: linux/amd64,linux/arm64/v8
tags: |
athou/commafeed:latest-${{ matrix.database }}
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}
- name: Docker build and push tag - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
if: ${{ github.ref_type == 'tag' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
push: ${{ env.DOCKERHUB_USERNAME != '' }}
platforms: linux/amd64,linux/arm64/v8
tags: |
athou/commafeed:latest-${{ matrix.database }}-jvm
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}-jvm
## build and push master
- name: Docker build and push master - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: ${{ env.DOCKERHUB_USERNAME != '' }}
platforms: linux/amd64,linux/arm64/v8
tags: athou/commafeed:master-${{ matrix.database }}
- name: Docker build and push master - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
push: ${{ env.DOCKERHUB_USERNAME != '' }}
platforms: linux/amd64,linux/arm64/v8
tags: athou/commafeed:master-${{ matrix.database }}-jvm
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: needs:
- build-linux - build
- build-windows - docker
permissions:
contents: write
if: github.ref_type == 'tag' if: github.ref_type == 'tag'
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with: with:
pattern: commafeed-* pattern: commafeed-*
path: ./artifacts path: ./artifacts
merge-multiple: true merge-multiple: true
- name: Set the exec flag on the native executables
run: chmod +x artifacts/*-runner
- name: Extract Changelog Entry - name: Extract Changelog Entry
uses: mindsers/changelog-reader-action@v2 uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2
id: changelog_reader id: changelog_reader
with: with:
version: ${{ github.ref_name }} version: ${{ github.ref_name }}
- name: Create GitHub release - name: Create GitHub release
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@440c8c1cb0ed28b9f43e4d1d670870f059653174 # v1
with: with:
name: CommaFeed ${{ github.ref_name }} name: CommaFeed ${{ github.ref_name }}
body: ${{ steps.changelog_reader.outputs.changes }} body: ${{ steps.changelog_reader.outputs.changes }}
artifacts: ./artifacts/* artifacts: ./artifacts/*
update-dockerhub-description:
runs-on: ubuntu-latest
needs: release
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Update Docker Hub Description - name: Update Docker Hub Description
uses: peter-evans/dockerhub-description@v4 uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: athou/commafeed repository: athou/commafeed
short-description: ${{ github.event.repository.description }} short-description: ${{ github.event.repository.description }}
readme-filepath: commafeed-server/src/main/docker/README.md readme-filepath: commafeed-server/src/main/docker/README.md
deploy-pages:
runs-on: ubuntu-latest
needs: release
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
id: deployment

View File

@@ -1,5 +1,39 @@
# Changelog # Changelog
## [5.7.0]
- Add Shift+J/Shift+K keyboard shortcuts to navigate to the next/previous feed or category with unread entries (#1746)
- Add the referrer "no-referrer" meta to index.html (#1724)
- Load custom JS code when the app is done loading (#1724)
- Correctly handle feeds that return an unmodified Last-Modified header but a different ETag header (#1730)
- Restore gzip compression of responses that was accidentaly disabled since 5.0.0
- Fix tooltips not showing up in mobile view
- Fix the bookmarklet generator on the About page
## [5.6.1]
- Restore support for iframes in feed entries (#1688)
- There is now a package available for Arch Linux thanks to @dcelasun (#1691)
## [5.6.0]
- To better respect the bandwidth of feed owners, the default value of `commafeed.feed-refresh.interval-empirical` is now true. This means feeds no longer refresh exactly every 5 minutes (the default value of `commafeed.feed-refresh.interval`) but between 5 minutes and 4 hours (the default value of the new `commafeed.feed-refresh.max-interval` setting). The interval is calculated based on feed activity, so highly active feeds refresh more often (#1677)
- Many previously hardcoded values used in feed refresh interval calculation are now exposed as settings (#1677)
- Access to local addresses is now blocked to mitigate server-side request forgery (SSRF) attacks, which could potentially expose internal resources. You might want to disable the new `commafeed.http-client.block-local-addresses` setting if you subscribe to feeds only available on your local network and you trust all your users
- If a feed responds with a "429 - Too many requests" response, a backoff mechanism is triggered when the response does not contain a "Retry-After" header
## [5.5.0]
- CommaFeed now honors the Retry-After response header and will not try to refresh a feed sooner than the value of this header
- Audio enclosures (e.g. podcasts) now fill available entry width
- Fix an issue with some labels not correctly internationalized
## [5.4.0]
- An arm64 native executable is now available for download on the releases page
- The native executable Docker image now supports arm64
- Fixed an issue with feeds that declared an invalid DOCTYPE (#1260)
## [5.3.6] ## [5.3.6]
- Ignore invalid Cache-Control header values (#1619) - Ignore invalid Cache-Control header values (#1619)

View File

@@ -48,17 +48,17 @@ system and database of choice.
There are two types of packages: There are two types of packages:
- The `linux-x86_64` and `windows-x86_64` packages are compiled natively and contain an executable that can be run - The `linux-x86_64`, `linux-aarch_64` and `windows-x86_64` packages are compiled natively and contain an executable that can be run
directly. directly.
- The `jvm` package is a zip file containing all `.jar` files required to run the application. This package works on all - The `jvm` package is a zip file containing all `.jar` files required to run the application. This package works on all
platforms and is started with `java -jar quarkus-run.jar`. platforms but requires a JRE and is started with `java -jar quarkus-run.jar`.
If available for your operating system, the native package is recommended because it has a faster startup time and lower If available for your operating system, the native package is recommended because it has a faster startup time and lower
memory usage. memory usage.
### Build from sources ### Build from sources
./mvnw clean package [-P<database>] [-Pnative] [-DskipTests] ./mvnw clean package [-P<database> [-Pnative]] [-DskipTests]
- `<database>` can be one of `h2`, `postgresql`, `mysql` or `mariadb`. The default is `h2`. - `<database>` can be one of `h2`, `postgresql`, `mysql` or `mariadb`. The default is `h2`.
- `-Pnative` compiles the application to native code. This requires GraalVM to be installed (`GRAALVM_HOME` environment - `-Pnative` compiles the application to native code. This requires GraalVM to be installed (`GRAALVM_HOME` environment
@@ -73,6 +73,10 @@ When the build is complete:
- if you used the native profile, the executable is located at - if you used the native profile, the executable is located at
`commafeed-server/target/commafeed-<version>-<database>-<platform>-<arch>-runner[.exe]` `commafeed-server/target/commafeed-<version>-<database>-<platform>-<arch>-runner[.exe]`
### Distribution packages
- Arch Linux users can use [the CommaFeed package on AUR](https://aur.archlinux.org/pkgbase/commafeed), which builds native binaries with GraalVM for all supported databases.
## Configuration ## Configuration
CommaFeed doesn't require any configuration to run with its embedded database (H2). The database file will be stored in CommaFeed doesn't require any configuration to run with its embedded database (H2). The database file will be stored in
@@ -94,13 +98,13 @@ There are multiple ways to configure CommaFeed:
- a `config/application.properties` [properties](https://en.wikipedia.org/wiki/.properties) file relative to the working - a `config/application.properties` [properties](https://en.wikipedia.org/wiki/.properties) file relative to the working
directory (keys in kebab-case) directory (keys in kebab-case)
- Command line arguments prefixed with `-D` (keys in kebab-case) - Command line arguments each prefixed with `-D` (keys in kebab-case)
- Environment variables (keys in UPPER_CASE) - Environment variables (keys in UPPER_CASE)
- a `.env` file in the working directory (keys in UPPER_CASE) - a `.env` file in the working directory (keys in UPPER_CASE)
The properties file is recommended because CommaFeed will be able to warn about invalid properties and typos. The properties file is recommended because CommaFeed will be able to warn about invalid properties and typos.
All [CommaFeed settings](commafeed-server/doc/commafeed.md) are optional and have sensible default values. All [CommaFeed settings](https://athou.github.io/commafeed/documentation) are optional and have sensible default values.
When logging in, credentials are stored in an encrypted cookie. The encryption key is randomly generated at startup, When logging in, credentials are stored in an encrypted cookie. The encryption key is randomly generated at startup,
meaning that you will have to log back in after each restart of the application. To prevent this, you can set the meaning that you will have to log back in after each restart of the application. To prevent this, you can set the

View File

@@ -1,11 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/x-icon" href="favicon.ico" /> <link rel="icon" type="image/x-icon" href="favicon.ico" />
<link rel="manifest" href="manifest.json" /> <link rel="manifest" href="manifest.json" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>CommaFeed</title> <meta name="referrer" content="no-referrer" />
<title>CommaFeed</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

File diff suppressed because it is too large Load Diff

View File

@@ -4,77 +4,81 @@
"version": "0.0.0", "version": "0.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite --host", "dev": "vite",
"dev:typescript": "tsc --watch", "dev:host": "vite --host",
"build": "tsc && vite build", "build": "tsc && vite build",
"preview": "vite preview", "preview": "vite preview",
"test": "vitest", "test": "vitest",
"test:ci": "vitest run", "test:ci": "vitest run",
"lint": "biome check ./src", "lint": "biome check",
"lint:fix": "biome check --write ./src", "lint:fix": "biome check --write",
"i18n:extract": "lingui extract --clean" "i18n:extract": "lingui extract --clean"
}, },
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.5", "@emotion/react": "^11.14.0",
"@fontsource/open-sans": "^5.1.0", "@fontsource/open-sans": "^5.2.5",
"@lingui/core": "^5.0.0", "@lingui/core": "^5.3.0",
"@lingui/react": "^5.0.0", "@lingui/react": "^5.3.0",
"@mantine/core": "^7.14.3", "@mantine/core": "^7.17.3",
"@mantine/form": "^7.14.3", "@mantine/form": "^7.17.3",
"@mantine/hooks": "^7.14.3", "@mantine/hooks": "^7.17.3",
"@mantine/modals": "^7.14.3", "@mantine/modals": "^7.17.3",
"@mantine/notifications": "^7.14.3", "@mantine/notifications": "^7.17.3",
"@mantine/spotlight": "^7.14.3", "@mantine/spotlight": "^7.17.3",
"@monaco-editor/react": "^4.6.0", "@monaco-editor/react": "^4.7.0",
"@reduxjs/toolkit": "^2.4.0", "@reduxjs/toolkit": "^2.6.1",
"axios": "^1.7.8", "axios": "^1.8.4",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"escape-string-regexp": "^5.0.0", "escape-string-regexp": "^5.0.0",
"interweave": "^13.1.0", "interweave": "^13.1.1",
"monaco-editor": "^0.52.0", "monaco-editor": "^0.52.2",
"mousetrap": "^1.6.5", "mousetrap": "^1.6.5",
"react": "^18.3.1", "react": "^19.1.0",
"react-async-hook": "^4.0.0", "react-async-hook": "^4.0.0",
"react-contexify": "^6.0.0", "react-contexify": "^6.0.0",
"react-device-detect": "^2.2.3", "react-device-detect": "^2.2.3",
"react-dom": "^18.3.1", "react-dom": "^19.1.0",
"react-draggable": "^4.4.6", "react-draggable": "^4.4.6",
"react-ga4": "^2.1.0", "react-ga4": "^2.1.0",
"react-helmet": "^6.1.0", "react-icons": "^5.5.0",
"react-icons": "^5.3.0",
"react-infinite-scroller": "^1.2.6", "react-infinite-scroller": "^1.2.6",
"react-redux": "^9.1.2", "react-redux": "^9.2.0",
"react-router-dom": "^7.0.1", "react-router-dom": "^7.4.1",
"react-swipeable": "^7.0.2", "react-swipeable": "^7.0.2",
"redoc": "^2.2.0", "redoc": "^2.4.0",
"style-to-object": "^1.0.8", "style-to-object": "^1.0.8",
"throttle-debounce": "^5.0.2", "throttle-debounce": "^5.0.2",
"tinycon": "^0.6.8", "tinycon": "^0.6.8",
"tss-react": "^4.9.13", "tss-react": "^4.9.16",
"websocket-heartbeat-js": "^1.1.3" "websocket-heartbeat-js": "^1.1.3"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.4", "@biomejs/biome": "^1.9.4",
"@lingui/babel-plugin-lingui-macro": "^5.0.0", "@lingui/babel-plugin-lingui-macro": "^5.3.0",
"@lingui/cli": "^5.0.0", "@lingui/cli": "^5.3.0",
"@lingui/vite-plugin": "^5.0.0", "@lingui/vite-plugin": "^5.3.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/mousetrap": "^1.6.15", "@types/mousetrap": "^1.6.15",
"@types/react": "^18.3.12", "@types/react": "^19.1.0",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^19.1.1",
"@types/react-helmet": "^6.1.11",
"@types/react-infinite-scroller": "^1.2.5", "@types/react-infinite-scroller": "^1.2.5",
"@types/swagger-ui-react": "^4.18.3",
"@types/throttle-debounce": "^5.0.2", "@types/throttle-debounce": "^5.0.2",
"@types/tinycon": "^0.6.7", "@types/tinycon": "^0.6.7",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"babel-plugin-macros": "^3.1.0", "babel-plugin-macros": "^3.1.0",
"jsdom": "^25.0.1", "jsdom": "^26.0.0",
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.14.0",
"typescript": "^5.7.2", "typescript": "^5.8.2",
"vite": "^5.4.11", "vite": "^6.2.5",
"vite-plugin-checker": "^0.8.0", "vite-plugin-checker": "^0.9.1",
"vite-tsconfig-paths": "^5.1.3", "vite-tsconfig-paths": "^5.1.4",
"vitest": "^2.1.8", "vitest": "^3.1.1"
"vitest-mock-extended": "^2.0.2" },
"overrides": {
"react-infinite-scroller": {
"react": "^19.1.0"
}
} }
} }

View File

@@ -6,16 +6,16 @@
<parent> <parent>
<groupId>com.commafeed</groupId> <groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId> <artifactId>commafeed</artifactId>
<version>5.3.6</version> <version>5.7.0</version>
</parent> </parent>
<artifactId>commafeed-client</artifactId> <artifactId>commafeed-client</artifactId>
<name>CommaFeed Client</name> <name>CommaFeed Client</name>
<properties> <properties>
<!-- renovate: datasource=node-version depName=node --> <!-- renovate: datasource=node-version depName=node -->
<node.version>v22.11.0</node.version> <node.version>v22.14.0</node.version>
<!-- renovate: datasource=npm depName=npm --> <!-- renovate: datasource=npm depName=npm -->
<npm.version>10.9.1</npm.version> <npm.version>11.2.0</npm.version>
</properties> </properties>
<build> <build>
@@ -55,6 +55,7 @@
<phase>compile</phase> <phase>compile</phase>
<configuration> <configuration>
<arguments>run test:ci</arguments> <arguments>run test:ci</arguments>
<skip>${skipTests}</skip>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>

View File

@@ -12,6 +12,7 @@ import { DisablePullToRefresh } from "components/DisablePullToRefresh"
import { ErrorBoundary } from "components/ErrorBoundary" import { ErrorBoundary } from "components/ErrorBoundary"
import { Header } from "components/header/Header" import { Header } from "components/header/Header"
import { Tree } from "components/sidebar/Tree" import { Tree } from "components/sidebar/Tree"
import { useAppLoading } from "hooks/useAppLoading"
import { useBrowserExtension } from "hooks/useBrowserExtension" import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useI18n } from "i18n" import { useI18n } from "i18n"
import { WelcomePage } from "pages/WelcomePage" import { WelcomePage } from "pages/WelcomePage"
@@ -29,10 +30,9 @@ import { TagDetailsPage } from "pages/app/TagDetailsPage"
import { LoginPage } from "pages/auth/LoginPage" import { LoginPage } from "pages/auth/LoginPage"
import { PasswordRecoveryPage } from "pages/auth/PasswordRecoveryPage" import { PasswordRecoveryPage } from "pages/auth/PasswordRecoveryPage"
import { RegistrationPage } from "pages/auth/RegistrationPage" import { RegistrationPage } from "pages/auth/RegistrationPage"
import React, { useEffect } from "react" import React, { useEffect, useState } from "react"
import { isSafari } from "react-device-detect" import { isSafari } from "react-device-detect"
import ReactGA from "react-ga4" import ReactGA from "react-ga4"
import { Helmet } from "react-helmet"
import { HashRouter, Navigate, Route, Routes, useLocation, useNavigate } from "react-router-dom" import { HashRouter, Navigate, Route, Routes, useLocation, useNavigate } from "react-router-dom"
import Tinycon from "tinycon" import Tinycon from "tinycon"
@@ -143,7 +143,7 @@ function GoogleAnalyticsHandler() {
} }
function UnreadCountTitleHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) { function UnreadCountTitleHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) {
return <Helmet title={enabled && unreadCount > 0 ? `(${unreadCount}) CommaFeed` : "CommaFeed"} /> return <title>{enabled && unreadCount > 0 ? `(${unreadCount}) CommaFeed` : "CommaFeed"}</title>
} }
function UnreadCountFaviconHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) { function UnreadCountFaviconHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) {
@@ -170,13 +170,36 @@ function BrowserExtensionBadgeUnreadCountHandler() {
return null return null
} }
function CustomCode() { function CustomJsHandler() {
return ( const [scriptLoaded, setScriptLoaded] = useState(false)
<Helmet> const { loading } = useAppLoading()
<link rel="stylesheet" type="text/css" href="custom_css.css" />
<script type="text/javascript" src="custom_js.js" /> useEffect(() => {
</Helmet> if (scriptLoaded || loading) {
) return
}
const script = document.createElement("script")
script.src = "custom_js.js"
script.async = true
document.body.appendChild(script)
setScriptLoaded(true)
}, [scriptLoaded, loading])
return null
}
function CustomCssHandler() {
useEffect(() => {
const link = document.createElement("link")
link.rel = "stylesheet"
link.type = "text/css"
link.href = "custom_css.css"
document.head.appendChild(link)
}, [])
return null
} }
export function App() { export function App() {
@@ -198,16 +221,19 @@ export function App() {
<UnreadCountTitleHandler unreadCount={unreadCount} enabled={unreadCountTitle} /> <UnreadCountTitleHandler unreadCount={unreadCount} enabled={unreadCountTitle} />
<UnreadCountFaviconHandler unreadCount={unreadCount} enabled={unreadCountFavicon} /> <UnreadCountFaviconHandler unreadCount={unreadCount} enabled={unreadCountFavicon} />
<BrowserExtensionBadgeUnreadCountHandler /> <BrowserExtensionBadgeUnreadCountHandler />
<CustomJsHandler />
<CustomCssHandler />
{/* disable pull-to-refresh as it messes with vertical scrolling
safari behaves weirdly when overscroll-behavior is set to none so we disable it only for other browsers
https://github.com/Athou/commafeed/issues/1168
*/}
{!isSafari && <DisablePullToRefresh />}
<HashRouter> <HashRouter>
<GoogleAnalyticsHandler /> <GoogleAnalyticsHandler />
<RedirectHandler /> <RedirectHandler />
<AppRoutes /> <AppRoutes />
<CustomCode />
{/* disable pull-to-refresh as it messes with vertical scrolling
safari behaves weirdly when overscroll-behavior is set to none so we disable it only for other browsers
https://github.com/Athou/commafeed/issues/1168
*/}
{!isSafari && <DisablePullToRefresh />}
</HashRouter> </HashRouter>
</> </>
</Providers> </Providers>

View File

@@ -1,13 +1,11 @@
import { t } from "@lingui/core/macro"
import type { IconType } from "react-icons" import type { IconType } from "react-icons"
import { FaAt } from "react-icons/fa" import { FaAt } from "react-icons/fa"
import { SiBuffer, SiFacebook, SiGmail, SiInstapaper, SiPocket, SiTumblr, SiX } from "react-icons/si" import { SiBuffer, SiFacebook, SiGmail, SiInstapaper, SiPocket, SiTumblr, SiX } from "react-icons/si"
import type { Category, Entry, SharingSettings } from "./types" import type { Category, Entry, SharingSettings } from "./types"
const categories: Record<string, Category> = { const categories: Record<string, Omit<Category, "name">> = {
all: { all: {
id: "all", id: "all",
name: t`All`,
expanded: false, expanded: false,
children: [], children: [],
feeds: [], feeds: [],
@@ -15,7 +13,6 @@ const categories: Record<string, Category> = {
}, },
starred: { starred: {
id: "starred", id: "starred",
name: t`Starred`,
expanded: false, expanded: false,
children: [], children: [],
feeds: [], feeds: [],

View File

@@ -1,25 +1,20 @@
import { configureStore } from "@reduxjs/toolkit" import { configureStore } from "@reduxjs/toolkit"
import type { client } from "app/client" import { client } from "app/client"
import { loadEntries, loadMoreEntries, markAllEntries, markEntry } from "app/entries/thunks" import { loadEntries, loadMoreEntries, markAllEntries, markEntry } from "app/entries/thunks"
import { type RootState, reducers } from "app/store" import { type RootState, reducers } from "app/store"
import type { Entries, Entry } from "app/types" import type { Entries, Entry } from "app/types"
import type { AxiosResponse } from "axios" import type { AxiosResponse } from "axios"
import { beforeEach, describe, expect, it, vi } from "vitest" import { beforeEach, describe, expect, it, vi } from "vitest"
import { any, mockReset } from "vitest-mock-extended"
const mockClient = await vi.hoisted(async () => { vi.mock(import("app/client"))
const mockModule = await import("vitest-mock-extended")
return mockModule.mockDeep<typeof client>()
})
vi.mock("app/client", () => ({ client: mockClient }))
describe("entries", () => { describe("entries", () => {
beforeEach(() => { beforeEach(() => {
mockReset(mockClient) vi.resetAllMocks()
}) })
it("loads entries", async () => { it("loads entries", async () => {
mockClient.feed.getEntries.calledWith(any()).mockResolvedValue({ vi.mocked(client.feed.getEntries).mockResolvedValue({
data: { data: {
entries: [{ id: "3" } as Entry], entries: [{ id: "3" } as Entry],
hasMore: false, hasMore: false,
@@ -53,7 +48,7 @@ describe("entries", () => {
}) })
it("loads more entries", async () => { it("loads more entries", async () => {
mockClient.category.getEntries.calledWith(any()).mockResolvedValue({ vi.mocked(client.category.getEntries).mockResolvedValue({
data: { data: {
entries: [{ id: "4" } as Entry], entries: [{ id: "4" } as Entry],
hasMore: false, hasMore: false,
@@ -113,7 +108,7 @@ describe("entries", () => {
{ id: "3", read: true }, { id: "3", read: true },
{ id: "4", read: false }, { id: "4", read: false },
]) ])
expect(mockClient.entry.mark).toHaveBeenCalledWith({ id: "3", read: true }) expect(client.entry.mark).toHaveBeenCalledWith({ id: "3", read: true })
}) })
it("marks all entries as read", () => { it("marks all entries as read", () => {
@@ -140,6 +135,6 @@ describe("entries", () => {
{ id: "3", read: true }, { id: "3", read: true },
{ id: "4", read: true }, { id: "4", read: true },
]) ])
expect(mockClient.category.markEntries).toHaveBeenCalledWith({ id: "all", read: true }) expect(client.category.markEntries).toHaveBeenCalledWith({ id: "all", read: true })
}) })
}) })

View File

@@ -11,6 +11,7 @@ import { flushSync } from "react-dom"
const getEndpoint = (sourceType: EntrySourceType) => const getEndpoint = (sourceType: EntrySourceType) =>
sourceType === "category" || sourceType === "tag" ? client.category.getEntries : client.feed.getEntries sourceType === "category" || sourceType === "tag" ? client.category.getEntries : client.feed.getEntries
export const loadEntries = createAppAsyncThunk( export const loadEntries = createAppAsyncThunk(
"entries/load", "entries/load",
async ( async (
@@ -28,6 +29,7 @@ export const loadEntries = createAppAsyncThunk(
return result.data return result.data
} }
) )
export const loadMoreEntries = createAppAsyncThunk("entries/loadMore", async (_, thunkApi) => { export const loadMoreEntries = createAppAsyncThunk("entries/loadMore", async (_, thunkApi) => {
const state = thunkApi.getState() const state = thunkApi.getState()
const { source } = state.entries const { source } = state.entries
@@ -37,6 +39,7 @@ export const loadMoreEntries = createAppAsyncThunk("entries/loadMore", async (_,
const result = await endpoint(buildGetEntriesPaginatedRequest(state, source, offset)) const result = await endpoint(buildGetEntriesPaginatedRequest(state, source, offset))
return result.data return result.data
}) })
const buildGetEntriesPaginatedRequest = (state: RootState, source: EntrySource, offset: number) => ({ const buildGetEntriesPaginatedRequest = (state: RootState, source: EntrySource, offset: number) => ({
id: source.type === "tag" ? Constants.categories.all.id : source.id, id: source.type === "tag" ? Constants.categories.all.id : source.id,
order: state.user.settings?.readingOrder, order: state.user.settings?.readingOrder,
@@ -46,15 +49,18 @@ const buildGetEntriesPaginatedRequest = (state: RootState, source: EntrySource,
tag: source.type === "tag" ? source.id : undefined, tag: source.type === "tag" ? source.id : undefined,
keywords: state.entries.search, keywords: state.entries.search,
}) })
export const reloadEntries = createAppAsyncThunk("entries/reload", (arg, thunkApi) => { export const reloadEntries = createAppAsyncThunk("entries/reload", (arg, thunkApi) => {
const state = thunkApi.getState() const state = thunkApi.getState()
thunkApi.dispatch(loadEntries({ source: state.entries.source, clearSearch: false })) thunkApi.dispatch(loadEntries({ source: state.entries.source, clearSearch: false }))
}) })
export const search = createAppAsyncThunk("entries/search", (arg: string, thunkApi) => { export const search = createAppAsyncThunk("entries/search", (arg: string, thunkApi) => {
const state = thunkApi.getState() const state = thunkApi.getState()
thunkApi.dispatch(setSearch(arg)) thunkApi.dispatch(setSearch(arg))
thunkApi.dispatch(loadEntries({ source: state.entries.source, clearSearch: false })) thunkApi.dispatch(loadEntries({ source: state.entries.source, clearSearch: false }))
}) })
export const markEntry = createAppAsyncThunk( export const markEntry = createAppAsyncThunk(
"entries/entry/mark", "entries/entry/mark",
(arg: { entry: Entry; read: boolean }) => { (arg: { entry: Entry; read: boolean }) => {
@@ -67,6 +73,7 @@ export const markEntry = createAppAsyncThunk(
condition: arg => arg.entry.markable && arg.entry.read !== arg.read, condition: arg => arg.entry.markable && arg.entry.read !== arg.read,
} }
) )
export const markMultipleEntries = createAppAsyncThunk( export const markMultipleEntries = createAppAsyncThunk(
"entries/entry/markMultiple", "entries/entry/markMultiple",
async ( async (
@@ -84,6 +91,7 @@ export const markMultipleEntries = createAppAsyncThunk(
thunkApi.dispatch(reloadTree()) thunkApi.dispatch(reloadTree())
} }
) )
export const markEntriesUpToEntry = createAppAsyncThunk("entries/entry/upToEntry", (arg: Entry, thunkApi) => { export const markEntriesUpToEntry = createAppAsyncThunk("entries/entry/upToEntry", (arg: Entry, thunkApi) => {
const state = thunkApi.getState() const state = thunkApi.getState()
const { entries } = state.entries const { entries } = state.entries
@@ -98,6 +106,7 @@ export const markEntriesUpToEntry = createAppAsyncThunk("entries/entry/upToEntry
}) })
) )
}) })
export const markAllEntries = createAppAsyncThunk( export const markAllEntries = createAppAsyncThunk(
"entries/entry/markAll", "entries/entry/markAll",
async ( async (
@@ -113,6 +122,7 @@ export const markAllEntries = createAppAsyncThunk(
thunkApi.dispatch(reloadTree()) thunkApi.dispatch(reloadTree())
} }
) )
export const starEntry = createAppAsyncThunk( export const starEntry = createAppAsyncThunk(
"entries/entry/star", "entries/entry/star",
(arg: { entry: Entry; starred: boolean }) => { (arg: { entry: Entry; starred: boolean }) => {
@@ -126,6 +136,7 @@ export const starEntry = createAppAsyncThunk(
condition: arg => arg.entry.markable && arg.entry.starred !== arg.starred, condition: arg => arg.entry.markable && arg.entry.starred !== arg.starred,
} }
) )
export const selectEntry = createAppAsyncThunk( export const selectEntry = createAppAsyncThunk(
"entries/entry/select", "entries/entry/select",
( (
@@ -191,6 +202,7 @@ export const selectEntry = createAppAsyncThunk(
} }
} }
) )
const scrollToEntry = (entryElement: HTMLElement, margin: number, scrollSpeed: number | undefined, onScrollEnded: () => void) => { const scrollToEntry = (entryElement: HTMLElement, margin: number, scrollSpeed: number | undefined, onScrollEnded: () => void) => {
const header = document.getElementById(Constants.dom.headerId)?.getBoundingClientRect() const header = document.getElementById(Constants.dom.headerId)?.getBoundingClientRect()
const offset = (header?.bottom ?? 0) + margin const offset = (header?.bottom ?? 0) + margin
@@ -228,6 +240,7 @@ export const selectPreviousEntry = createAppAsyncThunk(
} }
} }
) )
export const selectNextEntry = createAppAsyncThunk( export const selectNextEntry = createAppAsyncThunk(
"entries/entry/selectNext", "entries/entry/selectNext",
async ( async (
@@ -261,6 +274,7 @@ export const selectNextEntry = createAppAsyncThunk(
} }
} }
) )
export const tagEntry = createAppAsyncThunk("entries/entry/tag", async (arg: TagRequest, thunkApi) => { export const tagEntry = createAppAsyncThunk("entries/entry/tag", async (arg: TagRequest, thunkApi) => {
await client.entry.tag(arg) await client.entry.tag(arg)
thunkApi.dispatch(reloadTags()) thunkApi.dispatch(reloadTags())

View File

@@ -3,43 +3,55 @@ import { Constants } from "app/constants"
import { redirectTo } from "app/redirect/slice" import { redirectTo } from "app/redirect/slice"
export const redirectToLogin = createAppAsyncThunk("redirect/login", (_, thunkApi) => thunkApi.dispatch(redirectTo("/login"))) export const redirectToLogin = createAppAsyncThunk("redirect/login", (_, thunkApi) => thunkApi.dispatch(redirectTo("/login")))
export const redirectToRegistration = createAppAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register"))) export const redirectToRegistration = createAppAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register")))
export const redirectToPasswordRecovery = createAppAsyncThunk("redirect/passwordRecovery", (_, thunkApi) =>
thunkApi.dispatch(redirectTo("/passwordRecovery"))
)
export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/api"))) export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/api")))
export const redirectToSelectedSource = createAppAsyncThunk("redirect/selectedSource", (_, thunkApi) => { export const redirectToSelectedSource = createAppAsyncThunk("redirect/selectedSource", (_, thunkApi) => {
const { source } = thunkApi.getState().entries const { source } = thunkApi.getState().entries
thunkApi.dispatch(redirectTo(`/app/${source.type}/${source.id}`)) thunkApi.dispatch(redirectTo(`/app/${source.type}/${source.id}`))
}) })
export const redirectToCategory = createAppAsyncThunk("redirect/category", (id: string, thunkApi) => export const redirectToCategory = createAppAsyncThunk("redirect/category", (id: string, thunkApi) =>
thunkApi.dispatch(redirectTo(`/app/category/${id}`)) thunkApi.dispatch(redirectTo(`/app/category/${id}`))
) )
export const redirectToRootCategory = createAppAsyncThunk( export const redirectToRootCategory = createAppAsyncThunk(
"redirect/category/root", "redirect/category/root",
async (_, thunkApi) => await thunkApi.dispatch(redirectToCategory(Constants.categories.all.id)) async (_, thunkApi) => await thunkApi.dispatch(redirectToCategory(Constants.categories.all.id))
) )
export const redirectToCategoryDetails = createAppAsyncThunk("redirect/category/details", (id: string, thunkApi) => export const redirectToCategoryDetails = createAppAsyncThunk("redirect/category/details", (id: string, thunkApi) =>
thunkApi.dispatch(redirectTo(`/app/category/${id}/details`)) thunkApi.dispatch(redirectTo(`/app/category/${id}/details`))
) )
export const redirectToFeed = createAppAsyncThunk("redirect/feed", (id: string | number, thunkApi) => export const redirectToFeed = createAppAsyncThunk("redirect/feed", (id: string | number, thunkApi) =>
thunkApi.dispatch(redirectTo(`/app/feed/${id}`)) thunkApi.dispatch(redirectTo(`/app/feed/${id}`))
) )
export const redirectToFeedDetails = createAppAsyncThunk("redirect/feed/details", (id: string, thunkApi) => export const redirectToFeedDetails = createAppAsyncThunk("redirect/feed/details", (id: string, thunkApi) =>
thunkApi.dispatch(redirectTo(`/app/feed/${id}/details`)) thunkApi.dispatch(redirectTo(`/app/feed/${id}/details`))
) )
export const redirectToTag = createAppAsyncThunk("redirect/tag", (id: string, thunkApi) => thunkApi.dispatch(redirectTo(`/app/tag/${id}`))) export const redirectToTag = createAppAsyncThunk("redirect/tag", (id: string, thunkApi) => thunkApi.dispatch(redirectTo(`/app/tag/${id}`)))
export const redirectToTagDetails = createAppAsyncThunk("redirect/tag/details", (id: string, thunkApi) => export const redirectToTagDetails = createAppAsyncThunk("redirect/tag/details", (id: string, thunkApi) =>
thunkApi.dispatch(redirectTo(`/app/tag/${id}/details`)) thunkApi.dispatch(redirectTo(`/app/tag/${id}/details`))
) )
export const redirectToAdd = createAppAsyncThunk("redirect/add", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/add"))) export const redirectToAdd = createAppAsyncThunk("redirect/add", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/add")))
export const redirectToSettings = createAppAsyncThunk("redirect/settings", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/settings"))) export const redirectToSettings = createAppAsyncThunk("redirect/settings", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/settings")))
export const redirectToAdminUsers = createAppAsyncThunk("redirect/admin/users", (_, thunkApi) => export const redirectToAdminUsers = createAppAsyncThunk("redirect/admin/users", (_, thunkApi) =>
thunkApi.dispatch(redirectTo("/app/admin/users")) thunkApi.dispatch(redirectTo("/app/admin/users"))
) )
export const redirectToMetrics = createAppAsyncThunk("redirect/admin/metrics", (_, thunkApi) => export const redirectToMetrics = createAppAsyncThunk("redirect/admin/metrics", (_, thunkApi) =>
thunkApi.dispatch(redirectTo("/app/admin/metrics")) thunkApi.dispatch(redirectTo("/app/admin/metrics"))
) )
export const redirectToDonate = createAppAsyncThunk("redirect/donate", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/donate"))) export const redirectToDonate = createAppAsyncThunk("redirect/donate", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/donate")))
export const redirectToAbout = createAppAsyncThunk("redirect/about", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/about"))) export const redirectToAbout = createAppAsyncThunk("redirect/about", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/about")))

View File

@@ -1,9 +1,80 @@
import { createAppAsyncThunk } from "app/async-thunk" import { createAppAsyncThunk } from "app/async-thunk"
import { client } from "app/client" import { client } from "app/client"
import type { CollapseRequest } from "app/types" import { redirectToCategory, redirectToFeed } from "app/redirect/thunks"
import { incrementUnreadCount } from "app/tree/slice"
import type { CollapseRequest, Subscription } from "app/types"
import { flattenCategoryTree, visitCategoryTree } from "app/utils"
export const reloadTree = createAppAsyncThunk("tree/reload", async () => await client.category.getRoot().then(r => r.data)) export const reloadTree = createAppAsyncThunk("tree/reload", async () => await client.category.getRoot().then(r => r.data))
export const collapseTreeCategory = createAppAsyncThunk( export const collapseTreeCategory = createAppAsyncThunk(
"tree/category/collapse", "tree/category/collapse",
async (req: CollapseRequest) => await client.category.collapse(req) async (req: CollapseRequest) => await client.category.collapse(req)
) )
export const selectNextUnreadTreeItem = createAppAsyncThunk(
"tree/selectNextUnreadItem",
(
arg: {
direction: "forward" | "backward"
},
thunkApi
) => {
const state = thunkApi.getState()
const root = state.tree.rootCategory
if (!root) return
const { source } = state.entries
if (source.type === "category") {
const categories = flattenCategoryTree(root)
if (arg.direction === "backward") categories.reverse()
const index = categories.findIndex(c => c.id === source.id)
if (index === -1) return
for (let i = index + 1; i < categories.length; i++) {
const c = categories[i]
if (c.feeds.some(f => f.unread > 0)) {
return thunkApi.dispatch(redirectToCategory(String(c.id)))
}
}
} else if (source.type === "feed") {
const feeds: Subscription[] = []
visitCategoryTree(root, c => feeds.push(...c.feeds), { childrenFirst: true })
if (arg.direction === "backward") feeds.reverse()
const index = feeds.findIndex(f => f.id === +source.id)
if (index === -1) return
for (let i = index + 1; i < feeds.length; i++) {
const f = feeds[i]
if (f.unread > 0) {
return thunkApi.dispatch(redirectToFeed(String(f.id)))
}
}
}
}
)
export const newFeedEntriesDiscovered = createAppAsyncThunk(
"tree/new-feed-entries-discovered",
async ({ feedId, amount }: { feedId: number; amount: number }, thunkApi) => {
const root = thunkApi.getState().tree.rootCategory
if (!root) return
const feed = flattenCategoryTree(root)
.flatMap(c => c.feeds)
.some(f => f.id === feedId)
if (!feed) {
// feed not found in the tree, reload the tree completely
thunkApi.dispatch(reloadTree())
} else {
thunkApi.dispatch(
incrementUnreadCount({
feedId,
amount,
})
)
}
}
)

View File

@@ -0,0 +1,119 @@
import { configureStore } from "@reduxjs/toolkit"
import { type RootState, reducers } from "app/store"
import { selectNextUnreadTreeItem } from "app/tree/thunks"
import type { Category, Subscription } from "app/types"
import { describe, expect, it } from "vitest"
const createCategory = (id: string): Category => ({
id,
name: id,
children: [],
feeds: [],
expanded: true,
position: 0,
})
const createFeed = (id: number, unread: number): Subscription => ({
id,
name: String(id),
unread,
errorCount: 0,
position: 0,
feedUrl: "",
feedLink: "",
iconUrl: "",
})
const root = createCategory("root")
const catA = createCategory("catA")
catA.feeds.push(createFeed(1, 0), createFeed(2, 0), createFeed(3, 1))
const catB = createCategory("catB")
const catC = createCategory("catC")
catC.feeds.push(createFeed(4, 1))
root.children.push(catA, catB, catC)
describe("selectNextUnreadTreeItem", () => {
it("selects the next unread category", async () => {
const store = configureStore({
reducer: reducers,
preloadedState: {
tree: {
rootCategory: root,
},
entries: {
source: {
type: "category",
id: "catA",
},
},
} as RootState,
})
await store.dispatch(selectNextUnreadTreeItem({ direction: "forward" }))
expect(store.getState().redirect.to).toBe("/app/category/catC")
})
it("selects the previous unread category", async () => {
const store = configureStore({
reducer: reducers,
preloadedState: {
tree: {
rootCategory: root,
},
entries: {
source: {
type: "category",
id: "catC",
},
},
} as RootState,
})
await store.dispatch(selectNextUnreadTreeItem({ direction: "backward" }))
expect(store.getState().redirect.to).toBe("/app/category/catA")
})
it("selects the next unread feed", async () => {
const store = configureStore({
reducer: reducers,
preloadedState: {
tree: {
rootCategory: root,
},
entries: {
source: {
type: "feed",
id: "1",
},
},
} as RootState,
})
await store.dispatch(selectNextUnreadTreeItem({ direction: "forward" }))
expect(store.getState().redirect.to).toBe("/app/feed/3")
})
it("selects the previous unread feed", async () => {
const store = configureStore({
reducer: reducers,
preloadedState: {
tree: {
rootCategory: root,
},
entries: {
source: {
type: "feed",
id: "4",
},
},
} as RootState,
})
await store.dispatch(selectNextUnreadTreeItem({ direction: "backward" }))
expect(store.getState().redirect.to).toBe("/app/feed/3")
})
})

View File

@@ -4,45 +4,55 @@ import { reloadEntries } from "app/entries/thunks"
import type { IconDisplayMode, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "app/types" import type { IconDisplayMode, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "app/types"
export const reloadSettings = createAppAsyncThunk("settings/reload", async () => await client.user.getSettings().then(r => r.data)) export const reloadSettings = createAppAsyncThunk("settings/reload", async () => await client.user.getSettings().then(r => r.data))
export const reloadProfile = createAppAsyncThunk("profile/reload", async () => await client.user.getProfile().then(r => r.data)) export const reloadProfile = createAppAsyncThunk("profile/reload", async () => await client.user.getProfile().then(r => r.data))
export const reloadTags = createAppAsyncThunk("entries/tags", async () => await client.entry.getTags().then(r => r.data)) export const reloadTags = createAppAsyncThunk("entries/tags", async () => await client.entry.getTags().then(r => r.data))
export const changeReadingMode = createAppAsyncThunk("settings/readingMode", (readingMode: ReadingMode, thunkApi) => { export const changeReadingMode = createAppAsyncThunk("settings/readingMode", (readingMode: ReadingMode, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, readingMode }) client.user.saveSettings({ ...settings, readingMode })
thunkApi.dispatch(reloadEntries()) thunkApi.dispatch(reloadEntries())
}) })
export const changeReadingOrder = createAppAsyncThunk("settings/readingOrder", (readingOrder: ReadingOrder, thunkApi) => { export const changeReadingOrder = createAppAsyncThunk("settings/readingOrder", (readingOrder: ReadingOrder, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, readingOrder }) client.user.saveSettings({ ...settings, readingOrder })
thunkApi.dispatch(reloadEntries()) thunkApi.dispatch(reloadEntries())
}) })
export const changeLanguage = createAppAsyncThunk("settings/language", (language: string, thunkApi) => { export const changeLanguage = createAppAsyncThunk("settings/language", (language: string, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, language }) client.user.saveSettings({ ...settings, language })
}) })
export const changeScrollSpeed = createAppAsyncThunk("settings/scrollSpeed", (speed: boolean, thunkApi) => { export const changeScrollSpeed = createAppAsyncThunk("settings/scrollSpeed", (speed: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, scrollSpeed: speed ? 400 : 0 }) client.user.saveSettings({ ...settings, scrollSpeed: speed ? 400 : 0 })
}) })
export const changeShowRead = createAppAsyncThunk("settings/showRead", (showRead: boolean, thunkApi) => { export const changeShowRead = createAppAsyncThunk("settings/showRead", (showRead: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, showRead }) client.user.saveSettings({ ...settings, showRead })
}) })
export const changeScrollMarks = createAppAsyncThunk("settings/scrollMarks", (scrollMarks: boolean, thunkApi) => { export const changeScrollMarks = createAppAsyncThunk("settings/scrollMarks", (scrollMarks: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, scrollMarks }) client.user.saveSettings({ ...settings, scrollMarks })
}) })
export const changeScrollMode = createAppAsyncThunk("settings/scrollMode", (scrollMode: ScrollMode, thunkApi) => { export const changeScrollMode = createAppAsyncThunk("settings/scrollMode", (scrollMode: ScrollMode, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, scrollMode }) client.user.saveSettings({ ...settings, scrollMode })
}) })
export const changeEntriesToKeepOnTopWhenScrolling = createAppAsyncThunk( export const changeEntriesToKeepOnTopWhenScrolling = createAppAsyncThunk(
"settings/entriesToKeepOnTopWhenScrolling", "settings/entriesToKeepOnTopWhenScrolling",
(entriesToKeepOnTopWhenScrolling: number, thunkApi) => { (entriesToKeepOnTopWhenScrolling: number, thunkApi) => {
@@ -51,6 +61,7 @@ export const changeEntriesToKeepOnTopWhenScrolling = createAppAsyncThunk(
client.user.saveSettings({ ...settings, entriesToKeepOnTopWhenScrolling }) client.user.saveSettings({ ...settings, entriesToKeepOnTopWhenScrolling })
} }
) )
export const changeStarIconDisplayMode = createAppAsyncThunk( export const changeStarIconDisplayMode = createAppAsyncThunk(
"settings/starIconDisplayMode", "settings/starIconDisplayMode",
(starIconDisplayMode: IconDisplayMode, thunkApi) => { (starIconDisplayMode: IconDisplayMode, thunkApi) => {
@@ -59,6 +70,7 @@ export const changeStarIconDisplayMode = createAppAsyncThunk(
client.user.saveSettings({ ...settings, starIconDisplayMode }) client.user.saveSettings({ ...settings, starIconDisplayMode })
} }
) )
export const changeExternalLinkIconDisplayMode = createAppAsyncThunk( export const changeExternalLinkIconDisplayMode = createAppAsyncThunk(
"settings/externalLinkIconDisplayMode", "settings/externalLinkIconDisplayMode",
(externalLinkIconDisplayMode: IconDisplayMode, thunkApi) => { (externalLinkIconDisplayMode: IconDisplayMode, thunkApi) => {
@@ -67,6 +79,7 @@ export const changeExternalLinkIconDisplayMode = createAppAsyncThunk(
client.user.saveSettings({ ...settings, externalLinkIconDisplayMode }) client.user.saveSettings({ ...settings, externalLinkIconDisplayMode })
} }
) )
export const changeMarkAllAsReadConfirmation = createAppAsyncThunk( export const changeMarkAllAsReadConfirmation = createAppAsyncThunk(
"settings/markAllAsReadConfirmation", "settings/markAllAsReadConfirmation",
(markAllAsReadConfirmation: boolean, thunkApi) => { (markAllAsReadConfirmation: boolean, thunkApi) => {
@@ -75,26 +88,31 @@ export const changeMarkAllAsReadConfirmation = createAppAsyncThunk(
client.user.saveSettings({ ...settings, markAllAsReadConfirmation }) client.user.saveSettings({ ...settings, markAllAsReadConfirmation })
} }
) )
export const changeCustomContextMenu = createAppAsyncThunk("settings/customContextMenu", (customContextMenu: boolean, thunkApi) => { export const changeCustomContextMenu = createAppAsyncThunk("settings/customContextMenu", (customContextMenu: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, customContextMenu }) client.user.saveSettings({ ...settings, customContextMenu })
}) })
export const changeMobileFooter = createAppAsyncThunk("settings/mobileFooter", (mobileFooter: boolean, thunkApi) => { export const changeMobileFooter = createAppAsyncThunk("settings/mobileFooter", (mobileFooter: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, mobileFooter }) client.user.saveSettings({ ...settings, mobileFooter })
}) })
export const changeUnreadCountTitle = createAppAsyncThunk("settings/unreadCountTitle", (unreadCountTitle: boolean, thunkApi) => { export const changeUnreadCountTitle = createAppAsyncThunk("settings/unreadCountTitle", (unreadCountTitle: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, unreadCountTitle }) client.user.saveSettings({ ...settings, unreadCountTitle })
}) })
export const changeUnreadCountFavicon = createAppAsyncThunk("settings/unreadCountFavicon", (unreadCountFavicon: boolean, thunkApi) => { export const changeUnreadCountFavicon = createAppAsyncThunk("settings/unreadCountFavicon", (unreadCountFavicon: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user const { settings } = thunkApi.getState().user
if (!settings) return if (!settings) return
client.user.saveSettings({ ...settings, unreadCountFavicon }) client.user.saveSettings({ ...settings, unreadCountFavicon })
}) })
export const changeSharingSetting = createAppAsyncThunk( export const changeSharingSetting = createAppAsyncThunk(
"settings/sharingSetting", "settings/sharingSetting",
( (

View File

@@ -1,11 +1,22 @@
import { throttle } from "throttle-debounce" import { throttle } from "throttle-debounce"
import type { Category } from "./types" import type { Category } from "./types"
export function visitCategoryTree(category: Category, visitor: (category: Category) => void): void { export function visitCategoryTree(
visitor(category) category: Category,
for (const child of category.children) { visitor: (category: Category) => void,
visitCategoryTree(child, visitor) options?: {
childrenFirst?: boolean
} }
): void {
const childrenFirst = options?.childrenFirst
if (!childrenFirst) visitor(category)
for (const child of category.children) {
visitCategoryTree(child, visitor, options)
}
if (childrenFirst) visitor(category)
} }
export function flattenCategoryTree(category: Category): Category[] { export function flattenCategoryTree(category: Category): Category[] {

View File

@@ -0,0 +1,47 @@
import type { I18nContext } from "@lingui/react"
import { MantineProvider } from "@mantine/core"
import { fireEvent, render, screen, waitFor } from "@testing-library/react"
import { useActionButton } from "hooks/useActionButton"
import { describe, expect, it, vi } from "vitest"
import { ActionButton } from "./ActionButton"
vi.mock(import("@lingui/react"), () => ({
useLingui: vi.fn().mockReturnValue({
_: msg => msg,
} as I18nContext),
}))
vi.mock(import("hooks/useActionButton"))
const label = "Test Label"
const icon = "Test Icon"
describe("ActionButton", () => {
it("renders Button with label on desktop", () => {
vi.mocked(useActionButton).mockReturnValue({ mobile: false, spacing: 0 })
render(<ActionButton label={label} icon={icon} />, { wrapper: MantineProvider })
expect(screen.getByText(label)).toBeInTheDocument()
expect(screen.getByText(icon)).toBeInTheDocument()
})
it("renders ActionIcon with tooltip on mobile", async () => {
vi.mocked(useActionButton).mockReturnValue({ mobile: true, spacing: 0 })
render(<ActionButton label={label} icon={icon} />, { wrapper: MantineProvider })
expect(screen.queryByText(label)).not.toBeInTheDocument()
expect(screen.getByText(icon)).toBeInTheDocument()
fireEvent.mouseEnter(screen.getByRole("button"))
const tooltip = await waitFor(() => screen.getByRole("tooltip"))
expect(tooltip).toContainHTML(label)
})
it("calls onClick handler when clicked", () => {
vi.mocked(useActionButton).mockReturnValue({ mobile: false, spacing: 0 })
const clickListener = vi.fn()
render(<ActionButton label={label} icon={icon} onClick={clickListener} />, { wrapper: MantineProvider })
fireEvent.click(screen.getByRole("button"))
expect(clickListener).toHaveBeenCalled()
})
})

View File

@@ -1,14 +1,14 @@
import type { MessageDescriptor } from "@lingui/core" import type { MessageDescriptor } from "@lingui/core"
import { useLingui } from "@lingui/react" import { useLingui } from "@lingui/react"
import { ActionIcon, Button, type ButtonVariant, Tooltip, useMantineTheme } from "@mantine/core" import { ActionIcon, Box, Button, type ButtonVariant, Tooltip, useMantineTheme } from "@mantine/core"
import type { ActionIconVariant } from "@mantine/core/lib/components/ActionIcon/ActionIcon" import type { ActionIconVariant } from "@mantine/core/lib/components/ActionIcon/ActionIcon"
import { Constants } from "app/constants" import { Constants } from "app/constants"
import { useActionButton } from "hooks/useActionButton" import { useActionButton } from "hooks/useActionButton"
import { type MouseEventHandler, type ReactNode, forwardRef } from "react" import { type MouseEventHandler, type ReactNode, forwardRef } from "react"
interface ActionButtonProps { interface ActionButtonProps {
icon: ReactNode
className?: string className?: string
icon?: ReactNode
label?: string | MessageDescriptor label?: string | MessageDescriptor
onClick?: MouseEventHandler onClick?: MouseEventHandler
variant?: ActionIconVariant & ButtonVariant variant?: ActionIconVariant & ButtonVariant
@@ -19,7 +19,7 @@ interface ActionButtonProps {
/** /**
* Switches between Button with label (desktop) and ActionIcon (mobile) * Switches between Button with label (desktop) and ActionIcon (mobile)
*/ */
export const ActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>((props: ActionButtonProps, ref) => { export const ActionButton = forwardRef<HTMLDivElement, ActionButtonProps>((props: ActionButtonProps, ref) => {
const { mobile } = useActionButton() const { mobile } = useActionButton()
const theme = useMantineTheme() const theme = useMantineTheme()
const { _ } = useLingui() const { _ } = useLingui()
@@ -27,31 +27,36 @@ export const ActionButton = forwardRef<HTMLButtonElement, ActionButtonProps>((pr
const label = typeof props.label === "string" ? props.label : props.label && _(props.label) const label = typeof props.label === "string" ? props.label : props.label && _(props.label)
const variant = props.variant ?? "subtle" const variant = props.variant ?? "subtle"
const iconOnly = (mobile && !props.showLabelOnMobile) || (!mobile && props.hideLabelOnDesktop) const iconOnly = (mobile && !props.showLabelOnMobile) || (!mobile && props.hideLabelOnDesktop)
return iconOnly ? (
<Tooltip label={label} openDelay={Constants.tooltip.delay}> return (
<ActionIcon <Box ref={ref}>
ref={ref} {iconOnly && (
color={theme.primaryColor} <Tooltip label={label} openDelay={Constants.tooltip.delay}>
variant={variant} <ActionIcon
className={props.className} color={theme.primaryColor}
onClick={props.onClick} variant={variant}
aria-label={label} className={props.className}
> onClick={props.onClick}
{props.icon} aria-label={label}
</ActionIcon> >
</Tooltip> {props.icon}
) : ( </ActionIcon>
<Button </Tooltip>
ref={ref} )}
variant={variant} {!iconOnly && (
size="xs" <Button
className={props.className} variant={variant}
leftSection={props.icon} size="xs"
onClick={props.onClick} className={props.className}
aria-label={label} leftSection={props.icon}
> onClick={props.onClick}
{label} aria-label={label}
</Button> >
{label}
</Button>
)}
</Box>
) )
}) })
ActionButton.displayName = "HeaderButton" ActionButton.displayName = "HeaderButton"

View File

@@ -0,0 +1,4 @@
html,
body {
overscroll-behavior: none;
}

View File

@@ -1,15 +1,4 @@
import { Helmet } from "react-helmet"
export const DisablePullToRefresh = () => { export const DisablePullToRefresh = () => {
return ( import("./DisablePullToRefresh.css")
<Helmet> return <></>
<style type="text/css">
{`
html, body {
overscroll-behavior: none;
}
`}
</style>
</Helmet>
)
} }

View File

@@ -33,6 +33,26 @@ export function KeyboardShortcutsHelp() {
<Kbd>K</Kbd> <Kbd>K</Kbd>
</Table.Td> </Table.Td>
</Table.Tr> </Table.Tr>
<Table.Tr>
<Table.Td>
<Trans>Select next unread feed/category</Trans>
</Table.Td>
<Table.Td>
<Kbd>Shift</Kbd>
<span> + </span>
<Kbd>J</Kbd>
</Table.Td>
</Table.Tr>
<Table.Tr>
<Table.Td>
<Trans>Select previous unread feed/category</Trans>
</Table.Td>
<Table.Td>
<Kbd>Shift</Kbd>
<span> + </span>
<Kbd>K</Kbd>
</Table.Td>
</Table.Tr>
<Table.Tr> <Table.Tr>
<Table.Td> <Table.Td>
<Trans>Set focus on next entry without opening it</Trans> <Trans>Set focus on next entry without opening it</Trans>

View File

@@ -0,0 +1,27 @@
import { MantineProvider } from "@mantine/core"
import { render } from "@testing-library/react"
import { Content } from "components/content/Content"
import React from "react"
import { describe, expect, it } from "vitest"
describe("Content component", () => {
it("renders basic content", () => {
const { container } = render(<Content content="<p>Hello World</p>" />, { wrapper: MantineProvider })
expect(container.querySelector("p")).toHaveTextContent("Hello World")
})
it("renders highlighted text when highlight prop is provided", () => {
const { container } = render(<Content content="Hello World" highlight="World" />, { wrapper: MantineProvider })
expect(container.querySelector("mark")).toHaveTextContent("World")
})
it("renders iframe tag when included in content", () => {
const { container } = render(<Content content='<iframe src="https://example.com"></iframe>' />, { wrapper: MantineProvider })
expect(container.querySelector("iframe")).toHaveAttribute("src", "https://example.com")
})
it("does not render unsupported tags", () => {
const { container } = render(<Content content='<script>alert("test")</script>' />, { wrapper: MantineProvider })
expect(container.querySelector("script")).toBeNull()
})
})

View File

@@ -4,7 +4,7 @@ import { calculatePlaceholderSize } from "app/utils"
import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading" import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading"
import { BasicHtmlStyles } from "components/content/BasicHtmlStyles" import { BasicHtmlStyles } from "components/content/BasicHtmlStyles"
import escapeStringRegexp from "escape-string-regexp" import escapeStringRegexp from "escape-string-regexp"
import { type ChildrenNode, Interweave, type MatchResponse, Matcher, type Node, type TransformCallback } from "interweave" import { ALLOWED_TAG_LIST, type ChildrenNode, Interweave, type MatchResponse, Matcher, type Node, type TransformCallback } from "interweave"
import React from "react" import React from "react"
import styleToObject from "style-to-object" import styleToObject from "style-to-object"
import { tss } from "tss" import { tss } from "tss"
@@ -67,20 +67,19 @@ const transform: TransformCallback = node => {
} }
class HighlightMatcher extends Matcher { class HighlightMatcher extends Matcher {
private readonly search: string private readonly regexp: RegExp
constructor(search: string) { constructor(search: string) {
super("highlight") super("highlight")
this.search = escapeStringRegexp(search) this.regexp = new RegExp(escapeStringRegexp(search).split(" ").join("|"), "i")
} }
match(string: string): MatchResponse<unknown> | null { match(string: string): MatchResponse<unknown> | null {
const pattern = this.search.split(" ").join("|") return this.doMatch(string, this.regexp, () => ({}))
return this.doMatch(string, new RegExp(pattern, "i"), () => ({}))
} }
replaceWith(children: ChildrenNode): Node { replaceWith(children: ChildrenNode): Node {
return <Mark>{children}</Mark> return <Mark key={0}>{children}</Mark>
} }
asTag(): string { asTag(): string {
@@ -88,6 +87,9 @@ class HighlightMatcher extends Matcher {
} }
} }
// allow iframe tag
const allowList = [...ALLOWED_TAG_LIST, "iframe"]
// memoize component because Interweave is costly // memoize component because Interweave is costly
const Content = React.memo((props: ContentProps) => { const Content = React.memo((props: ContentProps) => {
const { classes } = useStyles() const { classes } = useStyles()
@@ -96,7 +98,7 @@ const Content = React.memo((props: ContentProps) => {
return ( return (
<BasicHtmlStyles> <BasicHtmlStyles>
<Box className={classes.content}> <Box className={classes.content}>
<Interweave content={props.content} transform={transform} matchers={matchers} /> <Interweave content={props.content} transform={transform} matchers={matchers} allowList={allowList} />
</Box> </Box>
</BasicHtmlStyles> </BasicHtmlStyles>
) )

View File

@@ -19,7 +19,7 @@ export function Enclosure(props: {
)} )}
{hasAudio && ( {hasAudio && (
// biome-ignore lint/a11y/useMediaCaption: we don't have any captions for audio // biome-ignore lint/a11y/useMediaCaption: we don't have any captions for audio
<audio controls> <audio controls style={{ width: "100%" }}>
<source src={props.enclosureUrl} type={props.enclosureType} /> <source src={props.enclosureUrl} type={props.enclosureType} />
</audio> </audio>
)} )}

View File

@@ -16,6 +16,7 @@ import {
import { redirectToRootCategory } from "app/redirect/thunks" import { redirectToRootCategory } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store" import { useAppDispatch, useAppSelector } from "app/store"
import { toggleSidebar } from "app/tree/slice" import { toggleSidebar } from "app/tree/slice"
import { selectNextUnreadTreeItem } from "app/tree/thunks"
import { KeyboardShortcutsHelp } from "components/KeyboardShortcutsHelp" import { KeyboardShortcutsHelp } from "components/KeyboardShortcutsHelp"
import { Loader } from "components/Loader" import { Loader } from "components/Loader"
import { useBrowserExtension } from "hooks/useBrowserExtension" import { useBrowserExtension } from "hooks/useBrowserExtension"
@@ -172,6 +173,8 @@ export function FeedEntries() {
}) })
) )
) )
useMousetrap("shift+j", async () => await dispatch(selectNextUnreadTreeItem({ direction: "forward" })))
useMousetrap("shift+k", async () => await dispatch(selectNextUnreadTreeItem({ direction: "backward" })))
useMousetrap("space", () => { useMousetrap("space", () => {
if (selectedEntry) { if (selectedEntry) {
if (selectedEntry.expanded) { if (selectedEntry.expanded) {

View File

@@ -39,8 +39,8 @@ export function Subscribe() {
}, },
}) })
const subscribe = useAsyncCallback(client.feed.subscribe, { const subscribe = useAsyncCallback(client.feed.subscribe, {
onSuccess: sub => { onSuccess: async sub => {
dispatch(reloadTree()) await dispatch(reloadTree())
dispatch(redirectToFeed(sub.data)) dispatch(redirectToFeed(sub.data))
}, },
}) })

View File

@@ -1,6 +1,6 @@
import { setWebSocketConnected } from "app/server/slice" import { setWebSocketConnected } from "app/server/slice"
import { type AppDispatch, useAppDispatch, useAppSelector } from "app/store" import { type AppDispatch, useAppDispatch, useAppSelector } from "app/store"
import { incrementUnreadCount } from "app/tree/slice" import { newFeedEntriesDiscovered } from "app/tree/thunks"
import { useEffect } from "react" import { useEffect } from "react"
import WebsocketHeartbeatJs from "websocket-heartbeat-js" import WebsocketHeartbeatJs from "websocket-heartbeat-js"
@@ -9,7 +9,7 @@ const handleMessage = (dispatch: AppDispatch, message: string) => {
const type = parts[0] const type = parts[0]
if (type === "new-feed-entries") { if (type === "new-feed-entries") {
dispatch( dispatch(
incrementUnreadCount({ newFeedEntriesDiscovered({
feedId: +parts[1], feedId: +parts[1],
amount: +parts[2], amount: +parts[2],
}) })

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0> هل تحتاج إلى حساب؟ </0> <1> اشترك! </ 1>" msgstr "<0> هل تحتاج إلى حساب؟ </0> <1> اشترك! </ 1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "حول" msgstr "حول"
@@ -54,16 +54,15 @@ msgstr "إضافة فئة"
msgid "Add user" msgid "Add user"
msgstr "إضافة مستخدم" msgstr "إضافة مستخدم"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "إداري" msgstr "إداري"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "الكل" msgstr "الكل"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "إلغاء" msgstr "إلغاء"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "الفئة" msgstr "الفئة"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "مضغوط" msgstr "مضغوط"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "تأكيد" msgstr "تأكيد"
@@ -273,13 +272,13 @@ msgstr "تنازلي"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "عرض" msgstr "عرض"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "تنزيل"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "اسحب الرابط إلى شريط الإشارات" msgstr "اسحب الرابط إلى شريط الإشارات"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "البريد الإلكتروني" msgstr "البريد الإلكتروني"
@@ -308,8 +307,8 @@ msgstr "عنوان البريد الإلكتروني"
msgid "Edit user" msgid "Edit user"
msgstr "تحرير المستخدم" msgstr "تحرير المستخدم"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "ممكن" msgstr "ممكن"
@@ -345,8 +344,8 @@ msgstr "موسع"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "قم بتصدير اشتراكاتك وفئاتك كملف OPML يمكن استيراده في خدمات قراءة الأعلاف الأخرى" msgstr "قم بتصدير اشتراكاتك وفئاتك كملف OPML يمكن استيراده في خدمات قراءة الأعلاف الأخرى"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "اسم الخلاصة" msgstr "اسم الخلاصة"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "موجز URL" msgstr "موجز URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "هل نسيت كلمة المرور؟" msgstr "هل نسيت كلمة المرور؟"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "قم بإنشاء مفتاح API في ملف التعريف الخاص بك أولاً." msgstr "قم بإنشاء مفتاح API في ملف التعريف الخاص بك أولاً."
@@ -394,12 +393,13 @@ msgstr "قم بإنشاء مفتاح API في ملف التعريف الخاص
msgid "Generate new API key" msgid "Generate new API key"
msgstr "إنشاء مفتاح API جديد" msgstr "إنشاء مفتاح API جديد"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "رابط الخلاصة المولدة" msgstr "رابط الخلاصة المولدة"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "استيراد"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "في العرض الموسع ، التمرير عبر الإدخالات وضع علامة عليها كمقروءة" msgstr "في العرض الموسع ، التمرير عبر الإدخالات وضع علامة عليها كمقروءة"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "إبقاء غير مقروءة" msgstr "إبقاء غير مقروءة"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "اختصارات لوحة المفاتيح" msgstr "اختصارات لوحة المفاتيح"
@@ -470,9 +470,9 @@ msgstr "آخر رسالة تحديث"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "رابط" msgstr "رابط"
@@ -492,9 +492,9 @@ msgstr "تحميل الاشتراكات ..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "تحميل العلامات ..." msgstr "تحميل العلامات ..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
@@ -506,8 +506,8 @@ msgstr "تسجيل الخروج"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "إدارة المستخدمين" msgstr "إدارة المستخدمين"
@@ -515,18 +515,18 @@ msgstr "إدارة المستخدمين"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "تعليم الكل كمقروء" msgstr "تعليم الكل كمقروء"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "تعليم كافة الإدخالات كمقروءة" msgstr "تعليم كافة الإدخالات كمقروءة"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "وضع علامة كمقروء" msgstr "وضع علامة كمقروء"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "وضع علامة كمقروءة حتى هنا" msgstr "وضع علامة كمقروءة حتى هنا"
@@ -546,15 +546,15 @@ msgstr "تحريك الصفحة لأسفل"
msgid "Move the page up" msgid "Move the page up"
msgstr "تحريك الصفحة لأعلى" msgstr "تحريك الصفحة لأعلى"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "لا" msgstr "لا"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "الاسم" msgstr "الاسم"
@@ -575,8 +575,8 @@ msgstr "كلمة مرور جديدة"
msgid "Newest first" msgid "Newest first"
msgstr "الأحدث أولاً" msgstr "الأحدث أولاً"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "التالي" msgstr "التالي"
@@ -694,11 +694,11 @@ msgstr "والد"
msgid "Parent Category" msgid "Parent Category"
msgstr "الفئة الأصل" msgstr "الفئة الأصل"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "كلمة المرور" msgstr "كلمة المرور"
@@ -710,8 +710,8 @@ msgstr "استعادة كلمة المرور"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "كلمات المرور غير متطابقة" msgstr "كلمات المرور غير متطابقة"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "المنـصب" msgstr "المنـصب"
@@ -727,8 +727,8 @@ msgstr "الملف الشخصي"
msgid "Recover password" msgid "Recover password"
msgstr "استعادة كلمة السر" msgstr "استعادة كلمة السر"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "تحديث" msgstr "تحديث"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "حفظ" msgstr "حفظ"
@@ -765,10 +765,10 @@ msgstr "قم بالتمرير بسلاسة عند التنقل بين الإدخ
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "بحث" msgstr "بحث"
@@ -776,6 +776,14 @@ msgstr "بحث"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "يتطلب البحث 3 أحرف على الأقل" msgstr "يتطلب البحث 3 أحرف على الأقل"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "ضع التركيز على الإدخال التالي دون فتحه" msgstr "ضع التركيز على الإدخال التالي دون فتحه"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "قم بالتسجيل" msgstr "قم بالتسجيل"
@@ -865,20 +873,20 @@ msgstr "شيء سيء حدث للتو ..."
msgid "Space" msgid "Space"
msgstr "فضاء" msgstr "فضاء"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "النجم" msgstr "النجم"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "مميز بنجمة" msgstr "مميز بنجمة"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "اشتراك" msgstr "اشتراك"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "غير مقروءة" msgstr "غير مقروءة"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "إلغاء النجم" msgstr "إلغاء النجم"

View File

@@ -33,8 +33,8 @@ msgstr "<0>Ei,</0><1> sóc la Jérémie de Bèlgica i fa més de 10 anys que tre
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Necessites un compte?</0><1>Registreu-vos!</1>" msgstr "<0>Necessites un compte?</0><1>Registreu-vos!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Sobre" msgstr "Sobre"
@@ -54,16 +54,15 @@ msgstr "Afegeix categoria"
msgid "Add user" msgid "Add user"
msgstr "Afegeix usuari" msgstr "Afegeix usuari"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administrador" msgstr "Administrador"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Tot" msgstr "Tot"
@@ -144,27 +143,27 @@ msgstr "Extensió del navegador"
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·la" msgstr "Cancel·la"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
@@ -204,11 +203,11 @@ msgstr "CommaFeed versió {version} ({version})."
msgid "Compact" msgid "Compact"
msgstr "Compacte" msgstr "Compacte"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirma" msgstr "Confirma"
@@ -273,13 +272,13 @@ msgstr "Desc"
msgid "Detailed" msgid "Detailed"
msgstr "Detallat" msgstr "Detallat"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Mostra" msgstr "Mostra"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Donar" msgstr "Donar"
@@ -291,11 +290,11 @@ msgstr "Descarrega"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Arrossegueu l'enllaç a la barra d'adreces d'interès" msgstr "Arrossegueu l'enllaç a la barra d'adreces d'interès"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Correu electrònic" msgstr "Correu electrònic"
@@ -308,8 +307,8 @@ msgstr "Adreça de correu electrònic"
msgid "Edit user" msgid "Edit user"
msgstr "Edita l'usuari" msgstr "Edita l'usuari"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "activat" msgstr "activat"
@@ -345,8 +344,8 @@ msgstr "Ampliat"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "exporteu les vostres subscripcions i categories com a fitxer OPML que es pot importar a altres serveis de lectura de feeds" msgstr "exporteu les vostres subscripcions i categories com a fitxer OPML que es pot importar a altres serveis de lectura de feeds"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Opcions de l'extensió" msgstr "Opcions de l'extensió"
@@ -354,9 +353,9 @@ msgstr "Opcions de l'extensió"
msgid "Feed name" msgid "Feed name"
msgstr "Nom del canal" msgstr "Nom del canal"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL del canal" msgstr "URL del canal"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Heu oblidat la contrasenya?" msgstr "Heu oblidat la contrasenya?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "primer genereu una clau API al vostre perfil." msgstr "primer genereu una clau API al vostre perfil."
@@ -394,12 +393,13 @@ msgstr "primer genereu una clau API al vostre perfil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Genera una nova clau d'API" msgstr "Genera una nova clau d'API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL del feed generat" msgstr "URL del feed generat"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Vés a {0}" msgstr "Vés a {0}"
@@ -440,13 +440,13 @@ msgstr "Importació"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "a la vista ampliada, desplaçant-se per les entrades les marqueu com a llegides" msgstr "a la vista ampliada, desplaçant-se per les entrades les marqueu com a llegides"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Mantenir sense llegir" msgstr "Mantenir sense llegir"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Dreceres de teclat" msgstr "Dreceres de teclat"
@@ -470,9 +470,9 @@ msgstr "últim missatge d'actualització"
msgid "Light" msgid "Light"
msgstr "Clar" msgstr "Clar"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Enllaç" msgstr "Enllaç"
@@ -492,9 +492,9 @@ msgstr "S'estan carregant les subscripcions..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Carregant les etiquetes..." msgstr "Carregant les etiquetes..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Inicia sessió" msgstr "Inicia sessió"
@@ -506,8 +506,8 @@ msgstr "Tanca sessió"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Gestionar usuaris" msgstr "Gestionar usuaris"
@@ -515,18 +515,18 @@ msgstr "Gestionar usuaris"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marca-ho tot com a llegit" msgstr "Marca-ho tot com a llegit"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marqueu totes les entrades com a llegides" msgstr "Marqueu totes les entrades com a llegides"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marca com a llegit" msgstr "Marca com a llegit"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marca com a llegit fins aquí" msgstr "Marca com a llegit fins aquí"
@@ -546,15 +546,15 @@ msgstr "Mou la pàgina cap avall"
msgid "Move the page up" msgid "Move the page up"
msgstr "Mou la pàgina cap amunt" msgstr "Mou la pàgina cap amunt"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@@ -575,8 +575,8 @@ msgstr "Contrasenya nova"
msgid "Newest first" msgid "Newest first"
msgstr "El més nou primer" msgstr "El més nou primer"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Següent" msgstr "Següent"
@@ -694,11 +694,11 @@ msgstr "pares"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categoria pare" msgstr "Categoria pare"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Contrasenya" msgstr "Contrasenya"
@@ -710,8 +710,8 @@ msgstr "Recuperació de contrasenya"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Les contrasenyes no coincideixen" msgstr "Les contrasenyes no coincideixen"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posició" msgstr "Posició"
@@ -727,8 +727,8 @@ msgstr "Perfil"
msgid "Recover password" msgid "Recover password"
msgstr "Recuperar la contrasenya" msgstr "Recuperar la contrasenya"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Actualitzar" msgstr "Actualitzar"
@@ -745,11 +745,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "Clic dret" msgstr "Clic dret"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Desa" msgstr "Desa"
@@ -765,10 +765,10 @@ msgstr "Desplaceu-vos suaument quan navegueu entre entrades"
msgid "Scrolling" msgid "Scrolling"
msgstr "Desplaçament" msgstr "Desplaçament"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Cerca" msgstr "Cerca"
@@ -776,6 +776,14 @@ msgstr "Cerca"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "la cerca requereix almenys 3 caràcters" msgstr "la cerca requereix almenys 3 caràcters"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "posa el focus a la següent entrada sense obrir-la" msgstr "posa el focus a la següent entrada sense obrir-la"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Registra't" msgstr "Registra't"
@@ -865,20 +873,20 @@ msgstr "Acaba de passar una cosa dolenta..."
msgid "Space" msgid "Space"
msgstr "Espai" msgstr "Espai"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Estrella" msgstr "Estrella"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Estrellat" msgstr "Estrellat"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Subscriu-te" msgstr "Subscriu-te"
@@ -951,8 +959,8 @@ msgstr "Prova la demostració!"
msgid "Unread" msgid "Unread"
msgstr "Sense llegir" msgstr "Sense llegir"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Desestrellar" msgstr "Desestrellar"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Potřebujete účet?</0><1>Zaregistrujte se!</1>" msgstr "<0>Potřebujete účet?</0><1>Zaregistrujte se!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Asi" msgstr "Asi"
@@ -54,16 +54,15 @@ msgstr "Přidat kategorii"
msgid "Add user" msgid "Add user"
msgstr "Přidat uživatele" msgstr "Přidat uživatele"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Správce" msgstr "Správce"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Zrušit" msgstr "Zrušit"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategorie" msgstr "Kategorie"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompaktní" msgstr "Kompaktní"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Potvrdit" msgstr "Potvrdit"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Displej" msgstr "Displej"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Stáhnout"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Přetáhněte odkaz na lištu záložek" msgstr "Přetáhněte odkaz na lištu záložek"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "E-mailová adresa"
msgid "Edit user" msgid "Edit user"
msgstr "Upravit uživatele" msgstr "Upravit uživatele"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Povoleno" msgstr "Povoleno"
@@ -345,8 +344,8 @@ msgstr "Rozbaleno"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exportujte svá předplatná a kategorie jako soubor OPML, který lze importovat do jiných služeb čtení kanálů" msgstr "Exportujte svá předplatná a kategorie jako soubor OPML, který lze importovat do jiných služeb čtení kanálů"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Název zdroje" msgstr "Název zdroje"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL zdroje" msgstr "URL zdroje"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Zapomněli jste heslo?" msgstr "Zapomněli jste heslo?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Nejprve ve svém profilu vygenerujte klíč API." msgstr "Nejprve ve svém profilu vygenerujte klíč API."
@@ -394,12 +393,13 @@ msgstr "Nejprve ve svém profilu vygenerujte klíč API."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Vygenerujte nový klíč API" msgstr "Vygenerujte nový klíč API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generovaná adresa URL zdroje" msgstr "Generovaná adresa URL zdroje"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "V rozšířeném zobrazení je procházením označíte jako přečtené" msgstr "V rozšířeném zobrazení je procházením označíte jako přečtené"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Ponechat nepřečtené" msgstr "Ponechat nepřečtené"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Klávesové zkratky" msgstr "Klávesové zkratky"
@@ -470,9 +470,9 @@ msgstr "Poslední obnovovací zpráva"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Odkaz" msgstr "Odkaz"
@@ -492,9 +492,9 @@ msgstr "Načítání odběrů..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Načítání značek..." msgstr "Načítání značek..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Přihlaste se" msgstr "Přihlaste se"
@@ -506,8 +506,8 @@ msgstr "Odhlášení"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Spravujte uživatele" msgstr "Spravujte uživatele"
@@ -515,18 +515,18 @@ msgstr "Spravujte uživatele"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Označit vše jako přečtené" msgstr "Označit vše jako přečtené"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Označte všechny položky jako přečtené" msgstr "Označte všechny položky jako přečtené"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Označit jako přečtené" msgstr "Označit jako přečtené"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Označit jako přečtené až sem" msgstr "Označit jako přečtené až sem"
@@ -546,15 +546,15 @@ msgstr "Přesuňte stránku dolů"
msgid "Move the page up" msgid "Move the page up"
msgstr "Přesuňte stránku nahoru" msgstr "Přesuňte stránku nahoru"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Jméno" msgstr "Jméno"
@@ -575,8 +575,8 @@ msgstr "Nové heslo"
msgid "Newest first" msgid "Newest first"
msgstr "Nejnovější jako první" msgstr "Nejnovější jako první"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Další" msgstr "Další"
@@ -694,11 +694,11 @@ msgstr "Rodič"
msgid "Parent Category" msgid "Parent Category"
msgstr "Rodičovská kategorie" msgstr "Rodičovská kategorie"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Heslo" msgstr "Heslo"
@@ -710,8 +710,8 @@ msgstr "Obnovení hesla"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Hesla se neshodují" msgstr "Hesla se neshodují"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Pozice" msgstr "Pozice"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Obnovte heslo" msgstr "Obnovte heslo"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Obnovit" msgstr "Obnovit"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Uložit" msgstr "Uložit"
@@ -765,10 +765,10 @@ msgstr "Posouvejte plynule při navigaci mezi položkami"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Hledej" msgstr "Hledej"
@@ -776,6 +776,14 @@ msgstr "Hledej"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Hledání vyžaduje alespoň 3 znaky" msgstr "Hledání vyžaduje alespoň 3 znaky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Zaměřte se na další položku, aniž byste ji otevřeli" msgstr "Zaměřte se na další položku, aniž byste ji otevřeli"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Zaregistrujte se" msgstr "Zaregistrujte se"
@@ -865,20 +873,20 @@ msgstr "Právě se stalo něco špatného..."
msgid "Space" msgid "Space"
msgstr "Vesmír" msgstr "Vesmír"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Hvězda" msgstr "Hvězda"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "S hvězdičkou" msgstr "S hvězdičkou"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Přihlaste se" msgstr "Přihlaste se"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Nepřečteno" msgstr "Nepřečteno"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Odstranit hvězdu" msgstr "Odstranit hvězdu"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Angen cyfrif?</0><1>Ymunwch!</1>" msgstr "<0>Angen cyfrif?</0><1>Ymunwch!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Ynghylch" msgstr "Ynghylch"
@@ -54,16 +54,15 @@ msgstr "Ychwanegu categori"
msgid "Add user" msgid "Add user"
msgstr "Ychwanegu defnyddiwr" msgstr "Ychwanegu defnyddiwr"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Gweinyddol" msgstr "Gweinyddol"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Pawb" msgstr "Pawb"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Diddymu" msgstr "Diddymu"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "categori" msgstr "categori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "cryno" msgstr "cryno"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Cadarnhau" msgstr "Cadarnhau"
@@ -273,13 +272,13 @@ msgstr "Rhag"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Arddangos" msgstr "Arddangos"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Lawrlwytho"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Llusgwch y ddolen i'r bar nod tudalen" msgstr "Llusgwch y ddolen i'r bar nod tudalen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-bost" msgstr "E-bost"
@@ -308,8 +307,8 @@ msgstr "cyfeiriad e-bost"
msgid "Edit user" msgid "Edit user"
msgstr "Golygu defnyddiwr" msgstr "Golygu defnyddiwr"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Wedi'i alluogi" msgstr "Wedi'i alluogi"
@@ -345,8 +344,8 @@ msgstr "Ehangu"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Allforio eich tanysgrifiadau a'ch categorïau fel ffeil OPML y gellir ei mewnforio i wasanaethau darllen porthiant eraill" msgstr "Allforio eich tanysgrifiadau a'ch categorïau fel ffeil OPML y gellir ei mewnforio i wasanaethau darllen porthiant eraill"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Enw porthiant" msgstr "Enw porthiant"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL porthiant" msgstr "URL porthiant"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Wedi anghofio cyfrinair?" msgstr "Wedi anghofio cyfrinair?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Cynhyrchu allwedd API yn eich proffil yn gyntaf." msgstr "Cynhyrchu allwedd API yn eich proffil yn gyntaf."
@@ -394,12 +393,13 @@ msgstr "Cynhyrchu allwedd API yn eich proffil yn gyntaf."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Cynhyrchu allwedd API newydd" msgstr "Cynhyrchu allwedd API newydd"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "url porthiant a gynhyrchir" msgstr "url porthiant a gynhyrchir"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Mewnforio"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Mewn gwedd estynedig, mae sgrolio trwy gofnodion yn nodi eu bod wedi'u darllen" msgstr "Mewn gwedd estynedig, mae sgrolio trwy gofnodion yn nodi eu bod wedi'u darllen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Cadwch heb ei ddarllen" msgstr "Cadwch heb ei ddarllen"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "llwybrau byr bysellfwrdd" msgstr "llwybrau byr bysellfwrdd"
@@ -470,9 +470,9 @@ msgstr "Neges adnewyddu ddiwethaf"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Cyswllt" msgstr "Cyswllt"
@@ -492,9 +492,9 @@ msgstr "Yn llwytho tanysgrifiadau..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Wrthi'n llwytho tagiau..." msgstr "Wrthi'n llwytho tagiau..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Mewngofnodi" msgstr "Mewngofnodi"
@@ -506,8 +506,8 @@ msgstr "Allgofnodi"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Rheoli defnyddwyr" msgstr "Rheoli defnyddwyr"
@@ -515,18 +515,18 @@ msgstr "Rheoli defnyddwyr"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marciwch y cyfan wedi'i ddarllen" msgstr "Marciwch y cyfan wedi'i ddarllen"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marciwch bob cofnod wedi'i ddarllen" msgstr "Marciwch bob cofnod wedi'i ddarllen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marciwch ei fod wedi'i ddarllen" msgstr "Marciwch ei fod wedi'i ddarllen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marciwch fel y darllenwyd hyd yma" msgstr "Marciwch fel y darllenwyd hyd yma"
@@ -546,15 +546,15 @@ msgstr "Symudwch y dudalen i lawr"
msgid "Move the page up" msgid "Move the page up"
msgstr "Symudwch y dudalen i fyny" msgstr "Symudwch y dudalen i fyny"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "Amh" msgstr "Amh"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Enw" msgstr "Enw"
@@ -575,8 +575,8 @@ msgstr "Cyfrinair newydd"
msgid "Newest first" msgid "Newest first"
msgstr "Y diweddaraf yn gyntaf" msgstr "Y diweddaraf yn gyntaf"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Nesaf" msgstr "Nesaf"
@@ -694,11 +694,11 @@ msgstr "rhiant"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categori Rhiant" msgstr "Categori Rhiant"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "cyfrinair" msgstr "cyfrinair"
@@ -710,8 +710,8 @@ msgstr "Adfer Cyfrinair"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Nid yw cyfrineiriau yn cyfateb" msgstr "Nid yw cyfrineiriau yn cyfateb"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Swydd" msgstr "Swydd"
@@ -727,8 +727,8 @@ msgstr "Proffil"
msgid "Recover password" msgid "Recover password"
msgstr "Adfer cyfrinair" msgstr "Adfer cyfrinair"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Adnewyddu" msgstr "Adnewyddu"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Arbed" msgstr "Arbed"
@@ -765,10 +765,10 @@ msgstr "Sgroliwch yn esmwyth wrth lywio rhwng cofnodion"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Chwilio" msgstr "Chwilio"
@@ -776,6 +776,14 @@ msgstr "Chwilio"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Mae angen o leiaf 3 nod ar gyfer chwilio" msgstr "Mae angen o leiaf 3 nod ar gyfer chwilio"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Gosodwch ffocws ar y cofnod nesaf heb ei agor" msgstr "Gosodwch ffocws ar y cofnod nesaf heb ei agor"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Cofrestrwch" msgstr "Cofrestrwch"
@@ -865,20 +873,20 @@ msgstr "Mae rhywbeth drwg newydd ddigwydd ..."
msgid "Space" msgid "Space"
msgstr "Gofod" msgstr "Gofod"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "seren" msgstr "seren"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "serennog" msgstr "serennog"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Tanysgrifio" msgstr "Tanysgrifio"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Heb ei ddarllen" msgstr "Heb ei ddarllen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "dad-seren" msgstr "dad-seren"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Har du brug for en konto?</0><1>Tilmeld dig!</1>" msgstr "<0>Har du brug for en konto?</0><1>Tilmeld dig!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Omkring" msgstr "Omkring"
@@ -54,16 +54,15 @@ msgstr "Tilføj kategori"
msgid "Add user" msgid "Add user"
msgstr "Tilføj bruger" msgstr "Tilføj bruger"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Annuller" msgstr "Annuller"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bekræft" msgstr "Bekræft"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Skærm" msgstr "Skærm"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr ""
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Træk linket til bogmærkelinjen" msgstr "Træk linket til bogmærkelinjen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "E-mailadresse"
msgid "Edit user" msgid "Edit user"
msgstr "Rediger bruger" msgstr "Rediger bruger"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Aktiveret" msgstr "Aktiveret"
@@ -345,8 +344,8 @@ msgstr "Udvidet"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Eksporter dine abonnementer og kategorier som en OPML-fil, der kan importeres i andre feed-læsningstjenester" msgstr "Eksporter dine abonnementer og kategorier som en OPML-fil, der kan importeres i andre feed-læsningstjenester"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Feednavn" msgstr "Feednavn"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "" msgstr ""
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Glemt adgangskode?" msgstr "Glemt adgangskode?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generer først en API-nøgle i din profil." msgstr "Generer først en API-nøgle i din profil."
@@ -394,12 +393,13 @@ msgstr "Generer først en API-nøgle i din profil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generer ny API-nøgle" msgstr "Generer ny API-nøgle"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Genereret feed-url" msgstr "Genereret feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "I udvidet visning markerer du dem som læst, når du ruller gennem poster" msgstr "I udvidet visning markerer du dem som læst, når du ruller gennem poster"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Forbehold ulæst" msgstr "Forbehold ulæst"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastaturgenveje" msgstr "Tastaturgenveje"
@@ -470,9 +470,9 @@ msgstr "Sidste opdateringsmeddelelse"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Indlæser abonnementer..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Indlæser tags..." msgstr "Indlæser tags..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Log ind" msgstr "Log ind"
@@ -506,8 +506,8 @@ msgstr "Log ud"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Administrer brugere" msgstr "Administrer brugere"
@@ -515,18 +515,18 @@ msgstr "Administrer brugere"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marker alle som læst" msgstr "Marker alle som læst"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marker alle poster som læst" msgstr "Marker alle poster som læst"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Markér som læst" msgstr "Markér som læst"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Markér som læst indtil her" msgstr "Markér som læst indtil her"
@@ -546,15 +546,15 @@ msgstr "Flyt siden ned"
msgid "Move the page up" msgid "Move the page up"
msgstr "Flyt siden op" msgstr "Flyt siden op"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Navn" msgstr "Navn"
@@ -575,8 +575,8 @@ msgstr "Ny adgangskode"
msgid "Newest first" msgid "Newest first"
msgstr "Nyeste først" msgstr "Nyeste først"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Næste" msgstr "Næste"
@@ -694,11 +694,11 @@ msgstr "Forælder"
msgid "Parent Category" msgid "Parent Category"
msgstr "Forældrekategori" msgstr "Forældrekategori"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Adgangskode" msgstr "Adgangskode"
@@ -710,8 +710,8 @@ msgstr "Gendannelse af adgangskode"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Adgangskoder stemmer ikke overens" msgstr "Adgangskoder stemmer ikke overens"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "" msgstr ""
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Gendan adgangskode" msgstr "Gendan adgangskode"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Opdater" msgstr "Opdater"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Gem" msgstr "Gem"
@@ -765,10 +765,10 @@ msgstr "Rul jævnt, når du navigerer mellem poster"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Søg" msgstr "Søg"
@@ -776,6 +776,14 @@ msgstr "Søg"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Søgning kræver mindst 3 tegn" msgstr "Søgning kræver mindst 3 tegn"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Sæt fokus på næste post uden at åbne den" msgstr "Sæt fokus på næste post uden at åbne den"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Tilmeld dig" msgstr "Tilmeld dig"
@@ -865,20 +873,20 @@ msgstr "Der er lige sket noget slemt..."
msgid "Space" msgid "Space"
msgstr "Rum" msgstr "Rum"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stjerne" msgstr "Stjerne"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Medvirkende" msgstr "Medvirkende"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Tilmeld" msgstr "Tilmeld"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Ulæst" msgstr "Ulæst"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "" msgstr ""

View File

@@ -33,8 +33,8 @@ msgstr "<0>Hey,</0><1>Ich bin Jérémie aus Belgien und arbeite seit über 10 Ja
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Benötigen Sie ein Konto?</0><1>Hier geht's zur Registrierung!</1>" msgstr "<0>Benötigen Sie ein Konto?</0><1>Hier geht's zur Registrierung!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Über" msgstr "Über"
@@ -54,16 +54,15 @@ msgstr "Kategorie hinzufügen"
msgid "Add user" msgid "Add user"
msgstr "Benutzer hinzufügen" msgstr "Benutzer hinzufügen"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Verwaltung" msgstr "Verwaltung"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
@@ -144,27 +143,27 @@ msgstr "Browser-Erweiterung"
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategorie" msgstr "Kategorie"
@@ -204,11 +203,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bestätigen" msgstr "Bestätigen"
@@ -273,13 +272,13 @@ msgstr "Beschr"
msgid "Detailed" msgid "Detailed"
msgstr "Detailliert" msgstr "Detailliert"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Anzeige" msgstr "Anzeige"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Spenden" msgstr "Spenden"
@@ -291,11 +290,11 @@ msgstr "Herunterladen"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Link in Lesezeichenleiste ziehen" msgstr "Link in Lesezeichenleiste ziehen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-Mail" msgstr "E-Mail"
@@ -308,8 +307,8 @@ msgstr "E-Mail-Adresse"
msgid "Edit user" msgid "Edit user"
msgstr "Benutzer bearbeiten" msgstr "Benutzer bearbeiten"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Aktiviert" msgstr "Aktiviert"
@@ -345,8 +344,8 @@ msgstr "Erweitert"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exportieren Sie Ihre Abonnements und Kategorien als OPML-Datei, die in andere Feed-Lesedienste importiert werden kann" msgstr "Exportieren Sie Ihre Abonnements und Kategorien als OPML-Datei, die in andere Feed-Lesedienste importiert werden kann"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Erweiterungsoptionen" msgstr "Erweiterungsoptionen"
@@ -354,9 +353,9 @@ msgstr "Erweiterungsoptionen"
msgid "Feed name" msgid "Feed name"
msgstr "Feedname" msgstr "Feedname"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed-URL" msgstr "Feed-URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Passwort vergessen?" msgstr "Passwort vergessen?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generieren Sie zuerst einen API-Schlüssel in Ihrem Profil." msgstr "Generieren Sie zuerst einen API-Schlüssel in Ihrem Profil."
@@ -394,12 +393,13 @@ msgstr "Generieren Sie zuerst einen API-Schlüssel in Ihrem Profil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Neuen API-Schlüssel generieren" msgstr "Neuen API-Schlüssel generieren"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generierte Feed-URL" msgstr "Generierte Feed-URL"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Gehe zu {0}" msgstr "Gehe zu {0}"
@@ -440,13 +440,13 @@ msgstr "Importieren"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "In der erweiterten Ansicht werden Einträge beim Scrollen als gelesen markiert" msgstr "In der erweiterten Ansicht werden Einträge beim Scrollen als gelesen markiert"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Ungelesen lassen" msgstr "Ungelesen lassen"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastaturkürzel" msgstr "Tastaturkürzel"
@@ -470,9 +470,9 @@ msgstr "Letzte Aktualisierungsmeldung"
msgid "Light" msgid "Light"
msgstr "Hell" msgstr "Hell"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Verbindung" msgstr "Verbindung"
@@ -492,9 +492,9 @@ msgstr "Abonnements werden geladen..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Tags werden geladen..." msgstr "Tags werden geladen..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Einloggen" msgstr "Einloggen"
@@ -506,8 +506,8 @@ msgstr "Abmelden"
msgid "Long press" msgid "Long press"
msgstr "Langer Tastendruck" msgstr "Langer Tastendruck"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Benutzer verwalten" msgstr "Benutzer verwalten"
@@ -515,18 +515,18 @@ msgstr "Benutzer verwalten"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Alle als gelesen markieren" msgstr "Alle als gelesen markieren"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Alle Einträge als gelesen markieren" msgstr "Alle Einträge als gelesen markieren"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Als gelesen markieren" msgstr "Als gelesen markieren"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Bis hierhin als gelesen markieren" msgstr "Bis hierhin als gelesen markieren"
@@ -546,15 +546,15 @@ msgstr "Seite nach unten verschieben"
msgid "Move the page up" msgid "Move the page up"
msgstr "Bewege die Seite nach oben" msgstr "Bewege die Seite nach oben"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "n.v." msgstr "n.v."
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "" msgstr ""
@@ -575,8 +575,8 @@ msgstr "Neues Passwort"
msgid "Newest first" msgid "Newest first"
msgstr "Neueste zuerst" msgstr "Neueste zuerst"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Weiter" msgstr "Weiter"
@@ -694,11 +694,11 @@ msgstr "Übergeordnet"
msgid "Parent Category" msgid "Parent Category"
msgstr "Übergeordnete Kategorie" msgstr "Übergeordnete Kategorie"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
@@ -710,8 +710,8 @@ msgstr "Passwortwiederherstellung"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passwörter stimmen nicht überein" msgstr "Passwörter stimmen nicht überein"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Position" msgstr "Position"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Kennwort wiederherstellen" msgstr "Kennwort wiederherstellen"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Aktualisieren" msgstr "Aktualisieren"
@@ -745,11 +745,11 @@ msgstr "REST-API"
msgid "Right click" msgid "Right click"
msgstr "Rechtsklick" msgstr "Rechtsklick"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@@ -765,10 +765,10 @@ msgstr "Schnelles Scrollen beim Navigieren zwischen Einträgen"
msgid "Scrolling" msgid "Scrolling"
msgstr "Scrollen" msgstr "Scrollen"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Suche" msgstr "Suche"
@@ -776,6 +776,14 @@ msgstr "Suche"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Suche erfordert mindestens 3 Zeichen" msgstr "Suche erfordert mindestens 3 Zeichen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Fokus auf den nächsten Eintrag setzen, ohne ihn zu öffnen" msgstr "Fokus auf den nächsten Eintrag setzen, ohne ihn zu öffnen"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Melden Sie sich an" msgstr "Melden Sie sich an"
@@ -865,20 +873,20 @@ msgstr "Etwas Schlimmes ist gerade passiert..."
msgid "Space" msgid "Space"
msgstr "Raum" msgstr "Raum"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stern" msgstr "Stern"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Markiert" msgstr "Markiert"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Abonnieren" msgstr "Abonnieren"
@@ -951,8 +959,8 @@ msgstr "Testen Sie die Demo!"
msgid "Unread" msgid "Unread"
msgstr "Ungelesen" msgstr "Ungelesen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Stern entfernen" msgstr "Stern entfernen"

View File

@@ -33,8 +33,8 @@ msgstr "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaF
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Need an account?</0><1>Sign up!</1>" msgstr "<0>Need an account?</0><1>Sign up!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "About" msgstr "About"
@@ -54,16 +54,15 @@ msgstr "Add category"
msgid "Add user" msgid "Add user"
msgstr "Add user" msgstr "Add user"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "All" msgstr "All"
@@ -144,27 +143,27 @@ msgstr "Browser extention"
msgid "Browser tab" msgid "Browser tab"
msgstr "Browser tab" msgstr "Browser tab"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Cancel" msgstr "Cancel"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Category" msgstr "Category"
@@ -204,11 +203,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Compact" msgstr "Compact"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirm" msgstr "Confirm"
@@ -273,13 +272,13 @@ msgstr "Desc"
msgid "Detailed" msgid "Detailed"
msgstr "Detailed" msgstr "Detailed"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Display" msgstr "Display"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Donate" msgstr "Donate"
@@ -291,11 +290,11 @@ msgstr "Download"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Drag link to bookmark bar" msgstr "Drag link to bookmark bar"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-mail" msgstr "E-mail"
@@ -308,8 +307,8 @@ msgstr "E-mail address"
msgid "Edit user" msgid "Edit user"
msgstr "Edit user" msgstr "Edit user"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Enabled" msgstr "Enabled"
@@ -345,8 +344,8 @@ msgstr "Expanded"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgstr "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Extension options" msgstr "Extension options"
@@ -354,9 +353,9 @@ msgstr "Extension options"
msgid "Feed name" msgid "Feed name"
msgstr "Feed name" msgstr "Feed name"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed URL" msgstr "Feed URL"
@@ -384,9 +383,9 @@ msgstr "Force fetching feeds is not yet available."
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Forgot password?" msgstr "Forgot password?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generate an API key in your profile first." msgstr "Generate an API key in your profile first."
@@ -394,12 +393,13 @@ msgstr "Generate an API key in your profile first."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generate new API key" msgstr "Generate new API key"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generated feed url" msgstr "Generated feed url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Go to {0}" msgstr "Go to {0}"
@@ -440,13 +440,13 @@ msgstr "Import"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "In expanded view, scrolling through entries mark them as read" msgstr "In expanded view, scrolling through entries mark them as read"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Keep unread" msgstr "Keep unread"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Keyboard shortcuts" msgstr "Keyboard shortcuts"
@@ -470,9 +470,9 @@ msgstr "Last refresh message"
msgid "Light" msgid "Light"
msgstr "Light" msgstr "Light"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Link" msgstr "Link"
@@ -492,9 +492,9 @@ msgstr "Loading subscriptions..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Loading tags..." msgstr "Loading tags..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Log in" msgstr "Log in"
@@ -506,8 +506,8 @@ msgstr "Logout"
msgid "Long press" msgid "Long press"
msgstr "Long press" msgstr "Long press"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Manage users" msgstr "Manage users"
@@ -515,18 +515,18 @@ msgstr "Manage users"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Mark all as read" msgstr "Mark all as read"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Mark all entries as read" msgstr "Mark all entries as read"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Mark as read" msgstr "Mark as read"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Mark as read up to here" msgstr "Mark as read up to here"
@@ -546,15 +546,15 @@ msgstr "Move the page down"
msgid "Move the page up" msgid "Move the page up"
msgstr "Move the page up" msgstr "Move the page up"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "N/A" msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@@ -575,8 +575,8 @@ msgstr "New password"
msgid "Newest first" msgid "Newest first"
msgstr "Newest first" msgstr "Newest first"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Next" msgstr "Next"
@@ -694,11 +694,11 @@ msgstr "Parent"
msgid "Parent Category" msgid "Parent Category"
msgstr "Parent Category" msgstr "Parent Category"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
@@ -710,8 +710,8 @@ msgstr "Password Recovery"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passwords do not match" msgstr "Passwords do not match"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Position" msgstr "Position"
@@ -727,8 +727,8 @@ msgstr "Profile"
msgid "Recover password" msgid "Recover password"
msgstr "Recover password" msgstr "Recover password"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Refresh" msgstr "Refresh"
@@ -745,11 +745,11 @@ msgstr "REST API"
msgid "Right click" msgid "Right click"
msgstr "Right click" msgstr "Right click"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Save" msgstr "Save"
@@ -765,10 +765,10 @@ msgstr "Scroll smoothly when navigating between entries"
msgid "Scrolling" msgid "Scrolling"
msgstr "Scrolling" msgstr "Scrolling"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Search" msgstr "Search"
@@ -776,6 +776,14 @@ msgstr "Search"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Search requires at least 3 characters" msgstr "Search requires at least 3 characters"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr "Select next unread feed/category"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr "Select previous unread feed/category"
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Set focus on next entry without opening it" msgstr "Set focus on next entry without opening it"
@@ -850,9 +858,9 @@ msgstr "Show unread count in tab favicon"
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "Show unread count in tab title" msgstr "Show unread count in tab title"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Sign up" msgstr "Sign up"
@@ -865,20 +873,20 @@ msgstr "Something bad just happened..."
msgid "Space" msgid "Space"
msgstr "Space" msgstr "Space"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Star" msgstr "Star"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Starred" msgstr "Starred"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Subscribe" msgstr "Subscribe"
@@ -951,8 +959,8 @@ msgstr "Try the demo!"
msgid "Unread" msgid "Unread"
msgstr "Unread" msgstr "Unread"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Unstar" msgstr "Unstar"

View File

@@ -34,8 +34,8 @@ msgstr "<0>Hola,</0><1>Soy Jérémie de Bélgica y he estado trabajando en Comma
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>¿Necesitas una cuenta?</0><1>¡Regístrate!</1>" msgstr "<0>¿Necesitas una cuenta?</0><1>¡Regístrate!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Acerca de" msgstr "Acerca de"
@@ -55,16 +55,15 @@ msgstr "Añadir categoría"
msgid "Add user" msgid "Add user"
msgstr "Añadir usuario" msgstr "Añadir usuario"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administrador" msgstr "Administrador"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Todo" msgstr "Todo"
@@ -145,27 +144,27 @@ msgstr "Extensión del navegador"
msgid "Browser tab" msgid "Browser tab"
msgstr "Pestaña del navegador" msgstr "Pestaña del navegador"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categoría" msgstr "Categoría"
@@ -205,11 +204,11 @@ msgstr "Versión de CommaFeed {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Compacto" msgstr "Compacto"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirmar" msgstr "Confirmar"
@@ -274,13 +273,13 @@ msgstr "Desc"
msgid "Detailed" msgid "Detailed"
msgstr "Detallado" msgstr "Detallado"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Mostrar" msgstr "Mostrar"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Donar" msgstr "Donar"
@@ -292,11 +291,11 @@ msgstr "Descargar"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Arrastra el enlace a la barra de marcadores" msgstr "Arrastra el enlace a la barra de marcadores"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Correo electrónico" msgstr "Correo electrónico"
@@ -309,8 +308,8 @@ msgstr "Dirección de correo electrónico"
msgid "Edit user" msgid "Edit user"
msgstr "Editar usuario" msgstr "Editar usuario"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Habilitado" msgstr "Habilitado"
@@ -346,8 +345,8 @@ msgstr "Expandido"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exporta tus suscripciones y categorías como un archivo OPML que se puede importar en otros servicios de lectura de feeds" msgstr "Exporta tus suscripciones y categorías como un archivo OPML que se puede importar en otros servicios de lectura de feeds"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Opciones de la extensión" msgstr "Opciones de la extensión"
@@ -355,9 +354,9 @@ msgstr "Opciones de la extensión"
msgid "Feed name" msgid "Feed name"
msgstr "Nombre del feed" msgstr "Nombre del feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL del feed" msgstr "URL del feed"
@@ -385,9 +384,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "¿Olvidaste la contraseña?" msgstr "¿Olvidaste la contraseña?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Primero genere una clave API en su perfil." msgstr "Primero genere una clave API en su perfil."
@@ -395,12 +394,13 @@ msgstr "Primero genere una clave API en su perfil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generar nueva clave API" msgstr "Generar nueva clave API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL del feed generado" msgstr "URL del feed generado"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Ir a {0}" msgstr "Ir a {0}"
@@ -441,13 +441,13 @@ msgstr "Importar"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "En la vista ampliada, al desplazarse por las entradas marcarlas como leídas" msgstr "En la vista ampliada, al desplazarse por las entradas marcarlas como leídas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Mantener sin leer" msgstr "Mantener sin leer"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Atajos de teclado" msgstr "Atajos de teclado"
@@ -471,9 +471,9 @@ msgstr "Último mensaje de actualización"
msgid "Light" msgid "Light"
msgstr "Claro" msgstr "Claro"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Enlace" msgstr "Enlace"
@@ -493,9 +493,9 @@ msgstr "Cargando suscripciones..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Cargando etiquetas..." msgstr "Cargando etiquetas..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
@@ -507,8 +507,8 @@ msgstr "Cerrar sesión"
msgid "Long press" msgid "Long press"
msgstr "Pulsación larga" msgstr "Pulsación larga"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Administrar usuarios" msgstr "Administrar usuarios"
@@ -516,18 +516,18 @@ msgstr "Administrar usuarios"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marcar todo como leído" msgstr "Marcar todo como leído"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marcar todas las entradas como leídas" msgstr "Marcar todas las entradas como leídas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marcar como leído" msgstr "Marcar como leído"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marcar como leído hasta aquí" msgstr "Marcar como leído hasta aquí"
@@ -547,15 +547,15 @@ msgstr "Mover la página hacia abajo"
msgid "Move the page up" msgid "Move the page up"
msgstr "Mover la página hacia arriba" msgstr "Mover la página hacia arriba"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "N/D" msgstr "N/D"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
@@ -576,8 +576,8 @@ msgstr "Nueva contraseña"
msgid "Newest first" msgid "Newest first"
msgstr "Las más recientes primero" msgstr "Las más recientes primero"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Siguiente" msgstr "Siguiente"
@@ -695,11 +695,11 @@ msgstr "Padre"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categoría principal" msgstr "Categoría principal"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Contraseña" msgstr "Contraseña"
@@ -711,8 +711,8 @@ msgstr "Recuperación de contraseña"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden" msgstr "Las contraseñas no coinciden"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posición" msgstr "Posición"
@@ -728,8 +728,8 @@ msgstr "Perfil"
msgid "Recover password" msgid "Recover password"
msgstr "Recuperar contraseña" msgstr "Recuperar contraseña"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Actualizar" msgstr "Actualizar"
@@ -746,11 +746,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "Clic derecho" msgstr "Clic derecho"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@@ -766,10 +766,10 @@ msgstr "Desplazarse suavemente al navegar entre entradas"
msgid "Scrolling" msgid "Scrolling"
msgstr "Desplazarse" msgstr "Desplazarse"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
@@ -777,6 +777,14 @@ msgstr "Buscar"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "La búsqueda requiere al menos 3 caracteres" msgstr "La búsqueda requiere al menos 3 caracteres"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Establecer el foco en la siguiente entrada sin abrirla" msgstr "Establecer el foco en la siguiente entrada sin abrirla"
@@ -851,9 +859,9 @@ msgstr "Mostrar recuento de no leídos en la pestaña favicon"
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "Mostrar recuento de no leídos en el título de la pestaña" msgstr "Mostrar recuento de no leídos en el título de la pestaña"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Registrarse" msgstr "Registrarse"
@@ -866,20 +874,20 @@ msgstr "Algo malo acaba de pasar..."
msgid "Space" msgid "Space"
msgstr "Espacio" msgstr "Espacio"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Estrella" msgstr "Estrella"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Destacado" msgstr "Destacado"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Suscribirse" msgstr "Suscribirse"
@@ -952,8 +960,8 @@ msgstr "¡Prueba la demostración!"
msgid "Unread" msgid "Unread"
msgstr "No leído" msgstr "No leído"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Desmarcar" msgstr "Desmarcar"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>به یک حساب نیاز دارید؟</0><1>ثبت نام کنید!</1>" msgstr "<0>به یک حساب نیاز دارید؟</0><1>ثبت نام کنید!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "در مورد" msgstr "در مورد"
@@ -54,16 +54,15 @@ msgstr "اضافه کردن دسته"
msgid "Add user" msgid "Add user"
msgstr "افزودن کاربر" msgstr "افزودن کاربر"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "مدیر" msgstr "مدیر"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "همه" msgstr "همه"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "لغو" msgstr "لغو"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "مقوله" msgstr "مقوله"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "فشرده" msgstr "فشرده"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "تأیید کنید" msgstr "تأیید کنید"
@@ -273,13 +272,13 @@ msgstr "توصیف"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "نمایش" msgstr "نمایش"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "دانلود"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "پیوند را به نوار نشانک بکشید" msgstr "پیوند را به نوار نشانک بکشید"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "ایمیل" msgstr "ایمیل"
@@ -308,8 +307,8 @@ msgstr "آدرس ایمیل"
msgid "Edit user" msgid "Edit user"
msgstr "ویرایش کاربر" msgstr "ویرایش کاربر"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "فعال" msgstr "فعال"
@@ -345,8 +344,8 @@ msgstr "گسترش یافت"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "اشتراک ها و دسته های خود را به عنوان یک فایل OPML صادر کنید که می تواند در سایر خدمات خواندن فید وارد شود" msgstr "اشتراک ها و دسته های خود را به عنوان یک فایل OPML صادر کنید که می تواند در سایر خدمات خواندن فید وارد شود"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "نام فید" msgstr "نام فید"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL فید" msgstr "URL فید"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "رمز عبور را فراموش کرده اید؟" msgstr "رمز عبور را فراموش کرده اید؟"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "ابتدا یک کلید API در نمایه خود ایجاد کنید." msgstr "ابتدا یک کلید API در نمایه خود ایجاد کنید."
@@ -394,12 +393,13 @@ msgstr "ابتدا یک کلید API در نمایه خود ایجاد کنید.
msgid "Generate new API key" msgid "Generate new API key"
msgstr "کلید API جدید ایجاد کنید" msgstr "کلید API جدید ایجاد کنید"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "آدرس اینترنتی فید تولید شده" msgstr "آدرس اینترنتی فید تولید شده"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "واردات"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "در نمای بازشده، پیمایش در ورودی‌ها، آنها را به عنوان خوانده شده علامت‌گذاری می‌کند" msgstr "در نمای بازشده، پیمایش در ورودی‌ها، آنها را به عنوان خوانده شده علامت‌گذاری می‌کند"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "خوانده نشده نگه دارید" msgstr "خوانده نشده نگه دارید"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "میانبرهای صفحه کلید" msgstr "میانبرهای صفحه کلید"
@@ -470,9 +470,9 @@ msgstr "آخرین پیام تازه کردن"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "پیوند" msgstr "پیوند"
@@ -492,9 +492,9 @@ msgstr "بارگیری اشتراک ها..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "بارگیری برچسب ها..." msgstr "بارگیری برچسب ها..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "وارد شوید" msgstr "وارد شوید"
@@ -506,8 +506,8 @@ msgstr "خروج"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "کاربران را مدیریت کنید" msgstr "کاربران را مدیریت کنید"
@@ -515,18 +515,18 @@ msgstr "کاربران را مدیریت کنید"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "همه را به عنوان خوانده شده علامت گذاری کنید" msgstr "همه را به عنوان خوانده شده علامت گذاری کنید"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "همه ورودی ها را به عنوان خوانده شده علامت گذاری کنید" msgstr "همه ورودی ها را به عنوان خوانده شده علامت گذاری کنید"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "علامت گذاری به عنوان خوانده شده" msgstr "علامت گذاری به عنوان خوانده شده"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "تا اینجا به عنوان خوانده شده علامت بزنید" msgstr "تا اینجا به عنوان خوانده شده علامت بزنید"
@@ -546,15 +546,15 @@ msgstr "صفحه را به پایین ببرید"
msgid "Move the page up" msgid "Move the page up"
msgstr "صفحه را به بالا ببرید" msgstr "صفحه را به بالا ببرید"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "نام" msgstr "نام"
@@ -575,8 +575,8 @@ msgstr "رمز عبور جدید"
msgid "Newest first" msgid "Newest first"
msgstr "ابتدا جدیدترین" msgstr "ابتدا جدیدترین"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "بعد" msgstr "بعد"
@@ -694,11 +694,11 @@ msgstr "پدر و مادر"
msgid "Parent Category" msgid "Parent Category"
msgstr "دسته والد" msgstr "دسته والد"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "رمز عبور" msgstr "رمز عبور"
@@ -710,8 +710,8 @@ msgstr "بازیابی رمز عبور"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "گذرواژه ها مطابقت ندارند" msgstr "گذرواژه ها مطابقت ندارند"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "موقعیت" msgstr "موقعیت"
@@ -727,8 +727,8 @@ msgstr "نمایه"
msgid "Recover password" msgid "Recover password"
msgstr "بازیابی رمز عبور" msgstr "بازیابی رمز عبور"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "تازه کردن" msgstr "تازه کردن"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "ذخیره کنید" msgstr "ذخیره کنید"
@@ -765,10 +765,10 @@ msgstr "هنگام پیمایش بین ورودی‌ها به آرامی حرک
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "جستجو" msgstr "جستجو"
@@ -776,6 +776,14 @@ msgstr "جستجو"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "جستجو به حداقل 3 کاراکتر نیاز دارد" msgstr "جستجو به حداقل 3 کاراکتر نیاز دارد"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "فوکوس را روی ورودی بعدی بدون باز کردن آن تنظیم کنید" msgstr "فوکوس را روی ورودی بعدی بدون باز کردن آن تنظیم کنید"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "ثبت نام کنید" msgstr "ثبت نام کنید"
@@ -865,20 +873,20 @@ msgstr "اتفاق بدی افتاد..."
msgid "Space" msgid "Space"
msgstr "فضا" msgstr "فضا"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "ستاره" msgstr "ستاره"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "ستاره دار" msgstr "ستاره دار"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "مشترک شوید" msgstr "مشترک شوید"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "خوانده نشده" msgstr "خوانده نشده"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "" msgstr ""

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Tarvitsetko tilin?</0><1>Rekisteröidy!</1>" msgstr "<0>Tarvitsetko tilin?</0><1>Rekisteröidy!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Noin" msgstr "Noin"
@@ -54,16 +54,15 @@ msgstr "Lisää luokka"
msgid "Add user" msgid "Add user"
msgstr "Lisää käyttäjä" msgstr "Lisää käyttäjä"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Järjestelmänvalvoja" msgstr "Järjestelmänvalvoja"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Kaikki" msgstr "Kaikki"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Peruuta" msgstr "Peruuta"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Luokka" msgstr "Luokka"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakti" msgstr "Kompakti"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Vahvista" msgstr "Vahvista"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Näyttö" msgstr "Näyttö"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Lataa"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Vedä linkki kirjanmerkkipalkkiin" msgstr "Vedä linkki kirjanmerkkipalkkiin"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Sähköposti" msgstr "Sähköposti"
@@ -308,8 +307,8 @@ msgstr "Sähköpostiosoite"
msgid "Edit user" msgid "Edit user"
msgstr "Muokkaa käyttäjää" msgstr "Muokkaa käyttäjää"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Käytössä" msgstr "Käytössä"
@@ -345,8 +344,8 @@ msgstr "Laajennettu"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Vie tilauksesi ja luokat OPML-tiedostona, joka voidaan tuoda muihin syötteiden lukupalveluihin" msgstr "Vie tilauksesi ja luokat OPML-tiedostona, joka voidaan tuoda muihin syötteiden lukupalveluihin"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Syötteen nimi" msgstr "Syötteen nimi"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Syötteen URL-osoite" msgstr "Syötteen URL-osoite"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Unohditko salasanan?" msgstr "Unohditko salasanan?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Luo ensin API-avain profiiliisi." msgstr "Luo ensin API-avain profiiliisi."
@@ -394,12 +393,13 @@ msgstr "Luo ensin API-avain profiiliisi."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Luo uusi API-avain" msgstr "Luo uusi API-avain"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Luotu syötteen URL-osoite" msgstr "Luotu syötteen URL-osoite"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Tuo"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Merkitse ne luetuiksi laajennetussa näkymässä vierittämällä merkintöjä" msgstr "Merkitse ne luetuiksi laajennetussa näkymässä vierittämällä merkintöjä"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Pidä lukematta" msgstr "Pidä lukematta"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Pikanäppäimet" msgstr "Pikanäppäimet"
@@ -470,9 +470,9 @@ msgstr "Viimeinen päivitysviesti"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Linkki" msgstr "Linkki"
@@ -492,9 +492,9 @@ msgstr "Ladataan tilauksia..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Ladataan tunnisteita..." msgstr "Ladataan tunnisteita..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Kirjaudu sisään" msgstr "Kirjaudu sisään"
@@ -506,8 +506,8 @@ msgstr "Uloskirjautuminen"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Hallitse käyttäjiä" msgstr "Hallitse käyttäjiä"
@@ -515,18 +515,18 @@ msgstr "Hallitse käyttäjiä"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Merkitse kaikki luetuiksi" msgstr "Merkitse kaikki luetuiksi"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Merkitse kaikki merkinnät luetuiksi" msgstr "Merkitse kaikki merkinnät luetuiksi"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Merkitse luetuksi" msgstr "Merkitse luetuksi"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Merkitse luetuksi tähän asti" msgstr "Merkitse luetuksi tähän asti"
@@ -546,15 +546,15 @@ msgstr "Siirrä sivua alaspäin"
msgid "Move the page up" msgid "Move the page up"
msgstr "Siirrä sivua ylöspäin" msgstr "Siirrä sivua ylöspäin"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nimi" msgstr "Nimi"
@@ -575,8 +575,8 @@ msgstr "Uusi salasana"
msgid "Newest first" msgid "Newest first"
msgstr "Uusin ensin" msgstr "Uusin ensin"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Seuraava" msgstr "Seuraava"
@@ -694,11 +694,11 @@ msgstr "Vanhempi"
msgid "Parent Category" msgid "Parent Category"
msgstr "Pääluokka" msgstr "Pääluokka"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Salasana" msgstr "Salasana"
@@ -710,8 +710,8 @@ msgstr "Salasanan palautus"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Salasanat eivät täsmää" msgstr "Salasanat eivät täsmää"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Sijainti" msgstr "Sijainti"
@@ -727,8 +727,8 @@ msgstr "Profiili"
msgid "Recover password" msgid "Recover password"
msgstr "Palauta salasana" msgstr "Palauta salasana"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Päivitä" msgstr "Päivitä"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Tallenna" msgstr "Tallenna"
@@ -765,10 +765,10 @@ msgstr "Selaa sujuvasti navigoidessasi merkintöjen välillä"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Etsi" msgstr "Etsi"
@@ -776,6 +776,14 @@ msgstr "Etsi"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Haku vaatii vähintään 3 merkkiä" msgstr "Haku vaatii vähintään 3 merkkiä"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Keskitä seuraavaan merkintään avaamatta sitä" msgstr "Keskitä seuraavaan merkintään avaamatta sitä"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Rekisteröidy" msgstr "Rekisteröidy"
@@ -865,20 +873,20 @@ msgstr "Jotain pahaa tapahtui juuri..."
msgid "Space" msgid "Space"
msgstr "Avaruus" msgstr "Avaruus"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Tähti" msgstr "Tähti"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Tähdellä merkitty" msgstr "Tähdellä merkitty"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Tilaa" msgstr "Tilaa"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Lukematon" msgstr "Lukematon"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Poista tähti" msgstr "Poista tähti"

View File

@@ -33,8 +33,8 @@ msgstr "<0>Salut,</0><1>Je m'appelle Jérémie, je suis belge, et je développe
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Besoin d'un compte ?</0><1>Enregistrez-vous !</1>" msgstr "<0>Besoin d'un compte ?</0><1>Enregistrez-vous !</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "À propos" msgstr "À propos"
@@ -54,16 +54,15 @@ msgstr "Ajouter une catégorie"
msgid "Add user" msgid "Add user"
msgstr "Ajouter un utilisateur" msgstr "Ajouter un utilisateur"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administrateur" msgstr "Administrateur"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Tout" msgstr "Tout"
@@ -144,27 +143,27 @@ msgstr "Extension navigateur"
msgid "Browser tab" msgid "Browser tab"
msgstr "Onglet navigateur" msgstr "Onglet navigateur"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Catégorie" msgstr "Catégorie"
@@ -204,11 +203,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Compact" msgstr "Compact"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirmer" msgstr "Confirmer"
@@ -273,13 +272,13 @@ msgstr "Descendant"
msgid "Detailed" msgid "Detailed"
msgstr "Vue détaillée" msgstr "Vue détaillée"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Affichage" msgstr "Affichage"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Faire un don" msgstr "Faire un don"
@@ -291,11 +290,11 @@ msgstr "Télécharger"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Déplacez le lien vers la barre de favoris" msgstr "Déplacez le lien vers la barre de favoris"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-mail" msgstr "E-mail"
@@ -308,8 +307,8 @@ msgstr "Adresse e-mail"
msgid "Edit user" msgid "Edit user"
msgstr "Modifier un utilisateur" msgstr "Modifier un utilisateur"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Actif" msgstr "Actif"
@@ -345,8 +344,8 @@ msgstr "Vue étendue"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exporter vos abonnements et catégories en tant que fichier OPML qui peut être importé dans d'autres services de lecture de flux" msgstr "Exporter vos abonnements et catégories en tant que fichier OPML qui peut être importé dans d'autres services de lecture de flux"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Options de l'extension" msgstr "Options de l'extension"
@@ -354,9 +353,9 @@ msgstr "Options de l'extension"
msgid "Feed name" msgid "Feed name"
msgstr "Nom du flux" msgstr "Nom du flux"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL du flux" msgstr "URL du flux"
@@ -384,9 +383,9 @@ msgstr "La récupération forcée des flux n'est pas encore disponible."
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Mot de passe oublié ?" msgstr "Mot de passe oublié ?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Générez d'abord une clé API dans votre profil." msgstr "Générez d'abord une clé API dans votre profil."
@@ -394,12 +393,13 @@ msgstr "Générez d'abord une clé API dans votre profil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Générer une nouvelle clé API" msgstr "Générer une nouvelle clé API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL du flux généré" msgstr "URL du flux généré"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Aller à {0}" msgstr "Aller à {0}"
@@ -440,13 +440,13 @@ msgstr "Importer"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "En mode de lecture étendu, marquer les éléments comme lus lorsque la fenêtre descend." msgstr "En mode de lecture étendu, marquer les éléments comme lus lorsque la fenêtre descend."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Garder non lu" msgstr "Garder non lu"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Raccourcis clavier" msgstr "Raccourcis clavier"
@@ -470,9 +470,9 @@ msgstr "Dernier message de mise à jour"
msgid "Light" msgid "Light"
msgstr "Clair" msgstr "Clair"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Lien" msgstr "Lien"
@@ -492,9 +492,9 @@ msgstr "Chargement des abonnements..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Chargement des marqueurs..." msgstr "Chargement des marqueurs..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Connexion" msgstr "Connexion"
@@ -506,8 +506,8 @@ msgstr "Déconnexion"
msgid "Long press" msgid "Long press"
msgstr "Appui long" msgstr "Appui long"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Gestion des utilisateurs" msgstr "Gestion des utilisateurs"
@@ -515,18 +515,18 @@ msgstr "Gestion des utilisateurs"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Tout marquer comme lu" msgstr "Tout marquer comme lu"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marquer toutes les entrées comme lues" msgstr "Marquer toutes les entrées comme lues"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marquer comme lu" msgstr "Marquer comme lu"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marquer comme lu jusqu'ici" msgstr "Marquer comme lu jusqu'ici"
@@ -546,15 +546,15 @@ msgstr "Faites défiler la page vers le bas"
msgid "Move the page up" msgid "Move the page up"
msgstr "Faites défiler la page vers le haut" msgstr "Faites défiler la page vers le haut"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "N/A" msgstr "N/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@@ -575,8 +575,8 @@ msgstr "Nouveau mot de passe"
msgid "Newest first" msgid "Newest first"
msgstr "Plus récent en premier" msgstr "Plus récent en premier"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Suivant" msgstr "Suivant"
@@ -694,11 +694,11 @@ msgstr "Parent"
msgid "Parent Category" msgid "Parent Category"
msgstr "Catégorie parente" msgstr "Catégorie parente"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
@@ -710,8 +710,8 @@ msgstr "Récupération de mot de passe"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas" msgstr "Les mots de passe ne correspondent pas"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Position" msgstr "Position"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Récupérer le mot de passe" msgstr "Récupérer le mot de passe"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Rafraîchir" msgstr "Rafraîchir"
@@ -745,11 +745,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "Clic droit" msgstr "Clic droit"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Enregistrer" msgstr "Enregistrer"
@@ -765,10 +765,10 @@ msgstr "Défilement animé lors de la navigation entre les entrées"
msgid "Scrolling" msgid "Scrolling"
msgstr "Défilement" msgstr "Défilement"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
@@ -776,6 +776,14 @@ msgstr "Rechercher"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "La recherche requiert au moins 3 caractères" msgstr "La recherche requiert au moins 3 caractères"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Sélectionner l'article suivant sans l'ouvrir" msgstr "Sélectionner l'article suivant sans l'ouvrir"
@@ -850,9 +858,9 @@ msgstr "Afficher le nombre d'entrées non lues dans la favicône de l'onglet"
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "Afficher le nombre d'entrées non lues dans le titre de l'onglet" msgstr "Afficher le nombre d'entrées non lues dans le titre de l'onglet"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Créer un compte" msgstr "Créer un compte"
@@ -865,20 +873,20 @@ msgstr "Quelque chose s'est mal passé..."
msgid "Space" msgid "Space"
msgstr "Espace" msgstr "Espace"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Ajouter aux favoris" msgstr "Ajouter aux favoris"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Favoris" msgstr "Favoris"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "S'abonner" msgstr "S'abonner"
@@ -951,8 +959,8 @@ msgstr "Essayez la version de démonstration !"
msgid "Unread" msgid "Unread"
msgstr "Non lu" msgstr "Non lu"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Retirer des favoris" msgstr "Retirer des favoris"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Necesitas unha conta?</0><1>Rexístrate!</1>" msgstr "<0>Necesitas unha conta?</0><1>Rexístrate!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Sobre" msgstr "Sobre"
@@ -54,16 +54,15 @@ msgstr "Engadir categoría"
msgid "Add user" msgid "Add user"
msgstr "Engadir usuario" msgstr "Engadir usuario"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administración" msgstr "Administración"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categoría" msgstr "Categoría"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Compacto" msgstr "Compacto"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirmar" msgstr "Confirmar"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Exhibición" msgstr "Exhibición"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Descargar"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Arrastra a ligazón á barra de marcadores" msgstr "Arrastra a ligazón á barra de marcadores"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Correo electrónico" msgstr "Correo electrónico"
@@ -308,8 +307,8 @@ msgstr "Enderezo de correo electrónico"
msgid "Edit user" msgid "Edit user"
msgstr "Editar usuario" msgstr "Editar usuario"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Activado" msgstr "Activado"
@@ -345,8 +344,8 @@ msgstr "Ampliado"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exporta as túas subscricións e categorías como ficheiro OPML que se pode importar noutros servizos de lectura de feeds" msgstr "Exporta as túas subscricións e categorías como ficheiro OPML que se pode importar noutros servizos de lectura de feeds"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Nome do feed" msgstr "Nome do feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL da fonte" msgstr "URL da fonte"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Esqueceches o contrasinal?" msgstr "Esqueceches o contrasinal?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Xera primeiro unha clave API no teu perfil." msgstr "Xera primeiro unha clave API no teu perfil."
@@ -394,12 +393,13 @@ msgstr "Xera primeiro unha clave API no teu perfil."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Xerar nova clave de API" msgstr "Xerar nova clave de API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL da fonte xerada" msgstr "URL da fonte xerada"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Importación"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Na vista ampliada, ao desprazarse polas entradas márcaas como lidas" msgstr "Na vista ampliada, ao desprazarse polas entradas márcaas como lidas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Manter sen ler" msgstr "Manter sen ler"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "atallos de teclado" msgstr "atallos de teclado"
@@ -470,9 +470,9 @@ msgstr "Última mensaxe de actualización"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Ligazón" msgstr "Ligazón"
@@ -492,9 +492,9 @@ msgstr "Cargando subscricións..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Cargando etiquetas..." msgstr "Cargando etiquetas..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
@@ -506,8 +506,8 @@ msgstr "Pechar sesión"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Xestionar usuarios" msgstr "Xestionar usuarios"
@@ -515,18 +515,18 @@ msgstr "Xestionar usuarios"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marcar todo como lido" msgstr "Marcar todo como lido"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marcar todas as entradas como lidas" msgstr "Marcar todas as entradas como lidas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marcar como lido" msgstr "Marcar como lido"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marcar como lido ata aquí" msgstr "Marcar como lido ata aquí"
@@ -546,15 +546,15 @@ msgstr "Move a páxina cara abaixo"
msgid "Move the page up" msgid "Move the page up"
msgstr "Move a páxina cara arriba" msgstr "Move a páxina cara arriba"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
@@ -575,8 +575,8 @@ msgstr "novo contrasinal"
msgid "Newest first" msgid "Newest first"
msgstr "o máis novo primeiro" msgstr "o máis novo primeiro"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Seguinte" msgstr "Seguinte"
@@ -694,11 +694,11 @@ msgstr "Pai"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categoría de pais" msgstr "Categoría de pais"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Contrasinal" msgstr "Contrasinal"
@@ -710,8 +710,8 @@ msgstr "Recuperación de contrasinal"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Os contrasinais non coinciden" msgstr "Os contrasinais non coinciden"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posición" msgstr "Posición"
@@ -727,8 +727,8 @@ msgstr "Perfil"
msgid "Recover password" msgid "Recover password"
msgstr "Recuperar o contrasinal" msgstr "Recuperar o contrasinal"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Actualizar" msgstr "Actualizar"
@@ -745,11 +745,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Gardar" msgstr "Gardar"
@@ -765,10 +765,10 @@ msgstr "Desprácese suavemente ao navegar entre as entradas"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Busca" msgstr "Busca"
@@ -776,6 +776,14 @@ msgstr "Busca"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "A busca require polo menos 3 caracteres" msgstr "A busca require polo menos 3 caracteres"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Establece o foco na seguinte entrada sen abrila" msgstr "Establece o foco na seguinte entrada sen abrila"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Rexístrese" msgstr "Rexístrese"
@@ -865,20 +873,20 @@ msgstr "Algo malo pasou..."
msgid "Space" msgid "Space"
msgstr "Espazo" msgstr "Espazo"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "estrela" msgstr "estrela"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "estrela" msgstr "estrela"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Subscríbete" msgstr "Subscríbete"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Sen ler" msgstr "Sen ler"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Desestrela" msgstr "Desestrela"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Fiókra van szüksége?</0><1>Regisztráljon!</1>" msgstr "<0>Fiókra van szüksége?</0><1>Regisztráljon!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Kb" msgstr "Kb"
@@ -54,16 +54,15 @@ msgstr "Kategória hozzáadása"
msgid "Add user" msgid "Add user"
msgstr "Felhasználó hozzáadása" msgstr "Felhasználó hozzáadása"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Mind" msgstr "Mind"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Mégse" msgstr "Mégse"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategória" msgstr "Kategória"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Erősítse meg" msgstr "Erősítse meg"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Kijelző" msgstr "Kijelző"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Letöltés"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Húzza a hivatkozást a könyvjelzősávra" msgstr "Húzza a hivatkozást a könyvjelzősávra"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "E-mail cím"
msgid "Edit user" msgid "Edit user"
msgstr "Felhasználó szerkesztése" msgstr "Felhasználó szerkesztése"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Engedélyezve" msgstr "Engedélyezve"
@@ -345,8 +344,8 @@ msgstr "Kiterjesztve"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exportálja előfizetéseit és kategóriáit OPML-fájlként, amely importálható más feedolvasó szolgáltatásokba" msgstr "Exportálja előfizetéseit és kategóriáit OPML-fájlként, amely importálható más feedolvasó szolgáltatásokba"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Hírcsatorna neve" msgstr "Hírcsatorna neve"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "" msgstr ""
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Elfelejtette a jelszavát?" msgstr "Elfelejtette a jelszavát?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Először generáljon API-kulcsot a profiljában." msgstr "Először generáljon API-kulcsot a profiljában."
@@ -394,12 +393,13 @@ msgstr "Először generáljon API-kulcsot a profiljában."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Új API-kulcs létrehozása" msgstr "Új API-kulcs létrehozása"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Hírcsatorna generált URL-je" msgstr "Hírcsatorna generált URL-je"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Importálás"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Kibontott nézetben a bejegyzések görgetése olvasottként jelöli meg őket" msgstr "Kibontott nézetben a bejegyzések görgetése olvasottként jelöli meg őket"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Olvasatlan marad" msgstr "Olvasatlan marad"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Billentyűparancsok" msgstr "Billentyűparancsok"
@@ -470,9 +470,9 @@ msgstr "Utolsó frissítési üzenet"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Előfizetések betöltése..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Címkék betöltése..." msgstr "Címkék betöltése..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Jelentkezzen be" msgstr "Jelentkezzen be"
@@ -506,8 +506,8 @@ msgstr "Kijelentkezés"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Felhasználók kezelése" msgstr "Felhasználók kezelése"
@@ -515,18 +515,18 @@ msgstr "Felhasználók kezelése"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Minden megjelölése olvasottként" msgstr "Minden megjelölése olvasottként"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Minden bejegyzés megjelölése olvasottként" msgstr "Minden bejegyzés megjelölése olvasottként"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Megjelölés olvasottként" msgstr "Megjelölés olvasottként"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Megjelölés idáig olvasottként" msgstr "Megjelölés idáig olvasottként"
@@ -546,15 +546,15 @@ msgstr "Mozgassa le az oldalt"
msgid "Move the page up" msgid "Move the page up"
msgstr "Mozgassa felfelé az oldalt" msgstr "Mozgassa felfelé az oldalt"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Név" msgstr "Név"
@@ -575,8 +575,8 @@ msgstr "Új jelszó"
msgid "Newest first" msgid "Newest first"
msgstr "A legújabbak először" msgstr "A legújabbak először"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Következő" msgstr "Következő"
@@ -694,11 +694,11 @@ msgstr "Szülő"
msgid "Parent Category" msgid "Parent Category"
msgstr "Szülő kategória" msgstr "Szülő kategória"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Jelszó" msgstr "Jelszó"
@@ -710,8 +710,8 @@ msgstr "Jelszó helyreállítás"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "A jelszavak nem egyeznek" msgstr "A jelszavak nem egyeznek"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Pozíció" msgstr "Pozíció"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Jelszó helyreállítása" msgstr "Jelszó helyreállítása"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Frissítés" msgstr "Frissítés"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Mentés" msgstr "Mentés"
@@ -765,10 +765,10 @@ msgstr "Sima görgetés, amikor a bejegyzések között navigál"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Keresés" msgstr "Keresés"
@@ -776,6 +776,14 @@ msgstr "Keresés"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "A kereséshez legalább 3 karakter szükséges" msgstr "A kereséshez legalább 3 karakter szükséges"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Állítsa a fókuszt a következő bejegyzésre anélkül, hogy megnyitná azt" msgstr "Állítsa a fókuszt a következő bejegyzésre anélkül, hogy megnyitná azt"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Regisztráljon" msgstr "Regisztráljon"
@@ -865,20 +873,20 @@ msgstr "Valami rossz történt..."
msgid "Space" msgid "Space"
msgstr "" msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Csillag" msgstr "Csillag"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Csillaggal megjelölve" msgstr "Csillaggal megjelölve"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Feliratkozás" msgstr "Feliratkozás"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Olvasatlan" msgstr "Olvasatlan"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "" msgstr ""

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Butuh akun?</0><1>Daftar!</1>" msgstr "<0>Butuh akun?</0><1>Daftar!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Tentang" msgstr "Tentang"
@@ -54,16 +54,15 @@ msgstr "Tambahkan kategori"
msgid "Add user" msgid "Add user"
msgstr "Tambahkan pengguna" msgstr "Tambahkan pengguna"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Semua" msgstr "Semua"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Batal" msgstr "Batal"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Ringkas" msgstr "Ringkas"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Konfirmasi" msgstr "Konfirmasi"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Tampilan" msgstr "Tampilan"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Unduh"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Seret tautan ke bilah bookmark" msgstr "Seret tautan ke bilah bookmark"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Email" msgstr "Email"
@@ -308,8 +307,8 @@ msgstr "Alamat email"
msgid "Edit user" msgid "Edit user"
msgstr "Edit pengguna" msgstr "Edit pengguna"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Diaktifkan" msgstr "Diaktifkan"
@@ -345,8 +344,8 @@ msgstr "Diperluas"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Ekspor langganan dan kategori Anda sebagai file OPML yang dapat diimpor ke layanan membaca feed lainnya" msgstr "Ekspor langganan dan kategori Anda sebagai file OPML yang dapat diimpor ke layanan membaca feed lainnya"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Nama umpan" msgstr "Nama umpan"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL Umpan" msgstr "URL Umpan"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Lupa kata sandi?" msgstr "Lupa kata sandi?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Buat kunci API di profil Anda terlebih dahulu." msgstr "Buat kunci API di profil Anda terlebih dahulu."
@@ -394,12 +393,13 @@ msgstr "Buat kunci API di profil Anda terlebih dahulu."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Buat kunci API baru" msgstr "Buat kunci API baru"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Url umpan yang dihasilkan" msgstr "Url umpan yang dihasilkan"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Impor"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Dalam tampilan yang diperluas, menggulir entri menandainya sebagai telah dibaca" msgstr "Dalam tampilan yang diperluas, menggulir entri menandainya sebagai telah dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Tetap belum dibaca" msgstr "Tetap belum dibaca"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Pintasan keyboard" msgstr "Pintasan keyboard"
@@ -470,9 +470,9 @@ msgstr "Pesan penyegaran terakhir"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Tautan" msgstr "Tautan"
@@ -492,9 +492,9 @@ msgstr "Memuat langganan..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Memuat tag..." msgstr "Memuat tag..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Masuk" msgstr "Masuk"
@@ -506,8 +506,8 @@ msgstr "Keluar"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Kelola pengguna" msgstr "Kelola pengguna"
@@ -515,18 +515,18 @@ msgstr "Kelola pengguna"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Tandai semua sebagai telah dibaca" msgstr "Tandai semua sebagai telah dibaca"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Tandai semua entri sebagai telah dibaca" msgstr "Tandai semua entri sebagai telah dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Tandai sebagai telah dibaca" msgstr "Tandai sebagai telah dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Tandai sebagai telah dibaca sampai di sini" msgstr "Tandai sebagai telah dibaca sampai di sini"
@@ -546,15 +546,15 @@ msgstr "Pindahkan halaman ke bawah"
msgid "Move the page up" msgid "Move the page up"
msgstr "Pindahkan halaman ke atas" msgstr "Pindahkan halaman ke atas"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "T/A" msgstr "T/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nama" msgstr "Nama"
@@ -575,8 +575,8 @@ msgstr "Kata sandi baru"
msgid "Newest first" msgid "Newest first"
msgstr "Terbaru dulu" msgstr "Terbaru dulu"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Selanjutnya" msgstr "Selanjutnya"
@@ -694,11 +694,11 @@ msgstr "Orang tua"
msgid "Parent Category" msgid "Parent Category"
msgstr "Kategori Induk" msgstr "Kategori Induk"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Kata Sandi" msgstr "Kata Sandi"
@@ -710,8 +710,8 @@ msgstr "Pemulihan Kata Sandi"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Kata sandi tidak cocok" msgstr "Kata sandi tidak cocok"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posisi" msgstr "Posisi"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Pulihkan kata sandi" msgstr "Pulihkan kata sandi"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Segarkan" msgstr "Segarkan"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Simpan" msgstr "Simpan"
@@ -765,10 +765,10 @@ msgstr "Gulir dengan lancar saat menavigasi antar entri"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Pencarian" msgstr "Pencarian"
@@ -776,6 +776,14 @@ msgstr "Pencarian"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Pencarian membutuhkan setidaknya 3 karakter" msgstr "Pencarian membutuhkan setidaknya 3 karakter"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Tetapkan fokus pada entri berikutnya tanpa membukanya" msgstr "Tetapkan fokus pada entri berikutnya tanpa membukanya"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Daftar" msgstr "Daftar"
@@ -865,20 +873,20 @@ msgstr "Sesuatu yang buruk baru saja terjadi..."
msgid "Space" msgid "Space"
msgstr "Luar Angkasa" msgstr "Luar Angkasa"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Bintang" msgstr "Bintang"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Berbintang" msgstr "Berbintang"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Berlangganan" msgstr "Berlangganan"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Belum Dibaca" msgstr "Belum Dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Hapus bintang" msgstr "Hapus bintang"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Hai bisogno di un account?</0><1>Registrati!</1>" msgstr "<0>Hai bisogno di un account?</0><1>Registrati!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Circa" msgstr "Circa"
@@ -54,16 +54,15 @@ msgstr "Aggiungi categoria"
msgid "Add user" msgid "Add user"
msgstr "Aggiungi utente" msgstr "Aggiungi utente"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Ammin" msgstr "Ammin"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Tutto" msgstr "Tutto"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Compatto" msgstr "Compatto"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Conferma" msgstr "Conferma"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Visualizzazione" msgstr "Visualizzazione"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Scarica"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Trascina il collegamento sulla barra dei preferiti" msgstr "Trascina il collegamento sulla barra dei preferiti"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "Indirizzo e-mail"
msgid "Edit user" msgid "Edit user"
msgstr "Modifica utente" msgstr "Modifica utente"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Abilitato" msgstr "Abilitato"
@@ -345,8 +344,8 @@ msgstr "Espanso"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Esporta le tue iscrizioni e categorie come file OPML che può essere importato in altri servizi di lettura feed" msgstr "Esporta le tue iscrizioni e categorie come file OPML che può essere importato in altri servizi di lettura feed"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Nome del feed" msgstr "Nome del feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL feed" msgstr "URL feed"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Password dimenticata?" msgstr "Password dimenticata?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Genera prima una chiave API nel tuo profilo." msgstr "Genera prima una chiave API nel tuo profilo."
@@ -394,12 +393,13 @@ msgstr "Genera prima una chiave API nel tuo profilo."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Genera nuova chiave API" msgstr "Genera nuova chiave API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL feed generato" msgstr "URL feed generato"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Importa"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Nella vista espansa, scorrendo le voci contrassegnale come lette" msgstr "Nella vista espansa, scorrendo le voci contrassegnale come lette"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Mantieni non letto" msgstr "Mantieni non letto"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Scorciatoie da tastiera" msgstr "Scorciatoie da tastiera"
@@ -470,9 +470,9 @@ msgstr "Ultimo messaggio di aggiornamento"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Collegamento" msgstr "Collegamento"
@@ -492,9 +492,9 @@ msgstr "Caricamento abbonamenti..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Caricamento tag..." msgstr "Caricamento tag..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Accedi" msgstr "Accedi"
@@ -506,8 +506,8 @@ msgstr "Disconnessione"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Gestisci utenti" msgstr "Gestisci utenti"
@@ -515,18 +515,18 @@ msgstr "Gestisci utenti"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Contrassegna tutto come letto" msgstr "Contrassegna tutto come letto"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Contrassegna tutte le voci come lette" msgstr "Contrassegna tutte le voci come lette"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Contrassegna come letto" msgstr "Contrassegna come letto"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Contrassegna come letto fino a qui" msgstr "Contrassegna come letto fino a qui"
@@ -546,15 +546,15 @@ msgstr "Sposta la pagina in basso"
msgid "Move the page up" msgid "Move the page up"
msgstr "Sposta la pagina in alto" msgstr "Sposta la pagina in alto"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
@@ -575,8 +575,8 @@ msgstr "Nuova password"
msgid "Newest first" msgid "Newest first"
msgstr "Il più recente prima" msgstr "Il più recente prima"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Avanti" msgstr "Avanti"
@@ -694,11 +694,11 @@ msgstr "Genitore"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categoria padre" msgstr "Categoria padre"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "" msgstr ""
@@ -710,8 +710,8 @@ msgstr "Recupero password"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Le password non corrispondono" msgstr "Le password non corrispondono"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posizione" msgstr "Posizione"
@@ -727,8 +727,8 @@ msgstr "Profilo"
msgid "Recover password" msgid "Recover password"
msgstr "Recupera password" msgstr "Recupera password"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Aggiorna" msgstr "Aggiorna"
@@ -745,11 +745,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Salva" msgstr "Salva"
@@ -765,10 +765,10 @@ msgstr "Scorrere senza problemi durante la navigazione tra le voci"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Cerca" msgstr "Cerca"
@@ -776,6 +776,14 @@ msgstr "Cerca"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "La ricerca richiede almeno 3 caratteri" msgstr "La ricerca richiede almeno 3 caratteri"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Imposta il focus sulla voce successiva senza aprirla" msgstr "Imposta il focus sulla voce successiva senza aprirla"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Iscriviti" msgstr "Iscriviti"
@@ -865,20 +873,20 @@ msgstr "È appena successo qualcosa di brutto..."
msgid "Space" msgid "Space"
msgstr "Spazio" msgstr "Spazio"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stella" msgstr "Stella"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Speciali" msgstr "Speciali"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Iscriviti" msgstr "Iscriviti"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Non letto" msgstr "Non letto"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Elimina le stelle" msgstr "Elimina le stelle"

View File

@@ -33,8 +33,8 @@ msgstr "<0>こんにちは、</0><1>私はベルギーのジェレミーです
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>アカウントが必要ですか?</0><1>サインアップ!</1>" msgstr "<0>アカウントが必要ですか?</0><1>サインアップ!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "About" msgstr "About"
@@ -54,16 +54,15 @@ msgstr "カテゴリを追加"
msgid "Add user" msgid "Add user"
msgstr "ユーザー追加" msgstr "ユーザー追加"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "管理者" msgstr "管理者"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "すべて" msgstr "すべて"
@@ -144,27 +143,27 @@ msgstr "ブラウザー拡張"
msgid "Browser tab" msgid "Browser tab"
msgstr "ブラウザータブ" msgstr "ブラウザータブ"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "キャンセル" msgstr "キャンセル"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "カテゴリー" msgstr "カテゴリー"
@@ -204,11 +203,11 @@ msgstr "CommaFeed バージョン {version} ({revision})。"
msgid "Compact" msgid "Compact"
msgstr "コンパクト" msgstr "コンパクト"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "確認" msgstr "確認"
@@ -273,13 +272,13 @@ msgstr "説明"
msgid "Detailed" msgid "Detailed"
msgstr "詳細" msgstr "詳細"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "ディスプレイ" msgstr "ディスプレイ"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "寄付" msgstr "寄付"
@@ -291,11 +290,11 @@ msgstr "ダウンロード"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "リンクをブックマークバーにドラッグ" msgstr "リンクをブックマークバーにドラッグ"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "メール" msgstr "メール"
@@ -308,8 +307,8 @@ msgstr "メールアドレス"
msgid "Edit user" msgid "Edit user"
msgstr "ユーザーの編集" msgstr "ユーザーの編集"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "有効" msgstr "有効"
@@ -345,8 +344,8 @@ msgstr "拡張"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "サブスクリプションとカテゴリを、他のフィード読み取りサービスにインポートできる OPML ファイルとしてエクスポートします" msgstr "サブスクリプションとカテゴリを、他のフィード読み取りサービスにインポートできる OPML ファイルとしてエクスポートします"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "拡張機能オプション" msgstr "拡張機能オプション"
@@ -354,9 +353,9 @@ msgstr "拡張機能オプション"
msgid "Feed name" msgid "Feed name"
msgstr "フィード名" msgstr "フィード名"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "フィード URL" msgstr "フィード URL"
@@ -384,9 +383,9 @@ msgstr "フィードの強制フェッチはまだ利用できません。"
msgid "Forgot password?" msgid "Forgot password?"
msgstr "パスワードをお忘れですか?" msgstr "パスワードをお忘れですか?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "最初にプロファイルでAPIキーを生成します。" msgstr "最初にプロファイルでAPIキーを生成します。"
@@ -394,12 +393,13 @@ msgstr "最初にプロファイルでAPIキーを生成します。"
msgid "Generate new API key" msgid "Generate new API key"
msgstr "新しいAPIキーを生成する" msgstr "新しいAPIキーを生成する"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "生成されたフィードURL" msgstr "生成されたフィードURL"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "{0} に移動" msgstr "{0} に移動"
@@ -440,13 +440,13 @@ msgstr "インポート"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "展開ビューでエントリーをスクロールすると、それらが既読としてマークされます" msgstr "展開ビューでエントリーをスクロールすると、それらが既読としてマークされます"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "未読のままにする" msgstr "未読のままにする"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "キーボードショートカット" msgstr "キーボードショートカット"
@@ -470,9 +470,9 @@ msgstr "最終更新メッセージ"
msgid "Light" msgid "Light"
msgstr "ライト" msgstr "ライト"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "リンク" msgstr "リンク"
@@ -492,9 +492,9 @@ msgstr "サブスクリプションを読み込んでいます..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "タグを読み込んでいます..." msgstr "タグを読み込んでいます..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "ログイン" msgstr "ログイン"
@@ -506,8 +506,8 @@ msgstr "ログアウト"
msgid "Long press" msgid "Long press"
msgstr "長押し" msgstr "長押し"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "ユーザーの管理" msgstr "ユーザーの管理"
@@ -515,18 +515,18 @@ msgstr "ユーザーの管理"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "すべて既読にする" msgstr "すべて既読にする"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "すべてのエントリーを既読にする" msgstr "すべてのエントリーを既読にする"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "既読にする" msgstr "既読にする"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "ここまで既読にする" msgstr "ここまで既読にする"
@@ -546,15 +546,15 @@ msgstr "ページを下に移動"
msgid "Move the page up" msgid "Move the page up"
msgstr "ページを上に移動" msgstr "ページを上に移動"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "該当なし" msgstr "該当なし"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "名前" msgstr "名前"
@@ -575,8 +575,8 @@ msgstr "新しいパスワード"
msgid "Newest first" msgid "Newest first"
msgstr "最新順" msgstr "最新順"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "次へ" msgstr "次へ"
@@ -694,11 +694,11 @@ msgstr "親"
msgid "Parent Category" msgid "Parent Category"
msgstr "親カテゴリ" msgstr "親カテゴリ"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "パスワード" msgstr "パスワード"
@@ -710,8 +710,8 @@ msgstr "パスワード回復"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "パスワードが一致しません" msgstr "パスワードが一致しません"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "位置" msgstr "位置"
@@ -727,8 +727,8 @@ msgstr "プロフィール"
msgid "Recover password" msgid "Recover password"
msgstr "パスワードの回復" msgstr "パスワードの回復"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "リフレッシュ" msgstr "リフレッシュ"
@@ -745,11 +745,11 @@ msgstr "REST API"
msgid "Right click" msgid "Right click"
msgstr "右クリック" msgstr "右クリック"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "保存" msgstr "保存"
@@ -765,10 +765,10 @@ msgstr "エントリー間を移動するときにスムーズにスクロール
msgid "Scrolling" msgid "Scrolling"
msgstr "スクロール" msgstr "スクロール"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "検索" msgstr "検索"
@@ -776,6 +776,14 @@ msgstr "検索"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "検索には少なくとも3文字が必要です" msgstr "検索には少なくとも3文字が必要です"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "次のエントリーを開かずにフォーカスする" msgstr "次のエントリーを開かずにフォーカスする"
@@ -850,9 +858,9 @@ msgstr "未読数をタブのアイコンに表示する"
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "未読数をタブのタイトルに表示する" msgstr "未読数をタブのタイトルに表示する"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "サインアップ" msgstr "サインアップ"
@@ -865,20 +873,20 @@ msgstr "何か悪いことが起きました..."
msgid "Space" msgid "Space"
msgstr "Space" msgstr "Space"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "スター" msgstr "スター"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "スター付き" msgstr "スター付き"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "購読する" msgstr "購読する"
@@ -951,8 +959,8 @@ msgstr "デモを試す!"
msgid "Unread" msgid "Unread"
msgstr "未読" msgstr "未読"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "スターを外す" msgstr "スターを外す"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>계정이 필요하십니까?</0><1>가입하세요!</1>" msgstr "<0>계정이 필요하십니까?</0><1>가입하세요!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "정보" msgstr "정보"
@@ -54,16 +54,15 @@ msgstr "카테고리 추가"
msgid "Add user" msgid "Add user"
msgstr "사용자 추가" msgstr "사용자 추가"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "관리자" msgstr "관리자"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "전체" msgstr "전체"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "취소" msgstr "취소"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "카테고리" msgstr "카테고리"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "컴팩트" msgstr "컴팩트"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "확인" msgstr "확인"
@@ -273,13 +272,13 @@ msgstr "설명"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "디스플레이" msgstr "디스플레이"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "다운로드"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "링크를 북마크바로 드래그" msgstr "링크를 북마크바로 드래그"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "이메일" msgstr "이메일"
@@ -308,8 +307,8 @@ msgstr "이메일 주소"
msgid "Edit user" msgid "Edit user"
msgstr "사용자 편집" msgstr "사용자 편집"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "활성화" msgstr "활성화"
@@ -345,8 +344,8 @@ msgstr "확장"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "구독 및 카테고리를 다른 피드 읽기 서비스에서 가져올 수 있는 OPML 파일로 내보내기" msgstr "구독 및 카테고리를 다른 피드 읽기 서비스에서 가져올 수 있는 OPML 파일로 내보내기"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "피드 이름" msgstr "피드 이름"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "피드 URL" msgstr "피드 URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "비밀번호를 잊으셨나요?" msgstr "비밀번호를 잊으셨나요?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "먼저 프로필에서 API 키를 생성하십시오." msgstr "먼저 프로필에서 API 키를 생성하십시오."
@@ -394,12 +393,13 @@ msgstr "먼저 프로필에서 API 키를 생성하십시오."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "새 API 키 생성" msgstr "새 API 키 생성"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "생성된 피드 URL" msgstr "생성된 피드 URL"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "가져오기"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "확장 보기에서 항목을 스크롤하면 읽은 것으로 표시됩니다." msgstr "확장 보기에서 항목을 스크롤하면 읽은 것으로 표시됩니다."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "읽지 않은 상태로 유지" msgstr "읽지 않은 상태로 유지"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "키보드 단축키" msgstr "키보드 단축키"
@@ -470,9 +470,9 @@ msgstr "마지막 새로고침 메시지"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "링크" msgstr "링크"
@@ -492,9 +492,9 @@ msgstr "구독 로드 중..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "태그 로드 중..." msgstr "태그 로드 중..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "로그인" msgstr "로그인"
@@ -506,8 +506,8 @@ msgstr "로그아웃"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "사용자 관리" msgstr "사용자 관리"
@@ -515,18 +515,18 @@ msgstr "사용자 관리"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "모두 읽은 상태로 표시" msgstr "모두 읽은 상태로 표시"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "모든 항목을 읽은 상태로 표시" msgstr "모든 항목을 읽은 상태로 표시"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "읽은 상태로 표시" msgstr "읽은 상태로 표시"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "여기까지 읽은 것으로 표시" msgstr "여기까지 읽은 것으로 표시"
@@ -546,15 +546,15 @@ msgstr "페이지를 아래로 이동"
msgid "Move the page up" msgid "Move the page up"
msgstr "페이지를 위로 이동" msgstr "페이지를 위로 이동"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "해당 없음" msgstr "해당 없음"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "이름" msgstr "이름"
@@ -575,8 +575,8 @@ msgstr "새 비밀번호"
msgid "Newest first" msgid "Newest first"
msgstr "최신순" msgstr "최신순"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "다음" msgstr "다음"
@@ -694,11 +694,11 @@ msgstr "부모"
msgid "Parent Category" msgid "Parent Category"
msgstr "부모 카테고리" msgstr "부모 카테고리"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "비밀번호" msgstr "비밀번호"
@@ -710,8 +710,8 @@ msgstr "비밀번호 복구"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "비밀번호가 일치하지 않습니다" msgstr "비밀번호가 일치하지 않습니다"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "위치" msgstr "위치"
@@ -727,8 +727,8 @@ msgstr "프로필"
msgid "Recover password" msgid "Recover password"
msgstr "비밀번호 복구" msgstr "비밀번호 복구"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "새로 고침" msgstr "새로 고침"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "저장" msgstr "저장"
@@ -765,10 +765,10 @@ msgstr "항목 간 탐색 시 부드럽게 스크롤"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "검색" msgstr "검색"
@@ -776,6 +776,14 @@ msgstr "검색"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "검색에 최소 3자가 필요합니다." msgstr "검색에 최소 3자가 필요합니다."
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "열지 않고 다음 항목에 포커스 설정" msgstr "열지 않고 다음 항목에 포커스 설정"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "가입" msgstr "가입"
@@ -865,20 +873,20 @@ msgstr "뭔가 안 좋은 일이 일어났어..."
msgid "Space" msgid "Space"
msgstr "우주" msgstr "우주"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "스타" msgstr "스타"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "별표" msgstr "별표"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "구독" msgstr "구독"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "읽지 않음" msgstr "읽지 않음"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "별표 제거" msgstr "별표 제거"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Perlukan akaun?</0><1>Daftar!</1>" msgstr "<0>Perlukan akaun?</0><1>Daftar!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Mengenai" msgstr "Mengenai"
@@ -54,16 +54,15 @@ msgstr "Tambah kategori"
msgid "Add user" msgid "Add user"
msgstr "Tambah pengguna" msgstr "Tambah pengguna"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Pentadbir" msgstr "Pentadbir"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Semua" msgstr "Semua"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Batal" msgstr "Batal"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Padat" msgstr "Padat"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Sahkan" msgstr "Sahkan"
@@ -273,13 +272,13 @@ msgstr "Dec"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Paparan" msgstr "Paparan"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Muat turun"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Seret pautan ke bar penanda halaman" msgstr "Seret pautan ke bar penanda halaman"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-mel" msgstr "E-mel"
@@ -308,8 +307,8 @@ msgstr "Alamat e-mel"
msgid "Edit user" msgid "Edit user"
msgstr "Edit pengguna" msgstr "Edit pengguna"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Didayakan" msgstr "Didayakan"
@@ -345,8 +344,8 @@ msgstr "Dikembangkan"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Eksport langganan dan kategori anda sebagai fail OPML yang boleh diimport dalam perkhidmatan membaca suapan lain" msgstr "Eksport langganan dan kategori anda sebagai fail OPML yang boleh diimport dalam perkhidmatan membaca suapan lain"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Nama suapan" msgstr "Nama suapan"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL Suapan" msgstr "URL Suapan"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Lupa kata laluan?" msgstr "Lupa kata laluan?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Jana kunci API dalam profil anda dahulu." msgstr "Jana kunci API dalam profil anda dahulu."
@@ -394,12 +393,13 @@ msgstr "Jana kunci API dalam profil anda dahulu."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Jana kunci API baharu" msgstr "Jana kunci API baharu"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Url suapan yang dijana" msgstr "Url suapan yang dijana"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Dalam paparan yang diperluas, menatal melalui entri menandakannya sebagai dibaca" msgstr "Dalam paparan yang diperluas, menatal melalui entri menandakannya sebagai dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Teruskan tidak dibaca" msgstr "Teruskan tidak dibaca"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Pintasan papan kekunci" msgstr "Pintasan papan kekunci"
@@ -470,9 +470,9 @@ msgstr "Mesej muat semula terakhir"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Pautan" msgstr "Pautan"
@@ -492,9 +492,9 @@ msgstr "Memuatkan langganan..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Memuatkan tag..." msgstr "Memuatkan tag..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Log masuk" msgstr "Log masuk"
@@ -506,8 +506,8 @@ msgstr "Log Keluar"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Urus pengguna" msgstr "Urus pengguna"
@@ -515,18 +515,18 @@ msgstr "Urus pengguna"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Tandai semua sebagai dibaca" msgstr "Tandai semua sebagai dibaca"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Tandai semua entri sebagai dibaca" msgstr "Tandai semua entri sebagai dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Tandakan sebagai dibaca" msgstr "Tandakan sebagai dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Tandai sebagai dibaca sehingga di sini" msgstr "Tandai sebagai dibaca sehingga di sini"
@@ -546,15 +546,15 @@ msgstr "Gerakkan halaman ke bawah"
msgid "Move the page up" msgid "Move the page up"
msgstr "Alih halaman ke atas" msgstr "Alih halaman ke atas"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "T/A" msgstr "T/A"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nama" msgstr "Nama"
@@ -575,8 +575,8 @@ msgstr "Kata laluan baharu"
msgid "Newest first" msgid "Newest first"
msgstr "Terbaharu dahulu" msgstr "Terbaharu dahulu"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Seterusnya" msgstr "Seterusnya"
@@ -694,11 +694,11 @@ msgstr "Ibu bapa"
msgid "Parent Category" msgid "Parent Category"
msgstr "Kategori Induk" msgstr "Kategori Induk"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Kata Laluan" msgstr "Kata Laluan"
@@ -710,8 +710,8 @@ msgstr "Pemulihan Kata Laluan"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Kata laluan tidak sepadan" msgstr "Kata laluan tidak sepadan"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Kedudukan" msgstr "Kedudukan"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Pulihkan kata laluan" msgstr "Pulihkan kata laluan"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Muat semula" msgstr "Muat semula"
@@ -745,11 +745,11 @@ msgstr "REHAT API"
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Jimat" msgstr "Jimat"
@@ -765,10 +765,10 @@ msgstr "Tatal dengan lancar apabila menavigasi antara entri"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Cari" msgstr "Cari"
@@ -776,6 +776,14 @@ msgstr "Cari"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Cari memerlukan sekurang-kurangnya 3 aksara" msgstr "Cari memerlukan sekurang-kurangnya 3 aksara"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Tetapkan fokus pada entri seterusnya tanpa membukanya" msgstr "Tetapkan fokus pada entri seterusnya tanpa membukanya"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Daftar" msgstr "Daftar"
@@ -865,20 +873,20 @@ msgstr "Sesuatu yang buruk baru saja berlaku..."
msgid "Space" msgid "Space"
msgstr "Angkasa" msgstr "Angkasa"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Bintang" msgstr "Bintang"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Dibintangi" msgstr "Dibintangi"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Langgan" msgstr "Langgan"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Belum dibaca" msgstr "Belum dibaca"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Nyahbintang" msgstr "Nyahbintang"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>" msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Omtrent" msgstr "Omtrent"
@@ -54,16 +54,15 @@ msgstr "Legg til kategori"
msgid "Add user" msgid "Add user"
msgstr "Legg til bruker" msgstr "Legg til bruker"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bekreft" msgstr "Bekreft"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Visning" msgstr "Visning"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Last ned"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Dra lenken til bokmerkelinjen" msgstr "Dra lenken til bokmerkelinjen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-post" msgstr "E-post"
@@ -308,8 +307,8 @@ msgstr "E-postadresse"
msgid "Edit user" msgid "Edit user"
msgstr "Rediger bruker" msgstr "Rediger bruker"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Aktivert" msgstr "Aktivert"
@@ -345,8 +344,8 @@ msgstr "Utvidet"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester" msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Feednavn" msgstr "Feednavn"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed-URL" msgstr "Feed-URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Glemt passord?" msgstr "Glemt passord?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generer en API-nøkkel i profilen din først." msgstr "Generer en API-nøkkel i profilen din først."
@@ -394,12 +393,13 @@ msgstr "Generer en API-nøkkel i profilen din først."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generer ny API-nøkkel" msgstr "Generer ny API-nøkkel"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generert feed-url" msgstr "Generert feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" 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 merker du dem som lest ved å rulle gjennom oppføringer"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Behold ulest" msgstr "Behold ulest"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastatursnarveier" msgstr "Tastatursnarveier"
@@ -470,9 +470,9 @@ msgstr "Siste oppdateringsmelding"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Laster abonnementer..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Laster tagger..." msgstr "Laster tagger..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Logg inn" msgstr "Logg inn"
@@ -506,8 +506,8 @@ msgstr "Logg ut"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Administrer brukere" msgstr "Administrer brukere"
@@ -515,18 +515,18 @@ msgstr "Administrer brukere"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Merk alle som lest" msgstr "Merk alle som lest"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Merk alle oppføringer som lest" msgstr "Merk alle oppføringer som lest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Merk som lest" msgstr "Merk som lest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Merk som lest frem til her" msgstr "Merk som lest frem til her"
@@ -546,15 +546,15 @@ msgstr "Flytt siden ned"
msgid "Move the page up" msgid "Move the page up"
msgstr "Flytt siden opp" msgstr "Flytt siden opp"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Navn" msgstr "Navn"
@@ -575,8 +575,8 @@ msgstr "Nytt passord"
msgid "Newest first" msgid "Newest first"
msgstr "Nyeste først" msgstr "Nyeste først"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Neste" msgstr "Neste"
@@ -694,11 +694,11 @@ msgstr "Foreldre"
msgid "Parent Category" msgid "Parent Category"
msgstr "Overordnet kategori" msgstr "Overordnet kategori"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Passord" msgstr "Passord"
@@ -710,8 +710,8 @@ msgstr "Passordgjenoppretting"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passordene samsvarer ikke" msgstr "Passordene samsvarer ikke"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posisjon" msgstr "Posisjon"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Gjenopprett passord" msgstr "Gjenopprett passord"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Oppdater" msgstr "Oppdater"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Lagre" msgstr "Lagre"
@@ -765,10 +765,10 @@ msgstr "Rull jevnt når du navigerer mellom oppføringer"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Søk" msgstr "Søk"
@@ -776,6 +776,14 @@ msgstr "Søk"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Søk krever minst 3 tegn" msgstr "Søk krever minst 3 tegn"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Sett fokus på neste oppføring uten å åpne den" msgstr "Sett fokus på neste oppføring uten å åpne den"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Meld deg på" msgstr "Meld deg på"
@@ -865,20 +873,20 @@ msgstr "Noe ille skjedde akkurat..."
msgid "Space" msgid "Space"
msgstr "" msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stjerne" msgstr "Stjerne"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Stjerne" msgstr "Stjerne"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Abonner" msgstr "Abonner"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Ulest" msgstr "Ulest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Fjern stjerne" msgstr "Fjern stjerne"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Een account nodig?</0><1>Meld je aan!</1>" msgstr "<0>Een account nodig?</0><1>Meld je aan!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Over" msgstr "Over"
@@ -54,16 +54,15 @@ msgstr "Categorie toevoegen"
msgid "Add user" msgid "Add user"
msgstr "Gebruiker toevoegen" msgstr "Gebruiker toevoegen"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Beheerder" msgstr "Beheerder"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alles" msgstr "Alles"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Annuleren" msgstr "Annuleren"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categorie" msgstr "Categorie"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "" msgstr ""
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bevestigen" msgstr "Bevestigen"
@@ -273,13 +272,13 @@ msgstr "Beschrijving"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Weergave" msgstr "Weergave"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Downloaden"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Link naar bladwijzerbalk slepen" msgstr "Link naar bladwijzerbalk slepen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "E-mailadres"
msgid "Edit user" msgid "Edit user"
msgstr "Gebruiker bewerken" msgstr "Gebruiker bewerken"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Ingeschakeld" msgstr "Ingeschakeld"
@@ -345,8 +344,8 @@ msgstr "Uitgebreid"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exporteer uw abonnementen en categorieën als een OPML-bestand dat kan worden geïmporteerd in andere feedleesservices" msgstr "Exporteer uw abonnementen en categorieën als een OPML-bestand dat kan worden geïmporteerd in andere feedleesservices"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Feednaam" msgstr "Feednaam"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed-URL" msgstr "Feed-URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Wachtwoord vergeten?" msgstr "Wachtwoord vergeten?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Genereer eerst een API-sleutel in uw profiel." msgstr "Genereer eerst een API-sleutel in uw profiel."
@@ -394,12 +393,13 @@ msgstr "Genereer eerst een API-sleutel in uw profiel."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Nieuwe API-sleutel genereren" msgstr "Nieuwe API-sleutel genereren"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Gegenereerde feed-url" msgstr "Gegenereerde feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "In de uitgevouwen weergave markeert het scrollen door items ze als gelezen" msgstr "In de uitgevouwen weergave markeert het scrollen door items ze als gelezen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Ongelezen houden" msgstr "Ongelezen houden"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "sneltoetsen" msgstr "sneltoetsen"
@@ -470,9 +470,9 @@ msgstr "Laatste verversingsbericht"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Abonnementen laden..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Tags laden..." msgstr "Tags laden..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Inloggen" msgstr "Inloggen"
@@ -506,8 +506,8 @@ msgstr "Uitloggen"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Gebruikers beheren" msgstr "Gebruikers beheren"
@@ -515,18 +515,18 @@ msgstr "Gebruikers beheren"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Alles markeren als gelezen" msgstr "Alles markeren als gelezen"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Markeer alle vermeldingen als gelezen" msgstr "Markeer alle vermeldingen als gelezen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Markeren als gelezen" msgstr "Markeren als gelezen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Markeer als gelezen tot hier" msgstr "Markeer als gelezen tot hier"
@@ -546,15 +546,15 @@ msgstr "Verplaats de pagina naar beneden"
msgid "Move the page up" msgid "Move the page up"
msgstr "Verplaats de pagina omhoog" msgstr "Verplaats de pagina omhoog"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Naam" msgstr "Naam"
@@ -575,8 +575,8 @@ msgstr "Nieuw wachtwoord"
msgid "Newest first" msgid "Newest first"
msgstr "Nieuwste eerst" msgstr "Nieuwste eerst"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Volgende" msgstr "Volgende"
@@ -694,11 +694,11 @@ msgstr "Ouder"
msgid "Parent Category" msgid "Parent Category"
msgstr "Oudercategorie" msgstr "Oudercategorie"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Wachtwoord" msgstr "Wachtwoord"
@@ -710,8 +710,8 @@ msgstr "Wachtwoordherstel"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Wachtwoorden komen niet overeen" msgstr "Wachtwoorden komen niet overeen"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Positie" msgstr "Positie"
@@ -727,8 +727,8 @@ msgstr "Profiel"
msgid "Recover password" msgid "Recover password"
msgstr "wachtwoord herstellen" msgstr "wachtwoord herstellen"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Vernieuwen" msgstr "Vernieuwen"
@@ -745,11 +745,11 @@ msgstr "REST-API"
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Opslaan" msgstr "Opslaan"
@@ -765,10 +765,10 @@ msgstr "Vloeiend scrollen bij het navigeren tussen items"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Zoeken" msgstr "Zoeken"
@@ -776,6 +776,14 @@ msgstr "Zoeken"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Zoeken vereist minimaal 3 tekens" msgstr "Zoeken vereist minimaal 3 tekens"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Stel de focus in op het volgende item zonder het te openen" msgstr "Stel de focus in op het volgende item zonder het te openen"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Aanmelden" msgstr "Aanmelden"
@@ -865,20 +873,20 @@ msgstr "Er is net iets ergs gebeurd..."
msgid "Space" msgid "Space"
msgstr "Ruimte" msgstr "Ruimte"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Ster" msgstr "Ster"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Met ster" msgstr "Met ster"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Abonneren" msgstr "Abonneren"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Ongelezen" msgstr "Ongelezen"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Sterren uit" msgstr "Sterren uit"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>" msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Omtrent" msgstr "Omtrent"
@@ -54,16 +54,15 @@ msgstr "Legg til kategori"
msgid "Add user" msgid "Add user"
msgstr "Legg til bruker" msgstr "Legg til bruker"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bekreft" msgstr "Bekreft"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Visning" msgstr "Visning"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Last ned"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Dra lenken til bokmerkelinjen" msgstr "Dra lenken til bokmerkelinjen"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-post" msgstr "E-post"
@@ -308,8 +307,8 @@ msgstr "E-postadresse"
msgid "Edit user" msgid "Edit user"
msgstr "Rediger bruker" msgstr "Rediger bruker"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Aktivert" msgstr "Aktivert"
@@ -345,8 +344,8 @@ msgstr "Utvidet"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester" msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Feednavn" msgstr "Feednavn"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed-URL" msgstr "Feed-URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Glemt passord?" msgstr "Glemt passord?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generer en API-nøkkel i profilen din først." msgstr "Generer en API-nøkkel i profilen din først."
@@ -394,12 +393,13 @@ msgstr "Generer en API-nøkkel i profilen din først."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generer ny API-nøkkel" msgstr "Generer ny API-nøkkel"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generert feed-url" msgstr "Generert feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" 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 merker du dem som lest ved å rulle gjennom oppføringer"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Behold ulest" msgstr "Behold ulest"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastatursnarveier" msgstr "Tastatursnarveier"
@@ -470,9 +470,9 @@ msgstr "Siste oppdateringsmelding"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Laster abonnementer..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Laster tagger..." msgstr "Laster tagger..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Logg inn" msgstr "Logg inn"
@@ -506,8 +506,8 @@ msgstr "Logg ut"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Administrer brukere" msgstr "Administrer brukere"
@@ -515,18 +515,18 @@ msgstr "Administrer brukere"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Merk alle som lest" msgstr "Merk alle som lest"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Merk alle oppføringer som lest" msgstr "Merk alle oppføringer som lest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Merk som lest" msgstr "Merk som lest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Merk som lest frem til her" msgstr "Merk som lest frem til her"
@@ -546,15 +546,15 @@ msgstr "Flytt siden ned"
msgid "Move the page up" msgid "Move the page up"
msgstr "Flytt siden opp" msgstr "Flytt siden opp"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Navn" msgstr "Navn"
@@ -575,8 +575,8 @@ msgstr "Nytt passord"
msgid "Newest first" msgid "Newest first"
msgstr "Nyeste først" msgstr "Nyeste først"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Neste" msgstr "Neste"
@@ -694,11 +694,11 @@ msgstr "Foreldre"
msgid "Parent Category" msgid "Parent Category"
msgstr "Overordnet kategori" msgstr "Overordnet kategori"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Passord" msgstr "Passord"
@@ -710,8 +710,8 @@ msgstr "Passordgjenoppretting"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Passordene samsvarer ikke" msgstr "Passordene samsvarer ikke"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posisjon" msgstr "Posisjon"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Gjenopprett passord" msgstr "Gjenopprett passord"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Oppdater" msgstr "Oppdater"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Lagre" msgstr "Lagre"
@@ -765,10 +765,10 @@ msgstr "Rull jevnt når du navigerer mellom oppføringer"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Søk" msgstr "Søk"
@@ -776,6 +776,14 @@ msgstr "Søk"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Søk krever minst 3 tegn" msgstr "Søk krever minst 3 tegn"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Sett fokus på neste oppføring uten å åpne den" msgstr "Sett fokus på neste oppføring uten å åpne den"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Meld deg på" msgstr "Meld deg på"
@@ -865,20 +873,20 @@ msgstr "Noe ille skjedde akkurat..."
msgid "Space" msgid "Space"
msgstr "" msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stjerne" msgstr "Stjerne"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Stjerne" msgstr "Stjerne"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Abonner" msgstr "Abonner"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Ulest" msgstr "Ulest"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Fjern stjerne" msgstr "Fjern stjerne"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Potrzebujesz konta?</0><1>Zarejestruj się!</1>" msgstr "<0>Potrzebujesz konta?</0><1>Zarejestruj się!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "O" msgstr "O"
@@ -54,16 +54,15 @@ msgstr "Dodaj kategorię"
msgid "Add user" msgid "Add user"
msgstr "Dodaj użytkownika" msgstr "Dodaj użytkownika"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administracja" msgstr "Administracja"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Wszystkie" msgstr "Wszystkie"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Anuluj" msgstr "Anuluj"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategoria" msgstr "Kategoria"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompaktowy" msgstr "Kompaktowy"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Potwierdź" msgstr "Potwierdź"
@@ -273,13 +272,13 @@ msgstr "Opis"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Wyświetlacz" msgstr "Wyświetlacz"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Pobierz"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Przeciągnij link do paska zakładek" msgstr "Przeciągnij link do paska zakładek"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "Adres e-mail"
msgid "Edit user" msgid "Edit user"
msgstr "Edytuj użytkownika" msgstr "Edytuj użytkownika"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "włączone" msgstr "włączone"
@@ -345,8 +344,8 @@ msgstr "Rozszerzony"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Eksportuj swoje subskrypcje i kategorie jako plik OPML, który można zaimportować do innych usług odczytu kanałów" msgstr "Eksportuj swoje subskrypcje i kategorie jako plik OPML, który można zaimportować do innych usług odczytu kanałów"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "nazwa kanału" msgstr "nazwa kanału"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL kanału" msgstr "URL kanału"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Zapomniałeś hasła?" msgstr "Zapomniałeś hasła?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Najpierw wygeneruj klucz API w swoim profilu." msgstr "Najpierw wygeneruj klucz API w swoim profilu."
@@ -394,12 +393,13 @@ msgstr "Najpierw wygeneruj klucz API w swoim profilu."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Wygeneruj nowy klucz API" msgstr "Wygeneruj nowy klucz API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Wygenerowany adres URL kanału" msgstr "Wygenerowany adres URL kanału"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "W widoku rozszerzonym przewijanie wpisów oznacza je jako przeczytane" msgstr "W widoku rozszerzonym przewijanie wpisów oznacza je jako przeczytane"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Nie przeczytaj" msgstr "Nie przeczytaj"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Skróty klawiaturowe" msgstr "Skróty klawiaturowe"
@@ -470,9 +470,9 @@ msgstr "wiadomość o ostatnim odświeżeniu"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Ładowanie subskrypcji..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Ładowanie tagów..." msgstr "Ładowanie tagów..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Zaloguj się" msgstr "Zaloguj się"
@@ -506,8 +506,8 @@ msgstr "Wyloguj"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Zarządzaj użytkownikami" msgstr "Zarządzaj użytkownikami"
@@ -515,18 +515,18 @@ msgstr "Zarządzaj użytkownikami"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Oznacz wszystko jako przeczytane" msgstr "Oznacz wszystko jako przeczytane"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Oznacz wszystkie wpisy jako przeczytane" msgstr "Oznacz wszystkie wpisy jako przeczytane"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Oznacz jako przeczytane" msgstr "Oznacz jako przeczytane"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Oznacz jako przeczytane do tej pory" msgstr "Oznacz jako przeczytane do tej pory"
@@ -546,15 +546,15 @@ msgstr "Przesuń stronę w dół"
msgid "Move the page up" msgid "Move the page up"
msgstr "Przesuń stronę w górę" msgstr "Przesuń stronę w górę"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "nie dotyczy" msgstr "nie dotyczy"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nazwa" msgstr "Nazwa"
@@ -575,8 +575,8 @@ msgstr "Nowe hasło"
msgid "Newest first" msgid "Newest first"
msgstr "Najnowsze jako pierwsze" msgstr "Najnowsze jako pierwsze"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Dalej" msgstr "Dalej"
@@ -694,11 +694,11 @@ msgstr "Rodzic"
msgid "Parent Category" msgid "Parent Category"
msgstr "Kategoria nadrzędna" msgstr "Kategoria nadrzędna"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Hasło" msgstr "Hasło"
@@ -710,8 +710,8 @@ msgstr "Odzyskiwanie hasła"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Hasła nie pasują" msgstr "Hasła nie pasują"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Pozycja" msgstr "Pozycja"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Odzyskaj hasło" msgstr "Odzyskaj hasło"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Odśwież" msgstr "Odśwież"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Zapisz" msgstr "Zapisz"
@@ -765,10 +765,10 @@ msgstr "Przewijaj płynnie podczas nawigowania między wpisami"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Szukaj" msgstr "Szukaj"
@@ -776,6 +776,14 @@ msgstr "Szukaj"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Wyszukiwanie wymaga co najmniej 3 znaków" msgstr "Wyszukiwanie wymaga co najmniej 3 znaków"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Ustaw fokus na następnym wpisie bez otwierania go" msgstr "Ustaw fokus na następnym wpisie bez otwierania go"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Zarejestruj się" msgstr "Zarejestruj się"
@@ -865,20 +873,20 @@ msgstr "Coś złego właśnie się stało..."
msgid "Space" msgid "Space"
msgstr "Przestrzeń" msgstr "Przestrzeń"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Gwiazda" msgstr "Gwiazda"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Oznaczone gwiazdką" msgstr "Oznaczone gwiazdką"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Subskrybuj" msgstr "Subskrybuj"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Nieprzeczytane" msgstr "Nieprzeczytane"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "" msgstr ""

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Precisa de uma conta?</0><1>Inscreva-se!</1>" msgstr "<0>Precisa de uma conta?</0><1>Inscreva-se!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Sobre" msgstr "Sobre"
@@ -54,16 +54,15 @@ msgstr "Adicionar categoria"
msgid "Add user" msgid "Add user"
msgstr "Adicionar usuário" msgstr "Adicionar usuário"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Administrador" msgstr "Administrador"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Compacto" msgstr "Compacto"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Confirmar" msgstr "Confirmar"
@@ -273,13 +272,13 @@ msgstr "Descrição"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Exibir" msgstr "Exibir"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Baixar"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Arraste o link para a barra de favoritos" msgstr "Arraste o link para a barra de favoritos"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "Endereço de e-mail"
msgid "Edit user" msgid "Edit user"
msgstr "Editar usuário" msgstr "Editar usuário"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Ativado" msgstr "Ativado"
@@ -345,8 +344,8 @@ msgstr "Expandido"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exporte suas inscrições e categorias como um arquivo OPML que pode ser importado em outros serviços de leitura de feed" msgstr "Exporte suas inscrições e categorias como um arquivo OPML que pode ser importado em outros serviços de leitura de feed"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Nome do feed" msgstr "Nome do feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL do feed" msgstr "URL do feed"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Esqueceu a senha?" msgstr "Esqueceu a senha?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Gere uma chave de API em seu perfil primeiro." msgstr "Gere uma chave de API em seu perfil primeiro."
@@ -394,12 +393,13 @@ msgstr "Gere uma chave de API em seu perfil primeiro."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Gerar nova chave de API" msgstr "Gerar nova chave de API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "URL do feed gerado" msgstr "URL do feed gerado"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr "Importar"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Na visualização expandida, rolar pelas entradas marca-as como lidas" msgstr "Na visualização expandida, rolar pelas entradas marca-as como lidas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Manter não lido" msgstr "Manter não lido"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Atalhos de teclado" msgstr "Atalhos de teclado"
@@ -470,9 +470,9 @@ msgstr "Última mensagem de atualização"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "" msgstr ""
@@ -492,9 +492,9 @@ msgstr "Carregando assinaturas..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Carregando tags..." msgstr "Carregando tags..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Entrar" msgstr "Entrar"
@@ -506,8 +506,8 @@ msgstr "Sair"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Gerenciar usuários" msgstr "Gerenciar usuários"
@@ -515,18 +515,18 @@ msgstr "Gerenciar usuários"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Marcar todos como lidos" msgstr "Marcar todos como lidos"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Marcar todas as entradas como lidas" msgstr "Marcar todas as entradas como lidas"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Marcar como lido" msgstr "Marcar como lido"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Marcar como lido até aqui" msgstr "Marcar como lido até aqui"
@@ -546,15 +546,15 @@ msgstr "Mova a página para baixo"
msgid "Move the page up" msgid "Move the page up"
msgstr "Mover a página para cima" msgstr "Mover a página para cima"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "N/D" msgstr "N/D"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
@@ -575,8 +575,8 @@ msgstr "Nova senha"
msgid "Newest first" msgid "Newest first"
msgstr "Mais novo primeiro" msgstr "Mais novo primeiro"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Próximo" msgstr "Próximo"
@@ -694,11 +694,11 @@ msgstr "Pai"
msgid "Parent Category" msgid "Parent Category"
msgstr "Categoria Pai" msgstr "Categoria Pai"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Senha" msgstr "Senha"
@@ -710,8 +710,8 @@ msgstr "Recuperação de Senha"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Senhas não coincidem" msgstr "Senhas não coincidem"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Posição" msgstr "Posição"
@@ -727,8 +727,8 @@ msgstr "Perfil"
msgid "Recover password" msgid "Recover password"
msgstr "Recuperar senha" msgstr "Recuperar senha"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Atualizar" msgstr "Atualizar"
@@ -745,11 +745,11 @@ msgstr "API REST"
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Salvar" msgstr "Salvar"
@@ -765,10 +765,10 @@ msgstr "Rolar suavemente ao navegar entre as entradas"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Pesquisar" msgstr "Pesquisar"
@@ -776,6 +776,14 @@ msgstr "Pesquisar"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Pesquisa requer pelo menos 3 caracteres" msgstr "Pesquisa requer pelo menos 3 caracteres"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Definir o foco na próxima entrada sem abri-la" msgstr "Definir o foco na próxima entrada sem abri-la"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Inscreva-se" msgstr "Inscreva-se"
@@ -865,20 +873,20 @@ msgstr "Algo ruim acabou de acontecer..."
msgid "Space" msgid "Space"
msgstr "Espaço" msgstr "Espaço"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Estrela" msgstr "Estrela"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Com estrela" msgstr "Com estrela"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Assinar" msgstr "Assinar"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Não lido" msgstr "Não lido"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Desestrelar" msgstr "Desestrelar"

View File

@@ -33,8 +33,8 @@ msgstr "<0>Здравствуйте,</0><1>Я Жереми из Бельгии,
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Нужен аккаунт?</0><1>Зарегистрируйтесь!</1>" msgstr "<0>Нужен аккаунт?</0><1>Зарегистрируйтесь!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "О CommaFeed" msgstr "О CommaFeed"
@@ -54,16 +54,15 @@ msgstr "Добавить категорию"
msgid "Add user" msgid "Add user"
msgstr "Добавить пользователя" msgstr "Добавить пользователя"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Админ" msgstr "Админ"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Все" msgstr "Все"
@@ -144,27 +143,27 @@ msgstr "Расширение для браузера"
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Отмена" msgstr "Отмена"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Категория" msgstr "Категория"
@@ -204,11 +203,11 @@ msgstr "CommaFeed версии {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Компактный" msgstr "Компактный"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Подтвердить" msgstr "Подтвердить"
@@ -273,13 +272,13 @@ msgstr "По убыванию"
msgid "Detailed" msgid "Detailed"
msgstr "Подробно" msgstr "Подробно"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Отображение" msgstr "Отображение"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "Пожертвование" msgstr "Пожертвование"
@@ -291,11 +290,11 @@ msgstr "Скачать"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Перетащите ссылку на панель закладок" msgstr "Перетащите ссылку на панель закладок"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "Электронная почта" msgstr "Электронная почта"
@@ -308,8 +307,8 @@ msgstr "Адрес электронной почты"
msgid "Edit user" msgid "Edit user"
msgstr "Редактировать пользователя" msgstr "Редактировать пользователя"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Включено" msgstr "Включено"
@@ -345,8 +344,8 @@ msgstr "Расширенный"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Экспортируйте свои подписки и категории в виде файла OPML, который можно импортировать в другие службы чтения каналов." msgstr "Экспортируйте свои подписки и категории в виде файла OPML, который можно импортировать в другие службы чтения каналов."
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Параметры расширения" msgstr "Параметры расширения"
@@ -354,9 +353,9 @@ msgstr "Параметры расширения"
msgid "Feed name" msgid "Feed name"
msgstr "Имя фида" msgstr "Имя фида"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL-адрес фида" msgstr "URL-адрес фида"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Забыли пароль?" msgstr "Забыли пароль?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Сначала сгенерируйте ключ API в своем профиле." msgstr "Сначала сгенерируйте ключ API в своем профиле."
@@ -394,12 +393,13 @@ msgstr "Сначала сгенерируйте ключ API в своем пр
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Создать новый ключ API" msgstr "Создать новый ключ API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Сгенерированный URL фида" msgstr "Сгенерированный URL фида"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "Перейти к {0}" msgstr "Перейти к {0}"
@@ -440,13 +440,13 @@ msgstr "Импорт"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "В развернутом виде прокрутка записей помечает их как прочитанные." msgstr "В развернутом виде прокрутка записей помечает их как прочитанные."
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Оставить непрочитанным" msgstr "Оставить непрочитанным"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Сочетания клавиш" msgstr "Сочетания клавиш"
@@ -470,9 +470,9 @@ msgstr "Последнее сообщение об обновлении"
msgid "Light" msgid "Light"
msgstr "Светлая" msgstr "Светлая"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Ссылка" msgstr "Ссылка"
@@ -492,9 +492,9 @@ msgstr "Загрузка подписок..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Загрузка тегов..." msgstr "Загрузка тегов..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Войти" msgstr "Войти"
@@ -506,8 +506,8 @@ msgstr "Выйти"
msgid "Long press" msgid "Long press"
msgstr "Долгое нажатие" msgstr "Долгое нажатие"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Управление пользователями" msgstr "Управление пользователями"
@@ -515,18 +515,18 @@ msgstr "Управление пользователями"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Отметить все как прочитанное" msgstr "Отметить все как прочитанное"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Отметить все записи как прочитанные" msgstr "Отметить все записи как прочитанные"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Отметить как прочитанное" msgstr "Отметить как прочитанное"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Отметить как прочитанное до этого места" msgstr "Отметить как прочитанное до этого места"
@@ -546,15 +546,15 @@ msgstr "Переместить страницу вниз"
msgid "Move the page up" msgid "Move the page up"
msgstr "Переместить страницу вверх" msgstr "Переместить страницу вверх"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "Н/Д" msgstr "Н/Д"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Имя" msgstr "Имя"
@@ -575,8 +575,8 @@ msgstr "Новый пароль"
msgid "Newest first" msgid "Newest first"
msgstr "Сначала новые" msgstr "Сначала новые"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Следующий" msgstr "Следующий"
@@ -694,11 +694,11 @@ msgstr "Родительский"
msgid "Parent Category" msgid "Parent Category"
msgstr "Родительская категория" msgstr "Родительская категория"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Пароль" msgstr "Пароль"
@@ -710,8 +710,8 @@ msgstr "Восстановление пароля"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Пароли не совпадают" msgstr "Пароли не совпадают"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Позиция" msgstr "Позиция"
@@ -727,8 +727,8 @@ msgstr "Профиль"
msgid "Recover password" msgid "Recover password"
msgstr "Восстановить пароль" msgstr "Восстановить пароль"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Обновить" msgstr "Обновить"
@@ -745,11 +745,11 @@ msgstr "REST API"
msgid "Right click" msgid "Right click"
msgstr "Правый клик" msgstr "Правый клик"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
@@ -765,10 +765,10 @@ msgstr "Плавная прокрутка при переходе между з
msgid "Scrolling" msgid "Scrolling"
msgstr "Прокрутка" msgstr "Прокрутка"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Поиск" msgstr "Поиск"
@@ -776,6 +776,14 @@ msgstr "Поиск"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Для поиска требуется не менее 3 символов" msgstr "Для поиска требуется не менее 3 символов"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Установить фокус на следующую запись, не открывая ее." msgstr "Установить фокус на следующую запись, не открывая ее."
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Зарегистрироваться" msgstr "Зарегистрироваться"
@@ -865,20 +873,20 @@ msgstr "Только что случилось что-то плохое..."
msgid "Space" msgid "Space"
msgstr "Пробел" msgstr "Пробел"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "В избранное" msgstr "В избранное"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Избранное" msgstr "Избранное"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Подписаться" msgstr "Подписаться"
@@ -951,8 +959,8 @@ msgstr "Попробуйте демо-версию!"
msgid "Unread" msgid "Unread"
msgstr "Не прочитано" msgstr "Не прочитано"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Удалить из избранного" msgstr "Удалить из избранного"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Potrebujete účet?</0><1>Zaregistrujte sa!</1>" msgstr "<0>Potrebujete účet?</0><1>Zaregistrujte sa!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Asi" msgstr "Asi"
@@ -54,16 +54,15 @@ msgstr "Pridať kategóriu"
msgid "Add user" msgid "Add user"
msgstr "Pridať užívateľa" msgstr "Pridať užívateľa"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Správca" msgstr "Správca"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Všetky" msgstr "Všetky"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Zrušiť" msgstr "Zrušiť"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategória" msgstr "Kategória"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompaktný" msgstr "Kompaktný"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Potvrdiť" msgstr "Potvrdiť"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Displej" msgstr "Displej"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Stiahnuť"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Presuňte odkaz na lištu so záložkami" msgstr "Presuňte odkaz na lištu so záložkami"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
@@ -308,8 +307,8 @@ msgstr "E-mailová adresa"
msgid "Edit user" msgid "Edit user"
msgstr "Upravte používateľa" msgstr "Upravte používateľa"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Povolené" msgstr "Povolené"
@@ -345,8 +344,8 @@ msgstr "Rozšírené"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exportujte svoje odbery a kategórie ako súbor OPML, ktorý je možné importovať do iných služieb na čítanie informačných kanálov" msgstr "Exportujte svoje odbery a kategórie ako súbor OPML, ktorý je možné importovať do iných služieb na čítanie informačných kanálov"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Názov informačného kanála" msgstr "Názov informačného kanála"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "URL informačného kanála" msgstr "URL informačného kanála"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Zabudli ste heslo?" msgstr "Zabudli ste heslo?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Najprv si vo svojom profile vygenerujte kľúč API." msgstr "Najprv si vo svojom profile vygenerujte kľúč API."
@@ -394,12 +393,13 @@ msgstr "Najprv si vo svojom profile vygenerujte kľúč API."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Vygenerujte nový kľúč API" msgstr "Vygenerujte nový kľúč API"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Generovaná adresa URL informačného kanála" msgstr "Generovaná adresa URL informačného kanála"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "V rozšírenom zobrazení ich rolovanie cez položky označí ako prečítané" msgstr "V rozšírenom zobrazení ich rolovanie cez položky označí ako prečítané"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Ponechať neprečítané" msgstr "Ponechať neprečítané"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Klávesové skratky" msgstr "Klávesové skratky"
@@ -470,9 +470,9 @@ msgstr "Posledná obnovovacia správa"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Odkaz" msgstr "Odkaz"
@@ -492,9 +492,9 @@ msgstr "Načítavam odbery..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Načítavam značky..." msgstr "Načítavam značky..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Prihláste sa" msgstr "Prihláste sa"
@@ -506,8 +506,8 @@ msgstr "Odhlásenie"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Správa používateľov" msgstr "Správa používateľov"
@@ -515,18 +515,18 @@ msgstr "Správa používateľov"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Označiť všetko ako prečítané" msgstr "Označiť všetko ako prečítané"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Označte všetky položky ako prečítané" msgstr "Označte všetky položky ako prečítané"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Označiť ako prečítané" msgstr "Označiť ako prečítané"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Označiť ako prečítané až sem" msgstr "Označiť ako prečítané až sem"
@@ -546,15 +546,15 @@ msgstr "Posuňte stránku nadol"
msgid "Move the page up" msgid "Move the page up"
msgstr "Posuňte stránku nahor" msgstr "Posuňte stránku nahor"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Meno" msgstr "Meno"
@@ -575,8 +575,8 @@ msgstr "Nové heslo"
msgid "Newest first" msgid "Newest first"
msgstr "Najnovšie ako prvé" msgstr "Najnovšie ako prvé"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Ďalej" msgstr "Ďalej"
@@ -694,11 +694,11 @@ msgstr "Rodič"
msgid "Parent Category" msgid "Parent Category"
msgstr "Rodičovská kategória" msgstr "Rodičovská kategória"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Heslo" msgstr "Heslo"
@@ -710,8 +710,8 @@ msgstr "Obnovenie hesla"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Heslá sa nezhodujú" msgstr "Heslá sa nezhodujú"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Pozícia" msgstr "Pozícia"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Obnoviť heslo" msgstr "Obnoviť heslo"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Obnoviť" msgstr "Obnoviť"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Uložiť" msgstr "Uložiť"
@@ -765,10 +765,10 @@ msgstr "Pri navigácii medzi položkami plynulo rolujte"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Hľadaj" msgstr "Hľadaj"
@@ -776,6 +776,14 @@ msgstr "Hľadaj"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Hľadanie vyžaduje aspoň 3 znaky" msgstr "Hľadanie vyžaduje aspoň 3 znaky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Nastavte zameranie na ďalší záznam bez toho, aby ste ho otvorili" msgstr "Nastavte zameranie na ďalší záznam bez toho, aby ste ho otvorili"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Zaregistrujte sa" msgstr "Zaregistrujte sa"
@@ -865,20 +873,20 @@ msgstr "Práve sa stalo niečo zlé..."
msgid "Space" msgid "Space"
msgstr "Vesmír" msgstr "Vesmír"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Hviezda" msgstr "Hviezda"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "S hviezdičkou" msgstr "S hviezdičkou"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Prihlásiť sa" msgstr "Prihlásiť sa"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Neprečítané" msgstr "Neprečítané"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Odobrať hviezdičku" msgstr "Odobrať hviezdičku"

View File

@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Behöver du ett konto?</0><1>Registrera dig!</1>" msgstr "<0>Behöver du ett konto?</0><1>Registrera dig!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Ungefär" msgstr "Ungefär"
@@ -54,16 +54,15 @@ msgstr "Lägg till kategori"
msgid "Add user" msgid "Add user"
msgstr "Lägg till användare" msgstr "Lägg till användare"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Alla" msgstr "Alla"
@@ -144,27 +143,27 @@ msgstr ""
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr ""
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Bekräfta" msgstr "Bekräfta"
@@ -273,13 +272,13 @@ msgstr ""
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Visa" msgstr "Visa"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "Ladda ner"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Dra länken till bokmärkesfältet" msgstr "Dra länken till bokmärkesfältet"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-post" msgstr "E-post"
@@ -308,8 +307,8 @@ msgstr "E-postadress"
msgid "Edit user" msgid "Edit user"
msgstr "Redigera användare" msgstr "Redigera användare"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Aktiverad" msgstr "Aktiverad"
@@ -345,8 +344,8 @@ msgstr "Utökad"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Exportera dina prenumerationer och kategorier som en OPML-fil som kan importeras i andra flödesläsningstjänster" msgstr "Exportera dina prenumerationer och kategorier som en OPML-fil som kan importeras i andra flödesläsningstjänster"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "" msgstr ""
@@ -354,9 +353,9 @@ msgstr ""
msgid "Feed name" msgid "Feed name"
msgstr "Flödesnamn" msgstr "Flödesnamn"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Flödes-URL" msgstr "Flödes-URL"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Glömt lösenord?" msgstr "Glömt lösenord?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Generera en API-nyckel i din profil först." msgstr "Generera en API-nyckel i din profil först."
@@ -394,12 +393,13 @@ msgstr "Generera en API-nyckel i din profil först."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Generera ny API-nyckel" msgstr "Generera ny API-nyckel"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Genererad feed-url" msgstr "Genererad feed-url"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "" msgstr ""
@@ -440,13 +440,13 @@ msgstr ""
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "I utökad vy, rullning genom poster markerar dem som lästa" msgstr "I utökad vy, rullning genom poster markerar dem som lästa"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Behåll oläst" msgstr "Behåll oläst"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Kortkommandon" msgstr "Kortkommandon"
@@ -470,9 +470,9 @@ msgstr "Senaste uppdateringsmeddelande"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Länk" msgstr "Länk"
@@ -492,9 +492,9 @@ msgstr "Laddar prenumerationer..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Laddar taggar..." msgstr "Laddar taggar..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Logga in" msgstr "Logga in"
@@ -506,8 +506,8 @@ msgstr "Logga ut"
msgid "Long press" msgid "Long press"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Hantera användare" msgstr "Hantera användare"
@@ -515,18 +515,18 @@ msgstr "Hantera användare"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Markera alla som lästa" msgstr "Markera alla som lästa"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Markera alla poster som lästa" msgstr "Markera alla poster som lästa"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Markera som läst" msgstr "Markera som läst"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Markera som läst hit" msgstr "Markera som läst hit"
@@ -546,15 +546,15 @@ msgstr "Flytta sidan nedåt"
msgid "Move the page up" msgid "Move the page up"
msgstr "Flytta sidan uppåt" msgstr "Flytta sidan uppåt"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "Namn" msgstr "Namn"
@@ -575,8 +575,8 @@ msgstr "Nytt lösenord"
msgid "Newest first" msgid "Newest first"
msgstr "Nyast först" msgstr "Nyast först"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Nästa" msgstr "Nästa"
@@ -694,11 +694,11 @@ msgstr "Förälder"
msgid "Parent Category" msgid "Parent Category"
msgstr "Föräldrakategori" msgstr "Föräldrakategori"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Lösenord" msgstr "Lösenord"
@@ -710,8 +710,8 @@ msgstr "Lösenordsåterställning"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Lösenorden matchar inte" msgstr "Lösenorden matchar inte"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "" msgstr ""
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Återställ lösenord" msgstr "Återställ lösenord"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Uppdatera" msgstr "Uppdatera"
@@ -745,11 +745,11 @@ msgstr ""
msgid "Right click" msgid "Right click"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Spara" msgstr "Spara"
@@ -765,10 +765,10 @@ msgstr "Bläddra mjukt när du navigerar mellan poster"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Sök" msgstr "Sök"
@@ -776,6 +776,14 @@ msgstr "Sök"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Sökning kräver minst 3 tecken" msgstr "Sökning kräver minst 3 tecken"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Sätt fokus på nästa post utan att öppna den" msgstr "Sätt fokus på nästa post utan att öppna den"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Anmäl dig" msgstr "Anmäl dig"
@@ -865,20 +873,20 @@ msgstr "Något dåligt hände precis..."
msgid "Space" msgid "Space"
msgstr "Rymden" msgstr "Rymden"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Stjärna" msgstr "Stjärna"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Starmed" msgstr "Starmed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Prenumerera" msgstr "Prenumerera"
@@ -951,8 +959,8 @@ msgstr ""
msgid "Unread" msgid "Unread"
msgstr "Oläst" msgstr "Oläst"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "" msgstr ""

View File

@@ -33,8 +33,8 @@ msgstr "<0>Merhaba,</0><1>Ben Belçika'dan Jérémie ve 10 yıldır boş zamanla
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Bir hesaba mı ihtiyacınız var?</0><1>Kaydolun!</1>" msgstr "<0>Bir hesaba mı ihtiyacınız var?</0><1>Kaydolun!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "Hakkında" msgstr "Hakkında"
@@ -54,16 +54,15 @@ msgstr "Kategori ekle"
msgid "Add user" msgid "Add user"
msgstr "Kullanıcı ekle" msgstr "Kullanıcı ekle"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "Yönetici" msgstr "Yönetici"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "Tümü" msgstr "Tümü"
@@ -144,27 +143,27 @@ msgstr "Tarayıcı eklentisi"
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr ""
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "İptal" msgstr "İptal"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "Kategori" msgstr "Kategori"
@@ -204,11 +203,11 @@ msgstr "CommaFeed sürüm {version} ({revision})."
msgid "Compact" msgid "Compact"
msgstr "Kompakt" msgstr "Kompakt"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "Onayla" msgstr "Onayla"
@@ -273,13 +272,13 @@ msgstr "Açılış"
msgid "Detailed" msgid "Detailed"
msgstr "" msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "Ekran" msgstr "Ekran"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "" msgstr ""
@@ -291,11 +290,11 @@ msgstr "İndir"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "Bağlantıyı yer işareti çubuğuna sürükleyin" msgstr "Bağlantıyı yer işareti çubuğuna sürükleyin"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "E-posta" msgstr "E-posta"
@@ -308,8 +307,8 @@ msgstr "E-posta adresi"
msgid "Edit user" msgid "Edit user"
msgstr "Kullanıcıyı düzenle" msgstr "Kullanıcıyı düzenle"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "Etkin" msgstr "Etkin"
@@ -345,8 +344,8 @@ msgstr "Genişletilmiş"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "Aboneliklerinizi ve kategorilerinizi diğer besleme okuma hizmetlerinde içe aktarılabilen bir OPML dosyası olarak dışa aktarın" msgstr "Aboneliklerinizi ve kategorilerinizi diğer besleme okuma hizmetlerinde içe aktarılabilen bir OPML dosyası olarak dışa aktarın"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "Eklenti ayarları" msgstr "Eklenti ayarları"
@@ -354,9 +353,9 @@ msgstr "Eklenti ayarları"
msgid "Feed name" msgid "Feed name"
msgstr "Yayın adı" msgstr "Yayın adı"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "Feed URL'si" msgstr "Feed URL'si"
@@ -384,9 +383,9 @@ msgstr ""
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Parolanızı mı unuttunuz?" msgstr "Parolanızı mı unuttunuz?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "Önce profilinizde bir API anahtarı oluşturun." msgstr "Önce profilinizde bir API anahtarı oluşturun."
@@ -394,12 +393,13 @@ msgstr "Önce profilinizde bir API anahtarı oluşturun."
msgid "Generate new API key" msgid "Generate new API key"
msgstr "Yeni API anahtarı oluştur" msgstr "Yeni API anahtarı oluştur"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "Oluşturulan besleme url'si" msgstr "Oluşturulan besleme url'si"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "{0}'a git" msgstr "{0}'a git"
@@ -440,13 +440,13 @@ msgstr "İçe Aktar"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Genişletilmiş görünümde, girişler arasında gezinmek onları okundu olarak işaretler" msgstr "Genişletilmiş görünümde, girişler arasında gezinmek onları okundu olarak işaretler"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "Okunmadan sakla" msgstr "Okunmadan sakla"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Klavye kısayolları" msgstr "Klavye kısayolları"
@@ -470,9 +470,9 @@ msgstr "Son yenileme mesajı"
msgid "Light" msgid "Light"
msgstr "" msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "Bağlantı" msgstr "Bağlantı"
@@ -492,9 +492,9 @@ msgstr "Abonelikler yükleniyor..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "Etiketler yükleniyor..." msgstr "Etiketler yükleniyor..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "Giriş" msgstr "Giriş"
@@ -506,8 +506,8 @@ msgstr "Çıkış"
msgid "Long press" msgid "Long press"
msgstr "Uzun bas" msgstr "Uzun bas"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "Kullanıcıları yönet" msgstr "Kullanıcıları yönet"
@@ -515,18 +515,18 @@ msgstr "Kullanıcıları yönet"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "Tümünü okundu olarak işaretle" msgstr "Tümünü okundu olarak işaretle"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "Tüm girişleri okundu olarak işaretle" msgstr "Tüm girişleri okundu olarak işaretle"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "Okundu olarak işaretle" msgstr "Okundu olarak işaretle"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "Buraya kadar okundu olarak işaretle" msgstr "Buraya kadar okundu olarak işaretle"
@@ -546,15 +546,15 @@ msgstr "Sayfayı aşağı taşı"
msgid "Move the page up" msgid "Move the page up"
msgstr "Sayfayı yukarı taşı" msgstr "Sayfayı yukarı taşı"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "Yok" msgstr "Yok"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "İsim" msgstr "İsim"
@@ -575,8 +575,8 @@ msgstr "Yeni şifre"
msgid "Newest first" msgid "Newest first"
msgstr "Önce en yenisi" msgstr "Önce en yenisi"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "Sonraki" msgstr "Sonraki"
@@ -694,11 +694,11 @@ msgstr "Ebeveyn"
msgid "Parent Category" msgid "Parent Category"
msgstr "Üst Kategori" msgstr "Üst Kategori"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "Şifre" msgstr "Şifre"
@@ -710,8 +710,8 @@ msgstr "Parola Kurtarma"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "Parolalar eşleşmiyor" msgstr "Parolalar eşleşmiyor"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "Konum" msgstr "Konum"
@@ -727,8 +727,8 @@ msgstr "Profil"
msgid "Recover password" msgid "Recover password"
msgstr "Şifreyi kurtar" msgstr "Şifreyi kurtar"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "Yenile" msgstr "Yenile"
@@ -745,11 +745,11 @@ msgstr "REST API"
msgid "Right click" msgid "Right click"
msgstr "Sağ tık" msgstr "Sağ tık"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "Kaydet" msgstr "Kaydet"
@@ -765,10 +765,10 @@ msgstr "Girişler arasında gezinirken sorunsuz ilerleyin"
msgid "Scrolling" msgid "Scrolling"
msgstr "" msgstr ""
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "Ara" msgstr "Ara"
@@ -776,6 +776,14 @@ msgstr "Ara"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "Arama için en az 3 karakter gerekiyor" msgstr "Arama için en az 3 karakter gerekiyor"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "Odağı açmadan sonraki girişe ayarlayın" msgstr "Odağı açmadan sonraki girişe ayarlayın"
@@ -850,9 +858,9 @@ msgstr ""
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "Kaydolun" msgstr "Kaydolun"
@@ -865,20 +873,20 @@ msgstr "Az önce kötü bir şey oldu..."
msgid "Space" msgid "Space"
msgstr "Uzay" msgstr "Uzay"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "Yıldız" msgstr "Yıldız"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "Yıldızlı" msgstr "Yıldızlı"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "Abone ol" msgstr "Abone ol"
@@ -951,8 +959,8 @@ msgstr "Demo'yu deneyin!"
msgid "Unread" msgid "Unread"
msgstr "Okunmamış" msgstr "Okunmamış"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "Yıldızı kaldır" msgstr "Yıldızı kaldır"

View File

@@ -33,8 +33,8 @@ msgstr "<0>您好,</0><1>我是来自比利时的Jérémie已经在业余时
msgid "<0>Need an account?</0><1>Sign up!</1>" msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>需要一个帐户?</0><1>注册!</1>" msgstr "<0>需要一个帐户?</0><1>注册!</1>"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "About" msgid "About"
msgstr "关于" msgstr "关于"
@@ -54,16 +54,15 @@ msgstr "添加类别"
msgid "Add user" msgid "Add user"
msgstr "添加用户" msgstr "添加用户"
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
msgid "Admin" msgid "Admin"
msgstr "管理员" msgstr "管理员"
#: src/app/constants.ts
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
msgid "All" msgid "All"
msgstr "全部" msgstr "全部"
@@ -142,29 +141,29 @@ msgstr "浏览器扩展"
#: src/components/settings/DisplaySettings.tsx #: src/components/settings/DisplaySettings.tsx
msgid "Browser tab" msgid "Browser tab"
msgstr "" msgstr "浏览器标签页"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/admin/UserEdit.tsx
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
msgid "Category" msgid "Category"
msgstr "类别" msgstr "类别"
@@ -204,11 +203,11 @@ msgstr "CommaFeed版本{version} ({revision})"
msgid "Compact" msgid "Compact"
msgstr "紧凑" msgstr "紧凑"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Confirm" msgid "Confirm"
msgstr "确认" msgstr "确认"
@@ -273,13 +272,13 @@ msgstr "降序"
msgid "Detailed" msgid "Detailed"
msgstr "详细" msgstr "详细"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/SettingsPage.tsx #: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Display" msgid "Display"
msgstr "显示" msgstr "显示"
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx #: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Donate" msgid "Donate"
msgstr "捐赠" msgstr "捐赠"
@@ -291,11 +290,11 @@ msgstr "下载"
msgid "Drag link to bookmark bar" msgid "Drag link to bookmark bar"
msgstr "拖动链接到书签栏" msgstr "拖动链接到书签栏"
#: src/components/admin/UserEdit.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/components/settings/ProfileSettings.tsx #: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/settings/ProfileSettings.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx #: src/components/admin/UserEdit.tsx
msgid "E-mail" msgid "E-mail"
msgstr "电子邮件" msgstr "电子邮件"
@@ -308,8 +307,8 @@ msgstr "电子邮件地址"
msgid "Edit user" msgid "Edit user"
msgstr "编辑用户" msgstr "编辑用户"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Enabled" msgid "Enabled"
msgstr "已启用" msgstr "已启用"
@@ -323,7 +322,7 @@ msgstr "输入您当前的密码以更改配置文件设置"
#: src/components/settings/DisplaySettings.tsx #: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling" msgid "Entries to keep above the selected entry when scrolling"
msgstr "" msgstr "滚动时固定在顶部的条目"
#: src/components/settings/DisplaySettings.tsx #: src/components/settings/DisplaySettings.tsx
msgid "Entry headers" msgid "Entry headers"
@@ -345,8 +344,8 @@ msgstr "展开"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services" msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "将您的订阅和类别导出为 OPML 文件,可以在其它信息流阅读服务中导入" msgstr "将您的订阅和类别导出为 OPML 文件,可以在其它信息流阅读服务中导入"
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
msgid "Extension options" msgid "Extension options"
msgstr "扩展选项" msgstr "扩展选项"
@@ -354,9 +353,9 @@ msgstr "扩展选项"
msgid "Feed name" msgid "Feed name"
msgstr "信息流名称" msgstr "信息流名称"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL" msgid "Feed URL"
msgstr "信息流网址" msgstr "信息流网址"
@@ -378,15 +377,15 @@ msgstr "过滤表达式"
#: src/components/header/ProfileMenu.tsx #: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available." msgid "Force fetching feeds is not yet available."
msgstr "" msgstr "强制获取订阅源功能不可用。"
#: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx
msgid "Forgot password?" msgid "Forgot password?"
msgstr "忘记密码?" msgstr "忘记密码?"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generate an API key in your profile first." msgid "Generate an API key in your profile first."
msgstr "首先在您的配置文件中生成一个 API 密钥。" msgstr "首先在您的配置文件中生成一个 API 密钥。"
@@ -394,12 +393,13 @@ msgstr "首先在您的配置文件中生成一个 API 密钥。"
msgid "Generate new API key" msgid "Generate new API key"
msgstr "生成新的 API 密钥" msgstr "生成新的 API 密钥"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Generated feed url" msgid "Generated feed url"
msgstr "生成信息流网址" msgstr "生成信息流网址"
#. placeholder {0}: truncate(props.entry.feedName, 30)
#: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryContextMenu.tsx
msgid "Go to {0}" msgid "Go to {0}"
msgstr "转到 {0}" msgstr "转到 {0}"
@@ -440,13 +440,13 @@ msgstr "导入"
msgid "In expanded view, scrolling through entries mark them as read" msgid "In expanded view, scrolling through entries mark them as read"
msgstr "在展开视图中,滚动条目将它们标记为已读" msgstr "在展开视图中,滚动条目将它们标记为已读"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Keep unread" msgid "Keep unread"
msgstr "保持未读状态" msgstr "保持未读状态"
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx #: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "键盘快捷键" msgstr "键盘快捷键"
@@ -470,9 +470,9 @@ msgstr "上次刷新消息"
msgid "Light" msgid "Light"
msgstr "浅色" msgstr "浅色"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx #: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Link" msgid "Link"
msgstr "链接" msgstr "链接"
@@ -492,9 +492,9 @@ msgstr "正在加载订阅..."
msgid "Loading tags..." msgid "Loading tags..."
msgstr "正在加载标签..." msgstr "正在加载标签..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in" msgid "Log in"
msgstr "登录" msgstr "登录"
@@ -506,8 +506,8 @@ msgstr "注销"
msgid "Long press" msgid "Long press"
msgstr "长按" msgstr "长按"
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx #: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
msgid "Manage users" msgid "Manage users"
msgstr "管理用户" msgstr "管理用户"
@@ -515,18 +515,18 @@ msgstr "管理用户"
msgid "Mark all as read" msgid "Mark all as read"
msgstr "全部标记为已读" msgstr "全部标记为已读"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
msgid "Mark all entries as read" msgid "Mark all entries as read"
msgstr "将所有条目标记为已读" msgstr "将所有条目标记为已读"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read" msgid "Mark as read"
msgstr "标记为已读" msgstr "标记为已读"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
msgid "Mark as read up to here" msgid "Mark as read up to here"
msgstr "标记为已读到这里" msgstr "标记为已读到这里"
@@ -546,15 +546,15 @@ msgstr "下移页面"
msgid "Move the page up" msgid "Move the page up"
msgstr "上移页面" msgstr "上移页面"
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A" msgid "N/A"
msgstr "不适用" msgstr "不适用"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
msgid "Name" msgid "Name"
msgstr "​​名称" msgstr "​​名称"
@@ -575,8 +575,8 @@ msgstr "新密码"
msgid "Newest first" msgid "Newest first"
msgstr "最新的优先" msgstr "最新的优先"
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx #: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Next" msgid "Next"
msgstr "下一个" msgstr "下一个"
@@ -694,11 +694,11 @@ msgstr "父类别"
msgid "Parent Category" msgid "Parent Category"
msgstr "父类别" msgstr "父类别"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/components/admin/UserEdit.tsx #: src/components/admin/UserEdit.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
@@ -710,8 +710,8 @@ msgstr "密码恢复"
msgid "Passwords do not match" msgid "Passwords do not match"
msgstr "密码不匹配" msgstr "密码不匹配"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
msgid "Position" msgid "Position"
msgstr "位置" msgstr "位置"
@@ -727,8 +727,8 @@ msgstr "配置文件"
msgid "Recover password" msgid "Recover password"
msgstr "找回密码" msgstr "找回密码"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/Header.tsx
msgid "Refresh" msgid "Refresh"
msgstr "刷新" msgstr "刷新"
@@ -745,11 +745,11 @@ msgstr "REST API"
msgid "Right click" msgid "Right click"
msgstr "右键单击" msgstr "右键单击"
#: src/components/admin/UserEdit.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx #: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/admin/UserEdit.tsx
msgid "Save" msgid "Save"
msgstr "保存" msgstr "保存"
@@ -765,10 +765,10 @@ msgstr "在条目之间导航时平滑滚动"
msgid "Scrolling" msgid "Scrolling"
msgstr "滚动" msgstr "滚动"
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx #: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
msgid "Search" msgid "Search"
msgstr "搜索" msgstr "搜索"
@@ -776,6 +776,14 @@ msgstr "搜索"
msgid "Search requires at least 3 characters" msgid "Search requires at least 3 characters"
msgstr "搜索至少需要 3 个字符" msgstr "搜索至少需要 3 个字符"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx #: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it" msgid "Set focus on next entry without opening it"
msgstr "将焦点放在下一个条目而不打开它" msgstr "将焦点放在下一个条目而不打开它"
@@ -844,15 +852,15 @@ msgstr "显示星标图标"
#: src/components/settings/DisplaySettings.tsx #: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon" msgid "Show unread count in tab favicon"
msgstr "" msgstr "在标签页图标上显示未读数量"
#: src/components/settings/DisplaySettings.tsx #: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title" msgid "Show unread count in tab title"
msgstr "" msgstr "在标签页标题中显示未读数量"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx #: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up" msgid "Sign up"
msgstr "注册" msgstr "注册"
@@ -865,20 +873,20 @@ msgstr "刚刚发生了不好的事情……"
msgid "Space" msgid "Space"
msgstr "空格" msgstr "空格"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Star" msgid "Star"
msgstr "星标" msgstr "星标"
#: src/app/constants.ts #: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx #: src/components/sidebar/Tree.tsx
msgid "Starred" msgid "Starred"
msgstr "已加星标" msgstr "已加星标"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx #: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe" msgid "Subscribe"
msgstr "订阅" msgstr "订阅"
@@ -951,8 +959,8 @@ msgstr "尝试 demo"
msgid "Unread" msgid "Unread"
msgstr "未读" msgstr "未读"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx #: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/header/Star.tsx #: src/components/content/header/Star.tsx
msgid "Unstar" msgid "Unstar"
msgstr "取消星标" msgstr "取消星标"

View File

@@ -41,7 +41,7 @@ function NextUnreadBookmarklet() {
const { _ } = useLingui() const { _ } = useLingui()
const baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("#")) const baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
const href = `javascript:window.location.href='${baseUrl}next?category=${categoryId}&order=${order}&t='+new Date().getTime();` const href = `${baseUrl}next?category=${categoryId}&order=${order}`
return ( return (
<Box> <Box>

View File

@@ -1,3 +1,5 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro" 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, NumberInput, Stack, Text, TextInput, Title } from "@mantine/core"
import { useForm } from "@mantine/form" import { useForm } from "@mantine/form"
@@ -19,6 +21,7 @@ import { useParams } from "react-router-dom"
export function CategoryDetailsPage() { export function CategoryDetailsPage() {
const { id = Constants.categories.all.id } = useParams() const { id = Constants.categories.all.id } = useParams()
const { _ } = useLingui()
const apiKey = useAppSelector(state => state.user.profile?.apiKey) const apiKey = useAppSelector(state => state.user.profile?.apiKey)
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
@@ -26,7 +29,7 @@ export function CategoryDetailsPage() {
const query = useAsync(async () => await client.category.getRoot(), []) const query = useAsync(async () => await client.category.getRoot(), [])
const category = const category =
id === Constants.categories.starred.id id === Constants.categories.starred.id
? Constants.categories.starred ? { ...Constants.categories.starred, name: _(msg`Starred`) }
: query.result && flattenCategoryTree(query.result.data).find(c => c.id === id) : query.result && flattenCategoryTree(query.result.data).find(c => c.id === id)
const form = useForm<CategoryModificationRequest>() const form = useForm<CategoryModificationRequest>()
@@ -63,14 +66,14 @@ export function CategoryDetailsPage() {
} }
useEffect(() => { useEffect(() => {
if (!category) return if (!category?.id) return
setValues({ setValues({
id: +category.id, id: +category.id,
name: category.name, name: category.name,
parentId: category.parentId, parentId: category.parentId,
position: category.position, position: category.position,
}) })
}, [setValues, category]) }, [setValues, category?.id, category?.name, category?.parentId, category?.position])
const editable = id !== Constants.categories.all.id && id !== Constants.categories.starred.id const editable = id !== Constants.categories.all.id && id !== Constants.categories.starred.id
if (!category) return <Loader /> if (!category) return <Loader />

View File

@@ -18,7 +18,7 @@ import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useMobile } from "hooks/useMobile" import { useMobile } from "hooks/useMobile"
import { useWebSocket } from "hooks/useWebSocket" import { useWebSocket } from "hooks/useWebSocket"
import { LoadingPage } from "pages/LoadingPage" import { LoadingPage } from "pages/LoadingPage"
import { type ReactNode, Suspense, useEffect, useRef } from "react" import { type ReactNode, type RefObject, Suspense, useEffect, useRef } from "react"
import Draggable from "react-draggable" import Draggable from "react-draggable"
import { TbMenu2, TbPlus, TbX } from "react-icons/tb" import { TbMenu2, TbPlus, TbX } from "react-icons/tb"
import { Outlet } from "react-router-dom" import { Outlet } from "react-router-dom"
@@ -185,7 +185,7 @@ export default function Layout(props: LayoutProps) {
</AppShell.Navbar> </AppShell.Navbar>
<OnDesktop> <OnDesktop>
<Draggable <Draggable
nodeRef={draggableSeparator} nodeRef={draggableSeparator as RefObject<HTMLElement>}
axis="x" axis="x"
defaultPosition={{ defaultPosition={{
x: sidebarWidth, x: sidebarWidth,

View File

@@ -0,0 +1,22 @@
import "@testing-library/jest-dom"
import { Constants } from "app/constants"
import { vi } from "vitest"
// reduce delay for faster tests
Constants.tooltip.delay = 10
// jsdom doesn't mock matchMedia
// https://stackoverflow.com/a/53449595/
Object.defineProperty(window, "matchMedia", {
writable: true,
value: vi.fn().mockImplementation(query => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(), // deprecated
removeListener: vi.fn(), // deprecated
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
})

View File

@@ -1,7 +1,7 @@
import { lingui } from "@lingui/vite-plugin" import { lingui } from "@lingui/vite-plugin"
import react from "@vitejs/plugin-react" import react from "@vitejs/plugin-react"
import { visualizer } from "rollup-plugin-visualizer" import { visualizer } from "rollup-plugin-visualizer"
import { defineConfig } from "vite" import { type PluginOption, defineConfig } from "vite"
import checker from "vite-plugin-checker" import checker from "vite-plugin-checker"
import tsconfigPaths from "vite-tsconfig-paths" import tsconfigPaths from "vite-tsconfig-paths"
@@ -52,5 +52,7 @@ export default defineConfig(() => ({
}, },
test: { test: {
environment: "jsdom", environment: "jsdom",
globals: true,
setupFiles: "./src/setupTests.ts",
}, },
})) }))

View File

@@ -41,7 +41,7 @@
<module name="AvoidStaticImport" /> <module name="AvoidStaticImport" />
<module name="IllegalImport" /> <module name="IllegalImport" />
<module name="ImportOrder"> <module name="ImportOrder">
<property name="groups" value="/^java\./,javax,org,com" /> <property name="groups" value="/^java\./,javax,jakarta,org,com" />
<property name="ordered" value="true" /> <property name="ordered" value="true" />
<property name="separated" value="true" /> <property name="separated" value="true" />
</module> </module>

View File

@@ -0,0 +1,7 @@
#Organize Import Order
#Wed Jan 29 15:15:04 CET 2025
0=java
1=javax
2=jakarta
3=org
4=com

View File

@@ -1,799 +0,0 @@
🔒: Configuration property fixed at build time - All other configuration properties are overridable at runtime
<table>
<thead>
<tr>
<th align="left">Configuration property</th>
<th>Type</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>
`commafeed.hide-from-web-crawlers`
Whether to expose a robots.txt file that disallows web crawlers and search engine indexers.
Environment variable: `COMMAFEED_HIDE_FROM_WEB_CRAWLERS`</td>
<td>
boolean
</td>
<td>
`true`
</td>
</tr>
<tr>
<td>
`commafeed.image-proxy-enabled`
If enabled, images in feed entries will be proxied through the server instead of accessed directly by the browser.
This is useful if commafeed is accessed through a restricting proxy that blocks some feeds that are followed.
Environment variable: `COMMAFEED_IMAGE_PROXY_ENABLED`</td>
<td>
boolean
</td>
<td>
`false`
</td>
</tr>
<tr>
<td>
`commafeed.password-recovery-enabled`
Enable password recovery via email.
Quarkus mailer will need to be configured.
Environment variable: `COMMAFEED_PASSWORD_RECOVERY_ENABLED`</td>
<td>
boolean
</td>
<td>
`false`
</td>
</tr>
<tr>
<td>
`commafeed.announcement`
Message displayed in a notification at the bottom of the page.
Environment variable: `COMMAFEED_ANNOUNCEMENT`</td>
<td>
string
</td>
<td>
</td>
</tr>
<tr>
<td>
`commafeed.google-analytics-tracking-code`
Google Analytics tracking code.
Environment variable: `COMMAFEED_GOOGLE_ANALYTICS_TRACKING_CODE`</td>
<td>
string
</td>
<td>
</td>
</tr>
<tr>
<td>
`commafeed.google-auth-key`
Google Auth key for fetching Youtube channel favicons.
Environment variable: `COMMAFEED_GOOGLE_AUTH_KEY`</td>
<td>
string
</td>
<td>
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
HTTP client configuration
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.http-client.user-agent`
User-Agent string that will be used by the http client, leave empty for the default one.
Environment variable: `COMMAFEED_HTTP_CLIENT_USER_AGENT`</td>
<td>
string
</td>
<td>
</td>
</tr>
<tr>
<td>
`commafeed.http-client.connect-timeout`
Time to wait for a connection to be established.
Environment variable: `COMMAFEED_HTTP_CLIENT_CONNECT_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`5S`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.ssl-handshake-timeout`
Time to wait for SSL handshake to complete.
Environment variable: `COMMAFEED_HTTP_CLIENT_SSL_HANDSHAKE_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`5S`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.socket-timeout`
Time to wait between two packets before timeout.
Environment variable: `COMMAFEED_HTTP_CLIENT_SOCKET_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`10S`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.response-timeout`
Time to wait for the full response to be received.
Environment variable: `COMMAFEED_HTTP_CLIENT_RESPONSE_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`10S`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.connection-time-to-live`
Time to live for a connection in the pool.
Environment variable: `COMMAFEED_HTTP_CLIENT_CONNECTION_TIME_TO_LIVE`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`30S`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.idle-connections-eviction-interval`
Time between eviction runs for idle connections.
Environment variable: `COMMAFEED_HTTP_CLIENT_IDLE_CONNECTIONS_EVICTION_INTERVAL`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`1M`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.max-response-size`
If a feed is larger than this, it will be discarded to prevent memory issues while parsing the feed.
Environment variable: `COMMAFEED_HTTP_CLIENT_MAX_RESPONSE_SIZE`</td>
<td>
MemorySize [🛈](#memory-size-note-anchor)
</td>
<td>
`5M`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
&nbsp;&nbsp;&nbsp;&nbsp;HTTP client cache configuration
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.http-client.cache.enabled`
Whether to enable the cache. This cache is used to avoid spamming feeds in short bursts (e.g. when subscribing to a feed for the
first time or when clicking "fetch all my feeds now").
Environment variable: `COMMAFEED_HTTP_CLIENT_CACHE_ENABLED`</td>
<td>
boolean
</td>
<td>
`true`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.cache.maximum-memory-size`
Maximum amount of memory the cache can use.
Environment variable: `COMMAFEED_HTTP_CLIENT_CACHE_MAXIMUM_MEMORY_SIZE`</td>
<td>
MemorySize [🛈](#memory-size-note-anchor)
</td>
<td>
`10M`
</td>
</tr>
<tr>
<td>
`commafeed.http-client.cache.expiration`
Duration after which an entry is removed from the cache.
Environment variable: `COMMAFEED_HTTP_CLIENT_CACHE_EXPIRATION`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`1M`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
Feed refresh engine settings
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.feed-refresh.interval`
Amount of time CommaFeed will wait before refreshing the same feed.
Environment variable: `COMMAFEED_FEED_REFRESH_INTERVAL`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`5M`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.interval-empirical`
If true, CommaFeed will calculate the next refresh time based on the feed's average time between entries and the time since the
last entry was published. The interval will be somewhere between the default refresh interval and 24h.
See <code>FeedRefreshIntervalCalculator</code> for details.
Environment variable: `COMMAFEED_FEED_REFRESH_INTERVAL_EMPIRICAL`</td>
<td>
boolean
</td>
<td>
`false`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.http-threads`
Amount of http threads used to fetch feeds.
Environment variable: `COMMAFEED_FEED_REFRESH_HTTP_THREADS`</td>
<td>
int
</td>
<td>
`3`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.database-threads`
Amount of threads used to insert new entries in the database.
Environment variable: `COMMAFEED_FEED_REFRESH_DATABASE_THREADS`</td>
<td>
int
</td>
<td>
`1`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.user-inactivity-period`
Duration after which a user is considered inactive. Feeds for inactive users are not refreshed until they log in again.
0 to disable.
Environment variable: `COMMAFEED_FEED_REFRESH_USER_INACTIVITY_PERIOD`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`0S`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.filtering-expression-evaluation-timeout`
Duration after which the evaluation of a filtering expresion to mark an entry as read is considered to have timed out.
Environment variable: `COMMAFEED_FEED_REFRESH_FILTERING_EXPRESSION_EVALUATION_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`500MS`
</td>
</tr>
<tr>
<td>
`commafeed.feed-refresh.force-refresh-cooldown-duration`
Duration after which the "Fetch all my feeds now" action is available again after use to avoid spamming feeds.
Environment variable: `COMMAFEED_FEED_REFRESH_FORCE_REFRESH_COOLDOWN_DURATION`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`0S`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
Database settings
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.database.query-timeout`
Timeout applied to all database queries.
0 to disable.
Environment variable: `COMMAFEED_DATABASE_QUERY_TIMEOUT`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`0S`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
&nbsp;&nbsp;&nbsp;&nbsp;Database cleanup settings
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.database.cleanup.entries-max-age`
Maximum age of feed entries in the database. Older entries will be deleted.
0 to disable.
Environment variable: `COMMAFEED_DATABASE_CLEANUP_ENTRIES_MAX_AGE`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`365D`
</td>
</tr>
<tr>
<td>
`commafeed.database.cleanup.statuses-max-age`
Maximum age of feed entry statuses (read/unread) in the database. Older statuses will be deleted.
0 to disable.
Environment variable: `COMMAFEED_DATABASE_CLEANUP_STATUSES_MAX_AGE`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`0S`
</td>
</tr>
<tr>
<td>
`commafeed.database.cleanup.max-feed-capacity`
Maximum number of entries per feed to keep in the database.
0 to disable.
Environment variable: `COMMAFEED_DATABASE_CLEANUP_MAX_FEED_CAPACITY`</td>
<td>
int
</td>
<td>
`500`
</td>
</tr>
<tr>
<td>
`commafeed.database.cleanup.max-feeds-per-user`
Limit the number of feeds a user can subscribe to.
0 to disable.
Environment variable: `COMMAFEED_DATABASE_CLEANUP_MAX_FEEDS_PER_USER`</td>
<td>
int
</td>
<td>
`0`
</td>
</tr>
<tr>
<td>
`commafeed.database.cleanup.batch-size`
Rows to delete per query while cleaning up old entries.
Environment variable: `COMMAFEED_DATABASE_CLEANUP_BATCH_SIZE`</td>
<td>
int
</td>
<td>
`100`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
Users settings
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.users.allow-registrations`
Whether to let users create accounts for themselves.
Environment variable: `COMMAFEED_USERS_ALLOW_REGISTRATIONS`</td>
<td>
boolean
</td>
<td>
`false`
</td>
</tr>
<tr>
<td>
`commafeed.users.strict-password-policy`
Whether to enable strict password validation (1 uppercase char, 1 lowercase char, 1 digit, 1 special char).
Environment variable: `COMMAFEED_USERS_STRICT_PASSWORD_POLICY`</td>
<td>
boolean
</td>
<td>
`true`
</td>
</tr>
<tr>
<td>
`commafeed.users.create-demo-account`
Whether to create a demo account the first time the app starts.
Environment variable: `COMMAFEED_USERS_CREATE_DEMO_ACCOUNT`</td>
<td>
boolean
</td>
<td>
`false`
</td>
</tr>
<thead>
<tr>
<th align="left" colspan="3">
Websocket settings
</th>
</tr>
</thead>
<tr>
<td>
`commafeed.websocket.enabled`
Enable websocket connection so the server can notify web clients that there are new entries for feeds.
Environment variable: `COMMAFEED_WEBSOCKET_ENABLED`</td>
<td>
boolean
</td>
<td>
`true`
</td>
</tr>
<tr>
<td>
`commafeed.websocket.ping-interval`
Interval at which the client will send a ping message on the websocket to keep the connection alive.
Environment variable: `COMMAFEED_WEBSOCKET_PING_INTERVAL`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`15M`
</td>
</tr>
<tr>
<td>
`commafeed.websocket.tree-reload-interval`
If the websocket connection is disabled or the connection is lost, the client will reload the feed tree at this interval.
Environment variable: `COMMAFEED_WEBSOCKET_TREE_RELOAD_INTERVAL`</td>
<td>
[Duration](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html) [🛈](#duration-note-anchor)
</td>
<td>
`30S`
</td>
</tr>
</tbody>
</table>
<a name="duration-note-anchor"></a>
> [!NOTE]
> ### About the Duration format
>
> To write duration values, use the standard `java.time.Duration` format.
> See the [Duration#parse()](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)) Java API documentation] for more information.
>
> You can also use a simplified format, starting with a number:
>
> * If the value is only a number, it represents time in seconds.
> * If the value is a number followed by `ms`, it represents time in milliseconds.
>
> In other cases, the simplified format is translated to the `java.time.Duration` format for parsing:
>
> * If the value is a number followed by `h`, `m`, or `s`, it is prefixed with `PT`.
> * If the value is a number followed by `d`, it is prefixed with `P`.
<a name="memory-size-note-anchor"></a>
> [!NOTE]
> ### About the MemorySize format
>
> A size configuration option recognizes strings in this format (shown as a regular expression): `[0-9]+[KkMmGgTtPpEeZzYy]?`.
>
> If no suffix is given, assume bytes.

View File

@@ -6,16 +6,16 @@
<parent> <parent>
<groupId>com.commafeed</groupId> <groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId> <artifactId>commafeed</artifactId>
<version>5.3.6</version> <version>5.7.0</version>
</parent> </parent>
<artifactId>commafeed-server</artifactId> <artifactId>commafeed-server</artifactId>
<name>CommaFeed Server</name> <name>CommaFeed Server</name>
<properties> <properties>
<quarkus.version>3.17.2</quarkus.version> <quarkus.version>3.21.1</quarkus.version>
<querydsl.version>6.9</querydsl.version> <querydsl.version>6.10.1</querydsl.version>
<rome.version>2.1.0</rome.version> <rome.version>2.1.0</rome.version>
<swagger.version>2.2.26</swagger.version> <swagger.version>2.2.29</swagger.version>
<build.database>h2</build.database> <build.database>h2</build.database>
</properties> </properties>
@@ -115,6 +115,34 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${quarkus.version}</version>
</dependency>
</dependencies>
<configuration>
<includePluginDependencies>true</includePluginDependencies>
<mainClass>com.commafeed.tools.CommaFeedPropertiesGenerator</mainClass>
<arguments>
<argument>${project.build.directory}</argument>
</arguments>
</configuration>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId> <artifactId>maven-assembly-plugin</artifactId>
@@ -138,7 +166,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version> <version>3.5.3</version>
<configuration> <configuration>
<systemPropertyVariables> <systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
@@ -149,7 +177,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId> <artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.2</version> <version>3.5.3</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>
@@ -241,7 +269,7 @@
<dependency> <dependency>
<groupId>com.puppycrawl.tools</groupId> <groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId> <artifactId>checkstyle</artifactId>
<version>10.20.2</version> <version>10.23.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
<executions> <executions>
@@ -270,7 +298,7 @@
<plugin> <plugin>
<groupId>com.diffplug.spotless</groupId> <groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId> <artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version> <version>2.44.3</version>
<?m2e ignore?> <?m2e ignore?>
<executions> <executions>
<execution> <execution>
@@ -282,11 +310,13 @@
</executions> </executions>
<configuration> <configuration>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
<lineEndings>WINDOWS</lineEndings>
<java> <java>
<eclipse> <eclipse>
<file>${project.basedir}/dev/EclipseCodeFormatter.xml</file> <file>${project.basedir}/dev/EclipseCodeFormatter.xml</file>
</eclipse> </eclipse>
<importOrder>
<file>${project.basedir}/dev/eclipse.importorder</file>
</importOrder>
</java> </java>
</configuration> </configuration>
</plugin> </plugin>
@@ -297,14 +327,14 @@
<dependency> <dependency>
<groupId>com.commafeed</groupId> <groupId>com.commafeed</groupId>
<artifactId>commafeed-client</artifactId> <artifactId>commafeed-client</artifactId>
<version>5.3.6</version> <version>5.7.0</version>
</dependency> </dependency>
<!-- compile-time processors --> <!-- compile-time processors -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.36</version> <version>1.18.38</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
@@ -361,7 +391,7 @@
<dependency> <dependency>
<groupId>io.dropwizard.metrics</groupId> <groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId> <artifactId>metrics-json</artifactId>
<version>4.2.29</version> <version>4.2.30</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.swagger.core.v3</groupId> <groupId>io.swagger.core.v3</groupId>
@@ -433,12 +463,12 @@
<dependency> <dependency>
<groupId>org.jsoup</groupId> <groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId> <artifactId>jsoup</artifactId>
<version>1.18.3</version> <version>1.19.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.ibm.icu</groupId> <groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId> <artifactId>icu4j</artifactId>
<version>76.1</version> <version>77.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.sourceforge.cssparser</groupId> <groupId>net.sourceforge.cssparser</groupId>
@@ -453,7 +483,7 @@
<dependency> <dependency>
<groupId>org.apache.httpcomponents.client5</groupId> <groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId> <artifactId>httpclient5</artifactId>
<version>5.4.1</version> <version>5.4.3</version>
</dependency> </dependency>
<!-- add brotli support for httpclient5 --> <!-- add brotli support for httpclient5 -->
<dependency> <dependency>
@@ -464,7 +494,7 @@
<dependency> <dependency>
<groupId>io.github.hakky54</groupId> <groupId>io.github.hakky54</groupId>
<artifactId>sslcontext-kickstart-for-apache5</artifactId> <artifactId>sslcontext-kickstart-for-apache5</artifactId>
<version>8.3.7</version> <version>9.1.0</version>
</dependency> </dependency>
<!-- test dependencies --> <!-- test dependencies -->
@@ -492,7 +522,7 @@
<dependency> <dependency>
<groupId>com.microsoft.playwright</groupId> <groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId> <artifactId>playwright</artifactId>
<version>1.49.0</version> <version>1.51.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@@ -1,10 +1,10 @@
FROM ibm-semeru-runtimes:open-21.0.5_11-jre FROM ibm-semeru-runtimes:open-21.0.6_7-jre@sha256:fc0d0c8b2ea5b97bc362e8f90151ed62739cb6f758938203ea0370bc6b9c6659
EXPOSE 8082 EXPOSE 8082
RUN mkdir -p /commafeed/data RUN mkdir -p /commafeed/data
VOLUME /commafeed/data VOLUME /commafeed/data
COPY commafeed-server/target/quarkus-app/ /commafeed COPY artifacts/extracted-jvm-package/quarkus-app/ /commafeed
WORKDIR /commafeed WORKDIR /commafeed
CMD ["java", \ CMD ["java", \

View File

@@ -1,10 +1,12 @@
FROM debian:12.8 FROM debian:12.10@sha256:18023f131f52fc3ea21973cabffe0b216c60b417fd2478e94d9d59981ebba6af
ARG TARGETARCH
EXPOSE 8082 EXPOSE 8082
RUN mkdir -p /commafeed/data RUN mkdir -p /commafeed/data
VOLUME /commafeed/data VOLUME /commafeed/data
COPY commafeed-server/target/commafeed-*-runner /commafeed/application COPY artifacts/commafeed-*-${TARGETARCH}-runner /commafeed/application
WORKDIR /commafeed WORKDIR /commafeed
CMD ["./application"] CMD ["./application"]

View File

@@ -68,7 +68,7 @@ CommaFeed also supports:
## Configuration ## Configuration
All [CommaFeed settings](https://github.com/Athou/commafeed/blob/master/commafeed-server/doc/commafeed.md) are All [CommaFeed settings](https://athou.github.io/commafeed/documentation) are
optional and have sensible default values. optional and have sensible default values.
Settings are overrideable with environment variables. For instance, `commafeed.feed-refresh.interval-empirical` can be Settings are overrideable with environment variables. For instance, `commafeed.feed-refresh.interval-empirical` can be
@@ -92,5 +92,4 @@ Tags are of the form `<version>-<database>[-jvm]` where:
- `latest` (always points to the latest version) - `latest` (always points to the latest version)
- `master` (always points to the latest git commit) - `master` (always points to the latest git commit)
- `<database>` is the database to use (`h2`, `postgresql`, `mysql` or `mariadb`) - `<database>` is the database to use (`h2`, `postgresql`, `mysql` or `mariadb`)
- `-jvm` is optional and indicates that CommaFeed is running on a JVM, and not compiled natively. This image supports - `-jvm` is optional and indicates that CommaFeed is running on a JVM, and not compiled natively.
the arm64 platform which is not yet supported by the native image.

View File

@@ -1,5 +1,8 @@
package com.commafeed; package com.commafeed;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Singleton;
import com.commafeed.backend.feed.FeedRefreshEngine; import com.commafeed.backend.feed.FeedRefreshEngine;
import com.commafeed.backend.service.db.DatabaseStartupService; import com.commafeed.backend.service.db.DatabaseStartupService;
import com.commafeed.backend.task.TaskScheduler; import com.commafeed.backend.task.TaskScheduler;
@@ -7,8 +10,6 @@ import com.commafeed.security.password.PasswordConstraintValidator;
import io.quarkus.runtime.ShutdownEvent; import io.quarkus.runtime.ShutdownEvent;
import io.quarkus.runtime.StartupEvent; import io.quarkus.runtime.StartupEvent;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Singleton;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Singleton @Singleton

View File

@@ -4,6 +4,9 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.Optional; import java.util.Optional;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Positive;
import com.commafeed.backend.feed.FeedRefreshIntervalCalculator; import com.commafeed.backend.feed.FeedRefreshIntervalCalculator;
import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigDocSection;
@@ -12,8 +15,6 @@ import io.quarkus.runtime.annotations.ConfigRoot;
import io.quarkus.runtime.configuration.MemorySize; import io.quarkus.runtime.configuration.MemorySize;
import io.smallrye.config.ConfigMapping; import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault; import io.smallrye.config.WithDefault;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Positive;
/** /**
* CommaFeed configuration * CommaFeed configuration
@@ -138,6 +139,16 @@ public interface CommaFeedConfiguration {
@WithDefault("5M") @WithDefault("5M")
MemorySize maxResponseSize(); MemorySize maxResponseSize();
/**
* 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.
*/
@WithDefault("true")
boolean blockLocalAddresses();
/** /**
* HTTP client cache configuration * HTTP client cache configuration
*/ */
@@ -168,20 +179,39 @@ public interface CommaFeedConfiguration {
interface FeedRefresh { interface FeedRefresh {
/** /**
* Amount of time CommaFeed will wait before refreshing the same feed. * Default amount of time CommaFeed will wait before refreshing a feed.
*/ */
@WithDefault("5m") @WithDefault("5m")
Duration interval(); Duration interval();
/** /**
* If true, CommaFeed will calculate the next refresh time based on the feed's average time between entries and the time since the * Maximum amount of time CommaFeed will wait before refreshing a feed. This is used as an upper bound when:
* last entry was published. The interval will be somewhere between the default refresh interval and 24h. *
* <ul>
* <li>an error occurs while refreshing a feed and we're backing off exponentially</li>
* <li>we receive a Cache-Control header from the feed</li>
* <li>we receive a Retry-After header from the feed</li>
* </ul>
*/
@WithDefault("4h")
Duration maxInterval();
/**
* If enabled, CommaFeed will calculate the next refresh time based on the feed's average time between entries and the time since
* the last entry was published. The interval will be sometimes between the default refresh interval
* (`commafeed.feed-refresh.interval`) and the maximum refresh interval (`commafeed.feed-refresh.max-interval`).
* *
* See {@link FeedRefreshIntervalCalculator} for details. * See {@link FeedRefreshIntervalCalculator} for details.
*/ */
@WithDefault("false") @WithDefault("true")
boolean intervalEmpirical(); boolean intervalEmpirical();
/**
* Feed refresh engine error handling settings.
*/
@ConfigDocSection
FeedRefreshErrorHandling errors();
/** /**
* Amount of http threads used to fetch feeds. * Amount of http threads used to fetch feeds.
*/ */
@@ -217,6 +247,21 @@ public interface CommaFeedConfiguration {
Duration forceRefreshCooldownDuration(); Duration forceRefreshCooldownDuration();
} }
interface FeedRefreshErrorHandling {
/**
* Number of retries before backoff is applied.
*/
@Min(0)
@WithDefault("3")
int retriesBeforeBackoff();
/**
* Duration to wait before retrying after an error. Will be multiplied by the number of errors since the last successful fetch.
*/
@WithDefault("1h")
Duration backoffInterval();
}
interface Database { interface Database {
/** /**
* Timeout applied to all database queries. * Timeout applied to all database queries.

View File

@@ -1,16 +1,25 @@
package com.commafeed; package com.commafeed;
import com.codahale.metrics.MetricRegistry; import java.time.InstantSource;
import jakarta.enterprise.inject.Produces; import jakarta.enterprise.inject.Produces;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
import com.codahale.metrics.MetricRegistry;
@Singleton @Singleton
public class CommaFeedProducers { public class CommaFeedProducers {
@Produces
@Singleton
public InstantSource instantSource() {
return InstantSource.system();
}
@Produces @Produces
@Singleton @Singleton
public MetricRegistry metricRegistry() { public MetricRegistry metricRegistry() {
return new MetricRegistry(); return new MetricRegistry();
} }
} }

View File

@@ -5,6 +5,7 @@ import java.io.InputStream;
import java.util.Properties; import java.util.Properties;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
import lombok.Getter; import lombok.Getter;
@Singleton @Singleton

View File

@@ -1,5 +1,9 @@
package com.commafeed; package com.commafeed;
import jakarta.annotation.Priority;
import jakarta.validation.ValidationException;
import jakarta.ws.rs.ext.Provider;
import org.jboss.resteasy.reactive.RestResponse; import org.jboss.resteasy.reactive.RestResponse;
import org.jboss.resteasy.reactive.RestResponse.Status; import org.jboss.resteasy.reactive.RestResponse.Status;
import org.jboss.resteasy.reactive.server.ServerExceptionMapper; import org.jboss.resteasy.reactive.server.ServerExceptionMapper;
@@ -7,9 +11,6 @@ import org.jboss.resteasy.reactive.server.ServerExceptionMapper;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;
import io.quarkus.security.AuthenticationFailedException; import io.quarkus.security.AuthenticationFailedException;
import io.quarkus.security.UnauthorizedException; import io.quarkus.security.UnauthorizedException;
import jakarta.annotation.Priority;
import jakarta.validation.ValidationException;
import jakarta.ws.rs.ext.Provider;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@@ -2,6 +2,8 @@ package com.commafeed;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import jakarta.inject.Singleton;
import com.codahale.metrics.json.MetricsModule; import com.codahale.metrics.json.MetricsModule;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@@ -9,7 +11,6 @@ import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import io.quarkus.jackson.ObjectMapperCustomizer; import io.quarkus.jackson.ObjectMapperCustomizer;
import jakarta.inject.Singleton;
@Singleton @Singleton
public class JacksonCustomizer implements ObjectMapperCustomizer { public class JacksonCustomizer implements ObjectMapperCustomizer {

View File

@@ -2,15 +2,20 @@ package com.commafeed.backend;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.IDN;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.URI; import java.net.URI;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.time.Duration; import java.time.Duration;
import java.time.Instant;
import java.time.InstantSource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.stream.Stream;
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.CacheControl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.hc.client5.http.DnsResolver; import org.apache.hc.client5.http.DnsResolver;
@@ -25,6 +30,7 @@ import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuil
import org.apache.hc.client5.http.io.HttpClientConnectionManager; import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.protocol.HttpClientContext; import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.protocol.RedirectLocations; 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.ClassicHttpRequest;
import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.HttpEntity;
@@ -46,11 +52,10 @@ import com.google.common.collect.Iterables;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import com.google.common.net.HttpHeaders; import com.google.common.net.HttpHeaders;
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.CacheControl;
import lombok.Builder; import lombok.Builder;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Value; import lombok.Value;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import nl.altindag.ssl.SSLFactory; import nl.altindag.ssl.SSLFactory;
@@ -64,11 +69,14 @@ import nl.altindag.ssl.apache5.util.Apache5SslUtils;
public class HttpGetter { public class HttpGetter {
private final CommaFeedConfiguration config; private final CommaFeedConfiguration config;
private final InstantSource instantSource;
private final CloseableHttpClient client; private final CloseableHttpClient client;
private final Cache<HttpRequest, HttpResponse> cache; private final Cache<HttpRequest, HttpResponse> cache;
private final DnsResolver dnsResolver = SystemDefaultDnsResolver.INSTANCE;
public HttpGetter(CommaFeedConfiguration config, CommaFeedVersion version, MetricRegistry metrics) { public HttpGetter(CommaFeedConfiguration config, InstantSource instantSource, CommaFeedVersion version, MetricRegistry metrics) {
this.config = config; this.config = config;
this.instantSource = instantSource;
PoolingHttpClientConnectionManager connectionManager = newConnectionManager(config); PoolingHttpClientConnectionManager connectionManager = newConnectionManager(config);
String userAgent = config.httpClient() String userAgent = config.httpClient()
@@ -88,11 +96,20 @@ public class HttpGetter {
() -> cache == null ? 0 : cache.asMap().values().stream().mapToInt(e -> e.content != null ? e.content.length : 0).sum()); () -> cache == null ? 0 : cache.asMap().values().stream().mapToInt(e -> e.content != null ? e.content.length : 0).sum());
} }
public HttpResult get(String url) throws IOException, NotModifiedException { public HttpResult get(String url)
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException {
return get(HttpRequest.builder(url).build()); return get(HttpRequest.builder(url).build());
} }
public HttpResult get(HttpRequest request) throws IOException, NotModifiedException { public HttpResult get(HttpRequest request)
throws IOException, NotModifiedException, TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException {
URI uri = URI.create(request.getUrl());
ensureHttpScheme(uri.getScheme());
if (config.httpClient().blockLocalAddresses()) {
ensurePublicAddress(uri.getHost());
}
final HttpResponse response; final HttpResponse response;
if (cache == null) { if (cache == null) {
response = invoke(request); response = invoke(request);
@@ -109,21 +126,20 @@ public class HttpGetter {
} }
int code = response.getCode(); int code = response.getCode();
if (code == HttpStatus.SC_TOO_MANY_REQUESTS || code == HttpStatus.SC_SERVICE_UNAVAILABLE && response.getRetryAfter() != null) {
throw new TooManyRequestsException(response.getRetryAfter());
}
if (code == HttpStatus.SC_NOT_MODIFIED) { if (code == HttpStatus.SC_NOT_MODIFIED) {
throw new NotModifiedException("'304 - not modified' http code received"); throw new NotModifiedException("'304 - not modified' http code received");
} else if (code >= 300) { }
if (code >= 300) {
throw new HttpResponseException(code, "Server returned HTTP error code " + code); throw new HttpResponseException(code, "Server returned HTTP error code " + code);
} }
String lastModifiedHeader = response.getLastModifiedHeader(); String lastModifiedHeader = response.getLastModifiedHeader();
if (lastModifiedHeader != null && lastModifiedHeader.equals(request.getLastModified())) {
throw new NotModifiedException("lastModifiedHeader is the same");
}
String eTagHeader = response.getETagHeader(); String eTagHeader = response.getETagHeader();
if (eTagHeader != null && eTagHeader.equals(request.getETag())) {
throw new NotModifiedException("eTagHeader is the same");
}
Duration validFor = Optional.ofNullable(response.getCacheControl()) Duration validFor = Optional.ofNullable(response.getCacheControl())
.filter(cc -> cc.getMaxAge() >= 0) .filter(cc -> cc.getMaxAge() >= 0)
@@ -134,6 +150,28 @@ public class HttpGetter {
response.getUrlAfterRedirect(), validFor); response.getUrlAfterRedirect(), validFor);
} }
private void ensureHttpScheme(String scheme) throws SchemeNotAllowedException {
if (!"http".equals(scheme) && !"https".equals(scheme)) {
throw new SchemeNotAllowedException(scheme);
}
}
private void ensurePublicAddress(String host) throws HostNotAllowedException, UnknownHostException {
if (host == null) {
throw new HostNotAllowedException(null);
}
InetAddress[] addresses = dnsResolver.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 { private HttpResponse invoke(HttpRequest request) throws IOException {
log.debug("fetching {}", request.getUrl()); log.debug("fetching {}", request.getUrl());
@@ -165,6 +203,12 @@ public class HttpGetter {
.map(HttpGetter::toCacheControl) .map(HttpGetter::toCacheControl)
.orElse(null); .orElse(null);
Instant retryAfter = Optional.ofNullable(resp.getFirstHeader(HttpHeaders.RETRY_AFTER))
.map(NameValuePair::getValue)
.map(StringUtils::trimToNull)
.map(this::toInstant)
.orElse(null);
String contentType = Optional.ofNullable(resp.getEntity()).map(HttpEntity::getContentType).orElse(null); String contentType = Optional.ofNullable(resp.getEntity()).map(HttpEntity::getContentType).orElse(null);
String urlAfterRedirect = Optional.ofNullable(context.getRedirectLocations()) String urlAfterRedirect = Optional.ofNullable(context.getRedirectLocations())
.map(RedirectLocations::getAll) .map(RedirectLocations::getAll)
@@ -172,7 +216,7 @@ public class HttpGetter {
.map(URI::toString) .map(URI::toString)
.orElse(request.getUrl()); .orElse(request.getUrl());
return new HttpResponse(code, lastModifiedHeader, eTagHeader, cacheControl, content, contentType, urlAfterRedirect); return new HttpResponse(code, lastModifiedHeader, eTagHeader, cacheControl, retryAfter, content, contentType, urlAfterRedirect);
}); });
} }
@@ -185,6 +229,18 @@ public class HttpGetter {
} }
} }
private Instant toInstant(String headerValue) {
if (headerValue == null) {
return null;
}
if (StringUtils.isNumeric(headerValue)) {
return instantSource.instant().plusSeconds(Long.parseLong(headerValue));
}
return DateUtils.parseStandardDate(headerValue);
}
private static byte[] toByteArray(HttpEntity entity, long maxBytes) throws IOException { private static byte[] toByteArray(HttpEntity entity, long maxBytes) throws IOException {
if (entity.getContentLength() > maxBytes) { if (entity.getContentLength() > maxBytes) {
throw new IOException( throw new IOException(
@@ -204,7 +260,7 @@ public class HttpGetter {
} }
} }
private static PoolingHttpClientConnectionManager newConnectionManager(CommaFeedConfiguration config) { private PoolingHttpClientConnectionManager newConnectionManager(CommaFeedConfiguration config) {
SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build(); SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();
int poolSize = config.feedRefresh().httpThreads(); int poolSize = config.feedRefresh().httpThreads();
@@ -218,7 +274,7 @@ public class HttpGetter {
.setDefaultTlsConfig(TlsConfig.custom().setHandshakeTimeout(Timeout.of(config.httpClient().sslHandshakeTimeout())).build()) .setDefaultTlsConfig(TlsConfig.custom().setHandshakeTimeout(Timeout.of(config.httpClient().sslHandshakeTimeout())).build())
.setMaxConnPerRoute(poolSize) .setMaxConnPerRoute(poolSize)
.setMaxConnTotal(poolSize) .setMaxConnTotal(poolSize)
.setDnsResolver(new InternationalizedDomainNameToAsciiDnsResolver(SystemDefaultDnsResolver.INSTANCE)) .setDnsResolver(dnsResolver)
.build(); .build();
} }
@@ -255,15 +311,19 @@ public class HttpGetter {
.build(); .build();
} }
private record InternationalizedDomainNameToAsciiDnsResolver(DnsResolver delegate) implements DnsResolver { public static class SchemeNotAllowedException extends Exception {
@Override private static final long serialVersionUID = 1L;
public InetAddress[] resolve(String host) throws UnknownHostException {
return delegate.resolve(IDN.toASCII(host));
}
@Override public SchemeNotAllowedException(String scheme) {
public String resolveCanonicalHostname(String host) throws UnknownHostException { super("Scheme not allowed: " + scheme);
return delegate.resolveCanonicalHostname(IDN.toASCII(host)); }
}
public static class HostNotAllowedException extends Exception {
private static final long serialVersionUID = 1L;
public HostNotAllowedException(String host) {
super("Host not allowed: " + host);
} }
} }
@@ -292,6 +352,14 @@ public class HttpGetter {
} }
} }
@RequiredArgsConstructor
@Getter
public static class TooManyRequestsException extends Exception {
private static final long serialVersionUID = 1L;
private final Instant retryAfter;
}
@Getter @Getter
public static class HttpResponseException extends IOException { public static class HttpResponseException extends IOException {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -334,6 +402,7 @@ public class HttpGetter {
String lastModifiedHeader; String lastModifiedHeader;
String eTagHeader; String eTagHeader;
CacheControl cacheControl; CacheControl cacheControl;
Instant retryAfter;
byte[] content; byte[] content;
String contentType; String contentType;
String urlAfterRedirect; String urlAfterRedirect;

View File

@@ -3,15 +3,15 @@ package com.commafeed.backend.dao;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.QFeedCategory; import com.commafeed.backend.model.QFeedCategory;
import com.commafeed.backend.model.QUser; import com.commafeed.backend.model.QUser;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Predicate;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedCategoryDAO extends GenericDAO<FeedCategory> { public class FeedCategoryDAO extends GenericDAO<FeedCategory> {

View File

@@ -3,6 +3,9 @@ package com.commafeed.backend.dao;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
@@ -11,9 +14,6 @@ import com.commafeed.backend.model.QFeedSubscription;
import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQuery;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedDAO extends GenericDAO<Feed> { public class FeedDAO extends GenericDAO<Feed> {

View File

@@ -2,13 +2,13 @@ package com.commafeed.backend.dao;
import java.util.List; import java.util.List;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.FeedEntryContent; import com.commafeed.backend.model.FeedEntryContent;
import com.commafeed.backend.model.QFeedEntry; import com.commafeed.backend.model.QFeedEntry;
import com.commafeed.backend.model.QFeedEntryContent; import com.commafeed.backend.model.QFeedEntryContent;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedEntryContentDAO extends GenericDAO<FeedEntryContent> { public class FeedEntryContentDAO extends GenericDAO<FeedEntryContent> {

View File

@@ -3,14 +3,15 @@ package com.commafeed.backend.dao;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.QFeedEntry; import com.commafeed.backend.model.QFeedEntry;
import com.querydsl.core.Tuple; import com.querydsl.core.Tuple;
import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.NumberExpression;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

View File

@@ -6,6 +6,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConfiguration;
@@ -27,9 +30,6 @@ import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.Tuple; import com.querydsl.core.Tuple;
import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQuery;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> { public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {

View File

@@ -4,14 +4,14 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryTag; import com.commafeed.backend.model.FeedEntryTag;
import com.commafeed.backend.model.QFeedEntryTag; import com.commafeed.backend.model.QFeedEntryTag;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedEntryTagDAO extends GenericDAO<FeedEntryTag> { public class FeedEntryTagDAO extends GenericDAO<FeedEntryTag> {

View File

@@ -5,6 +5,9 @@ import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.service.spi.EventListenerRegistry;
import org.hibernate.event.spi.EventType; import org.hibernate.event.spi.EventType;
@@ -22,9 +25,6 @@ import com.commafeed.backend.model.User;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.querydsl.jpa.JPQLQuery; import com.querydsl.jpa.JPQLQuery;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> { public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {

View File

@@ -3,6 +3,8 @@ package com.commafeed.backend.dao;
import java.time.Duration; import java.time.Duration;
import java.util.Collection; import java.util.Collection;
import jakarta.persistence.EntityManager;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.jpa.SpecHints; import org.hibernate.jpa.SpecHints;
@@ -13,7 +15,6 @@ import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import com.querydsl.jpa.impl.JPAUpdateClause; import com.querydsl.jpa.impl.JPAUpdateClause;
import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@@ -1,30 +1,19 @@
package com.commafeed.backend.dao; package com.commafeed.backend.dao;
import io.quarkus.narayana.jta.QuarkusTransaction; import java.util.concurrent.Callable;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
import io.quarkus.narayana.jta.QuarkusTransaction;
@Singleton @Singleton
public class UnitOfWork { public class UnitOfWork {
public void run(SessionRunner runner) { public void run(Runnable runnable) {
call(() -> { QuarkusTransaction.joiningExisting().run(runnable);
runner.runInSession();
return null;
});
} }
public <T> T call(SessionRunnerReturningValue<T> runner) { public <T> T call(Callable<T> callable) {
return QuarkusTransaction.joiningExisting().call(runner::runInSession); return QuarkusTransaction.joiningExisting().call(callable);
} }
@FunctionalInterface
public interface SessionRunner {
void runInSession();
}
@FunctionalInterface
public interface SessionRunnerReturningValue<T> {
T runInSession();
}
} }

View File

@@ -1,11 +1,11 @@
package com.commafeed.backend.dao; package com.commafeed.backend.dao;
import com.commafeed.backend.model.QUser;
import com.commafeed.backend.model.User;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.QUser;
import com.commafeed.backend.model.User;
@Singleton @Singleton
public class UserDAO extends GenericDAO<User> { public class UserDAO extends GenericDAO<User> {

View File

@@ -4,14 +4,14 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.QUserRole; import com.commafeed.backend.model.QUserRole;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserRole.Role; import com.commafeed.backend.model.UserRole.Role;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class UserRoleDAO extends GenericDAO<UserRole> { public class UserRoleDAO extends GenericDAO<UserRole> {

View File

@@ -1,12 +1,12 @@
package com.commafeed.backend.dao; package com.commafeed.backend.dao;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
import com.commafeed.backend.model.QUserSettings; import com.commafeed.backend.model.QUserSettings;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings; import com.commafeed.backend.model.UserSettings;
import jakarta.inject.Singleton;
import jakarta.persistence.EntityManager;
@Singleton @Singleton
public class UserSettingsDAO extends GenericDAO<UserSettings> { public class UserSettingsDAO extends GenericDAO<UserSettings> {

View File

@@ -1,5 +1,8 @@
package com.commafeed.backend.favicon; package com.commafeed.backend.favicon;
import jakarta.annotation.Priority;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
@@ -10,8 +13,6 @@ import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.feed.FeedUtils; import com.commafeed.backend.feed.FeedUtils;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import jakarta.annotation.Priority;
import jakarta.inject.Singleton;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -4,6 +4,8 @@ import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.List; import java.util.List;
import jakarta.inject.Singleton;
import org.apache.hc.core5.http.NameValuePair; import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.net.URIBuilder; import org.apache.hc.core5.net.URIBuilder;
@@ -11,7 +13,6 @@ import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import jakarta.inject.Singleton;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -1,6 +1,7 @@
package com.commafeed.backend.favicon; package com.commafeed.backend.favicon;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -5,21 +5,25 @@ import java.net.URI;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.UriBuilder;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.hc.core5.http.NameValuePair; import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.net.URIBuilder; import org.apache.hc.core5.net.URIBuilder;
import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.HttpGetter.HostNotAllowedException;
import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.HttpGetter.NotModifiedException; import com.commafeed.backend.HttpGetter.NotModifiedException;
import com.commafeed.backend.HttpGetter.SchemeNotAllowedException;
import com.commafeed.backend.HttpGetter.TooManyRequestsException;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import com.fasterxml.jackson.core.JsonPointer; import com.fasterxml.jackson.core.JsonPointer;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.inject.Singleton;
import jakarta.ws.rs.core.UriBuilder;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -91,7 +95,8 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
return new Favicon(bytes, contentType); return new Favicon(bytes, contentType);
} }
private byte[] fetchForUser(String googleAuthKey, String userId) throws IOException, NotModifiedException { private byte[] fetchForUser(String googleAuthKey, String userId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels") URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels")
.queryParam("part", "snippet") .queryParam("part", "snippet")
.queryParam("key", googleAuthKey) .queryParam("key", googleAuthKey)
@@ -100,7 +105,8 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
return getter.get(uri.toString()).getContent(); return getter.get(uri.toString()).getContent();
} }
private byte[] fetchForChannel(String googleAuthKey, String channelId) throws IOException, NotModifiedException { private byte[] fetchForChannel(String googleAuthKey, String channelId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels") URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/channels")
.queryParam("part", "snippet") .queryParam("part", "snippet")
.queryParam("key", googleAuthKey) .queryParam("key", googleAuthKey)
@@ -109,7 +115,8 @@ public class YoutubeFaviconFetcher extends AbstractFaviconFetcher {
return getter.get(uri.toString()).getContent(); return getter.get(uri.toString()).getContent();
} }
private byte[] fetchForPlaylist(String googleAuthKey, String playlistId) throws IOException, NotModifiedException { private byte[] fetchForPlaylist(String googleAuthKey, String playlistId)
throws IOException, NotModifiedException, TooManyRequestsException, HostNotAllowedException, SchemeNotAllowedException {
URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/playlists") URI uri = UriBuilder.fromUri("https://www.googleapis.com/youtube/v3/playlists")
.queryParam("part", "snippet") .queryParam("part", "snippet")
.queryParam("key", googleAuthKey) .queryParam("key", googleAuthKey)

View File

@@ -6,20 +6,24 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.commafeed.backend.Digests; import com.commafeed.backend.Digests;
import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.HttpGetter.HostNotAllowedException;
import com.commafeed.backend.HttpGetter.HttpRequest; import com.commafeed.backend.HttpGetter.HttpRequest;
import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.HttpResult;
import com.commafeed.backend.HttpGetter.NotModifiedException; import com.commafeed.backend.HttpGetter.NotModifiedException;
import com.commafeed.backend.HttpGetter.SchemeNotAllowedException;
import com.commafeed.backend.HttpGetter.TooManyRequestsException;
import com.commafeed.backend.feed.parser.FeedParser; import com.commafeed.backend.feed.parser.FeedParser;
import com.commafeed.backend.feed.parser.FeedParser.FeedParsingException;
import com.commafeed.backend.feed.parser.FeedParserResult; import com.commafeed.backend.feed.parser.FeedParserResult;
import com.commafeed.backend.urlprovider.FeedURLProvider; import com.commafeed.backend.urlprovider.FeedURLProvider;
import com.rometools.rome.io.FeedException;
import io.quarkus.arc.All; import io.quarkus.arc.All;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@@ -40,7 +44,8 @@ public class FeedFetcher {
} }
public FeedFetcherResult fetch(String feedUrl, boolean extractFeedUrlFromHtml, String lastModified, String eTag, public FeedFetcherResult fetch(String feedUrl, boolean extractFeedUrlFromHtml, String lastModified, String eTag,
Instant lastPublishedDate, String lastContentHash) throws FeedException, IOException, NotModifiedException { Instant lastPublishedDate, String lastContentHash) throws FeedParsingException, IOException, NotModifiedException,
TooManyRequestsException, SchemeNotAllowedException, HostNotAllowedException, NoFeedFoundException {
log.debug("Fetching feed {}", feedUrl); log.debug("Fetching feed {}", feedUrl);
HttpResult result = getter.get(HttpRequest.builder(feedUrl).lastModified(lastModified).eTag(eTag).build()); HttpResult result = getter.get(HttpRequest.builder(feedUrl).lastModified(lastModified).eTag(eTag).build());
@@ -49,17 +54,17 @@ public class FeedFetcher {
FeedParserResult parserResult; FeedParserResult parserResult;
try { try {
parserResult = parser.parse(result.getUrlAfterRedirect(), content); parserResult = parser.parse(result.getUrlAfterRedirect(), content);
} catch (FeedException e) { } catch (FeedParsingException e) {
if (extractFeedUrlFromHtml) { if (extractFeedUrlFromHtml) {
String extractedUrl = extractFeedUrl(urlProviders, feedUrl, new String(result.getContent(), StandardCharsets.UTF_8)); String extractedUrl = extractFeedUrl(urlProviders, feedUrl, new String(result.getContent(), StandardCharsets.UTF_8));
if (org.apache.commons.lang3.StringUtils.isNotBlank(extractedUrl)) { if (StringUtils.isNotBlank(extractedUrl)) {
feedUrl = extractedUrl; feedUrl = extractedUrl;
result = getter.get(HttpRequest.builder(extractedUrl).lastModified(lastModified).eTag(eTag).build()); result = getter.get(HttpRequest.builder(extractedUrl).lastModified(lastModified).eTag(eTag).build());
content = result.getContent(); content = result.getContent();
parserResult = parser.parse(result.getUrlAfterRedirect(), content); parserResult = parser.parse(result.getUrlAfterRedirect(), content);
} else { } else {
throw e; throw new NoFeedFoundException(e);
} }
} else { } else {
throw e; throw e;
@@ -107,4 +112,12 @@ public class FeedFetcher {
String contentHash, Duration validFor) { String contentHash, Duration validFor) {
} }
public static class NoFeedFoundException extends Exception {
private static final long serialVersionUID = 1L;
public NoFeedFoundException(Throwable cause) {
super("This URL does not point to an RSS feed or a website with an RSS feed.", cause);
}
}
} }

View File

@@ -11,6 +11,8 @@ import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import jakarta.inject.Singleton;
import com.codahale.metrics.Gauge; import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
@@ -20,7 +22,6 @@ import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.model.AbstractModel; import com.commafeed.backend.model.AbstractModel;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j

View File

@@ -2,77 +2,83 @@ package com.commafeed.backend.feed;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.InstantSource;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import com.commafeed.CommaFeedConfiguration;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
import org.apache.commons.lang3.ObjectUtils;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.CommaFeedConfiguration.FeedRefreshErrorHandling;
import com.google.common.primitives.Longs;
@Singleton @Singleton
public class FeedRefreshIntervalCalculator { public class FeedRefreshIntervalCalculator {
private final Duration refreshInterval; private final Duration interval;
private final boolean empiricalInterval; private final Duration maxInterval;
private final boolean empirical;
private final FeedRefreshErrorHandling errorHandling;
private final InstantSource instantSource;
public FeedRefreshIntervalCalculator(CommaFeedConfiguration config) { public FeedRefreshIntervalCalculator(CommaFeedConfiguration config, InstantSource instantSource) {
this.refreshInterval = config.feedRefresh().interval(); this.interval = config.feedRefresh().interval();
this.empiricalInterval = config.feedRefresh().intervalEmpirical(); this.maxInterval = config.feedRefresh().maxInterval();
this.empirical = config.feedRefresh().intervalEmpirical();
this.errorHandling = config.feedRefresh().errors();
this.instantSource = instantSource;
} }
public Instant onFetchSuccess(Instant publishedDate, Long averageEntryInterval) { public Instant onFetchSuccess(Instant publishedDate, Long averageEntryInterval, Duration validFor) {
Instant defaultRefreshInterval = getDefaultRefreshInterval(); Instant instant = empirical ? computeEmpiricalRefreshInterval(publishedDate, averageEntryInterval)
return empiricalInterval ? computeEmpiricalRefreshInterval(publishedDate, averageEntryInterval, defaultRefreshInterval) : instantSource.instant().plus(interval);
: defaultRefreshInterval; return constrainToBounds(ObjectUtils.max(instant, instantSource.instant().plus(validFor)));
} }
public Instant onFeedNotModified(Instant publishedDate, Long averageEntryInterval) { public Instant onFeedNotModified(Instant publishedDate, Long averageEntryInterval) {
return onFetchSuccess(publishedDate, averageEntryInterval); return onFetchSuccess(publishedDate, averageEntryInterval, Duration.ZERO);
}
public Instant onTooManyRequests(Instant retryAfter, int errorCount) {
return constrainToBounds(ObjectUtils.max(retryAfter, onFetchError(errorCount)));
} }
public Instant onFetchError(int errorCount) { public Instant onFetchError(int errorCount) {
int retriesBeforeDisable = 3; if (errorCount < errorHandling.retriesBeforeBackoff()) {
if (errorCount < retriesBeforeDisable || !empiricalInterval) { return constrainToBounds(instantSource.instant().plus(interval));
return getDefaultRefreshInterval();
} }
int disabledHours = Math.min(24 * 7, errorCount - retriesBeforeDisable + 1); Duration retryInterval = errorHandling.backoffInterval().multipliedBy(errorCount - errorHandling.retriesBeforeBackoff() + 1L);
return Instant.now().plus(Duration.ofHours(disabledHours)); return constrainToBounds(instantSource.instant().plus(retryInterval));
} }
private Instant getDefaultRefreshInterval() { private Instant computeEmpiricalRefreshInterval(Instant publishedDate, Long averageEntryInterval) {
return Instant.now().plus(refreshInterval); Instant now = instantSource.instant();
}
private Instant computeEmpiricalRefreshInterval(Instant publishedDate, Long averageEntryInterval, Instant defaultRefreshInterval) {
Instant now = Instant.now();
if (publishedDate == null) { if (publishedDate == null) {
// feed with no entries, recheck in 24 hours return now.plus(maxInterval);
return now.plus(Duration.ofHours(24)); }
} else if (ChronoUnit.DAYS.between(publishedDate, now) >= 30) {
// older than a month, recheck in 24 hours long daysSinceLastPublication = ChronoUnit.DAYS.between(publishedDate, now);
return now.plus(Duration.ofHours(24)); if (daysSinceLastPublication >= 30) {
} else if (ChronoUnit.DAYS.between(publishedDate, now) >= 14) { return now.plus(maxInterval);
// older than two weeks, recheck in 12 hours } else if (daysSinceLastPublication >= 14) {
return now.plus(Duration.ofHours(12)); return now.plus(maxInterval.dividedBy(2));
} else if (ChronoUnit.DAYS.between(publishedDate, now) >= 7) { } else if (daysSinceLastPublication >= 7) {
// older than a week, recheck in 6 hours return now.plus(maxInterval.dividedBy(4));
return now.plus(Duration.ofHours(6));
} else if (averageEntryInterval != null) { } else if (averageEntryInterval != null) {
// use average time between entries to decide when to refresh next, divided by factor // use average time between entries to decide when to refresh next, divided by factor
int factor = 2; int factor = 2;
long millis = Longs.constrainToRange(averageEntryInterval / factor, interval.toMillis(), maxInterval.dividedBy(4).toMillis());
// not more than 6 hours return now.plusMillis(millis);
long date = Math.min(now.plus(Duration.ofHours(6)).toEpochMilli(), now.toEpochMilli() + averageEntryInterval / factor);
// not less than default refresh interval
date = Math.max(defaultRefreshInterval.toEpochMilli(), date);
return Instant.ofEpochMilli(date);
} else { } else {
// unknown case, recheck in 24 hours // unknown case
return now.plus(Duration.ofHours(24)); return now.plus(maxInterval);
} }
} }
private Instant constrainToBounds(Instant instant) {
return ObjectUtils.max(ObjectUtils.min(instant, instantSource.instant().plus(maxInterval)), instantSource.instant().plus(interval));
}
} }

View File

@@ -10,6 +10,8 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
@@ -29,7 +31,6 @@ import com.commafeed.frontend.ws.WebSocketMessageBuilder;
import com.commafeed.frontend.ws.WebSocketSessions; import com.commafeed.frontend.ws.WebSocketSessions;
import com.google.common.util.concurrent.Striped; import com.google.common.util.concurrent.Striped;
import jakarta.inject.Singleton;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@@ -6,18 +6,19 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.apache.commons.lang3.ObjectUtils; import jakarta.inject.Singleton;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.codahale.metrics.Meter; import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.HttpGetter.NotModifiedException; import com.commafeed.backend.HttpGetter.NotModifiedException;
import com.commafeed.backend.HttpGetter.TooManyRequestsException;
import com.commafeed.backend.feed.FeedFetcher.FeedFetcherResult; import com.commafeed.backend.feed.FeedFetcher.FeedFetcherResult;
import com.commafeed.backend.feed.parser.FeedParserResult.Entry; import com.commafeed.backend.feed.parser.FeedParserResult.Entry;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import jakarta.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@@ -77,9 +78,8 @@ public class FeedRefreshWorker {
feed.setErrorCount(0); feed.setErrorCount(0);
feed.setMessage(null); feed.setMessage(null);
feed.setDisabledUntil(ObjectUtils.max( feed.setDisabledUntil(refreshIntervalCalculator.onFetchSuccess(result.feed().lastPublishedDate(),
refreshIntervalCalculator.onFetchSuccess(result.feed().lastPublishedDate(), result.feed().averageEntryInterval()), result.feed().averageEntryInterval(), result.validFor()));
Instant.now().plus(result.validFor())));
return new FeedRefreshWorkerResult(feed, entries); return new FeedRefreshWorkerResult(feed, entries);
} catch (NotModifiedException e) { } catch (NotModifiedException e) {
@@ -97,6 +97,14 @@ public class FeedRefreshWorker {
feed.setEtagHeader(e.getNewEtagHeader()); feed.setEtagHeader(e.getNewEtagHeader());
} }
return new FeedRefreshWorkerResult(feed, Collections.emptyList());
} catch (TooManyRequestsException e) {
log.debug("Too many requests : {}", feed.getUrl());
feed.setErrorCount(feed.getErrorCount() + 1);
feed.setMessage("Server indicated that we are sending too many requests");
feed.setDisabledUntil(refreshIntervalCalculator.onTooManyRequests(e.getRetryAfter(), feed.getErrorCount()));
return new FeedRefreshWorkerResult(feed, Collections.emptyList()); return new FeedRefreshWorkerResult(feed, Collections.emptyList());
} catch (Exception e) { } catch (Exception e) {
log.debug("unable to refresh feed {}", feed.getUrl(), e); log.debug("unable to refresh feed {}", feed.getUrl(), e);

View File

@@ -2,14 +2,14 @@ package com.commafeed.backend.feed.parser;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetDetector;
import com.ibm.icu.text.CharsetMatch; import com.ibm.icu.text.CharsetMatch;
import jakarta.inject.Singleton;
@Singleton @Singleton
class EncodingDetector { class EncodingDetector {

View File

@@ -1,16 +1,19 @@
package com.commafeed.backend.feed.parser; package com.commafeed.backend.feed.parser;
import java.util.Collection; import java.util.Collection;
import java.util.regex.Pattern;
import jakarta.inject.Singleton;
import org.ahocorasick.trie.Emit; import org.ahocorasick.trie.Emit;
import org.ahocorasick.trie.Trie; import org.ahocorasick.trie.Trie;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import jakarta.inject.Singleton;
@Singleton @Singleton
class FeedCleaner { class FeedCleaner {
private static final Pattern DOCTYPE_PATTERN = Pattern.compile("<!DOCTYPE[^>]*>", Pattern.CASE_INSENSITIVE);
public String trimInvalidXmlCharacters(String xml) { public String trimInvalidXmlCharacters(String xml) {
if (StringUtils.isBlank(xml)) { if (StringUtils.isBlank(xml)) {
return null; return null;
@@ -60,4 +63,8 @@ class FeedCleaner {
return sb.toString(); return sb.toString();
} }
public String removeDoctypeDeclarations(String xml) {
return DOCTYPE_PATTERN.matcher(xml).replaceAll("");
}
} }

View File

@@ -10,6 +10,8 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.inject.Singleton;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
@@ -35,10 +37,8 @@ import com.rometools.rome.feed.synd.SyndEntry;
import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.feed.synd.SyndFeed;
import com.rometools.rome.feed.synd.SyndLink; import com.rometools.rome.feed.synd.SyndLink;
import com.rometools.rome.feed.synd.SyndLinkImpl; import com.rometools.rome.feed.synd.SyndLinkImpl;
import com.rometools.rome.io.FeedException;
import com.rometools.rome.io.SyndFeedInput; import com.rometools.rome.io.SyndFeedInput;
import jakarta.inject.Singleton;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
/** /**
@@ -56,14 +56,15 @@ public class FeedParser {
private final EncodingDetector encodingDetector; private final EncodingDetector encodingDetector;
private final FeedCleaner feedCleaner; private final FeedCleaner feedCleaner;
public FeedParserResult parse(String feedUrl, byte[] xml) throws FeedException { public FeedParserResult parse(String feedUrl, byte[] xml) throws FeedParsingException {
try { try {
Charset encoding = encodingDetector.getEncoding(xml); Charset encoding = encodingDetector.getEncoding(xml);
String xmlString = feedCleaner.trimInvalidXmlCharacters(new String(xml, encoding)); String xmlString = feedCleaner.trimInvalidXmlCharacters(new String(xml, encoding));
if (xmlString == null) { if (xmlString == null) {
throw new FeedException("Input string is null for url " + feedUrl); throw new FeedParsingException("Input string is null for url " + feedUrl);
} }
xmlString = feedCleaner.replaceHtmlEntitiesWithNumericEntities(xmlString); xmlString = feedCleaner.replaceHtmlEntitiesWithNumericEntities(xmlString);
xmlString = feedCleaner.removeDoctypeDeclarations(xmlString);
InputSource source = new InputSource(new StringReader(xmlString)); InputSource source = new InputSource(new StringReader(xmlString));
SyndFeed feed = new SyndFeedInput().build(source); SyndFeed feed = new SyndFeedInput().build(source);
@@ -80,8 +81,10 @@ public class FeedParser {
Long averageEntryInterval = averageTimeBetweenEntries(entries); Long averageEntryInterval = averageTimeBetweenEntries(entries);
return new FeedParserResult(title, link, lastPublishedDate, averageEntryInterval, lastEntryDate, entries); return new FeedParserResult(title, link, lastPublishedDate, averageEntryInterval, lastEntryDate, entries);
} catch (FeedParsingException e) {
throw e;
} catch (Exception e) { } catch (Exception e) {
throw new FeedException(String.format("Could not parse feed from %s : %s", feedUrl, e.getMessage()), e); throw new FeedParsingException(String.format("Could not parse feed from %s : %s", feedUrl, e.getMessage()), e);
} }
} }
@@ -267,4 +270,16 @@ public class FeedParser {
return (long) stats.getMean(); return (long) stats.getMean();
} }
public static class FeedParsingException extends Exception {
private static final long serialVersionUID = 1L;
public FeedParsingException(String message) {
super(message);
}
public FeedParsingException(String message, Throwable cause) {
super(message, cause);
}
}
} }

View File

@@ -7,6 +7,7 @@ import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass; import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.TableGenerator; import jakarta.persistence.TableGenerator;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;

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