Compare commits

...

520 Commits

Author SHA1 Message Date
Athou
f7a944a78a release 5.11.1 2025-09-22 03:53:07 +02:00
Athou
7f53531489 filter cannot be converted to lowercase (#1899) 2025-09-22 03:47:06 +02:00
renovate[bot]
8386c2889f chore(deps): update dependency vite to ^7.1.6 2025-09-18 05:15:43 +00:00
Jérémie Panzer
13d2332984 Merge pull request #1898 from Athou/renovate/org.projectlombok-lombok-1.18.x
fix(deps): update dependency org.projectlombok:lombok to v1.18.42
2025-09-18 07:14:44 +02:00
renovate[bot]
ce496c205a fix(deps): update dependency org.projectlombok:lombok to v1.18.42 2025-09-18 02:32:36 +00:00
renovate[bot]
66547661b5 fix(deps): update quarkus.version to v3.26.4 2025-09-17 18:53:21 +00:00
renovate[bot]
8568a29461 fix(deps): update dependency @fontsource/open-sans to ^5.2.7 2025-09-17 09:44:18 +00:00
renovate[bot]
5d42229aec chore(deps): update dependency @vitejs/plugin-react to ^5.0.3 2025-09-17 08:49:14 +00:00
Athou
ad8c928cf1 run CI with java 25 2025-09-16 19:09:40 +02:00
renovate[bot]
cc90883342 chore(deps): update graalvm/setup-graalvm digest to aba6a07 2025-09-16 16:45:34 +00:00
renovate[bot]
a4071da5de fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.37 2025-09-16 05:34:48 +00:00
renovate[bot]
c65dbf978b chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to 0d2e27e 2025-09-16 03:56:11 +00:00
renovate[bot]
c4ea804fee chore(deps): lock file maintenance 2025-09-15 02:03:39 +00:00
renovate[bot]
f71720c809 fix(deps): update dependency axios to ^1.12.2 2025-09-14 18:13:58 +00:00
renovate[bot]
03ba601491 fix(deps): update dependency axios to ^1.12.1 2025-09-14 01:35:06 +00:00
renovate[bot]
bdee3fc1b5 chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.4 2025-09-13 17:48:07 +00:00
renovate[bot]
2e472fa90d chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.4 2025-09-13 16:06:11 +00:00
Jérémie Panzer
aad7e896f2 Merge pull request #1897 from Athou/renovate/jsdom-27.x
chore(deps): update dependency jsdom to v27
2025-09-13 10:43:45 +02:00
renovate[bot]
2478fc2967 chore(deps): update dependency jsdom to v27 2025-09-13 07:06:06 +00:00
Jérémie Panzer
2db96c968d Merge pull request #1896 from Athou/renovate/linguijs-monorepo
fix(deps): update linguijs monorepo to ^5.5.0 (minor)
2025-09-13 09:05:54 +02:00
Jérémie Panzer
9bc1a69ace Merge pull request #1895 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.9.1
2025-09-13 09:05:46 +02:00
renovate[bot]
cca74e9e54 fix(deps): update linguijs monorepo to ^5.5.0 2025-09-13 02:57:55 +00:00
renovate[bot]
8185411071 fix(deps): update dependency react-router-dom to ^7.9.1 2025-09-13 02:57:46 +00:00
renovate[bot]
c89addab2e chore(deps): update dependency @types/react to ^19.1.13 2025-09-13 02:57:32 +00:00
Jérémie Panzer
6c617bf9e7 Merge pull request #1894 from Athou/renovate/axios-1.x
fix(deps): update dependency axios to ^1.12.0
2025-09-12 06:31:12 +02:00
renovate[bot]
5847e340bf fix(deps): update dependency axios to ^1.12.0 2025-09-12 03:56:31 +00:00
renovate[bot]
5a5fd8f425 chore(deps): update github/codeql-action digest to 192325c 2025-09-10 21:07:58 +00:00
renovate[bot]
d6283e326d fix(deps): update mantine monorepo to ^8.3.1 2025-09-10 17:43:17 +00:00
renovate[bot]
c63deb70dd chore(deps): update dependency @biomejs/biome to v2.2.4 2025-09-10 14:34:03 +00:00
renovate[bot]
c071781099 fix(deps): update quarkus.version to v3.26.3 2025-09-10 06:47:48 +00:00
renovate[bot]
0820b4b70a chore(deps): update github/codeql-action digest to d3678e2 2025-09-09 11:57:33 +00:00
Jérémie Panzer
ac42d11251 Merge pull request #1893 from Athou/renovate/debian-13.x
chore(deps): update debian docker tag to v13.1
2025-09-09 05:57:31 +02:00
renovate[bot]
324248ff1e chore(deps): update debian docker tag to v13.1 2025-09-09 02:03:08 +00:00
Jérémie Panzer
f32e83d43b Merge pull request #1891 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^8.3.0 (minor)
2025-09-08 21:50:19 +02:00
renovate[bot]
3820aaed21 fix(deps): update mantine monorepo to ^8.3.0 2025-09-08 14:18:59 +00:00
renovate[bot]
a45ef79c6f chore(deps): update dependency vite to ^7.1.5 2025-09-08 10:15:30 +00:00
renovate[bot]
9b9266a6c9 chore(deps): lock file maintenance 2025-09-08 02:40:28 +00:00
renovate[bot]
06e22030c3 chore(deps): update dependency @biomejs/biome to v2.2.3 2025-09-05 16:49:16 +00:00
renovate[bot]
ca146c977b chore(deps): update github/codeql-action digest to f1f6e5f 2025-09-05 14:15:06 +00:00
renovate[bot]
6a96a3617f fix(deps): update dependency org.projectlombok:lombok to v1.18.40 2025-09-05 03:01:33 +00:00
Jérémie Panzer
6dd6e05e0c Merge pull request #1890 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.6.0
2025-09-04 07:19:20 +02:00
renovate[bot]
1fb33d51d3 chore(deps): update dependency npm to v11.6.0 2025-09-03 21:33:32 +00:00
renovate[bot]
4841f2d7f6 fix(deps): update quarkus.version to v3.26.2 2025-09-03 17:54:08 +00:00
Athou
ad388ae056 remove search limit (#1887) 2025-09-03 07:45:15 +02:00
Jérémie Panzer
a80769fae3 Merge pull request #1889 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.9.0
2025-09-03 07:21:04 +02:00
renovate[bot]
b34c6f4c34 fix(deps): update dependency @reduxjs/toolkit to ^2.9.0 2025-09-03 04:53:28 +00:00
renovate[bot]
d6d084fbd1 chore(deps): update ncipollo/release-action digest to b7eabc9 2025-09-02 20:40:56 +00:00
renovate[bot]
1fca44c0da chore(deps): update graalvm/setup-graalvm digest to 7a1da54 2025-09-02 17:05:28 +00:00
renovate[bot]
8bf1d0b776 chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to ffcc837 2025-09-02 04:55:08 +00:00
renovate[bot]
484412514f chore(deps): update ncipollo/release-action digest to 1c89adf 2025-09-01 18:32:51 +00:00
renovate[bot]
6987449a7e chore(deps): update github/codeql-action digest to 2d92b76 2025-09-01 16:24:31 +00:00
renovate[bot]
18dac92fc1 chore(deps): update dependency vite to ^7.1.4 2025-09-01 12:34:29 +00:00
renovate[bot]
54774fcfe5 fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.36 2025-08-31 20:34:06 +00:00
Athou
b431229273 sslcontext-kickstart was renamed ayza 2025-08-31 21:27:23 +02:00
renovate[bot]
658dde158e fix(deps): update mantine monorepo to ^8.2.8 2025-08-31 16:33:54 +00:00
renovate[bot]
ced3ada6fc chore(deps): update dependency com.puppycrawl.tools:checkstyle to v11.0.1 2025-08-31 14:22:18 +00:00
renovate[bot]
0db236639b fix(deps): update quarkus.version to v3.26.1 2025-08-30 05:59:50 +00:00
renovate[bot]
036ce7f94f fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.35 2025-08-29 20:09:03 +00:00
renovate[bot]
68c887ffe0 fix(deps): update dependency dayjs to ^1.11.17 2025-08-29 19:04:58 +00:00
renovate[bot]
e96da49d0a chore(deps): update react monorepo 2025-08-29 15:51:22 +00:00
Jérémie Panzer
794684bc4e Merge pull request #1884 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.19.0
2025-08-29 17:31:29 +02:00
Jérémie Panzer
dd944c5293 Merge pull request #1883 from Athou/renovate/org.sonarsource.scanner.maven-sonar-maven-plugin-5.x
chore(deps): update dependency org.sonarsource.scanner.maven:sonar-maven-plugin to v5.2.0.4988
2025-08-29 17:31:22 +02:00
renovate[bot]
be878454a9 chore(deps): update node.js to v22.19.0 2025-08-29 14:22:59 +00:00
renovate[bot]
e567f81046 chore(deps): update dependency org.sonarsource.scanner.maven:sonar-maven-plugin to v5.2.0.4988 2025-08-29 14:22:56 +00:00
Jérémie Panzer
6164ca5f91 Merge pull request #1882 from Athou/renovate/quarkus.version
chore(deps): update dependency io.quarkus.platform:quarkus-maven-plugin to v3.26.0
2025-08-28 13:54:04 +02:00
renovate[bot]
655332e3fd chore(deps): update dependency io.quarkus.platform:quarkus-maven-plugin to v3.26.0 2025-08-28 11:24:18 +00:00
renovate[bot]
7e300fea87 fix(deps): update dependency dayjs to ^1.11.15 2025-08-28 06:57:43 +00:00
renovate[bot]
cea3e0aba8 chore(deps): update dependency @vitejs/plugin-react to ^5.0.2 2025-08-28 05:13:54 +00:00
renovate[bot]
459e270561 chore(deps): update dependency @types/react to ^19.1.12 2025-08-27 18:09:22 +00:00
renovate[bot]
cba660e785 fix(deps): update dependency dayjs to ^1.11.14 2025-08-27 11:32:31 +00:00
Jérémie Panzer
758301a39d Merge pull request #1881 from Athou/renovate/patch-react-monorepo
chore(deps): update dependency @types/react-dom to ^19.1.8
2025-08-27 07:37:09 +02:00
renovate[bot]
a8d0bae16e chore(deps): update dependency @types/react-dom to ^19.1.8 2025-08-26 12:15:08 +00:00
renovate[bot]
583cc39849 chore(deps): update dependency vite-plugin-checker to ^0.10.3 2025-08-25 13:09:11 +00:00
renovate[bot]
3585bd3d2d chore(deps): lock file maintenance 2025-08-25 05:13:37 +00:00
renovate[bot]
3a895b6418 fix(deps): update dependency org.jsoup:jsoup to v1.21.2 2025-08-25 00:25:27 +00:00
renovate[bot]
bb67733723 fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.34 2025-08-24 22:28:11 +00:00
renovate[bot]
f380fd553f chore(deps): update dependency @biomejs/biome to v2.2.2 2025-08-23 13:07:39 +00:00
Jérémie Panzer
d22ef12adf Merge pull request #1880 from Athou/renovate/actions-upload-pages-artifact-4.x
chore(deps): update actions/upload-pages-artifact action to v4
2025-08-23 07:58:22 +02:00
renovate[bot]
eaec088348 fix(deps): update mantine monorepo to ^8.2.7 2025-08-23 01:33:04 +00:00
renovate[bot]
fa1d0b9151 fix(deps): update dependency react-router-dom to ^7.8.2 2025-08-22 21:23:18 +00:00
renovate[bot]
c0a418b8b1 chore(deps): update actions/upload-pages-artifact action to v4 2025-08-22 17:46:43 +00:00
renovate[bot]
1a4f633a28 chore(deps): update dependency @types/react to ^19.1.11 2025-08-22 17:46:33 +00:00
renovate[bot]
c92ae40db6 chore(deps): update github/codeql-action digest to 3c3833e 2025-08-21 12:52:05 +00:00
Jérémie Panzer
0b42bea600 Merge pull request #1879 from Athou/renovate/actions-setup-java-5.x
chore(deps): update actions/setup-java action to v5
2025-08-21 14:49:28 +02:00
renovate[bot]
d8565cb3d3 chore(deps): update actions/setup-java action to v5 2025-08-21 05:06:59 +00:00
Jérémie Panzer
f68798c10e Merge pull request #1878 from Athou/renovate/testing-library-monorepo
chore(deps): update dependency @testing-library/jest-dom to ^6.8.0
2025-08-21 07:06:32 +02:00
renovate[bot]
a2ab927433 chore(deps): update dependency @testing-library/jest-dom to ^6.8.0 2025-08-20 22:07:26 +00:00
renovate[bot]
c7eae71c56 fix(deps): update quarkus.version to v3.25.4 2025-08-20 22:07:14 +00:00
renovate[bot]
c3784c2606 chore(deps): update dependency vite to ^7.1.3 2025-08-19 08:49:58 +00:00
renovate[bot]
60fe263b53 chore(deps): update dependency @vitejs/plugin-react to ^5.0.1 2025-08-19 05:51:51 +00:00
renovate[bot]
aaa0cfd0c8 chore(deps): update github/codeql-action digest to 96f518a 2025-08-18 13:51:18 +00:00
renovate[bot]
a209b2774a chore(deps): lock file maintenance 2025-08-18 00:24:47 +00:00
renovate[bot]
84d67b6166 fix(deps): update mantine monorepo to ^8.2.5 2025-08-16 16:45:14 +00:00
renovate[bot]
a7a215e6c7 fix(deps): update dependency react-router-dom to ^7.8.1 2025-08-15 21:28:14 +00:00
Athou
8686fe4e97 add support for NoRouteToHostException (fixes #1876) 2025-08-14 20:41:27 +02:00
Jérémie Panzer
afe2e8f95b Merge pull request #1877 from Athou/renovate/biomejs-biome-2.x
chore(deps): update dependency @biomejs/biome to v2.2.0
2025-08-14 14:49:32 +02:00
renovate[bot]
f580226c27 chore(deps): update dependency @biomejs/biome to v2.2.0 2025-08-14 12:49:28 +00:00
renovate[bot]
e93db46e0a chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to a0585f5 2025-08-14 11:41:28 +00:00
renovate[bot]
daea4b7f84 chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to e8efb84 2025-08-14 05:08:35 +00:00
Jérémie Panzer
eb942b07b1 Merge pull request #1875 from Athou/renovate/testing-library-monorepo
chore(deps): update dependency @testing-library/jest-dom to ^6.7.0
2025-08-14 07:08:01 +02:00
renovate[bot]
804ca38db7 fix(deps): update quarkus.version to v3.25.3 (#1874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-14 00:36:35 +00:00
renovate[bot]
7278c0beae chore(deps): update dependency @testing-library/jest-dom to ^6.7.0 2025-08-13 20:13:24 +00:00
renovate[bot]
096e3a0f5f chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to d1bc86c 2025-08-13 20:13:05 +00:00
renovate[bot]
5090c15f20 chore(deps): update ibm-semeru-runtimes:open-21.0.8_9-jre docker digest to cb42f22 2025-08-13 05:50:29 +00:00
Jérémie Panzer
cb7e74fc21 Merge pull request #1873 from Athou/renovate/debian-13.x
chore(deps): update debian docker tag to v13
2025-08-13 07:50:02 +02:00
renovate[bot]
ff90041ed4 chore(deps): update debian docker tag to v13 2025-08-13 03:52:10 +00:00
renovate[bot]
f8fbe1844a chore(deps): update dependency vite to ^7.1.2 2025-08-12 11:31:12 +00:00
renovate[bot]
1902172a04 chore(deps): update github/codeql-action digest to df55935 2025-08-12 10:50:16 +00:00
renovate[bot]
2df384b847 chore(deps): update dependency @types/react to ^19.1.10 2025-08-11 20:14:30 +00:00
Jérémie Panzer
65bb35b4de Merge pull request #1871 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2025-08-11 22:13:56 +02:00
Athou
97516100f5 fix npm ci after renovate lock file maintenance 2025-08-11 21:41:57 +02:00
renovate[bot]
009ec7a59b chore(deps): lock file maintenance 2025-08-11 18:37:47 +00:00
Jérémie Panzer
02890c2b69 Merge pull request #1872 from Athou/renovate/actions-checkout-5.x
chore(deps): update actions/checkout action to v5
2025-08-11 20:36:39 +02:00
renovate[bot]
0f690bf00e chore(deps): update actions/checkout action to v5 2025-08-11 17:14:57 +00:00
Athou
cfe427b34c babel-plugin-macros is not needed anymore since we now use @lingui/babel-plugin-lingui-macro 2025-08-11 14:47:48 +02:00
renovate[bot]
a44c76cdc3 chore(deps): update actions/checkout digest to 08eba0b 2025-08-11 12:14:42 +00:00
renovate[bot]
730bde3d0d fix(deps): update linguijs monorepo to ^5.4.1 2025-08-11 09:55:32 +00:00
renovate[bot]
aa006fe22a fix(deps): update quarkus.version to v3.25.2 2025-08-08 21:31:29 +00:00
renovate[bot]
ca77090ecd chore(deps): update github/codeql-action digest to 76621b6 2025-08-08 12:26:20 +00:00
renovate[bot]
5619d1a4c5 chore(deps): update dependency vite to ^7.1.1 2025-08-08 05:13:13 +00:00
Jérémie Panzer
b7c80c397d Merge pull request #1870 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.8.0
2025-08-07 23:47:12 +02:00
renovate[bot]
d1e7cd2f85 fix(deps): update dependency react-router-dom to ^7.8.0 2025-08-07 21:14:23 +00:00
renovate[bot]
7da7aeb796 chore(deps): update dependency @biomejs/biome to v2.1.4 2025-08-07 16:32:14 +00:00
Jérémie Panzer
26b46166aa Merge pull request #1869 from Athou/renovate/com.puppycrawl.tools-checkstyle-11.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v11
2025-08-07 18:31:21 +02:00
renovate[bot]
6d5eb51a5d fix(deps): update mantine monorepo to ^8.2.4 2025-08-07 11:33:53 +00:00
renovate[bot]
917b6b318f chore(deps): update dependency com.puppycrawl.tools:checkstyle to v11 2025-08-07 11:33:12 +00:00
Jérémie Panzer
bfd95687b8 Merge pull request #1868 from Athou/renovate/vitejs-plugin-react-5.x
chore(deps): update dependency @vitejs/plugin-react to v5
2025-08-07 13:32:43 +02:00
Jérémie Panzer
4198ee1af1 Merge pull request #1867 from Athou/renovate/vite-7.x
chore(deps): update dependency vite to ^7.1.0
2025-08-07 13:32:30 +02:00
renovate[bot]
e9b1280ae6 chore(deps): update dependency @vitejs/plugin-react to v5 2025-08-07 09:49:36 +00:00
renovate[bot]
3c42831db0 chore(deps): update dependency vite to ^7.1.0 2025-08-07 09:49:27 +00:00
renovate[bot]
b8482006b9 fix(deps): update quarkus.version to v3.25.1 2025-08-07 00:23:05 +00:00
Athou
53f0c33c1d release 5.11.0 2025-08-06 22:51:34 +02:00
Jérémie Panzer
563516901e Merge pull request #1866 from Athou/renovate/major-github-artifact-actions
chore(deps): update actions/download-artifact action to v5
2025-08-06 10:41:11 +02:00
renovate[bot]
73b40fd8b7 chore(deps): update actions/download-artifact action to v5 2025-08-06 03:42:33 +00:00
renovate[bot]
08224a8486 fix(deps): update mantine monorepo to ^8.2.3 2025-08-06 03:42:29 +00:00
Jérémie Panzer
993f3d3aa8 Merge pull request #1865 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2025-08-04 23:07:56 +02:00
renovate[bot]
3a975de136 chore(deps): lock file maintenance 2025-08-04 22:12:32 +02:00
renovate[bot]
48b5195798 chore(deps): update docker/login-action digest to 184bdaa 2025-08-04 16:28:14 +00:00
Jérémie Panzer
8eb34c7539 Merge pull request #1864 from Athou/renovate/linguijs-monorepo
fix(deps): update linguijs monorepo to ^5.4.0 (minor)
2025-08-01 17:41:33 +02:00
renovate[bot]
d75d7a9209 fix(deps): update linguijs monorepo to ^5.4.0 2025-08-01 14:49:38 +00:00
Jérémie Panzer
ddf851f1eb Merge pull request #1863 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.18.0
2025-08-01 07:14:50 +02:00
renovate[bot]
889dd00c23 chore(deps): update node.js to v22.18.0 2025-08-01 03:24:10 +00:00
Jérémie Panzer
c5ea2a1aa1 Merge pull request #1862 from Athou/renovate/typescript-5.x
chore(deps): update dependency typescript to ^5.9.2
2025-08-01 00:00:50 +02:00
renovate[bot]
1489aff78e chore(deps): update dependency typescript to ^5.9.2 2025-07-31 21:37:49 +00:00
renovate[bot]
640296d42f chore(deps): update dependency npm to v11.5.2 2025-07-30 21:41:05 +00:00
renovate[bot]
3b12b2a5f6 fix(deps): update mantine monorepo to ^8.2.2 2025-07-30 17:02:31 +00:00
Jérémie Panzer
d5c41a5167 Merge pull request #1861 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.25.0 (minor)
2025-07-30 14:11:33 +02:00
Athou
58bf86d25d remove warnings 2025-07-30 13:30:27 +02:00
renovate[bot]
d73034d6d9 fix(deps): update quarkus.version to v3.25.0 2025-07-30 10:46:35 +00:00
renovate[bot]
151a613dcc chore(deps): update github/codeql-action digest to 51f7732 2025-07-30 00:24:09 +00:00
renovate[bot]
4bb741a42f chore(deps): update dependency @biomejs/biome to v2.1.3 2025-07-29 14:31:22 +00:00
renovate[bot]
cc9c8d3db3 chore(deps): update dependency vite-plugin-checker to ^0.10.2 2025-07-29 13:47:55 +00:00
Athou
c3d4831550 fix sonar warnings 2025-07-29 15:28:52 +02:00
renovate[bot]
31e385fbfb chore(deps): update react monorepo 2025-07-29 10:41:04 +00:00
Athou
a8c47d717c remove unused google analytics support 2025-07-29 12:35:53 +02:00
Athou
9a25157d3f make sonar scan client files too 2025-07-29 10:28:22 +02:00
renovate[bot]
9176e0f7b7 fix(deps): update react monorepo to ^19.1.1 2025-07-28 20:24:38 +00:00
Athou
ff7aa890a6 fix build warning 2025-07-28 19:55:36 +02:00
Jérémie Panzer
03312c1592 Merge pull request #1855 from Athou/renovate/patch-testing-library-monorepo
chore(deps): update dependency @testing-library/jest-dom to ^6.6.4
2025-07-28 09:38:33 +02:00
renovate[bot]
9d1ec2c636 chore(deps): update dependency @testing-library/jest-dom to ^6.6.4 2025-07-28 06:35:05 +00:00
Athou
c49c31a44e let quarkus generate the documentation 2025-07-28 08:33:34 +02:00
renovate[bot]
947c1f562f chore(deps): lock file maintenance 2025-07-28 03:57:26 +00:00
Jérémie Panzer
2d1dbb6988 Merge pull request #1857 from aniol/patch-2
Update messages.po
2025-07-27 17:45:19 +02:00
Aniol
622e46ff67 Update messages.po 2025-07-27 11:46:17 +02:00
renovate[bot]
4ff45a65c3 chore(deps): update ibm-semeru-runtimes docker tag to open-21.0.8_9-jre 2025-07-25 22:54:42 +00:00
Jérémie Panzer
a62676061b Merge pull request #1853 from Athou/renovate/patch-react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.7.1
2025-07-25 11:49:59 +02:00
renovate[bot]
11d77d2265 fix(deps): update dependency react-router-dom to ^7.7.1 2025-07-25 11:21:11 +02:00
Jérémie Panzer
1e7d44b250 Merge pull request #1852 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.5.1
2025-07-24 23:01:56 +02:00
renovate[bot]
ffd86c6d8c chore(deps): update dependency npm to v11.5.1 2025-07-24 20:10:26 +00:00
renovate[bot]
a566c9460d chore(deps): update dependency vite to ^7.0.6 2025-07-24 06:37:44 +00:00
renovate[bot]
24edae3d58 fix(deps): update quarkus.version to v3.24.5 2025-07-23 22:10:27 +00:00
renovate[bot]
97876344c4 chore(deps): update github/codeql-action digest to 4e828ff 2025-07-23 18:03:54 +00:00
Jérémie Panzer
95dbeb9a47 Merge pull request #1851 from Athou/renovate/axios-1.x
fix(deps): update dependency axios to ^1.11.0
2025-07-23 20:03:14 +02:00
renovate[bot]
3fc64859b1 fix(deps): update dependency axios to ^1.11.0 2025-07-23 12:47:09 +00:00
renovate[bot]
896fe3b5b2 chore(deps): update graalvm/setup-graalvm digest to 7f488cf 2025-07-23 12:46:47 +00:00
Jérémie Panzer
85404781a3 Merge pull request #1850 from Athou/renovate/debian-12.11
chore(deps): update debian:12.11 docker digest to b6507e3
2025-07-22 11:39:19 +02:00
renovate[bot]
efe2abc86e chore(deps): update debian:12.11 docker digest to b6507e3 2025-07-22 07:58:53 +00:00
renovate[bot]
b70b7a0b40 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.46.1 2025-07-21 22:55:20 +00:00
Athou
865c80f87b add more integration tests 2025-07-21 20:21:20 +02:00
Athou
23a91aab12 providers can now return multiple urls 2025-07-21 16:57:10 +02:00
Athou
085a3cbb50 unwanted entries are already filtered at the dao level 2025-07-21 16:57:10 +02:00
Athou
fb9d875c31 extract image proxying from FeedUtils 2025-07-21 16:57:10 +02:00
Athou
5ee15c6f68 we no longer need to generate OPML 1.1 files 2025-07-21 16:57:10 +02:00
Athou
9853205849 remove workaround for #39 as it's not valid rdf 0.9 according to the spec 2025-07-21 16:57:10 +02:00
Athou
2c9ce7e8fc remove workaround for #140 that is no longer needed 2025-07-21 16:57:10 +02:00
Jérémie Panzer
9753ae60e2 Merge pull request #1848 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^8.2.1 (minor)
2025-07-21 16:57:04 +02:00
renovate[bot]
bd66f1e682 fix(deps): update mantine monorepo to ^8.2.1 2025-07-21 14:20:33 +00:00
renovate[bot]
ed6a45c119 chore(deps): update dependency vite-plugin-checker to ^0.10.1 2025-07-21 14:20:25 +00:00
renovate[bot]
8f53ce27fc chore(deps): update github/codeql-action digest to d6bbdef 2025-07-21 12:47:08 +00:00
Athou
f7ae2e6689 add even more integration tests 2025-07-21 11:50:10 +02:00
Jérémie Panzer
c6cc47192c Merge pull request #1847 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-2.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.46.0
2025-07-21 07:39:56 +02:00
renovate[bot]
1c447fe369 chore(deps): lock file maintenance 2025-07-21 03:02:54 +00:00
renovate[bot]
6b5c92db48 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.46.0 2025-07-20 22:32:09 +00:00
Athou
427e020d27 add category integration tests 2025-07-20 23:20:30 +02:00
Athou
18084995b2 fix integration tests code coverage not taken into account 2025-07-20 09:58:01 +02:00
Athou
f894fdf564 extract url utils from FeedUtils 2025-07-20 07:26:43 +02:00
Athou
0b0a964a90 enums are now supported by openapi, allowableValues is no longer required 2025-07-20 01:08:27 +02:00
Athou
d6df979d0d remove more warnings 2025-07-19 23:47:22 +02:00
renovate[bot]
c366c37afe fix(deps): update dependency tss-react to ^4.9.19 2025-07-19 10:06:55 +00:00
Jérémie Panzer
20cbd239b2 Merge pull request #1846 from Athou/alert-autofix-26
fix for code scanning alert no. 26: Workflow does not contain permissions
2025-07-19 12:06:00 +02:00
Jérémie Panzer
a9c7595ee7 Potential fix for code scanning alert no. 26: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-07-19 11:58:48 +02:00
Athou
3f09e3ca64 remove warnings 2025-07-19 11:33:38 +02:00
Jérémie Panzer
ed42db7a0d Merge pull request #1845 from Athou/renovate/pin-dependencies
chore(deps): pin actions/setup-java action to c5195ef
2025-07-19 11:14:58 +02:00
renovate[bot]
c85daeb46e chore(deps): pin actions/setup-java action to c5195ef 2025-07-19 09:13:57 +00:00
Athou
3f2b93f1f8 run sonarqube as part of the CI 2025-07-19 11:13:10 +02:00
Athou
78d2e66c56 generate code coverage 2025-07-19 09:19:14 +02:00
Athou
0f2de651ff remove more warnings 2025-07-18 23:07:40 +02:00
Jérémie Panzer
2eb7c7237e Merge pull request #1844 from Athou/sonar-warnings
fix sonar warnings
2025-07-18 22:06:04 +02:00
Athou
3b8f62ff11 fix sonar warnings 2025-07-18 21:49:00 +02:00
Athou
f8bf9370de update SECURITY.md 2025-07-18 09:29:31 +02:00
Jérémie Panzer
30cd0ec089 Merge pull request #1843 from Athou/renovate/vitejs-plugin-react-4.x
chore(deps): update dependency @vitejs/plugin-react to ^4.7.0
2025-07-18 09:04:59 +02:00
Athou
e984be9289 update actions 2025-07-18 08:56:35 +02:00
Jérémie Panzer
8069787754 Merge pull request #1842 from Athou/renovate/pin-dependencies
chore(deps): pin github/codeql-action action to 181d5ee
2025-07-18 08:54:15 +02:00
renovate[bot]
343e442dff chore(deps): update dependency @vitejs/plugin-react to ^4.7.0 2025-07-18 06:35:48 +00:00
renovate[bot]
313ccdeae9 chore(deps): pin github/codeql-action action to 181d5ee 2025-07-18 06:35:21 +00:00
Jérémie Panzer
fdec8ebfd3 Create scorecard.yml 2025-07-18 08:34:40 +02:00
renovate[bot]
efddd86263 fix(deps): update quarkus.version to v3.24.4 2025-07-17 19:53:26 +00:00
renovate[bot]
7d18bde40b chore(deps): update dependency @biomejs/biome to v2.1.2 2025-07-17 15:58:18 +00:00
renovate[bot]
7fee410be4 chore(deps): update dependency vite to ^7.0.5 2025-07-17 05:32:53 +00:00
Jérémie Panzer
ebc2516a53 Merge pull request #1841 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.7.0
2025-07-17 07:31:48 +02:00
renovate[bot]
ade4d1d782 fix(deps): update dependency react-router-dom to ^7.7.0 2025-07-16 20:58:30 +00:00
renovate[bot]
07f7a288d2 chore(deps): update ibm-semeru-runtimes:open-21.0.7_6-jre docker digest to a51c2a5 2025-07-16 16:43:24 +00:00
Jérémie Panzer
380ed16caf Merge pull request #1840 from Athou/renovate/node-22.17.x
chore(deps): update node.js to v22.17.1
2025-07-16 14:05:42 +02:00
renovate[bot]
db654a10d1 chore(deps): update node.js to v22.17.1 2025-07-16 06:49:48 +00:00
renovate[bot]
2cf84d35cd chore(deps): update dependency maven to v3.9.11 2025-07-16 05:03:29 +00:00
renovate[bot]
a4eac86913 chore(deps): update ibm-semeru-runtimes:open-21.0.7_6-jre docker digest to 7b6e1ee 2025-07-16 03:04:56 +00:00
renovate[bot]
5168be45a8 chore(deps): lock file maintenance 2025-07-14 00:41:04 +00:00
Athou
163ab43da3 lingui documentation mentions that their plugin should be declared before the react compiler plugin 2025-07-11 16:56:06 +02:00
Jérémie Panzer
e5fa517270 Merge pull request #1830 from Athou/renovate/vite-7.x
chore(deps): update dependency vite to v7
2025-07-11 16:15:48 +02:00
renovate[bot]
b8b8ea5ce2 chore(deps): update dependency vite to v7 2025-07-11 13:50:21 +00:00
renovate[bot]
991b147af5 fix(deps): update linguijs monorepo to ^5.3.3 2025-07-11 13:25:53 +00:00
renovate[bot]
ecff62d0fa fix(deps): update quarkus.version to v3.24.3 2025-07-09 17:05:02 +00:00
renovate[bot]
cdec4c0879 chore(deps): update dependency @biomejs/biome to v2.1.1 2025-07-08 17:03:55 +00:00
Jérémie Panzer
e8085ac4cf Merge pull request #1838 from Athou/renovate/biomejs-biome-2.x
chore(deps): update dependency @biomejs/biome to v2.1.0
2025-07-08 14:00:21 +02:00
renovate[bot]
327062112b chore(deps): update dependency @biomejs/biome to v2.1.0 2025-07-08 11:36:19 +00:00
Jérémie Panzer
6dfc23c33a Merge pull request #1837 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-2.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.45.0
2025-07-08 07:16:20 +02:00
renovate[bot]
a601b0ab35 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.45.0 2025-07-08 03:07:19 +00:00
Jérémie Panzer
a48c8ca87a Merge pull request #1836 from Athou/renovate/vite-plugin-checker-0.x
chore(deps): update dependency vite-plugin-checker to ^0.10.0
2025-07-07 22:25:17 +02:00
renovate[bot]
b59e64a3d1 chore(deps): update dependency vite-plugin-checker to ^0.10.0 2025-07-07 16:57:19 +00:00
renovate[bot]
5fc62dd06d fix(deps): update mantine monorepo to ^8.1.3 2025-07-07 16:57:10 +00:00
renovate[bot]
d81a0cae91 chore(deps): lock file maintenance 2025-07-07 01:52:36 +00:00
Jérémie Panzer
50e31c6b69 Merge pull request #1834 from Athou/renovate/patch-quarkus.version
fix(deps): update quarkus.version to v3.24.2 (patch)
2025-07-02 22:36:15 +02:00
Jérémie Panzer
92d3d88127 Merge pull request #1833 from Athou/renovate/ibm-semeru-runtimes-open-21.0.7_6-jre
chore(deps): update ibm-semeru-runtimes:open-21.0.7_6-jre docker digest to 17a67d7
2025-07-02 22:36:09 +02:00
renovate[bot]
517fdb2095 fix(deps): update quarkus.version to v3.24.2 2025-07-02 11:42:24 +00:00
renovate[bot]
d16ebb02b4 chore(deps): update ibm-semeru-runtimes:open-21.0.7_6-jre docker digest to 17a67d7 2025-07-02 11:42:21 +00:00
renovate[bot]
a5c64c8b7b chore(deps): update debian:12.11 docker digest to d42b86d 2025-07-01 08:39:24 +00:00
renovate[bot]
5287a93484 chore(deps): update dependency io.quarkiverse.playwright:quarkus-playwright to v2.1.3 2025-06-30 15:45:38 +00:00
renovate[bot]
06e84d9032 chore(deps): lock file maintenance 2025-06-30 06:50:33 +00:00
Jérémie Panzer
3a63dd032a Merge pull request #1832 from Athou/renovate/io.quarkiverse.playwright-quarkus-playwright-2.1.x
chore(deps): update dependency io.quarkiverse.playwright:quarkus-playwright to v2.1.2
2025-06-30 08:48:51 +02:00
renovate[bot]
889e227523 chore(deps): update dependency io.quarkiverse.playwright:quarkus-playwright to v2.1.2 2025-06-30 06:12:02 +00:00
Athou
57d895daf5 fix playwright tests 2025-06-30 08:08:01 +02:00
renovate[bot]
a744394faa chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.26.1 2025-06-30 01:01:56 +00:00
renovate[bot]
64e3c25bad chore(deps): update ncipollo/release-action digest to bcfe547 2025-06-29 21:05:27 +00:00
renovate[bot]
75f85e1fb2 chore(deps): update ncipollo/release-action digest to 9128f23 2025-06-29 02:27:25 +00:00
renovate[bot]
00bd4cab37 fix(deps): update dependency react-router-dom to ^7.6.3 2025-06-27 22:26:32 +00:00
Athou
a9527f59a9 add @/ prefix for absolute imports 2025-06-27 16:29:31 +02:00
renovate[bot]
77661930f0 chore(deps): update dependency @biomejs/biome to v2.0.6 2025-06-27 13:14:09 +00:00
Athou
80a09bd9a0 use quarkus-playwright to simplify tests 2025-06-26 21:30:29 +02:00
Jérémie Panzer
6eb7cfbdc2 Merge pull request #1831 from Athou/renovate/react-draggable-4.x
fix(deps): update dependency react-draggable to ^4.5.0
2025-06-26 06:11:08 +02:00
renovate[bot]
fb186530aa fix(deps): update dependency react-draggable to ^4.5.0 2025-06-25 20:36:05 +00:00
renovate[bot]
6c121ccb90 fix(deps): update mantine monorepo to ^8.1.2 2025-06-25 17:40:13 +00:00
renovate[bot]
c08ad3b365 chore(deps): update graalvm/setup-graalvm digest to e1df20a 2025-06-25 17:00:47 +00:00
Jérémie Panzer
1668bc88ad Merge pull request #1828 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.17.0
2025-06-25 19:00:06 +02:00
Jérémie Panzer
3a43f62460 Merge pull request #1829 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.24.1 (minor)
2025-06-25 18:44:04 +02:00
renovate[bot]
bfba5179d1 fix(deps): update quarkus.version to v3.24.1 2025-06-25 15:15:03 +00:00
renovate[bot]
78bf7856dc chore(deps): update node.js to v22.17.0 2025-06-25 15:14:58 +00:00
Jérémie Panzer
e0c708f677 Merge pull request #1827 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.26.0
2025-06-25 17:13:36 +02:00
renovate[bot]
794d6824e8 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.26.0 2025-06-25 12:44:58 +00:00
renovate[bot]
15573a7bee chore(deps): update dependency @biomejs/biome to v2.0.5 2025-06-23 16:46:39 +00:00
Jérémie Panzer
31c61a79c6 Merge pull request #1824 from Athou/renovate/org.jsoup-jsoup-1.x
fix(deps): update dependency org.jsoup:jsoup to v1.21.1
2025-06-23 08:18:44 +02:00
Jérémie Panzer
87ca427094 Merge pull request #1823 from Athou/renovate/vitejs-plugin-react-4.x
chore(deps): update dependency @vitejs/plugin-react to ^4.6.0
2025-06-23 08:18:30 +02:00
renovate[bot]
99bdc904e0 fix(deps): update dependency org.jsoup:jsoup to v1.21.1 2025-06-23 05:28:26 +00:00
renovate[bot]
2fdee68feb chore(deps): update dependency @vitejs/plugin-react to ^4.6.0 2025-06-23 05:28:23 +00:00
renovate[bot]
7be014f83e chore(deps): lock file maintenance 2025-06-23 02:43:32 +00:00
renovate[bot]
5668fe0a33 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.25.1 2025-06-21 16:33:29 +00:00
Jérémie Panzer
32c07efe19 Merge pull request #1821 from Athou/renovate/biomejs-biome-2.0.x
chore(deps): update dependency @biomejs/biome to v2.0.4
2025-06-21 14:03:28 +02:00
renovate[bot]
21b23d0f79 chore(deps): update dependency @biomejs/biome to v2.0.4 2025-06-21 10:03:08 +00:00
Jérémie Panzer
793d0dd13f Merge pull request #1822 from c-cesar/patch-1
Update pt translations
2025-06-21 09:53:12 +02:00
ccesar
14e8ff4c1b Update pt translations
Some fixes and translated the remaining strings.
2025-06-20 23:51:38 -03:00
renovate[bot]
416ab06997 fix(deps): update swagger.version to v2.2.34 2025-06-20 12:09:56 +00:00
renovate[bot]
493cd60dae fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.33 2025-06-20 00:44:19 +00:00
Jérémie Panzer
e0948e1e9e Merge pull request #1819 from Athou/renovate/patch-quarkus.version
fix(deps): update quarkus.version to v3.23.4 (patch)
2025-06-20 00:21:57 +02:00
renovate[bot]
5776b8c044 fix(deps): update quarkus.version to v3.23.4 2025-06-19 16:55:06 +00:00
Athou
38ab4105d8 noUnusedImports and noUnusedVariables are now enabled by default 2025-06-18 20:46:56 +02:00
renovate[bot]
5ed9dadcc2 chore(deps): update docker/setup-buildx-action digest to e468171 2025-06-18 14:10:38 +00:00
renovate[bot]
357d7e2381 chore(deps): update ibm-semeru-runtimes:open-21.0.7_6-jre docker digest to c5b834e 2025-06-17 23:51:09 +00:00
renovate[bot]
8cfaab3e9f chore(deps): update dependency vitest to ^3.2.4 2025-06-17 18:15:47 +00:00
Athou
fef2404357 update biome to v2 2025-06-17 20:14:38 +02:00
renovate[bot]
1aa1bce8c8 fix(deps): update mantine monorepo to ^8.1.1 2025-06-16 22:14:42 +00:00
renovate[bot]
124b2761f6 chore(deps): update docker/setup-buildx-action digest to 18ce135 2025-06-16 17:11:47 +00:00
renovate[bot]
066ca1af7c chore(deps): lock file maintenance 2025-06-16 02:29:40 +00:00
Jérémie Panzer
c20520879b Merge pull request #1817 from Athou/renovate/axios-1.x
fix(deps): update dependency axios to ^1.10.0
2025-06-14 17:35:48 +02:00
renovate[bot]
4fa5b2b856 fix(deps): update dependency axios to ^1.10.0 2025-06-14 14:05:49 +00:00
renovate[bot]
5c1b1fad76 fix(deps): update swagger.version to v2.2.33 2025-06-14 09:46:23 +00:00
renovate[bot]
c18d248c06 chore(deps): update dependency npm to v11.4.2 2025-06-14 07:26:37 +00:00
Athou
d46ee7f673 remove deprecated usage of saveOrUpdate in preparation of hibernate 7 2025-06-13 14:49:22 +02:00
renovate[bot]
f2c0d99bd9 fix(deps): update quarkus.version to v3.23.3 2025-06-12 00:04:22 +00:00
renovate[bot]
60ee0b9185 chore(deps): update dependency @types/react to ^19.1.8 2025-06-11 17:51:58 +00:00
renovate[bot]
4b3e660ae7 chore(deps): update debian:12.11 docker digest to 0d8498a 2025-06-11 03:06:07 +00:00
renovate[bot]
0b42392bfc chore(deps): update dependency vitest to ^3.2.3 2025-06-10 07:21:05 +00:00
renovate[bot]
a94d7ce235 chore(deps): update dependency @vitejs/plugin-react to ^4.5.2 2025-06-10 06:24:42 +00:00
Jérémie Panzer
72aec432ed Merge pull request #1814 from WangLei1993/master
add Chinese translation for new entry
2025-06-10 08:23:18 +02:00
WangLei1993
0e5db8d604 add Chinese translation for new entry 2025-06-10 13:34:56 +08:00
Jérémie Panzer
dc45fb4b84 Merge pull request #1812 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^8.1.0 (minor)
2025-06-10 07:06:50 +02:00
Jérémie Panzer
6503d38fe3 Merge pull request #1813 from canoine/patch-5
Update fr/messages.po
2025-06-10 07:06:35 +02:00
canoine
32c89d9a11 Update fr/messages.po
Translation of the new messages.
2025-06-10 06:04:09 +02:00
renovate[bot]
f279465750 fix(deps): update mantine monorepo to ^8.1.0 2025-06-09 21:31:32 +00:00
renovate[bot]
58ec1b022a chore(deps): update dependency @types/react to ^19.1.7 2025-06-09 21:31:12 +00:00
Athou
612199429e fix custom css code documentation link (#1811) 2025-06-09 22:36:17 +02:00
Jérémie Panzer
e5482f9051 Merge pull request #1810 from Athou/renovate/major-querydsl.version
fix(deps): update querydsl.version to v7 (major)
2025-06-09 18:31:14 +02:00
renovate[bot]
05df14fda2 fix(deps): update querydsl.version to v7 2025-06-09 15:52:21 +00:00
renovate[bot]
29898ba1ba fix(deps): update dependency @fontsource/open-sans to ^5.2.6 2025-06-09 08:55:10 +00:00
renovate[bot]
93d1cec503 chore(deps): update dependency rollup-plugin-visualizer to ^6.0.3 2025-06-07 14:00:43 +00:00
renovate[bot]
9884f44122 fix(deps): update dependency style-to-object to ^1.0.9 2025-06-07 02:54:31 +00:00
renovate[bot]
d400456685 chore(deps): update dependency vitest to ^3.2.2 2025-06-06 23:49:01 +00:00
renovate[bot]
c39069cafd chore(deps): update dependency maven to v3.9.10 2025-06-06 12:01:14 +00:00
Jérémie Panzer
5fb0edc318 Merge pull request #1808 from Athou/renovate/patch-quarkus.version
fix(deps): update quarkus.version to v3.23.2 (patch)
2025-06-05 07:06:42 +02:00
renovate[bot]
21a6b2d780 fix(deps): update quarkus.version to v3.23.2 2025-06-04 22:32:20 +00:00
renovate[bot]
40c9063a54 chore(deps): update dependency @types/react-dom to ^19.1.6 2025-06-04 15:57:40 +00:00
Athou
59b0103ed5 add an option to navigate to the next unread category/feed when marking all as read (#1807) 2025-06-04 09:10:03 +02:00
Athou
f4730e9338 redirect to 'all' if no unread categories or feeds found or if we reached the end of the list (#1807) 2025-06-04 08:40:22 +02:00
Athou
b7b520ca3c faster integration tests execution by truncating tables instead of dropping and recreating tables 2025-06-04 08:35:03 +02:00
renovate[bot]
21d44e6a55 fix(deps): update dependency react-router-dom to ^7.6.2 2025-06-04 00:47:19 +00:00
renovate[bot]
607886f0f0 chore(deps): update dependency vitest to ^3.2.1 2025-06-03 18:19:26 +00:00
Jérémie Panzer
7cd3c68256 Merge pull request #1806 from Athou/renovate/vitejs-plugin-react-4.5.x
chore(deps): update dependency @vitejs/plugin-react to ^4.5.1
2025-06-03 12:02:04 +02:00
renovate[bot]
6e37c1bd86 chore(deps): update dependency @vitejs/plugin-react to ^4.5.1 2025-06-03 06:04:05 +00:00
Jérémie Panzer
5db1a0748f Merge pull request #1805 from Athou/renovate/vitest-monorepo
chore(deps): update dependency vitest to ^3.2.0
2025-06-02 20:20:24 +02:00
renovate[bot]
a7584df4f4 chore(deps): update dependency vitest to ^3.2.0 2025-06-02 13:57:05 +00:00
Athou
4421197403 remove unused variable 2025-06-02 07:42:19 +02:00
renovate[bot]
15b59467fb chore(deps): lock file maintenance 2025-06-02 01:17:56 +00:00
Jérémie Panzer
c95ff0a2ce Merge pull request #1804 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.25.0
2025-05-31 20:48:46 +02:00
renovate[bot]
7eff9df025 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.25.0 2025-05-31 18:22:52 +00:00
Athou
2f05e53e14 remove feed/refresh rest endpoint as it's unused and does not honor the force-refresh-cooldown-duration setting (#1802) 2025-05-30 11:19:26 +02:00
renovate[bot]
6089fe4036 fix(deps): update linguijs monorepo to ^5.3.2 2025-05-28 14:38:20 +00:00
renovate[bot]
10d9af0d86 chore(deps): update dependency rollup-plugin-visualizer to ^6.0.1 2025-05-28 13:12:40 +00:00
Jérémie Panzer
c119d5062a Merge pull request #1800 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.23.0 (minor)
2025-05-28 15:11:46 +02:00
renovate[bot]
324609ee60 fix(deps): update quarkus.version to v3.23.0 2025-05-28 11:39:17 +00:00
renovate[bot]
a0a65f2b45 chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.5.1 2025-05-28 07:28:55 +00:00
renovate[bot]
45e5ca704c chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.5 2025-05-28 05:10:12 +00:00
Athou
f361be0c72 release 5.10.0 2025-05-28 07:08:11 +02:00
renovate[bot]
1611dc5703 chore(deps): update docker/build-push-action digest to 2634353 2025-05-27 20:52:00 +00:00
renovate[bot]
04faad84a4 fix(deps): update mantine monorepo to ^8.0.2 2025-05-27 14:24:50 +00:00
renovate[bot]
19c42e5838 chore(deps): update dependency @types/react to ^19.1.6 2025-05-27 11:59:22 +00:00
Athou
4918b69d0a improve performance by enabling the react compiler (#1087) 2025-05-26 21:06:53 +02:00
Athou
c7cec464aa improve performance by avoiding some big re-renders (#1087) 2025-05-26 20:55:27 +02:00
renovate[bot]
91857c4d73 chore(deps): lock file maintenance 2025-05-26 01:42:10 +00:00
Jérémie Panzer
fc6f9f4258 Merge pull request #1799 from Athou/renovate/patch-react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.6.1
2025-05-25 20:54:27 +02:00
renovate[bot]
34f9f9374a fix(deps): update dependency react-router-dom to ^7.6.1 2025-05-25 15:16:31 +00:00
renovate[bot]
0ae4c1621f fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.32 2025-05-25 01:30:25 +00:00
Athou
c393f5c045 improve aarch64 compatibility 2025-05-24 18:21:50 +02:00
Jérémie Panzer
1624290dc1 Merge pull request #1798 from Athou/renovate/rollup-plugin-visualizer-6.x
chore(deps): update dependency rollup-plugin-visualizer to v6
2025-05-24 16:31:45 +02:00
renovate[bot]
c6491990ac chore(deps): update dependency rollup-plugin-visualizer to v6 2025-05-24 13:46:34 +00:00
renovate[bot]
15dea17923 chore(deps): update dependency io.github.git-commit-id:git-commit-id-maven-plugin to v9.0.2 2025-05-23 21:45:42 +00:00
Athou
689d5ac7b2 clear indicator when entries are loaded 2025-05-23 22:37:28 +02:00
Athou
2142e20e7d cleanup 2025-05-23 16:03:16 +02:00
Jérémie Panzer
dc23126570 Merge pull request #1780 from Eshwar1212-maker/clean-red-dot
feat: red dot indicator for new unread articles
2025-05-23 15:54:22 +02:00
Jérémie Panzer
55856f9060 Merge pull request #1794 from Athou/renovate/vitejs-plugin-react-4.x
chore(deps): update dependency @vitejs/plugin-react to ^4.5.0
2025-05-23 09:20:28 +02:00
renovate[bot]
c756ce5fc8 chore(deps): update dependency @vitejs/plugin-react to ^4.5.0 2025-05-23 02:55:39 +00:00
Eshwar Tangirala
0546f25d55 Removed console.log 2025-05-22 20:13:16 -04:00
Eshwar Tangirala
7b33717333 Readjusted code to not use localstorage, and just used redux for indicator 2025-05-22 20:10:52 -04:00
Jérémie Panzer
6ea6d16e58 Merge pull request #1793 from Athou/renovate/org.apache.httpcomponents.client5-httpclient5-5.x
fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.5
2025-05-22 22:13:31 +02:00
renovate[bot]
a9b65c83aa fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.5 2025-05-22 17:14:03 +00:00
renovate[bot]
a497802b50 chore(deps): update dependency npm to v11.4.1 2025-05-22 05:05:19 +00:00
Jérémie Panzer
42b0428b9a Merge pull request #1792 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.24.0
2025-05-22 07:04:34 +02:00
Jérémie Panzer
931c553e1d Merge pull request #1791 from Athou/renovate/debian-12.x
chore(deps): update debian docker tag to v12.11
2025-05-22 07:03:52 +02:00
renovate[bot]
f3c0b92a3c chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.24.0 2025-05-22 03:10:15 +00:00
renovate[bot]
970cabf241 chore(deps): update debian docker tag to v12.11 2025-05-22 03:10:12 +00:00
renovate[bot]
e321ecde5d chore(deps): update dependency @types/react to ^19.1.5 2025-05-21 17:09:30 +00:00
Jérémie Panzer
32ac326a77 Merge pull request #1790 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.16.0
2025-05-21 19:08:34 +02:00
renovate[bot]
134dcd4466 chore(deps): update node.js to v22.16.0 2025-05-21 16:41:07 +00:00
renovate[bot]
26a44353d4 chore(deps): update dependency vitest to ^3.1.4 2025-05-19 18:09:09 +00:00
renovate[bot]
55acb3ef28 chore(deps): lock file maintenance 2025-05-19 03:45:55 +00:00
Athou
0e96307726 ignore scheme case 2025-05-18 17:40:06 +02:00
Eshwar Tangirala
0199a36238 Working on indicator feature for new unread feeds 2025-05-18 00:03:28 -04:00
Eshwar Tangirala
3f2f6e83fa Adding red dot indicator feature, got main components done 2025-05-15 20:19:05 -04:00
renovate[bot]
4fa780cac2 chore(deps): update docker/build-push-action digest to 1dc7386 2025-05-15 21:12:24 +00:00
Jérémie Panzer
edb0f655b0 Merge pull request #1786 from Athou/renovate/patch-quarkus.version
fix(deps): update quarkus.version to v3.22.3 (patch)
2025-05-15 23:11:52 +02:00
Jérémie Panzer
651ada7073 Merge pull request #1787 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.4.0
2025-05-15 23:11:36 +02:00
renovate[bot]
efb5d49d04 chore(deps): update dependency npm to v11.4.0 2025-05-15 20:08:41 +00:00
renovate[bot]
f78cc18b06 fix(deps): update quarkus.version to v3.22.3 2025-05-15 12:39:28 +00:00
renovate[bot]
8acffa11e5 fix(deps): update swagger.version to v2.2.32 2025-05-15 03:27:38 +00:00
renovate[bot]
f4246807ff chore(deps): update node.js to v22.15.1 2025-05-14 22:48:58 +00:00
renovate[bot]
abf6e7131b fix(deps): update dependency @reduxjs/toolkit to ^2.8.2 2025-05-14 19:06:20 +00:00
renovate[bot]
b2688520cc fix(deps): update mantine monorepo to ^8.0.1 2025-05-14 14:57:49 +00:00
Athou
fad0aea108 release 5.9.0 2025-05-14 16:56:01 +02:00
renovate[bot]
0b63773c83 fix(deps): update swagger.version to v2.2.31 2025-05-13 19:10:00 +00:00
renovate[bot]
3ef28009ac chore(deps): update dependency @types/react-dom to ^19.1.5 2025-05-13 14:35:24 +00:00
renovate[bot]
8979e2b191 chore(deps): update dependency @types/react to ^19.1.4 2025-05-12 23:34:04 +00:00
Eshwar Tangirala
d6910aa1e8 Cleaned up UI for Indicator 2025-05-12 16:30:06 -04:00
Eshwar Tangirala
afc56c6053 feat: red dot indicator for new unread articles 2025-05-12 16:22:40 -04:00
Eshwar Tangirala
1bd504cbfb feat: red dot indicator for new unread articles 2025-05-12 16:22:40 -04:00
renovate[bot]
2c089ddb5e chore(deps): update dependency @types/react-dom to ^19.1.4 2025-05-12 15:39:00 +00:00
Athou
0b5245643a increase cache duration of static resources even more (#1782) 2025-05-12 15:11:05 +02:00
Athou
ae35d43f7f revert back to deploy documentation on release only 2025-05-12 09:57:01 +02:00
Athou
fe55682c9f force update pages this time only 2025-05-12 09:56:22 +02:00
Jérémie Panzer
0d3e6f17e2 Merge pull request #1783 from Athou/renovate/pin-dependencies
chore(deps): pin jaywcjlove/markdown-to-html-cli action to d2c8ffd
2025-05-12 09:54:23 +02:00
renovate[bot]
d5659c4278 chore(deps): lock file maintenance 2025-05-12 06:49:59 +00:00
renovate[bot]
69b87b9026 chore(deps): pin jaywcjlove/markdown-to-html-cli action to d2c8ffd 2025-05-12 06:49:09 +00:00
Athou
168bcd3a37 add reference to the custom css documentation 2025-05-12 08:48:16 +02:00
Athou
e3b6be0cd0 add documentation for custom CSS (#1757) 2025-05-12 07:51:38 +02:00
Athou
eeceda0ca8 increase static resources cache duration (#1782) 2025-05-11 18:12:15 +02:00
renovate[bot]
aa903039c8 chore(deps): update ibm-semeru-runtimes docker tag to open-21.0.7_6-jre 2025-05-09 20:05:00 +00:00
Jérémie Panzer
73d81d0cdb Merge pull request #1778 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.6.0
2025-05-08 20:11:28 +02:00
renovate[bot]
01fe539af6 fix(deps): update dependency react-router-dom to ^7.6.0 2025-05-08 17:13:56 +00:00
renovate[bot]
c08063ca57 fix(deps): update dependency @reduxjs/toolkit to ^2.8.1 2025-05-08 03:51:29 +00:00
renovate[bot]
60d4af2890 fix(deps): update quarkus.version to v3.22.2 2025-05-07 22:33:33 +00:00
renovate[bot]
6378f074a8 fix(deps): update dependency tss-react to ^4.9.18 2025-05-07 19:57:06 +00:00
Athou
5082ec86fd Merge branch 'custom-css' 2025-05-07 19:44:24 +02:00
Jérémie Panzer
6cff5bb099 Merge pull request #1777 from WangLei1993/master
add Chinese translation for new entry
2025-05-07 07:32:45 +02:00
WangLei1993
d54562d56f add Chinese translation for new entry 2025-05-07 12:06:56 +08:00
Jérémie Panzer
2b45a8fae5 Merge pull request #1776 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.8.0
2025-05-07 05:37:18 +02:00
renovate[bot]
8654df8994 fix(deps): update dependency @reduxjs/toolkit to ^2.8.0 2025-05-06 23:47:34 +00:00
renovate[bot]
4d5145c17e chore(deps): update dependency vite-plugin-checker to ^0.9.3 2025-05-06 18:09:24 +00:00
Athou
850921bca9 release 5.8.0 2025-05-06 20:07:54 +02:00
Athou
1dc6470419 move github sponsors up to match the order on the github page 2025-05-06 20:05:33 +02:00
Athou
b5c197f499 add more css classes based on feedback 2025-05-06 19:26:03 +02:00
Athou
d417655a86 add css classes to elements to ease css customization 2025-05-06 19:04:39 +02:00
renovate[bot]
ebca9f8290 fix(deps): update dependency tss-react to ^4.9.17 2025-05-06 07:51:25 +00:00
renovate[bot]
53b1f89b30 chore(deps): update dependency @types/react to ^19.1.3 2025-05-06 03:41:03 +00:00
renovate[bot]
6885191877 chore(deps): update ibm-semeru-runtimes:open-21.0.6_7-jre docker digest to bb59a7e 2025-05-05 22:59:50 +00:00
renovate[bot]
e69d9fe8b8 chore(deps): update dependency vitest to ^3.1.3 2025-05-05 17:13:14 +00:00
Jérémie Panzer
d6a1f1ae15 Merge pull request #1773 from canoine/patch-4
Update fr/messages.po
2025-05-05 19:12:16 +02:00
canoine
a7813f4442 Update fr/messages.po
Translation of the new message
2025-05-05 19:03:00 +02:00
Athou
1e4664987a add missing i18n label 2025-05-05 17:28:52 +02:00
Jérémie Panzer
7a819f5d58 Merge pull request #1772 from Athou/renovate/major-mantine-monorepo
fix(deps): update mantine monorepo to v8 (major)
2025-05-05 14:00:14 +02:00
Athou
45ef56e9da reduce vertical room occupied by slider 2025-05-05 13:59:23 +02:00
Athou
f43c7aa5d0 change default value of entriesToKeepOnTopWhenScrolling to match what other feed readers are doing 2025-05-05 13:51:32 +02:00
renovate[bot]
8d88711e59 fix(deps): update mantine monorepo to v8 2025-05-05 11:49:11 +00:00
renovate[bot]
280c0b60e9 chore(deps): update dependency vite to ^6.3.5 2025-05-05 10:01:35 +00:00
renovate[bot]
605f8f6615 chore(deps): lock file maintenance 2025-05-05 01:29:24 +00:00
renovate[bot]
0e88b4de1b chore(deps): update dependency vite-plugin-checker to ^0.9.2 2025-05-04 13:26:48 +00:00
Athou
b02aa923d7 customizable font size (#1462) 2025-05-04 13:26:33 +02:00
Athou
680c927e1d font size reduction was not actually working, and looks bad now that it does 2025-05-04 01:21:07 +02:00
Athou
4b2e65abdc use Box instead of Text because Text resets font size 2025-05-04 01:16:11 +02:00
Athou
e501bf6b05 fix initial value not loaded correctly for newly added settings 2025-05-03 21:50:53 +02:00
Jérémie Panzer
80bf2582bd Merge pull request #1771 from Athou/renovate/com.microsoft.playwright-playwright-1.x
chore(deps): update dependency com.microsoft.playwright:playwright to v1.52.0
2025-05-02 22:14:41 +02:00
renovate[bot]
586da4424d chore(deps): update dependency com.microsoft.playwright:playwright to v1.52.0 2025-05-02 18:59:58 +00:00
renovate[bot]
8e0e8c2407 fix(deps): update mantine monorepo to ^7.17.7 2025-05-02 10:10:57 +00:00
Athou
40461ac883 fix wrong category mapping 2025-05-01 13:01:28 +02:00
renovate[bot]
9288a7e66e chore(deps): update dependency vite to ^6.3.4 2025-04-30 19:48:04 +00:00
Jérémie Panzer
275db4ec72 Merge pull request #1770 from Athou/renovate/quarkus.version
fix(deps): update quarkus.version to v3.22.1 (minor)
2025-04-30 21:47:10 +02:00
renovate[bot]
67b2f8968d fix(deps): update quarkus.version to v3.22.1 2025-04-30 19:04:04 +00:00
renovate[bot]
45ce35dfdb chore(deps): update dependency @types/react-dom to ^19.1.3 2025-04-30 13:32:29 +00:00
renovate[bot]
52aa9ab2fe chore(deps): update debian:12.10 docker digest to 264982f 2025-04-29 11:18:53 +00:00
Jérémie Panzer
d24725bd55 Merge pull request #1769 from Athou/renovate/org.jsoup-jsoup-1.x
fix(deps): update dependency org.jsoup:jsoup to v1.20.1
2025-04-29 13:18:04 +02:00
renovate[bot]
f368a67dec fix(deps): update dependency org.jsoup:jsoup to v1.20.1 2025-04-29 08:40:01 +00:00
Jérémie Panzer
564d1744e1 Merge pull request #1768 from canoine/patch-2
Update fr/messages.po
2025-04-29 10:39:05 +02:00
canoine
d091ecfa5f Update fr/messages.po
Translation of new messages
2025-04-29 09:22:39 +02:00
Jérémie Panzer
7d23165e14 Merge pull request #1764 from WangLei1993/master
add Chinese translation for new entry
2025-04-29 06:33:39 +02:00
WangLei1993
a9ca3278c6 add Chinese translation for color 2025-04-29 11:55:32 +08:00
WangLei1993
e8734710ca Merge branch 'Athou:master' into master 2025-04-29 10:42:39 +08:00
renovate[bot]
f8a0e20df9 fix(deps): update dependency react-router-dom to ^7.5.3 2025-04-28 22:47:15 +00:00
Athou
de90e4de54 try to find a suitable language for the user before defaulting to english (#1767) 2025-04-28 22:59:41 +02:00
Athou
03cb27f69a add new translation placeholders 2025-04-28 22:49:57 +02:00
Athou
f86f1dd770 'All' and 'Starred' labels are now translatable (#1765) 2025-04-28 22:48:02 +02:00
Athou
ec21ffc571 color names are now translatable (#1766) 2025-04-28 22:39:15 +02:00
WangLei1993
c73c9c74ba Merge branch 'Athou:master' into master 2025-04-29 03:25:58 +08:00
WangLei1993
fd3c264d0c add Chinese translation for new entry 2025-04-29 03:25:16 +08:00
renovate[bot]
3983ba6cd0 chore(deps): lock file maintenance 2025-04-28 08:49:58 +00:00
renovate[bot]
dc0b5bdd11 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.23.1 2025-04-28 03:08:48 +00:00
renovate[bot]
5b3728186e fix(deps): update dependency react-router-dom to ^7.5.2 2025-04-25 06:22:05 +00:00
renovate[bot]
8b0936b678 fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.4.4 2025-04-25 05:11:21 +00:00
Jérémie Panzer
b99e81a389 Merge pull request #1763 from Athou/renovate/axios-1.x
fix(deps): update dependency axios to ^1.9.0
2025-04-25 07:10:40 +02:00
renovate[bot]
0b8fb0f9a7 fix(deps): update dependency axios to ^1.9.0 2025-04-24 23:53:43 +00:00
renovate[bot]
7d5bbe0130 chore(deps): update docker/build-push-action digest to 14487ce 2025-04-24 23:53:15 +00:00
renovate[bot]
c6637c6814 chore(deps): update actions/download-artifact digest to d3f86a1 2025-04-24 20:09:51 +00:00
renovate[bot]
e302a011bb fix(deps): update mantine monorepo to ^7.17.5 2025-04-24 12:41:34 +00:00
renovate[bot]
25f8bdaa28 chore(deps): update dependency vite to ^6.3.3 2025-04-24 09:42:45 +00:00
renovate[bot]
e7d1018cbc chore(deps): update dependency io.quarkus.platform:quarkus-maven-plugin to v3.21.4 2025-04-23 22:14:40 +00:00
Jérémie Panzer
e81fa69a03 Merge pull request #1761 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.15.0
2025-04-23 15:22:37 +02:00
renovate[bot]
176e76ad2d chore(deps): update node.js to v22.15.0 2025-04-23 12:58:46 +00:00
Jérémie Panzer
0925a91089 Merge pull request #1759 from Athou/renovate/org.apache.commons-commons-collections4-4.x
fix(deps): update dependency org.apache.commons:commons-collections4 to v4.5.0
2025-04-23 07:24:00 +02:00
renovate[bot]
c04d0b147c fix(deps): update dependency org.apache.commons:commons-collections4 to v4.5.0 2025-04-22 20:08:59 +00:00
renovate[bot]
a349eff1a3 chore(deps): update dependency vitest to ^3.1.2 2025-04-21 10:23:42 +00:00
renovate[bot]
2ddeda9a27 chore(deps): lock file maintenance 2025-04-21 02:01:50 +00:00
renovate[bot]
00b0fe921f chore(deps): update dependency @vitejs/plugin-react to ^4.4.1 2025-04-19 15:03:29 +00:00
renovate[bot]
bcc6cdf4b1 chore(deps): update dependency vite to ^6.3.2 2025-04-18 07:33:49 +00:00
renovate[bot]
ba46cc3cd6 fix(deps): update dependency react-router-dom to ^7.5.1 2025-04-17 15:41:39 +00:00
renovate[bot]
ed1bf609b8 chore(deps): update dependency vite to ^6.3.1 2025-04-17 02:11:49 +00:00
Jérémie Panzer
13262b678d Merge pull request #1756 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.7.0
2025-04-16 21:53:25 +02:00
renovate[bot]
cf9321de23 fix(deps): update dependency @reduxjs/toolkit to ^2.7.0 2025-04-16 18:48:12 +00:00
renovate[bot]
ac7a78bdc0 fix(deps): update quarkus.version to v3.21.3 2025-04-16 15:27:22 +00:00
Jérémie Panzer
640d3f1f6e Merge pull request #1754 from Athou/renovate/vite-6.x
chore(deps): update dependency vite to ^6.3.0
2025-04-16 11:45:25 +02:00
renovate[bot]
d716a8081c chore(deps): update dependency vite to ^6.3.0 2025-04-16 09:03:14 +00:00
Athou
1cec4e68b1 remove unused variables 2025-04-16 01:16:34 +02:00
Jérémie Panzer
9d16299c5b Merge pull request #1753 from Athou/renovate/vitejs-plugin-react-4.x
chore(deps): update dependency @vitejs/plugin-react to ^4.4.0
2025-04-15 14:22:10 +02:00
renovate[bot]
cb92b1969c chore(deps): update dependency @vitejs/plugin-react to ^4.4.0 2025-04-15 10:50:23 +00:00
renovate[bot]
55a62d393d chore(deps): update dependency @types/react to ^19.1.2 2025-04-14 23:14:48 +00:00
renovate[bot]
027b2252db fix(deps): update linguijs monorepo to ^5.3.1 2025-04-14 17:27:06 +00:00
Jérémie Panzer
ccfb88ddcc Merge pull request #1752 from Athou/renovate/redoc-2.x
fix(deps): update dependency redoc to ^2.5.0
2025-04-14 19:26:10 +02:00
renovate[bot]
dde0736fcf fix(deps): update dependency redoc to ^2.5.0 2025-04-14 16:24:14 +00:00
renovate[bot]
6498bb5ee6 chore(deps): lock file maintenance 2025-04-14 01:54:18 +00:00
Jérémie Panzer
d7ca2db330 Merge pull request #1751 from Athou/renovate/jsdom-26.x
chore(deps): update dependency jsdom to ^26.1.0
2025-04-13 18:11:54 +02:00
renovate[bot]
99b32795a5 chore(deps): update dependency jsdom to ^26.1.0 2025-04-13 14:35:09 +00:00
renovate[bot]
840f670d5d chore(deps): update dependency @types/react to ^19.1.1 2025-04-11 15:51:04 +00:00
renovate[bot]
e3c0a4c665 chore(deps): update dependency vite to ^6.2.6 2025-04-10 13:00:03 +00:00
Athou
915506527a add theme color picker (#1598) 2025-04-10 14:17:44 +02:00
renovate[bot]
7541251344 fix(deps): update quarkus.version to v3.21.2 2025-04-09 22:01:45 +00:00
Athou
40c9b42b24 mark all as read confirmation now also applies to the "shift+a" keyboard shortcut (#1744) 2025-04-09 20:28:40 +02:00
Athou
dfab678070 remove unused imports 2025-04-09 20:28:40 +02:00
renovate[bot]
3d371d5942 chore(deps): update dependency @types/react-dom to ^19.1.2 2025-04-09 17:25:25 +00:00
renovate[bot]
9bfbaa8ded chore(deps): update ibm-semeru-runtimes:open-21.0.6_7-jre docker digest to 475c325 2025-04-09 16:47:23 +00:00
Athou
be0fc95c45 dialog can now by confirmed with the enter key 2025-04-09 14:40:53 +02:00
Athou
dcb6113eb7 set focus to slider when the dialog opens to ease keyboard navigation 2025-04-09 14:40:53 +02:00
renovate[bot]
55491651f6 chore(deps): update ibm-semeru-runtimes:open-21.0.6_7-jre docker digest to 1515f0d 2025-04-09 07:58:05 +00:00
Jérémie Panzer
c1d471ebdc Merge pull request #1750 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11.3.0
2025-04-09 07:19:10 +02:00
renovate[bot]
069e675f19 chore(deps): update dependency npm to v11.3.0 2025-04-08 22:06:01 +00:00
renovate[bot]
d34f719a4f fix(deps): update mantine monorepo to ^7.17.4 2025-04-08 16:57:23 +00:00
renovate[bot]
4eb932a3f0 chore(deps): update debian:12.10 docker digest to 00cd074 2025-04-08 06:24:19 +00:00
renovate[bot]
1ab27f2626 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.4 2025-04-08 03:28:41 +00:00
renovate[bot]
7d3ce7e602 fix(deps): update swagger.version to v2.2.30 2025-04-07 16:46:41 +00:00
renovate[bot]
cf530b2c60 chore(deps): lock file maintenance 2025-04-07 01:34:57 +00:00
Athou
d9bcd7f592 remove warning about Non-Serializable Data passed to redux action 2025-04-05 17:19:04 +02:00
Athou
8b854b5cda remove intermediate element by rendering the mantine Paper as <article> 2025-04-05 17:19:04 +02:00
renovate[bot]
f7b6677bb1 chore(deps): update dependency typescript to ^5.8.3 2025-04-05 04:17:26 +00:00
Jérémie Panzer
0cc5e8f5b8 Merge pull request #1748 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.5.0
2025-04-05 06:16:57 +02:00
Jérémie Panzer
8d153e3b2b Merge pull request #1749 from Athou/renovate/querydsl.version
fix(deps): update querydsl.version to v6.11 (minor)
2025-04-05 06:16:45 +02:00
renovate[bot]
d15428971c fix(deps): update querydsl.version to v6.11 2025-04-05 02:02:22 +00:00
renovate[bot]
f34c2aa437 fix(deps): update dependency react-router-dom to ^7.5.0 2025-04-04 23:12:23 +00:00
Athou
9b3ff5f81f fix wrong issue numbers in changelog 2025-04-04 22:15:37 +02:00
262 changed files with 10495 additions and 7185 deletions

View File

@@ -7,7 +7,7 @@ on:
pull_request:
env:
JAVA_VERSION: 21
JAVA_VERSION: 25
DOCKER_BUILD_SUMMARY: false
jobs:
@@ -23,13 +23,13 @@ jobs:
steps:
# Checkout
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
fetch-depth: 0
# Setup
- name: Set up GraalVM
uses: graalvm/setup-graalvm@01ed653ac833fe80569f1ef9f25585ba2811baab # v1
uses: graalvm/setup-graalvm@aba6a077d71fbfc02138d7470c4ad6e7f85bd2a9 # v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
@@ -44,18 +44,27 @@ jobs:
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: Create pages directory structure
run: mkdir -p target/pages/documentation/custom-css
- name: Generate pages
uses: wranders/markdown-to-pages-action@8d8a750832932ac785f5424c8c5543aa0b26bb9a # v1
- name: Convert readme file to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
with:
token: ${{ secrets.GITHUB_TOKEN }}
out_path: target/pages
files: |-
README.md
documentation/README.md
source: README.md
output: target/pages/index.html
- name: Convert config documentation to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
with:
source: commafeed-server/target/quarkus-generated-doc/config/commafeed-server.md
output: target/pages/documentation/index.html
- name: Convert custom css documentation to html
uses: jaywcjlove/markdown-to-html-cli@d2c8ffd676de1801e2586904bc540a938e4bc480 # v5.0.3
with:
source: documentation/CUSTOMCSS.md
output: target/pages/documentation/custom-css/index.html
# Upload artifacts
- name: Upload cross-platform app
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
@@ -71,7 +80,7 @@ jobs:
path: commafeed-server/target/commafeed-*-runner*
- name: Upload pages
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
if: matrix.os == 'ubuntu-latest' && matrix.database == 'h2' # we only need to upload the pages once
with:
path: target/pages
@@ -89,7 +98,7 @@ jobs:
steps:
# Checkout
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
fetch-depth: 0
@@ -98,14 +107,14 @@ jobs:
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3
- name: Install required packages
run: sudo apt-get install -y rename unzip
# Prepare artifacts
- name: Download artifacts
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
with:
pattern: commafeed-${{ matrix.database }}-*
path: ./artifacts
@@ -126,7 +135,7 @@ jobs:
# Docker
- name: Login to Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3
if: ${{ env.DOCKERHUB_USERNAME != '' }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -134,7 +143,7 @@ jobs:
## build but don't push for PRs and renovate
- name: Docker build - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
@@ -142,7 +151,7 @@ jobs:
platforms: linux/amd64,linux/arm64/v8
- name: Docker build - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: .
file: commafeed-server/src/main/docker/Dockerfile.jvm
@@ -151,7 +160,7 @@ jobs:
## build and push tag
- name: Docker build and push tag - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
if: ${{ github.ref_type == 'tag' }}
with:
context: .
@@ -163,7 +172,7 @@ jobs:
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}
- name: Docker build and push tag - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
if: ${{ github.ref_type == 'tag' }}
with:
context: .
@@ -176,7 +185,7 @@ jobs:
## build and push master
- name: Docker build and push master - native
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
@@ -186,7 +195,7 @@ jobs:
tags: athou/commafeed:master-${{ matrix.database }}
- name: Docker build and push master - jvm
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
if: ${{ github.ref_name == 'master' }}
with:
context: .
@@ -206,12 +215,12 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
fetch-depth: 0
- name: Download artifacts
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
with:
pattern: commafeed-*
path: ./artifacts
@@ -227,7 +236,7 @@ jobs:
version: ${{ github.ref_name }}
- name: Create GitHub release
uses: ncipollo/release-action@440c8c1cb0ed28b9f43e4d1d670870f059653174 # v1
uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1
with:
name: CommaFeed ${{ github.ref_name }}
body: ${{ steps.changelog_reader.outputs.changes }}
@@ -240,7 +249,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
fetch-depth: 0

78
.github/workflows/scorecard.yml vendored Normal file
View File

@@ -0,0 +1,78 @@
# This workflow uses actions that are not certified by GitHub. They are provided
# by a third-party and are governed by separate terms of service, privacy
# policy, and support documentation.
name: Scorecard supply-chain security
on:
# For Branch-Protection check. Only the default branch is supported. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
branch_protection_rule:
# To guarantee Maintained check is occasionally updated. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
schedule:
- cron: '42 13 * * 4'
push:
branches: [ "master" ]
# Declare default permissions as read only.
permissions: read-all
jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
# `publish_results: true` only works when run from the default branch. conditional can be removed if disabled.
if: github.event.repository.default_branch == github.ref_name || github.event_name == 'pull_request'
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
# Needed to publish results and get a badge (see publish_results below).
id-token: write
# Uncomment the permissions below if installing in a private repository.
# contents: read
# actions: read
steps:
- name: "Checkout code"
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2
with:
results_file: results.sarif
results_format: sarif
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
# - you want to enable the Branch-Protection check on a *public* repository, or
# - you are installing Scorecard on a *private* repository
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
# repo_token: ${{ secrets.SCORECARD_TOKEN }}
# Public repositories:
# - Publish results to OpenSSF REST API for easy access by consumers
# - Allows the repository to include the Scorecard badge.
# - See https://github.com/ossf/scorecard-action#publishing-results.
# For private repositories:
# - `publish_results` will always be set to `false`, regardless
# of the value entered here.
publish_results: true
# (Optional) Uncomment file_mode if you have a .gitattributes with files marked export-ignore
# file_mode: git
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: SARIF file
path: results.sarif
retention-days: 5
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3
with:
sarif_file: results.sarif

41
.github/workflows/sonar.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: SonarQube
permissions:
contents: read
on:
push:
branches:
- master
pull_request:
types: [ opened, synchronize, reopened ]
env:
JAVA_VERSION: 25
jobs:
build:
runs-on: ubuntu-latest
steps:
# Checkout
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
fetch-depth: 0
# Setup
- name: Set up GraalVM
uses: graalvm/setup-graalvm@aba6a077d71fbfc02138d7470c4ad6e7f85bd2a9 # v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
cache: "maven"
- name: Install Playwright dependencies
run: sudo apt-get install -y libgbm1
# Run test coverage and SonarQube analysis
- name: Analyze with SonarQube
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: mvn --batch-mode verify sonar:sonar -Dsonar.projectKey=Athou_commafeed

View File

@@ -15,4 +15,4 @@
# specific language governing permissions and limitations
# under the License.
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip

View File

@@ -1,11 +1,42 @@
# Changelog
## [5.11.1]
- The search limit of 3 characters has been removed (#1887)
- Fix an issue that caused feed filtering expressions to be incorrectly converted to lowercase when saving them (#1899)
## [5.11.0]
- Add an option to navigate to the next unread category/feed when marking all entries as read (#1807)
- Google Analytics support has been removed
## [5.10.0]
- Add an indicator next to each feed's unread count in the tree to show when new entries are discovered while the app is open (#1762)
- Feeds with uppercase HTTP:// or HTTPS:// URLs are now correctly handled again
- The aarch64 native executable now also works on the Raspberry Pi 5 (#1795)
- Improve general performance of the UI by reducing the number of re-renders, especially when a lot of entries are displayed (#1087)
## [5.9.0]
- A lot of CSS classes have been added to the elements of the application to ease custom CSS rules (#1757)
- Added a link in the README to the [documentation](https://athou.github.io/commafeed/documentation/custom-css/) of the new CSS classes
- Static resources are now cached for much longer (#1782)
## [5.8.0]
- A color picker is now available on the settings page to change the orange accent of the application (#1598)
- A font size slider is now available to change the size of the text of feed entries (#1462)
- The "mark all as read" confirmation setting now also applies to the "shift+a" keyboard shortcut (#1744)
- CommaFeed wil try to match the language of the browser before defaulting to english (#1767)
- The default value for the number of entries to keep above the selected entry when scrolling is now 1 instead of 0 to match what other feed readers do
## [5.7.0]
- Add Shift+J/Shift+K keyboard shortcuts to navigate to the next/previous feed or category with unread entries (#1746)
- Add Shift+J/Shift+K keyboard shortcuts to navigate to the next/previous feed or category with unread entries (#1558)
- 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)
- Correctly handle feeds that return an unmodified Last-Modified header but a different ETag header (#1746)
- 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

View File

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

View File

@@ -2,5 +2,4 @@
## Reporting a Vulnerability
If you found a vulnerability that you deem too sensitive to disclose publicly in a Github issue, please send an email at jeremiepanzer at gmail dot com.
Thanks !
If you found a vulnerability that you deem too sensitive to disclose publicly in a Github issue, please create a private security advisory here: https://github.com/Athou/commafeed/security/advisories

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"$schema": "https://biomejs.dev/schemas/2.2.4/schema.json",
"formatter": {
"indentStyle": "space",
"indentWidth": 4,
@@ -14,6 +14,6 @@
}
},
"files": {
"ignore": ["dist", "node_modules", "target", "target-ide"]
"includes": ["**", "!**/dist", "!**/node_modules", "!**/target", "!**/target-ide"]
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -16,69 +16,68 @@
},
"dependencies": {
"@emotion/react": "^11.14.0",
"@fontsource/open-sans": "^5.2.5",
"@lingui/core": "^5.3.0",
"@lingui/react": "^5.3.0",
"@mantine/core": "^7.17.3",
"@mantine/form": "^7.17.3",
"@mantine/hooks": "^7.17.3",
"@mantine/modals": "^7.17.3",
"@mantine/notifications": "^7.17.3",
"@mantine/spotlight": "^7.17.3",
"@fontsource/open-sans": "^5.2.7",
"@lingui/core": "^5.5.0",
"@lingui/react": "^5.5.0",
"@mantine/core": "^8.3.1",
"@mantine/form": "^8.3.1",
"@mantine/hooks": "^8.3.1",
"@mantine/modals": "^8.3.1",
"@mantine/notifications": "^8.3.1",
"@mantine/spotlight": "^8.3.1",
"@monaco-editor/react": "^4.7.0",
"@reduxjs/toolkit": "^2.6.1",
"axios": "^1.8.4",
"dayjs": "^1.11.13",
"@reduxjs/toolkit": "^2.9.0",
"axios": "^1.12.2",
"dayjs": "^1.11.17",
"escape-string-regexp": "^5.0.0",
"interweave": "^13.1.1",
"monaco-editor": "^0.52.2",
"mousetrap": "^1.6.5",
"react": "^19.1.0",
"react": "^19.1.1",
"react-async-hook": "^4.0.0",
"react-contexify": "^6.0.0",
"react-device-detect": "^2.2.3",
"react-dom": "^19.1.0",
"react-draggable": "^4.4.6",
"react-ga4": "^2.1.0",
"react-dom": "^19.1.1",
"react-draggable": "^4.5.0",
"react-icons": "^5.5.0",
"react-infinite-scroller": "^1.2.6",
"react-redux": "^9.2.0",
"react-router-dom": "^7.4.1",
"react-router-dom": "^7.9.1",
"react-swipeable": "^7.0.2",
"redoc": "^2.4.0",
"style-to-object": "^1.0.8",
"style-to-object": "^1.0.9",
"throttle-debounce": "^5.0.2",
"tinycon": "^0.6.8",
"tss-react": "^4.9.16",
"tss-react": "^4.9.19",
"websocket-heartbeat-js": "^1.1.3"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@lingui/babel-plugin-lingui-macro": "^5.3.0",
"@lingui/cli": "^5.3.0",
"@lingui/vite-plugin": "^5.3.0",
"@testing-library/jest-dom": "^6.6.3",
"@biomejs/biome": "^2.2.4",
"@lingui/babel-plugin-lingui-macro": "^5.5.0",
"@lingui/cli": "^5.5.0",
"@lingui/vite-plugin": "^5.5.0",
"@testing-library/jest-dom": "^6.8.0",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/mousetrap": "^1.6.15",
"@types/react": "^19.1.0",
"@types/react-dom": "^19.1.1",
"@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9",
"@types/react-infinite-scroller": "^1.2.5",
"@types/throttle-debounce": "^5.0.2",
"@types/tinycon": "^0.6.7",
"@vitejs/plugin-react": "^4.3.4",
"babel-plugin-macros": "^3.1.0",
"jsdom": "^26.0.0",
"rollup-plugin-visualizer": "^5.14.0",
"typescript": "^5.8.2",
"vite": "^6.2.5",
"vite-plugin-checker": "^0.9.1",
"@vitejs/plugin-react": "^5.0.3",
"babel-plugin-react-compiler": "^19.1.0-rc.3",
"jsdom": "^27.0.0",
"rollup-plugin-visualizer": "^6.0.3",
"typescript": "^5.9.2",
"vite": "^7.1.6",
"vite-plugin-checker": "^0.10.3",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.1.1"
"vitest": "^3.2.4",
"yaml": "^2.8.1"
},
"overrides": {
"react-infinite-scroller": {
"react": "^19.1.0"
"react": "^19.1.1"
}
}
}

View File

@@ -6,16 +6,19 @@
<parent>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>5.7.0</version>
<version>5.11.1</version>
</parent>
<artifactId>commafeed-client</artifactId>
<name>CommaFeed Client</name>
<properties>
<sonar.sources>package.json,src</sonar.sources>
<sonar.coverage.exclusions>**/*</sonar.coverage.exclusions>
<!-- renovate: datasource=node-version depName=node -->
<node.version>v22.14.0</node.version>
<node.version>v22.19.0</node.version>
<!-- renovate: datasource=npm depName=npm -->
<npm.version>11.2.0</npm.version>
<npm.version>11.6.0</npm.version>
</properties>
<build>

View File

@@ -3,46 +3,51 @@ import { I18nProvider } from "@lingui/react"
import { MantineProvider } from "@mantine/core"
import { ModalsProvider } from "@mantine/modals"
import { Notifications } from "@mantine/notifications"
import { Constants } from "app/constants"
import { redirectTo } from "app/redirect/slice"
import { reloadServerInfos } from "app/server/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { categoryUnreadCount } from "app/utils"
import { DisablePullToRefresh } from "components/DisablePullToRefresh"
import { ErrorBoundary } from "components/ErrorBoundary"
import { Header } from "components/header/Header"
import { Tree } from "components/sidebar/Tree"
import { useAppLoading } from "hooks/useAppLoading"
import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useI18n } from "i18n"
import { WelcomePage } from "pages/WelcomePage"
import { AdminUsersPage } from "pages/admin/AdminUsersPage"
import { MetricsPage } from "pages/admin/MetricsPage"
import { AboutPage } from "pages/app/AboutPage"
import { AddPage } from "pages/app/AddPage"
import { CategoryDetailsPage } from "pages/app/CategoryDetailsPage"
import { DonatePage } from "pages/app/DonatePage"
import { FeedDetailsPage } from "pages/app/FeedDetailsPage"
import { FeedEntriesPage } from "pages/app/FeedEntriesPage"
import Layout from "pages/app/Layout"
import { SettingsPage } from "pages/app/SettingsPage"
import { TagDetailsPage } from "pages/app/TagDetailsPage"
import { LoginPage } from "pages/auth/LoginPage"
import { PasswordRecoveryPage } from "pages/auth/PasswordRecoveryPage"
import { RegistrationPage } from "pages/auth/RegistrationPage"
import React, { useEffect, useState } from "react"
import type React from "react"
import { useEffect, useState } from "react"
import { isSafari } from "react-device-detect"
import ReactGA from "react-ga4"
import { HashRouter, Navigate, Route, Routes, useLocation, useNavigate } from "react-router-dom"
import { HashRouter, Navigate, Route, Routes, useNavigate } from "react-router-dom"
import Tinycon from "tinycon"
import { Constants } from "@/app/constants"
import { redirectTo } from "@/app/redirect/slice"
import { reloadServerInfos } from "@/app/server/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { categoryUnreadCount } from "@/app/utils"
import { DisablePullToRefresh } from "@/components/DisablePullToRefresh"
import { ErrorBoundary } from "@/components/ErrorBoundary"
import { Header } from "@/components/header/Header"
import { Tree } from "@/components/sidebar/Tree"
import { useAppLoading } from "@/hooks/useAppLoading"
import { useBrowserExtension } from "@/hooks/useBrowserExtension"
import { useI18n } from "@/i18n"
import { AdminUsersPage } from "@/pages/admin/AdminUsersPage"
import { MetricsPage } from "@/pages/admin/MetricsPage"
import { AboutPage } from "@/pages/app/AboutPage"
import { AddPage } from "@/pages/app/AddPage"
import { CategoryDetailsPage } from "@/pages/app/CategoryDetailsPage"
import { DonatePage } from "@/pages/app/DonatePage"
import { FeedDetailsPage } from "@/pages/app/FeedDetailsPage"
import { FeedEntriesPage } from "@/pages/app/FeedEntriesPage"
import Layout from "@/pages/app/Layout"
import { SettingsPage } from "@/pages/app/SettingsPage"
import { TagDetailsPage } from "@/pages/app/TagDetailsPage"
import { LoginPage } from "@/pages/auth/LoginPage"
import { PasswordRecoveryPage } from "@/pages/auth/PasswordRecoveryPage"
import { RegistrationPage } from "@/pages/auth/RegistrationPage"
import { WelcomePage } from "@/pages/WelcomePage"
function Providers(props: { children: React.ReactNode }) {
function Providers(
props: Readonly<{
children: React.ReactNode
}>
) {
const primaryColor = useAppSelector(state => state.user.settings?.primaryColor) || Constants.theme.defaultPrimaryColor
return (
<I18nProvider i18n={i18n}>
<MantineProvider
defaultColorScheme="auto"
theme={{
primaryColor: "orange",
primaryColor: primaryColor,
fontFamily: "Open Sans",
colors: {
// keep using dark colors from mantine v6
@@ -71,9 +76,6 @@ function Providers(props: { children: React.ReactNode }) {
)
}
// api documentation page is very large, load only on-demand
const ApiDocumentationPage = React.lazy(async () => await import("pages/app/ApiDocumentationPage"))
function AppRoutes() {
const sidebarVisible = useAppSelector(state => state.tree.sidebarVisible)
@@ -84,7 +86,6 @@ function AppRoutes() {
<Route path="login" element={<LoginPage />} />
<Route path="register" element={<RegistrationPage />} />
<Route path="passwordRecovery" element={<PasswordRecoveryPage />} />
<Route path="api" element={<ApiDocumentationPage />} />
<Route path="app" element={<Layout header={<Header />} sidebar={<Tree />} sidebarVisible={sidebarVisible} />}>
<Route path="category">
<Route path=":id" element={<FeedEntriesPage sourceType="category" />} />
@@ -127,26 +128,19 @@ function RedirectHandler() {
return null
}
function GoogleAnalyticsHandler() {
const location = useLocation()
const googleAnalyticsCode = useAppSelector(state => state.server.serverInfos?.googleAnalyticsCode)
useEffect(() => {
if (googleAnalyticsCode) ReactGA.initialize(googleAnalyticsCode)
}, [googleAnalyticsCode])
useEffect(() => {
if (ReactGA.isInitialized) ReactGA.send({ hitType: "pageview", page: location.pathname })
}, [location])
return null
}
function UnreadCountTitleHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) {
function UnreadCountTitleHandler({
enabled,
}: Readonly<{
enabled?: boolean
}>) {
const root = useAppSelector(state => state.tree.rootCategory)
const unreadCount = categoryUnreadCount(root)
return <title>{enabled && unreadCount > 0 ? `(${unreadCount}) CommaFeed` : "CommaFeed"}</title>
}
function UnreadCountFaviconHandler({ unreadCount, enabled }: { unreadCount: number; enabled?: boolean }) {
function UnreadCountFaviconHandler({ enabled }: { enabled?: boolean }) {
const root = useAppSelector(state => state.tree.rootCategory)
const unreadCount = categoryUnreadCount(root)
useEffect(() => {
if (enabled && unreadCount > 0) {
Tinycon.setBubble(unreadCount)
@@ -204,38 +198,32 @@ function CustomCssHandler() {
export function App() {
useI18n()
const root = useAppSelector(state => state.tree.rootCategory)
const unreadCountTitle = useAppSelector(state => state.user.settings?.unreadCountTitle)
const unreadCountFavicon = useAppSelector(state => state.user.settings?.unreadCountFavicon)
const dispatch = useAppDispatch()
const unreadCount = categoryUnreadCount(root)
useEffect(() => {
dispatch(reloadServerInfos())
}, [dispatch])
return (
<Providers>
<>
<UnreadCountTitleHandler unreadCount={unreadCount} enabled={unreadCountTitle} />
<UnreadCountFaviconHandler unreadCount={unreadCount} enabled={unreadCountFavicon} />
<BrowserExtensionBadgeUnreadCountHandler />
<CustomJsHandler />
<CustomCssHandler />
<UnreadCountTitleHandler enabled={unreadCountTitle} />
<UnreadCountFaviconHandler enabled={unreadCountFavicon} />
<BrowserExtensionBadgeUnreadCountHandler />
<CustomJsHandler />
<CustomCssHandler />
{/* disable pull-to-refresh as it messes with vertical scrolling
{/* 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 />}
{!isSafari && <DisablePullToRefresh />}
<HashRouter>
<GoogleAnalyticsHandler />
<RedirectHandler />
<AppRoutes />
</HashRouter>
</>
<HashRouter>
<RedirectHandler />
<AppRoutes />
</HashRouter>
</Providers>
)
}

View File

@@ -1,5 +1,5 @@
import { createAsyncThunk } from "@reduxjs/toolkit"
import type { AppDispatch, RootState } from "app/store"
import type { AppDispatch, RootState } from "@/app/store"
export const createAppAsyncThunk = createAsyncThunk.withTypes<{
state: RootState

View File

@@ -105,7 +105,7 @@ export const client = {
},
admin: {
getAllUsers: async () => await axiosInstance.get<UserModel[]>("admin/user/getAll"),
saveUser: async (req: AdminSaveUserRequest) => await axiosInstance.post("admin/user/save", req),
saveUser: async (req: AdminSaveUserRequest) => await axiosInstance.post<number>("admin/user/save", req),
deleteUser: async (req: IDRequest) => await axiosInstance.post("admin/user/delete", req),
getMetrics: async () => await axiosInstance.get<Metrics>("admin/metrics"),
},

View File

@@ -87,23 +87,25 @@ export const Constants = {
headerHeight: 60,
entryMaxWidth: 650,
isTopVisible: (div: HTMLElement) => {
const header = document.getElementById(Constants.dom.headerId)?.getBoundingClientRect()
const header = document.getElementsByTagName("header").item(0)?.getBoundingClientRect()
return div.getBoundingClientRect().top >= (header?.bottom ?? 0)
},
isBottomVisible: (div: HTMLElement) => {
const footer = document.getElementById(Constants.dom.footerId)?.getBoundingClientRect()
const footer = document.getElementsByTagName("footer").item(0)?.getBoundingClientRect()
return div.getBoundingClientRect().bottom <= (footer?.top ?? window.innerHeight)
},
},
dom: {
headerId: "header",
footerId: "footer",
entryId: (entry: Entry) => `entry-id-${entry.id}`,
entryContextMenuId: (entry: Entry) => entry.id,
},
theme: {
defaultPrimaryColor: "orange",
},
tooltip: {
delay: 500,
},
browserExtensionUrl: "https://github.com/Athou/commafeed-browser-extension",
customCssDocumentationUrl: "https://athou.github.io/commafeed/documentation/custom-css",
bitcoinWalletAddress: "1dymfUxqCWpyD7a6rQSqNy4rLVDBsAr5e",
}

View File

@@ -1,12 +1,12 @@
import { configureStore } from "@reduxjs/toolkit"
import { client } from "app/client"
import { loadEntries, loadMoreEntries, markAllEntries, markEntry } from "app/entries/thunks"
import { type RootState, reducers } from "app/store"
import type { Entries, Entry } from "app/types"
import type { AxiosResponse } from "axios"
import { beforeEach, describe, expect, it, vi } from "vitest"
import { client } from "@/app/client"
import { loadEntries, loadMoreEntries, markAllEntries, markEntry } from "@/app/entries/thunks"
import { type RootState, reducers } from "@/app/store"
import type { Entries, Entry } from "@/app/types"
vi.mock(import("app/client"))
vi.mock(import("@/app/client"))
describe("entries", () => {
beforeEach(() => {
@@ -27,7 +27,12 @@ describe("entries", () => {
} as AxiosResponse<Entries>)
const store = configureStore({ reducer: reducers })
const promise = store.dispatch(loadEntries({ source: { type: "feed", id: "feed-id" }, clearSearch: true }))
const promise = store.dispatch(
loadEntries({
source: { type: "feed", id: "feed-id" },
clearSearch: true,
})
)
expect(store.getState().entries.source.type).toBe("feed")
expect(store.getState().entries.source.id).toBe("feed-id")
@@ -130,11 +135,19 @@ describe("entries", () => {
} as RootState,
})
store.dispatch(markAllEntries({ sourceType: "category", req: { id: "all", read: true } }))
store.dispatch(
markAllEntries({
sourceType: "category",
req: { id: "all", read: true },
})
)
expect(store.getState().entries.entries).toStrictEqual([
{ id: "3", read: true },
{ id: "4", read: true },
])
expect(client.category.markEntries).toHaveBeenCalledWith({ id: "all", read: true })
expect(client.category.markEntries).toHaveBeenCalledWith({
id: "all",
read: true,
})
})
})

View File

@@ -1,7 +1,7 @@
import { type PayloadAction, createSlice } from "@reduxjs/toolkit"
import { Constants } from "app/constants"
import { loadEntries, loadMoreEntries, markAllEntries, markEntry, markMultipleEntries, starEntry, tagEntry } from "app/entries/thunks"
import type { Entry } from "app/types"
import { createSlice, type PayloadAction } from "@reduxjs/toolkit"
import { Constants } from "@/app/constants"
import { loadEntries, loadMoreEntries, markAllEntries, markEntry, markMultipleEntries, starEntry, tagEntry } from "@/app/entries/thunks"
import type { Entry } from "@/app/types"
export type EntrySourceType = "category" | "feed" | "tag"
@@ -28,6 +28,7 @@ interface EntriesState {
loading: boolean
search?: string
scrollingToEntry: boolean
markAllAsReadConfirmationDialogOpen: boolean
}
const initialState: EntriesState = {
@@ -41,6 +42,7 @@ const initialState: EntriesState = {
hasMore: true,
loading: false,
scrollingToEntry: false,
markAllAsReadConfirmationDialogOpen: false,
}
export const entriesSlice = createSlice({
@@ -61,6 +63,9 @@ export const entriesSlice = createSlice({
setSearch: (state, action: PayloadAction<string>) => {
state.search = action.payload
},
setMarkAllAsReadConfirmationDialogOpen: (state, action: PayloadAction<boolean>) => {
state.markAllAsReadConfirmationDialogOpen = action.payload
},
},
extraReducers: builder => {
builder.addCase(markEntry.pending, (state, action) => {
@@ -119,4 +124,4 @@ export const entriesSlice = createSlice({
},
})
export const { setSearch } = entriesSlice.actions
export const { setSearch, setMarkAllAsReadConfirmationDialogOpen } = entriesSlice.actions

View File

@@ -1,13 +1,19 @@
import { createAppAsyncThunk } from "app/async-thunk"
import { client } from "app/client"
import { Constants } from "app/constants"
import { type EntrySource, type EntrySourceType, entriesSlice, setSearch } from "app/entries/slice"
import type { RootState } from "app/store"
import { reloadTree } from "app/tree/thunks"
import type { Entry, MarkRequest, TagRequest } from "app/types"
import { reloadTags } from "app/user/thunks"
import { scrollToWithCallback } from "app/utils"
import { flushSync } from "react-dom"
import { createAppAsyncThunk } from "@/app/async-thunk"
import { client } from "@/app/client"
import { Constants } from "@/app/constants"
import {
type EntrySource,
type EntrySourceType,
entriesSlice,
setMarkAllAsReadConfirmationDialogOpen,
setSearch,
} from "@/app/entries/slice"
import type { RootState } from "@/app/store"
import { reloadTree, selectNextUnreadTreeItem } from "@/app/tree/thunks"
import type { Entry, MarkRequest, TagRequest } from "@/app/types"
import { reloadTags } from "@/app/user/thunks"
import { scrollToWithCallback } from "@/app/utils"
const getEndpoint = (sourceType: EntrySourceType) =>
sourceType === "category" || sourceType === "tag" ? client.category.getEntries : client.feed.getEntries
@@ -50,7 +56,7 @@ const buildGetEntriesPaginatedRequest = (state: RootState, source: EntrySource,
keywords: state.entries.search,
})
export const reloadEntries = createAppAsyncThunk("entries/reload", (arg, thunkApi) => {
export const reloadEntries = createAppAsyncThunk("entries/reload", (_, thunkApi) => {
const state = thunkApi.getState()
thunkApi.dispatch(loadEntries({ source: state.entries.source, clearSearch: false }))
})
@@ -123,6 +129,36 @@ export const markAllEntries = createAppAsyncThunk(
}
)
export const markAllAsReadWithConfirmationIfRequired = createAppAsyncThunk(
"entries/entry/markAllAsReadWithConfirmationIfRequired",
async (_, thunkApi) => {
const state = thunkApi.getState()
const source = state.entries.source
const entriesTimestamp = state.entries.timestamp ?? Date.now()
const markAllAsReadConfirmation = state.user.settings?.markAllAsReadConfirmation
const markAllAsReadNavigateToNextUnread = state.user.settings?.markAllAsReadNavigateToNextUnread
if (markAllAsReadConfirmation) {
thunkApi.dispatch(setMarkAllAsReadConfirmationDialogOpen(true))
} else {
await thunkApi.dispatch(
markAllEntries({
sourceType: source.type,
req: {
id: source.id,
read: true,
olderThan: Date.now(),
insertedBefore: entriesTimestamp,
},
})
)
const isAllCategorySelected = source.type === "category" && source.id === Constants.categories.all.id
if (markAllAsReadNavigateToNextUnread && !isAllCategorySelected)
await thunkApi.dispatch(selectNextUnreadTreeItem({ direction: "forward" }))
}
}
)
export const starEntry = createAppAsyncThunk(
"entries/entry/star",
(arg: { entry: Entry; starred: boolean }) => {
@@ -204,7 +240,7 @@ export const selectEntry = createAppAsyncThunk(
)
const scrollToEntry = (entryElement: HTMLElement, margin: number, scrollSpeed: number | undefined, onScrollEnded: () => void) => {
const header = document.getElementById(Constants.dom.headerId)?.getBoundingClientRect()
const header = document.getElementsByTagName("header").item(0)?.getBoundingClientRect()
const offset = (header?.bottom ?? 0) + margin
scrollToWithCallback({
options: {

View File

@@ -1,6 +1,6 @@
import { redirectToCategory } from "app/redirect/thunks"
import { store } from "app/store"
import { describe, expect, it } from "vitest"
import { redirectToCategory } from "@/app/redirect/thunks"
import { store } from "@/app/store"
describe("redirects", () => {
it("redirects to category", async () => {

View File

@@ -1,4 +1,4 @@
import { type PayloadAction, createSlice } from "@reduxjs/toolkit"
import { createSlice, type PayloadAction } from "@reduxjs/toolkit"
interface RedirectState {
to?: string

View File

@@ -1,12 +1,14 @@
import { createAppAsyncThunk } from "app/async-thunk"
import { Constants } from "app/constants"
import { redirectTo } from "app/redirect/slice"
import { createAppAsyncThunk } from "@/app/async-thunk"
import { Constants } from "@/app/constants"
import { redirectTo } from "@/app/redirect/slice"
export const redirectToLogin = createAppAsyncThunk("redirect/login", (_, thunkApi) => thunkApi.dispatch(redirectTo("/login")))
export const redirectToRegistration = createAppAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register")))
export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/api")))
export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", () => {
window.location.href = "api-documentation/"
})
export const redirectToSelectedSource = createAppAsyncThunk("redirect/selectedSource", (_, thunkApi) => {
const { source } = thunkApi.getState().entries

View File

@@ -1,6 +1,6 @@
import { type PayloadAction, createSlice } from "@reduxjs/toolkit"
import { reloadServerInfos } from "app/server/thunks"
import type { ServerInfo } from "app/types"
import { createSlice, type PayloadAction } from "@reduxjs/toolkit"
import { reloadServerInfos } from "@/app/server/thunks"
import type { ServerInfo } from "@/app/types"
interface ServerState {
serverInfos?: ServerInfo

View File

@@ -1,4 +1,4 @@
import { createAppAsyncThunk } from "app/async-thunk"
import { client } from "app/client"
import { createAppAsyncThunk } from "@/app/async-thunk"
import { client } from "@/app/client"
export const reloadServerInfos = createAppAsyncThunk("server/infos", async () => await client.server.getServerInfos().then(r => r.data))

View File

@@ -1,11 +1,11 @@
import { configureStore } from "@reduxjs/toolkit"
import { entriesSlice } from "app/entries/slice"
import { redirectSlice } from "app/redirect/slice"
import { serverSlice } from "app/server/slice"
import { treeSlice } from "app/tree/slice"
import type { LocalSettings } from "app/types"
import { initialLocalSettings, userSlice } from "app/user/slice"
import { type TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
import { entriesSlice } from "@/app/entries/slice"
import { redirectSlice } from "@/app/redirect/slice"
import { serverSlice } from "@/app/server/slice"
import { treeSlice } from "@/app/tree/slice"
import type { LocalSettings } from "@/app/types"
import { initialLocalSettings, userSlice } from "@/app/user/slice"
export const reducers = {
entries: entriesSlice.reducer,
@@ -17,19 +17,9 @@ export const reducers = {
const loadLocalSettings = (): LocalSettings => {
const json = localStorage.getItem("commafeed-local-settings")
if (json) {
return JSON.parse(json)
}
// load old settings
const viewMode = localStorage.getItem("view-mode")
const sidebarWidth = localStorage.getItem("sidebar-width")
const announcementHash = localStorage.getItem("announcement-hash")
return {
...initialLocalSettings,
viewMode: viewMode ? JSON.parse(viewMode) : initialLocalSettings.viewMode,
sidebarWidth: sidebarWidth ? JSON.parse(sidebarWidth) : initialLocalSettings.sidebarWidth,
announcementHash: announcementHash ? JSON.parse(announcementHash) : initialLocalSettings.announcementHash,
...(json ? JSON.parse(json) : {}),
}
}

View File

@@ -1,12 +1,22 @@
import { type PayloadAction, createSlice } from "@reduxjs/toolkit"
import { markEntry } from "app/entries/thunks"
import { redirectTo } from "app/redirect/slice"
import { collapseTreeCategory, reloadTree } from "app/tree/thunks"
import type { Category } from "app/types"
import { visitCategoryTree } from "app/utils"
import { createSlice, type PayloadAction } from "@reduxjs/toolkit"
import { loadEntries, markEntry } from "@/app/entries/thunks"
import { redirectTo } from "@/app/redirect/slice"
import { collapseTreeCategory, reloadTree } from "@/app/tree/thunks"
import type { Category, Subscription } from "@/app/types"
import { flattenCategoryTree, visitCategoryTree } from "@/app/utils"
export interface TreeSubscription extends Subscription {
// client-side only flag
hasNewEntries?: boolean
}
export interface TreeCategory extends Category {
feeds: TreeSubscription[]
children: TreeCategory[]
}
interface TreeState {
rootCategory?: Category
rootCategory?: TreeCategory
mobileMenuOpen: boolean
sidebarVisible: boolean
}
@@ -37,12 +47,27 @@ export const treeSlice = createSlice({
visitCategoryTree(state.rootCategory, c => {
for (const f of c.feeds.filter(f => f.id === action.payload.feedId)) {
f.unread += action.payload.amount
f.hasNewEntries = true
}
})
},
},
extraReducers: builder => {
builder.addCase(reloadTree.fulfilled, (state, action) => {
// set hasNewEntries to true if new unread > previous unread
if (state.rootCategory) {
const oldFeeds = flattenCategoryTree(state.rootCategory).flatMap(c => c.feeds)
const oldFeedsById = new Map(oldFeeds.map(f => [f.id, f]))
const newFeeds = flattenCategoryTree(action.payload).flatMap(c => c.feeds)
for (const newFeed of newFeeds) {
const oldFeed = oldFeedsById.get(newFeed.id)
if (oldFeed && newFeed.unread > oldFeed.unread) {
newFeed.hasNewEntries = true
}
}
}
state.rootCategory = action.payload
})
builder.addCase(collapseTreeCategory.pending, (state, action) => {
@@ -59,6 +84,25 @@ export const treeSlice = createSlice({
}
})
})
builder.addCase(loadEntries.fulfilled, (state, action) => {
if (!state.rootCategory) return
const { source } = action.meta.arg
if (source.type === "category") {
visitCategoryTree(state.rootCategory, c => {
if (c.id === source.id) {
for (const f of flattenCategoryTree(c).flatMap(c => c.feeds)) {
f.hasNewEntries = false
}
}
})
} else if (source.type === "feed") {
const feeds = flattenCategoryTree(state.rootCategory).flatMap(c => c.feeds)
for (const f of feeds.filter(f => f.id === +source.id)) {
f.hasNewEntries = false
}
}
})
builder.addCase(redirectTo, state => {
state.mobileMenuOpen = false
})

View File

@@ -1,15 +1,16 @@
import { createAppAsyncThunk } from "app/async-thunk"
import { client } from "app/client"
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"
import { createAppAsyncThunk } from "@/app/async-thunk"
import { client } from "@/app/client"
import { Constants } from "@/app/constants"
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 collapseTreeCategory = createAppAsyncThunk(
"tree/category/collapse",
async (req: CollapseRequest) => await client.category.collapse(req)
async (req: CollapseRequest) => await client.category.collapse(req).then(r => r.data)
)
export const selectNextUnreadTreeItem = createAppAsyncThunk(
@@ -53,6 +54,9 @@ export const selectNextUnreadTreeItem = createAppAsyncThunk(
}
}
}
// redirect to 'all' if no unread categories or feeds found or if we reached the end of the list
thunkApi.dispatch(redirectToCategory(Constants.categories.all.id))
}
)

View File

@@ -1,8 +1,13 @@
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"
import type { AxiosResponse } from "axios"
import { beforeEach, describe, expect, it, vi } from "vitest"
import { client } from "@/app/client"
import { loadEntries } from "@/app/entries/thunks"
import { type RootState, reducers } from "@/app/store"
import { newFeedEntriesDiscovered, selectNextUnreadTreeItem } from "@/app/tree/thunks"
import type { Category, Entries, Entry, Subscription } from "@/app/types"
vi.mock(import("@/app/client"))
const createCategory = (id: string): Category => ({
id,
@@ -117,3 +122,51 @@ describe("selectNextUnreadTreeItem", () => {
expect(store.getState().redirect.to).toBe("/app/feed/3")
})
})
describe("hasNewEntries", () => {
beforeEach(() => {
vi.resetAllMocks()
})
it("sets and clear flag for a feed", async () => {
vi.mocked(client.feed.getEntries).mockResolvedValue({
data: {
entries: [{ id: "3" } as Entry],
hasMore: false,
name: "my-feed",
errorCount: 3,
feedLink: "https://mysite.com/feed",
timestamp: 123,
ignoredReadStatus: false,
},
} as AxiosResponse<Entries>)
const store = configureStore({
reducer: reducers,
preloadedState: {
tree: {
rootCategory: root,
},
entries: {
source: {
type: "feed",
id: "1",
},
},
} as RootState,
})
// initial state
expect(store.getState().tree.rootCategory?.children[0].feeds[0].unread).toBe(0)
expect(store.getState().tree.rootCategory?.children[0].feeds[0].hasNewEntries).toBeFalsy()
// increments unread count and sets hasNewEntries to true
await store.dispatch(newFeedEntriesDiscovered({ feedId: 1, amount: 3 }))
expect(store.getState().tree.rootCategory?.children[0].feeds[0].unread).toBe(3)
expect(store.getState().tree.rootCategory?.children[0].feeds[0].hasNewEntries).toBe(true)
// reload entries and sets hasNewEntries to false
await store.dispatch(loadEntries({ source: { type: "feed", id: "1" }, clearSearch: true }))
expect(store.getState().tree.rootCategory?.children[0].feeds[0].hasNewEntries).toBe(false)
})
})

View File

@@ -214,7 +214,6 @@ export interface ServerInfo {
version: string
gitCommit: string
allowRegistrations: boolean
googleAnalyticsCode?: string
smtpEnabled: boolean
demoAccountEnabled: boolean
websocketEnabled: boolean
@@ -248,10 +247,12 @@ export interface Settings {
starIconDisplayMode: IconDisplayMode
externalLinkIconDisplayMode: IconDisplayMode
markAllAsReadConfirmation: boolean
markAllAsReadNavigateToNextUnread: boolean
customContextMenu: boolean
mobileFooter: boolean
unreadCountTitle: boolean
unreadCountFavicon: boolean
primaryColor?: string
sharingSettings: SharingSettings
}
@@ -259,6 +260,7 @@ export interface LocalSettings {
viewMode: ViewMode
sidebarWidth: number
announcementHash: string
fontSizePercentage: number
}
export interface StarRequest {

View File

@@ -1,14 +1,16 @@
import { t } from "@lingui/core/macro"
import { showNotification } from "@mantine/notifications"
import { type PayloadAction, createSlice, isAnyOf } from "@reduxjs/toolkit"
import type { LocalSettings, Settings, UserModel, ViewMode } from "app/types"
import { createSlice, isAnyOf, type PayloadAction } from "@reduxjs/toolkit"
import type { LocalSettings, Settings, UserModel, ViewMode } from "@/app/types"
import {
changeCustomContextMenu,
changeEntriesToKeepOnTopWhenScrolling,
changeExternalLinkIconDisplayMode,
changeLanguage,
changeMarkAllAsReadConfirmation,
changeMarkAllAsReadNavigateToUnread,
changeMobileFooter,
changePrimaryColor,
changeReadingMode,
changeReadingOrder,
changeScrollMarks,
@@ -35,6 +37,7 @@ export const initialLocalSettings: LocalSettings = {
viewMode: "detailed",
sidebarWidth: 360,
announcementHash: "no-hash",
fontSizePercentage: 100,
}
const initialState: UserState = {
@@ -48,6 +51,9 @@ export const userSlice = createSlice({
setViewMode: (state, action: PayloadAction<ViewMode>) => {
state.localSettings.viewMode = action.payload
},
setFontSizePercentage: (state, action: PayloadAction<number>) => {
state.localSettings.fontSizePercentage = action.payload
},
setSidebarWidth: (state, action: PayloadAction<number>) => {
state.localSettings.sidebarWidth = action.payload
},
@@ -109,6 +115,10 @@ export const userSlice = createSlice({
if (!state.settings) return
state.settings.markAllAsReadConfirmation = action.meta.arg
})
builder.addCase(changeMarkAllAsReadNavigateToUnread.pending, (state, action) => {
if (!state.settings) return
state.settings.markAllAsReadNavigateToNextUnread = action.meta.arg
})
builder.addCase(changeCustomContextMenu.pending, (state, action) => {
if (!state.settings) return
state.settings.customContextMenu = action.meta.arg
@@ -125,6 +135,10 @@ export const userSlice = createSlice({
if (!state.settings) return
state.settings.unreadCountFavicon = action.meta.arg
})
builder.addCase(changePrimaryColor.pending, (state, action) => {
if (!state.settings) return
state.settings.primaryColor = action.meta.arg
})
builder.addCase(changeSharingSetting.pending, (state, action) => {
if (!state.settings) return
state.settings.sharingSettings[action.meta.arg.site] = action.meta.arg.value
@@ -140,10 +154,12 @@ export const userSlice = createSlice({
changeStarIconDisplayMode.fulfilled,
changeExternalLinkIconDisplayMode.fulfilled,
changeMarkAllAsReadConfirmation.fulfilled,
changeMarkAllAsReadNavigateToUnread.fulfilled,
changeCustomContextMenu.fulfilled,
changeMobileFooter.fulfilled,
changeUnreadCountTitle.fulfilled,
changeUnreadCountFavicon.fulfilled,
changePrimaryColor.fulfilled,
changeSharingSetting.fulfilled
),
() => {
@@ -156,4 +172,4 @@ export const userSlice = createSlice({
},
})
export const { setViewMode, setSidebarWidth, setAnnouncementHash } = userSlice.actions
export const { setViewMode, setSidebarWidth, setAnnouncementHash, setFontSizePercentage } = userSlice.actions

View File

@@ -1,7 +1,7 @@
import { createAppAsyncThunk } from "app/async-thunk"
import { client } from "app/client"
import { reloadEntries } from "app/entries/thunks"
import type { IconDisplayMode, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "app/types"
import { createAppAsyncThunk } from "@/app/async-thunk"
import { client } from "@/app/client"
import { reloadEntries } from "@/app/entries/thunks"
import type { IconDisplayMode, ReadingMode, ReadingOrder, ScrollMode, SharingSettings } from "@/app/types"
export const reloadSettings = createAppAsyncThunk("settings/reload", async () => await client.user.getSettings().then(r => r.data))
@@ -89,6 +89,15 @@ export const changeMarkAllAsReadConfirmation = createAppAsyncThunk(
}
)
export const changeMarkAllAsReadNavigateToUnread = createAppAsyncThunk(
"settings/markAllAsReadNavigateToUnread",
(markAllAsReadNavigateToNextUnread: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
client.user.saveSettings({ ...settings, markAllAsReadNavigateToNextUnread })
}
)
export const changeCustomContextMenu = createAppAsyncThunk("settings/customContextMenu", (customContextMenu: boolean, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
@@ -113,6 +122,12 @@ export const changeUnreadCountFavicon = createAppAsyncThunk("settings/unreadCoun
client.user.saveSettings({ ...settings, unreadCountFavicon })
})
export const changePrimaryColor = createAppAsyncThunk("settings/primaryColor", (primaryColor: string, thunkApi) => {
const { settings } = thunkApi.getState().user
if (!settings) return
client.user.saveSettings({ ...settings, primaryColor })
})
export const changeSharingSetting = createAppAsyncThunk(
"settings/sharingSetting",
(

View File

@@ -1,9 +1,10 @@
import { throttle } from "throttle-debounce"
import type { TreeCategory } from "@/app/tree/slice"
import type { Category } from "./types"
export function visitCategoryTree(
category: Category,
visitor: (category: Category) => void,
category: TreeCategory,
visitor: (category: TreeCategory) => void,
options?: {
childrenFirst?: boolean
}
@@ -19,13 +20,13 @@ export function visitCategoryTree(
if (childrenFirst) visitor(category)
}
export function flattenCategoryTree(category: Category): Category[] {
export function flattenCategoryTree(category: TreeCategory): TreeCategory[] {
const categories: Category[] = []
visitCategoryTree(category, c => categories.push(c))
return categories
}
export function categoryUnreadCount(category?: Category): number {
export function categoryUnreadCount(category?: TreeCategory): number {
if (!category) return 0
return flattenCategoryTree(category)
@@ -34,6 +35,14 @@ export function categoryUnreadCount(category?: Category): number {
.reduce((total, current) => total + current, 0)
}
export function categoryHasNewEntries(category?: TreeCategory): boolean {
if (!category) return false
return flattenCategoryTree(category)
.flatMap(c => c.feeds)
.some(f => f.hasNewEntries)
}
export const calculatePlaceholderSize = ({ width, height, maxWidth }: { width?: number; height?: number; maxWidth: number }) => {
const placeholderWidth = width && Math.min(width, maxWidth)
const placeholderHeight = height && width && width > maxWidth ? height * (maxWidth / width) : height

View File

@@ -1,8 +1,8 @@
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 { useActionButton } from "@/hooks/useActionButton"
import { ActionButton } from "./ActionButton"
vi.mock(import("@lingui/react"), () => ({
@@ -10,7 +10,7 @@ vi.mock(import("@lingui/react"), () => ({
_: msg => msg,
} as I18nContext),
}))
vi.mock(import("hooks/useActionButton"))
vi.mock(import("@/hooks/useActionButton"))
const label = "Test Label"
const icon = "Test Icon"
@@ -18,7 +18,9 @@ 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 })
render(<ActionButton label={label} icon={icon} />, {
wrapper: MantineProvider,
})
expect(screen.getByText(label)).toBeInTheDocument()
expect(screen.getByText(icon)).toBeInTheDocument()
})
@@ -26,7 +28,9 @@ describe("ActionButton", () => {
it("renders ActionIcon with tooltip on mobile", async () => {
vi.mocked(useActionButton).mockReturnValue({ mobile: true, spacing: 0 })
render(<ActionButton label={label} icon={icon} />, { wrapper: MantineProvider })
render(<ActionButton label={label} icon={icon} />, {
wrapper: MantineProvider,
})
expect(screen.queryByText(label)).not.toBeInTheDocument()
expect(screen.getByText(icon)).toBeInTheDocument()
@@ -39,7 +43,9 @@ describe("ActionButton", () => {
vi.mocked(useActionButton).mockReturnValue({ mobile: false, spacing: 0 })
const clickListener = vi.fn()
render(<ActionButton label={label} icon={icon} onClick={clickListener} />, { wrapper: MantineProvider })
render(<ActionButton label={label} icon={icon} onClick={clickListener} />, {
wrapper: MantineProvider,
})
fireEvent.click(screen.getByRole("button"))
expect(clickListener).toHaveBeenCalled()

View File

@@ -2,9 +2,9 @@ import type { MessageDescriptor } from "@lingui/core"
import { useLingui } from "@lingui/react"
import { ActionIcon, Box, Button, type ButtonVariant, Tooltip, useMantineTheme } from "@mantine/core"
import type { ActionIconVariant } from "@mantine/core/lib/components/ActionIcon/ActionIcon"
import { Constants } from "app/constants"
import { useActionButton } from "hooks/useActionButton"
import { type MouseEventHandler, type ReactNode, forwardRef } from "react"
import { forwardRef, type MouseEventHandler, type ReactNode } from "react"
import { Constants } from "@/app/constants"
import { useActionButton } from "@/hooks/useActionButton"
interface ActionButtonProps {
icon: ReactNode
@@ -29,7 +29,7 @@ export const ActionButton = forwardRef<HTMLDivElement, ActionButtonProps>((props
const iconOnly = (mobile && !props.showLabelOnMobile) || (!mobile && props.hideLabelOnDesktop)
return (
<Box ref={ref}>
<Box ref={ref} className="cf-action-button">
{iconOnly && (
<Tooltip label={label} openDelay={Constants.tooltip.delay}>
<ActionIcon

View File

@@ -10,7 +10,7 @@ export interface ErrorsAlertProps {
messages: string[]
}
export function Alert(props: ErrorsAlertProps) {
export function Alert(props: Readonly<ErrorsAlertProps>) {
let title: React.ReactNode
let color: string
let icon: React.ReactNode

View File

@@ -1,9 +1,9 @@
import { Trans } from "@lingui/react/macro"
import { Box, Dialog, Text } from "@mantine/core"
import { useAppDispatch, useAppSelector } from "app/store"
import { setAnnouncementHash } from "app/user/slice"
import { Content } from "components/content/Content"
import { useAsync } from "react-async-hook"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { setAnnouncementHash } from "@/app/user/slice"
import { Content } from "@/components/content/Content"
const sha256Hex = async (input: string | undefined) => {
const data = new TextEncoder().encode(input)

View File

@@ -1,4 +1,4 @@
export const DisablePullToRefresh = () => {
import("./DisablePullToRefresh.css")
return <></>
return null
}

View File

@@ -1,5 +1,5 @@
import { ErrorPage } from "pages/ErrorPage"
import React, { type ReactNode } from "react"
import { ErrorPage } from "@/pages/ErrorPage"
interface ErrorBoundaryProps {
children?: ReactNode

View File

@@ -1,7 +1,7 @@
import { Box, Center } from "@mantine/core"
import { useState } from "react"
import { TbPhoto } from "react-icons/tb"
import { tss } from "tss"
import { tss } from "@/tss"
interface ImageWithPlaceholderWhileLoadingProps {
src: string
@@ -44,7 +44,7 @@ export function ImageWithPlaceholderWhileLoading({
title,
width,
style,
}: ImageWithPlaceholderWhileLoadingProps) {
}: Readonly<ImageWithPlaceholderWhileLoadingProps>) {
const { classes } = useStyles({
placeholderWidth,
placeholderHeight,

View File

@@ -1,7 +1,7 @@
import { Trans } from "@lingui/react/macro"
import { Anchor, Box, Kbd, Stack, Table } from "@mantine/core"
import { useOs } from "@mantine/hooks"
import { Constants } from "app/constants"
import { Constants } from "@/app/constants"
export function KeyboardShortcutsHelp() {
const isMacOS = useOs() === "macos"

View File

@@ -1,10 +1,10 @@
import { Image } from "@mantine/core"
import logo from "assets/logo.svg"
import logo from "@/assets/logo.svg"
export interface LogoProps {
size: number
}
export function Logo(props: LogoProps) {
export function Logo(props: Readonly<LogoProps>) {
return <Image src={logo} w={props.size} />
}

View File

@@ -0,0 +1,83 @@
import { Trans } from "@lingui/react/macro"
import { Button, Code, Group, Modal, Slider, Stack, Text } from "@mantine/core"
import { useState } from "react"
import { Constants } from "@/app/constants"
import { setMarkAllAsReadConfirmationDialogOpen } from "@/app/entries/slice"
import { markAllEntries } from "@/app/entries/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { selectNextUnreadTreeItem } from "@/app/tree/thunks"
export function MarkAllAsReadConfirmationDialog() {
const [threshold, setThreshold] = useState(0)
const open = useAppSelector(state => state.entries.markAllAsReadConfirmationDialogOpen)
const source = useAppSelector(state => state.entries.source)
const sourceLabel = useAppSelector(state => state.entries.sourceLabel)
const entriesTimestamp = useAppSelector(state => state.entries.timestamp) ?? Date.now()
const markAllAsReadNavigateToNextUnread = useAppSelector(state => state.user.settings?.markAllAsReadNavigateToNextUnread)
const dispatch = useAppDispatch()
const onConfirm = async () => {
dispatch(setMarkAllAsReadConfirmationDialogOpen(false))
await dispatch(
markAllEntries({
sourceType: source.type,
req: {
id: source.id,
read: true,
olderThan: Date.now() - threshold * 24 * 60 * 60 * 1000,
insertedBefore: entriesTimestamp,
},
})
)
const isAllCategorySelected = source.type === "category" && source.id === Constants.categories.all.id
if (markAllAsReadNavigateToNextUnread && !isAllCategorySelected) await dispatch(selectNextUnreadTreeItem({ direction: "forward" }))
}
return (
<Modal
opened={open}
onClose={() => dispatch(setMarkAllAsReadConfirmationDialogOpen(false))}
title={<Trans>Mark all entries as read</Trans>}
>
<Stack>
<Text size="sm">
{threshold === 0 && (
<Trans>
Are you sure you want to mark all entries of <Code>{sourceLabel}</Code> as read?
</Trans>
)}
{threshold > 0 && (
<Trans>
Are you sure you want to mark entries older than {threshold} days of <Code>{sourceLabel}</Code> as read?
</Trans>
)}
</Text>
<Slider
py="xl"
min={0}
max={28}
marks={[
{ value: 0, label: "0" },
{ value: 7, label: "7" },
{ value: 14, label: "14" },
{ value: 21, label: "21" },
{ value: 28, label: "28" },
]}
value={threshold}
onChange={setThreshold}
data-autofocus
onKeyDown={e => e.key === "Enter" && onConfirm()}
/>
<Group justify="flex-end">
<Button variant="default" onClick={() => dispatch(setMarkAllAsReadConfirmationDialogOpen(false))}>
<Trans>Cancel</Trans>
</Button>
<Button color="red" onClick={onConfirm}>
<Trans>Confirm</Trans>
</Button>
</Group>
</Stack>
</Modal>
)
}

View File

@@ -1,10 +1,14 @@
import { Trans } from "@lingui/react/macro"
import { Tooltip } from "@mantine/core"
import { Constants } from "app/constants"
import dayjs from "dayjs"
import { useNow } from "hooks/useNow"
import { Constants } from "@/app/constants"
import { useNow } from "@/hooks/useNow"
export function RelativeDate(props: { date: Date | number | undefined }) {
export function RelativeDate(
props: Readonly<{
date: Date | number | undefined
}>
) {
const now = useNow(60 * 1000)
if (!props.date) return <Trans>N/A</Trans>

View File

@@ -1,11 +1,11 @@
import { Trans } from "@lingui/react/macro"
import { Box, Button, Checkbox, Group, PasswordInput, Stack, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { client, errorToStrings } from "app/client"
import type { AdminSaveUserRequest, UserModel } from "app/types"
import { Alert } from "components/Alert"
import { useAsyncCallback } from "react-async-hook"
import { TbDeviceFloppy } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import type { AdminSaveUserRequest, UserModel } from "@/app/types"
import { Alert } from "@/components/Alert"
interface UserEditProps {
user?: UserModel
@@ -13,7 +13,7 @@ interface UserEditProps {
onSave: () => void
}
export function UserEdit(props: UserEditProps) {
export function UserEdit(props: Readonly<UserEditProps>) {
const form = useForm<AdminSaveUserRequest>({
initialValues: props.user ?? {
name: "",

View File

@@ -1,16 +1,17 @@
import { Input, Textarea } from "@mantine/core"
import RichCodeEditor from "components/code/RichCodeEditor"
import { useMobile } from "hooks/useMobile"
import type { ReactNode } from "react"
import RichCodeEditor from "@/components/code/RichCodeEditor"
import { useMobile } from "@/hooks/useMobile"
interface CodeEditorProps {
label?: ReactNode
description?: ReactNode
language: "css" | "javascript"
value?: string
onChange: (value: string | undefined) => void
}
export function CodeEditor(props: CodeEditorProps) {
export function CodeEditor(props: Readonly<CodeEditorProps>) {
const mobile = useMobile()
return mobile ? (
@@ -19,6 +20,7 @@ export function CodeEditor(props: CodeEditorProps) {
autosize
minRows={4}
maxRows={15}
label={props.label}
description={props.description}
styles={{
input: {
@@ -29,7 +31,7 @@ export function CodeEditor(props: CodeEditorProps) {
onChange={e => props.onChange(e.currentTarget.value)}
/>
) : (
<Input.Wrapper description={props.description}>
<Input.Wrapper label={props.label} description={props.description}>
<RichCodeEditor height="30vh" language={props.language} value={props.value} onChange={props.onChange} />
</Input.Wrapper>
)

View File

@@ -1,6 +1,6 @@
import { Loader } from "components/Loader"
import { useColorScheme } from "hooks/useColorScheme"
import { useAsync } from "react-async-hook"
import { Loader } from "@/components/Loader"
import { useColorScheme } from "@/hooks/useColorScheme"
const init = async () => {
window.MonacoEnvironment = {
@@ -30,7 +30,7 @@ interface RichCodeEditorProps {
onChange: (value: string | undefined) => void
}
function RichCodeEditor(props: RichCodeEditorProps) {
function RichCodeEditor(props: Readonly<RichCodeEditorProps>) {
const colorScheme = useColorScheme()
const editorTheme = colorScheme === "dark" ? "vs-dark" : "light"

View File

@@ -1,6 +1,6 @@
import { TypographyStylesProvider } from "@mantine/core"
import { Typography } from "@mantine/core"
import type { ReactNode } from "react"
import { tss } from "tss"
import { tss } from "@/tss"
/**
* This component is used to provide basic styles to html typography elements.
@@ -20,5 +20,5 @@ const useStyles = tss.create(() => ({
export const BasicHtmlStyles = (props: { children: ReactNode }) => {
const { classes } = useStyles()
return <TypographyStylesProvider className={classes.content}>{props.children}</TypographyStylesProvider>
return <Typography className={classes.content}>{props.children}</Typography>
}

View File

@@ -1,8 +1,7 @@
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"
import { Content } from "@/components/content/Content"
describe("Content component", () => {
it("renders basic content", () => {

View File

@@ -1,13 +1,13 @@
import { Box, Mark } from "@mantine/core"
import { Constants } from "app/constants"
import { calculatePlaceholderSize } from "app/utils"
import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading"
import { BasicHtmlStyles } from "components/content/BasicHtmlStyles"
import escapeStringRegexp from "escape-string-regexp"
import { ALLOWED_TAG_LIST, type ChildrenNode, Interweave, type MatchResponse, Matcher, type Node, type TransformCallback } from "interweave"
import { ALLOWED_TAG_LIST, type ChildrenNode, Interweave, Matcher, type MatchResponse, type Node, type TransformCallback } from "interweave"
import React from "react"
import styleToObject from "style-to-object"
import { tss } from "tss"
import { Constants } from "@/app/constants"
import { calculatePlaceholderSize } from "@/app/utils"
import { BasicHtmlStyles } from "@/components/content/BasicHtmlStyles"
import { ImageWithPlaceholderWhileLoading } from "@/components/ImageWithPlaceholderWhileLoading"
import { tss } from "@/tss"
export interface ContentProps {
content: string

View File

@@ -1,10 +1,12 @@
import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading"
import { BasicHtmlStyles } from "components/content/BasicHtmlStyles"
import { BasicHtmlStyles } from "@/components/content/BasicHtmlStyles"
import { ImageWithPlaceholderWhileLoading } from "@/components/ImageWithPlaceholderWhileLoading"
export function Enclosure(props: {
enclosureType: string
enclosureUrl: string
}) {
export function Enclosure(
props: Readonly<{
enclosureType: string
enclosureUrl: string
}>
) {
const hasVideo = props.enclosureType.startsWith("video")
const hasAudio = props.enclosureType.startsWith("audio")
const hasImage = props.enclosureType.startsWith("image")

View File

@@ -1,36 +1,34 @@
import { Trans } from "@lingui/react/macro"
import { Box } from "@mantine/core"
import { openModal } from "@mantine/modals"
import { Constants } from "app/constants"
import type { ExpendableEntry } from "app/entries/slice"
import { useEffect } from "react"
import { useContextMenu } from "react-contexify"
import InfiniteScroll from "react-infinite-scroller"
import { throttle } from "throttle-debounce"
import { Constants } from "@/app/constants"
import type { ExpendableEntry } from "@/app/entries/slice"
import {
loadMoreEntries,
markAllEntries,
markAllAsReadWithConfirmationIfRequired,
markEntry,
reloadEntries,
selectEntry,
selectNextEntry,
selectPreviousEntry,
starEntry,
} from "app/entries/thunks"
import { redirectToRootCategory } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { toggleSidebar } from "app/tree/slice"
import { selectNextUnreadTreeItem } from "app/tree/thunks"
import { KeyboardShortcutsHelp } from "components/KeyboardShortcutsHelp"
import { Loader } from "components/Loader"
import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useMousetrap } from "hooks/useMousetrap"
import { useEffect } from "react"
import { useContextMenu } from "react-contexify"
import InfiniteScroll from "react-infinite-scroller"
import { throttle } from "throttle-debounce"
} from "@/app/entries/thunks"
import { redirectToRootCategory } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { toggleSidebar } from "@/app/tree/slice"
import { selectNextUnreadTreeItem } from "@/app/tree/thunks"
import { KeyboardShortcutsHelp } from "@/components/KeyboardShortcutsHelp"
import { Loader } from "@/components/Loader"
import { useBrowserExtension } from "@/hooks/useBrowserExtension"
import { useMousetrap } from "@/hooks/useMousetrap"
import { FeedEntry } from "./FeedEntry"
export function FeedEntries() {
const source = useAppSelector(state => state.entries.source)
const entries = useAppSelector(state => state.entries.entries)
const entriesTimestamp = useAppSelector(state => state.entries.timestamp)
const selectedEntryId = useAppSelector(state => state.entries.selectedEntryId)
const hasMore = useAppSelector(state => state.entries.hasMore)
const loading = useAppSelector(state => state.entries.loading)
@@ -275,17 +273,7 @@ export function FeedEntries() {
})
useMousetrap("shift+a", () => {
// mark all entries as read
dispatch(
markAllEntries({
sourceType: source.type,
req: {
id: source.id,
read: true,
olderThan: Date.now(),
insertedBefore: entriesTimestamp,
},
})
)
dispatch(markAllAsReadWithConfirmationIfRequired())
})
useMousetrap("g a", async () => await dispatch(redirectToRootCategory()))
useMousetrap("f", () => dispatch(toggleSidebar()))
@@ -299,33 +287,25 @@ export function FeedEntries() {
return (
<InfiniteScroll
id="entries"
className={`view-mode-${viewMode}`}
className={`cf-entries cf-view-mode-${viewMode}`}
initialLoad={false}
loadMore={async () => await (!loading && dispatch(loadMoreEntries()))}
hasMore={hasMore}
loader={<Box key={0}>{loading && <Loader />}</Box>}
>
{entries.map(entry => (
<article
<FeedEntry
key={entry.id}
ref={el => {
if (el) el.id = Constants.dom.entryId(entry)
}}
data-id={entry.id}
>
<FeedEntry
entry={entry}
expanded={!!entry.expanded || viewMode === "expanded"}
selected={entry.id === selectedEntryId}
showSelectionIndicator={entry.id === selectedEntryId && (!entry.expanded || viewMode === "expanded")}
maxWidth={sidebarVisible ? Constants.layout.entryMaxWidth : undefined}
onHeaderClick={event => headerClicked(entry, event)}
onHeaderRightClick={event => headerRightClicked(entry, event)}
onBodyClick={() => bodyClicked(entry)}
onSwipedLeft={async () => await swipedLeft(entry)}
/>
</article>
entry={entry}
expanded={!!entry.expanded || viewMode === "expanded"}
selected={entry.id === selectedEntryId}
showSelectionIndicator={entry.id === selectedEntryId && (!entry.expanded || viewMode === "expanded")}
maxWidth={sidebarVisible ? Constants.layout.entryMaxWidth : undefined}
onHeaderClick={event => headerClicked(entry, event)}
onHeaderRightClick={event => headerRightClicked(entry, event)}
onBodyClick={() => bodyClicked(entry)}
onSwipedLeft={async () => await swipedLeft(entry)}
/>
))}
</InfiniteScroll>
)

View File

@@ -1,13 +1,13 @@
import { Box, Divider, type MantineRadius, type MantineSpacing, Paper } from "@mantine/core"
import { Constants } from "app/constants"
import { useAppSelector } from "app/store"
import type { Entry, ViewMode } from "app/types"
import { FeedEntryCompactHeader } from "components/content/header/FeedEntryCompactHeader"
import { FeedEntryHeader } from "components/content/header/FeedEntryHeader"
import { useMobile } from "hooks/useMobile"
import type React from "react"
import { useSwipeable } from "react-swipeable"
import { tss } from "tss"
import { Constants } from "@/app/constants"
import { useAppSelector } from "@/app/store"
import type { Entry, ViewMode } from "@/app/types"
import { FeedEntryCompactHeader } from "@/components/content/header/FeedEntryCompactHeader"
import { FeedEntryHeader } from "@/components/content/header/FeedEntryHeader"
import { useMobile } from "@/hooks/useMobile"
import { tss } from "@/tss"
import { FeedEntryBody } from "./FeedEntryBody"
import { FeedEntryContextMenu } from "./FeedEntryContextMenu"
import { FeedEntryFooter } from "./FeedEntryFooter"
@@ -32,8 +32,9 @@ const useStyles = tss
rtl: boolean
showSelectionIndicator: boolean
maxWidth?: number
fontSizePercentage: number
}>()
.create(({ theme, colorScheme, read, expanded, viewMode, rtl, showSelectionIndicator, maxWidth }) => {
.create(({ theme, colorScheme, read, expanded, viewMode, rtl, showSelectionIndicator, maxWidth, fontSizePercentage }) => {
let backgroundColor: string
if (colorScheme === "dark") {
backgroundColor = read ? "inherit" : theme.colors.dark[5]
@@ -83,18 +84,21 @@ const useStyles = tss
},
},
headerLink: {
fontSize: `${fontSizePercentage}%`,
color: "inherit",
textDecoration: "none",
},
body: {
fontSize: `${fontSizePercentage}%`,
direction: rtl ? "rtl" : "ltr",
maxWidth: maxWidth ?? "100%",
},
}
})
export function FeedEntry(props: FeedEntryProps) {
export function FeedEntry(props: Readonly<FeedEntryProps>) {
const viewMode = useAppSelector(state => state.user.localSettings.viewMode)
const fontSizePercentage = useAppSelector(state => state.user.localSettings.fontSizePercentage)
const { classes, cx } = useStyles({
read: props.entry.read,
expanded: props.expanded,
@@ -102,6 +106,7 @@ export function FeedEntry(props: FeedEntryProps) {
rtl: props.entry.rtl,
showSelectionIndicator: props.showSelectionIndicator,
maxWidth: props.maxWidth,
fontSizePercentage,
})
const externalLinkDisplayMode = useAppSelector(state => state.user.settings?.externalLinkIconDisplayMode)
@@ -137,6 +142,9 @@ export function FeedEntry(props: FeedEntryProps) {
const compactHeader = !props.expanded && (viewMode === "title" || viewMode === "cozy")
return (
<Paper
component="article"
id={Constants.dom.entryId(props.entry)}
data-id={props.entry.id}
withBorder
radius={borderRadius}
className={cx(classes.paper, {
@@ -176,10 +184,10 @@ export function FeedEntry(props: FeedEntryProps) {
</a>
{props.expanded && (
<Box px={paddingX} pb={paddingY} onClick={props.onBodyClick}>
<Box className={classes.body}>
<Box className={`${classes.body} cf-content`}>
<FeedEntryBody entry={props.entry} />
</Box>
<Divider variant="dashed" my={paddingY} />
<Divider variant="dashed" my={paddingY} className="cf-footer-divider" />
<FeedEntryFooter entry={props.entry} />
</Box>
)}

View File

@@ -1,6 +1,6 @@
import { Box } from "@mantine/core"
import { useAppSelector } from "app/store"
import type { Entry } from "app/types"
import { useAppSelector } from "@/app/store"
import type { Entry } from "@/app/types"
import { Content } from "./Content"
import { Enclosure } from "./Enclosure"
import { Media } from "./Media"
@@ -9,7 +9,7 @@ export interface FeedEntryBodyProps {
entry: Entry
}
export function FeedEntryBody(props: FeedEntryBodyProps) {
export function FeedEntryBody(props: Readonly<FeedEntryBodyProps>) {
const search = useAppSelector(state => state.entries.search)
return (
<Box>

View File

@@ -1,16 +1,16 @@
import { Trans } from "@lingui/react/macro"
import { Group } from "@mantine/core"
import { Constants } from "app/constants"
import { markEntriesUpToEntry, markEntry, starEntry } from "app/entries/thunks"
import { redirectToFeed } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import type { Entry } from "app/types"
import { truncate } from "app/utils"
import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useColorScheme } from "hooks/useColorScheme"
import { Item, Menu, Separator } from "react-contexify"
import { TbArrowBarToDown, TbExternalLink, TbMail, TbMailOpened, TbRss, TbStar, TbStarOff } from "react-icons/tb"
import { tss } from "tss"
import { Constants } from "@/app/constants"
import { markEntriesUpToEntry, markEntry, starEntry } from "@/app/entries/thunks"
import { redirectToFeed } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { Entry } from "@/app/types"
import { truncate } from "@/app/utils"
import { useBrowserExtension } from "@/hooks/useBrowserExtension"
import { useColorScheme } from "@/hooks/useColorScheme"
import { tss } from "@/tss"
interface FeedEntryContextMenuProps {
entry: Entry
@@ -27,7 +27,7 @@ const useStyles = tss.create(({ theme, colorScheme }) => ({
},
}))
export function FeedEntryContextMenu(props: FeedEntryContextMenuProps) {
export function FeedEntryContextMenu(props: Readonly<FeedEntryContextMenuProps>) {
const colorScheme = useColorScheme()
const { classes } = useStyles()
const sourceType = useAppSelector(state => state.entries.source.type)

View File

@@ -1,20 +1,20 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Group, Indicator, Popover, TagsInput } from "@mantine/core"
import { markEntriesUpToEntry, markEntry, starEntry, tagEntry } from "app/entries/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import type { Entry } from "app/types"
import { ActionButton } from "components/ActionButton"
import { useActionButton } from "hooks/useActionButton"
import { useMobile } from "hooks/useMobile"
import { TbArrowBarToDown, TbExternalLink, TbMail, TbMailOpened, TbShare, TbStar, TbStarOff, TbTag } from "react-icons/tb"
import { markEntriesUpToEntry, markEntry, starEntry, tagEntry } from "@/app/entries/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { Entry } from "@/app/types"
import { ActionButton } from "@/components/ActionButton"
import { useActionButton } from "@/hooks/useActionButton"
import { useMobile } from "@/hooks/useMobile"
import { ShareButtons } from "./ShareButtons"
interface FeedEntryFooterProps {
entry: Entry
}
export function FeedEntryFooter(props: FeedEntryFooterProps) {
export function FeedEntryFooter(props: Readonly<FeedEntryFooterProps>) {
const tags = useAppSelector(state => state.user.tags)
const mobile = useMobile()
const { spacing } = useActionButton()
@@ -37,7 +37,7 @@ export function FeedEntryFooter(props: FeedEntryFooterProps) {
)
return (
<Group justify="space-between">
<Group justify="space-between" className="cf-footer">
<Group gap={spacing}>
{props.entry.markable && (
<ActionButton

View File

@@ -1,11 +1,11 @@
import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading"
import { ImageWithPlaceholderWhileLoading } from "@/components/ImageWithPlaceholderWhileLoading"
export interface FeedFaviconProps {
url: string
size?: number
}
export function FeedFavicon({ url, size = 18 }: FeedFaviconProps) {
export function FeedFavicon({ url, size = 18 }: Readonly<FeedFaviconProps>) {
return (
<ImageWithPlaceholderWhileLoading
src={url}

View File

@@ -1,8 +1,8 @@
import { Box } from "@mantine/core"
import { Constants } from "app/constants"
import { calculatePlaceholderSize } from "app/utils"
import { ImageWithPlaceholderWhileLoading } from "components/ImageWithPlaceholderWhileLoading"
import { BasicHtmlStyles } from "components/content/BasicHtmlStyles"
import { Constants } from "@/app/constants"
import { calculatePlaceholderSize } from "@/app/utils"
import { BasicHtmlStyles } from "@/components/content/BasicHtmlStyles"
import { ImageWithPlaceholderWhileLoading } from "@/components/ImageWithPlaceholderWhileLoading"
import { Content } from "./Content"
export interface MediaProps {
@@ -12,7 +12,7 @@ export interface MediaProps {
description?: string
}
export function Media(props: MediaProps) {
export function Media(props: Readonly<MediaProps>) {
const width = props.thumbnailWidth
const height = props.thumbnailHeight
const placeholderSize = calculatePlaceholderSize({

View File

@@ -1,13 +1,13 @@
import { Trans } from "@lingui/react/macro"
import { ActionIcon, Box, CopyButton, Divider, SimpleGrid } from "@mantine/core"
import { Constants } from "app/constants"
import { useAppSelector } from "app/store"
import type { SharingSettings } from "app/types"
import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useMobile } from "hooks/useMobile"
import type { IconType } from "react-icons"
import { TbCheck, TbCopy, TbDeviceDesktopShare, TbDeviceMobileShare } from "react-icons/tb"
import { tss } from "tss"
import { Constants } from "@/app/constants"
import { useAppSelector } from "@/app/store"
import type { SharingSettings } from "@/app/types"
import { useBrowserExtension } from "@/hooks/useBrowserExtension"
import { useMobile } from "@/hooks/useMobile"
import { tss } from "@/tss"
type Color = `#${string}`
@@ -22,7 +22,15 @@ const useStyles = tss
},
}))
function ShareButton({ icon, color, onClick }: { icon: IconType; color: Color; onClick: () => void }) {
function ShareButton({
icon,
color,
onClick,
}: Readonly<{
icon: IconType
color: Color
onClick: () => void
}>) {
const { classes } = useStyles({
color,
})
@@ -36,7 +44,15 @@ function ShareButton({ icon, color, onClick }: { icon: IconType; color: Color; o
)
}
function SiteShareButton({ url, icon, color }: { icon: IconType; color: Color; url: string }) {
function SiteShareButton({
url,
icon,
color,
}: Readonly<{
icon: IconType
color: Color
url: string
}>) {
const onClick = () => {
window.open(url, "", "menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=800,height=600")
}
@@ -44,7 +60,11 @@ function SiteShareButton({ url, icon, color }: { icon: IconType; color: Color; u
return <ShareButton icon={icon} color={color} onClick={onClick} />
}
function CopyUrlButton({ url }: { url: string }) {
function CopyUrlButton({
url,
}: Readonly<{
url: string
}>) {
return (
<CopyButton value={url}>
{({ copied, copy }) => <ShareButton icon={copied ? TbCheck : TbCopy} color="#000" onClick={copy} />}
@@ -52,7 +72,13 @@ function CopyUrlButton({ url }: { url: string }) {
)
}
function BrowserNativeShareButton({ url, description }: { url: string; description: string }) {
function BrowserNativeShareButton({
url,
description,
}: Readonly<{
url: string
description: string
}>) {
const mobile = useMobile()
const { isBrowserExtensionPopup } = useBrowserExtension()
const onClick = () => {
@@ -71,7 +97,12 @@ function BrowserNativeShareButton({ url, description }: { url: string; descripti
)
}
export function ShareButtons(props: { url: string; description: string }) {
export function ShareButtons(
props: Readonly<{
url: string
description: string
}>
) {
const sharingSettings = useAppSelector(state => state.user.settings?.sharingSettings)
const enabledSharingSites = (Object.keys(Constants.sharing) as Array<keyof SharingSettings>).filter(site => sharingSettings?.[site])
const url = encodeURIComponent(props.url)

View File

@@ -3,14 +3,14 @@ import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Box, Button, Group, Stack, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { client, errorToStrings } from "app/client"
import { redirectToSelectedSource } from "app/redirect/thunks"
import { useAppDispatch } from "app/store"
import { reloadTree } from "app/tree/thunks"
import type { AddCategoryRequest } from "app/types"
import { Alert } from "components/Alert"
import { useAsyncCallback } from "react-async-hook"
import { TbFolderPlus } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch } from "@/app/store"
import { reloadTree } from "@/app/tree/thunks"
import type { AddCategoryRequest } from "@/app/types"
import { Alert } from "@/components/Alert"
import { CategorySelect } from "./CategorySelect"
export function AddCategory() {

View File

@@ -2,10 +2,10 @@ import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Select, type SelectProps } from "@mantine/core"
import type { ComboboxItem } from "@mantine/core/lib/components/Combobox/Combobox.types"
import { Constants } from "app/constants"
import { useAppSelector } from "app/store"
import type { Category } from "app/types"
import { flattenCategoryTree } from "app/utils"
import { Constants } from "@/app/constants"
import { useAppSelector } from "@/app/store"
import type { Category } from "@/app/types"
import { flattenCategoryTree } from "@/app/utils"
type CategorySelectProps = Partial<SelectProps> & {
withAll?: boolean

View File

@@ -3,13 +3,13 @@ import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Box, Button, FileInput, Group, Stack } from "@mantine/core"
import { isNotEmpty, useForm } from "@mantine/form"
import { client, errorToStrings } from "app/client"
import { redirectToSelectedSource } from "app/redirect/thunks"
import { useAppDispatch } from "app/store"
import { reloadTree } from "app/tree/thunks"
import { Alert } from "components/Alert"
import { useAsyncCallback } from "react-async-hook"
import { TbFileImport } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch } from "@/app/store"
import { reloadTree } from "@/app/tree/thunks"
import { Alert } from "@/components/Alert"
export function ImportOpml() {
const dispatch = useAppDispatch()

View File

@@ -1,16 +1,16 @@
import { Trans } from "@lingui/react/macro"
import { Box, Button, Group, Stack, Stepper, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { client, errorToStrings } from "app/client"
import { Constants } from "app/constants"
import { redirectToFeed, redirectToSelectedSource } from "app/redirect/thunks"
import { useAppDispatch } from "app/store"
import { reloadTree } from "app/tree/thunks"
import type { FeedInfoRequest, SubscribeRequest } from "app/types"
import { Alert } from "components/Alert"
import { useState } from "react"
import { useAsyncCallback } from "react-async-hook"
import { TbRss } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { Constants } from "@/app/constants"
import { redirectToFeed, redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch } from "@/app/store"
import { reloadTree } from "@/app/tree/thunks"
import type { FeedInfoRequest, SubscribeRequest } from "@/app/types"
import { Alert } from "@/components/Alert"
import { CategorySelect } from "./CategorySelect"
export function Subscribe() {
@@ -39,9 +39,8 @@ export function Subscribe() {
},
})
const subscribe = useAsyncCallback(client.feed.subscribe, {
onSuccess: async sub => {
await dispatch(reloadTree())
dispatch(redirectToFeed(sub.data))
onSuccess: sub => {
dispatch(reloadTree()).then(() => dispatch(redirectToFeed(sub.data)))
},
})

View File

@@ -1,11 +1,11 @@
import { Box, Text } from "@mantine/core"
import type { Entry } from "app/types"
import { RelativeDate } from "components/RelativeDate"
import { FeedFavicon } from "components/content/FeedFavicon"
import { OpenExternalLink } from "components/content/header/OpenExternalLink"
import { Star } from "components/content/header/Star"
import { OnDesktop } from "components/responsive/OnDesktop"
import { tss } from "tss"
import { Box } from "@mantine/core"
import type { Entry } from "@/app/types"
import { FeedFavicon } from "@/components/content/FeedFavicon"
import { OpenExternalLink } from "@/components/content/header/OpenExternalLink"
import { Star } from "@/components/content/header/Star"
import { RelativeDate } from "@/components/RelativeDate"
import { OnDesktop } from "@/components/responsive/OnDesktop"
import { tss } from "@/tss"
import { FeedEntryTitle } from "./FeedEntryTitle"
export interface FeedEntryHeaderProps {
@@ -43,7 +43,7 @@ const useStyles = tss
},
}))
export function FeedEntryCompactHeader(props: FeedEntryHeaderProps) {
export function FeedEntryCompactHeader(props: Readonly<FeedEntryHeaderProps>) {
const { classes } = useStyles({
read: props.entry.read,
})
@@ -54,17 +54,17 @@ export function FeedEntryCompactHeader(props: FeedEntryHeaderProps) {
<FeedFavicon url={props.entry.iconUrl} />
</Box>
<OnDesktop>
<Text c="dimmed" className={classes.feedName}>
<Box c="dimmed" className={classes.feedName}>
{props.entry.feedName}
</Text>
</Box>
</OnDesktop>
<Box className={classes.title}>
<FeedEntryTitle entry={props.entry} />
</Box>
<OnDesktop>
<Text c="dimmed" className={classes.date}>
<Box c="dimmed" className={classes.date}>
<RelativeDate date={props.entry.date} />
</Text>
</Box>
</OnDesktop>
{props.showExternalLinkIcon && <OpenExternalLink entry={props.entry} />}
</Box>

View File

@@ -1,10 +1,10 @@
import { Box, Flex, Space, Text } from "@mantine/core"
import type { Entry } from "app/types"
import { RelativeDate } from "components/RelativeDate"
import { FeedFavicon } from "components/content/FeedFavicon"
import { OpenExternalLink } from "components/content/header/OpenExternalLink"
import { Star } from "components/content/header/Star"
import { tss } from "tss"
import { Box, Flex, Space } from "@mantine/core"
import type { Entry } from "@/app/types"
import { FeedFavicon } from "@/components/content/FeedFavicon"
import { OpenExternalLink } from "@/components/content/header/OpenExternalLink"
import { Star } from "@/components/content/header/Star"
import { RelativeDate } from "@/components/RelativeDate"
import { tss } from "@/tss"
import { FeedEntryTitle } from "./FeedEntryTitle"
export interface FeedEntryHeaderProps {
@@ -22,18 +22,15 @@ const useStyles = tss
main: {
fontWeight: colorScheme === "light" && !read ? "bold" : "inherit",
},
details: {
fontSize: "90%",
},
}))
export function FeedEntryHeader(props: FeedEntryHeaderProps) {
export function FeedEntryHeader(props: Readonly<FeedEntryHeaderProps>) {
const { classes } = useStyles({
read: props.entry.read,
})
return (
<Box>
<Flex align="flex-start" justify="space-between">
<Box className="cf-header">
<Flex align="flex-start" justify="space-between" className="cf-header-title">
<Flex align="flex-start" className={classes.main}>
{props.showStarIcon && (
<Box ml={-5}>
@@ -44,22 +41,20 @@ export function FeedEntryHeader(props: FeedEntryHeaderProps) {
</Flex>
{props.showExternalLinkIcon && <OpenExternalLink entry={props.entry} />}
</Flex>
<Flex align="center" className={classes.details}>
<Flex align="center" className="cf-header-subtitle">
<FeedFavicon url={props.entry.iconUrl} />
<Space w={6} />
<Text c="dimmed">
<Box c="dimmed">
{props.entry.feedName}
<span> · </span>
<RelativeDate date={props.entry.date} />
</Text>
</Box>
</Flex>
{props.expanded && (
<Box className={classes.details}>
<Text c="dimmed">
{props.entry.author && <span>by {props.entry.author}</span>}
{props.entry.author && props.entry.categories && <span>&nbsp;·&nbsp;</span>}
{props.entry.categories && <span>{props.entry.categories}</span>}
</Text>
<Box className="cf-header-details">
{props.entry.author && <span>by {props.entry.author}</span>}
{props.entry.author && props.entry.categories && <span>&nbsp;·&nbsp;</span>}
{props.entry.categories && <span>{props.entry.categories}</span>}
</Box>
)}
</Box>

View File

@@ -1,12 +1,12 @@
import { Highlight } from "@mantine/core"
import { useAppSelector } from "app/store"
import type { Entry } from "app/types"
import { useAppSelector } from "@/app/store"
import type { Entry } from "@/app/types"
export interface FeedEntryTitleProps {
entry: Entry
}
export function FeedEntryTitle(props: FeedEntryTitleProps) {
export function FeedEntryTitle(props: Readonly<FeedEntryTitleProps>) {
const search = useAppSelector(state => state.entries.search)
const keywords = search?.split(" ")
return (

View File

@@ -1,12 +1,16 @@
import { Trans } from "@lingui/react/macro"
import { ActionIcon, Anchor, Tooltip } from "@mantine/core"
import { Constants } from "app/constants"
import { markEntry } from "app/entries/thunks"
import { useAppDispatch } from "app/store"
import type { Entry } from "app/types"
import { TbExternalLink } from "react-icons/tb"
import { Constants } from "@/app/constants"
import { markEntry } from "@/app/entries/thunks"
import { useAppDispatch } from "@/app/store"
import type { Entry } from "@/app/types"
export function OpenExternalLink(props: { entry: Entry }) {
export function OpenExternalLink(
props: Readonly<{
entry: Entry
}>
) {
const dispatch = useAppDispatch()
const onClick = (e: React.MouseEvent) => {
e.stopPropagation()

View File

@@ -1,12 +1,16 @@
import { Trans } from "@lingui/react/macro"
import { ActionIcon, Tooltip } from "@mantine/core"
import { Constants } from "app/constants"
import { starEntry } from "app/entries/thunks"
import { useAppDispatch } from "app/store"
import type { Entry } from "app/types"
import { TbStar, TbStarFilled } from "react-icons/tb"
import { Constants } from "@/app/constants"
import { starEntry } from "@/app/entries/thunks"
import { useAppDispatch } from "@/app/store"
import type { Entry } from "@/app/types"
export function Star(props: { entry: Entry }) {
export function Star(
props: Readonly<{
entry: Entry
}>
) {
const dispatch = useAppDispatch()
const onClick = (e: React.MouseEvent) => {
e.stopPropagation()

View File

@@ -2,18 +2,11 @@ import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Box, Center, CloseButton, Divider, Group, Indicator, Popover, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { reloadEntries, search, selectNextEntry, selectPreviousEntry } from "app/entries/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { changeReadingMode, changeReadingOrder } from "app/user/thunks"
import { ActionButton } from "components/ActionButton"
import { Loader } from "components/Loader"
import { useActionButton } from "hooks/useActionButton"
import { useBrowserExtension } from "hooks/useBrowserExtension"
import { useMobile } from "hooks/useMobile"
import { useEffect } from "react"
import {
TbArrowDown,
TbArrowUp,
TbChecks,
TbExternalLink,
TbEye,
TbEyeOff,
@@ -24,7 +17,14 @@ import {
TbSortDescending,
TbUser,
} from "react-icons/tb"
import { MarkAllAsReadButton } from "./MarkAllAsReadButton"
import { markAllAsReadWithConfirmationIfRequired, reloadEntries, search, selectNextEntry, selectPreviousEntry } from "@/app/entries/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { changeReadingMode, changeReadingOrder } from "@/app/user/thunks"
import { ActionButton } from "@/components/ActionButton"
import { Loader } from "@/components/Loader"
import { useActionButton } from "@/hooks/useActionButton"
import { useBrowserExtension } from "@/hooks/useBrowserExtension"
import { useMobile } from "@/hooks/useMobile"
import { ProfileMenu } from "./ProfileMenu"
function HeaderDivider() {
@@ -42,11 +42,14 @@ function HeaderToolbar(props: { children: React.ReactNode }) {
display: "flex",
justifyContent: "space-between",
}}
className="cf-toolbar"
>
{props.children}
</Box>
) : (
<Group gap={spacing}>{props.children}</Group>
<Group gap={spacing} className="cf-toolbar">
{props.children}
</Group>
)
}
@@ -60,11 +63,7 @@ export function Header() {
const dispatch = useAppDispatch()
const { _ } = useLingui()
const searchForm = useForm<{ search: string }>({
validate: {
search: value => (value.length > 0 && value.length < 3 ? _(msg`Search requires at least 3 characters`) : null),
},
})
const searchForm = useForm<{ search: string }>()
const { setValues } = searchForm
useEffect(() => {
@@ -75,7 +74,7 @@ export function Header() {
if (!settings) return <Loader />
return (
<Center>
<Center className="cf-toolbar-wrapper">
<HeaderToolbar>
<ActionButton
icon={<TbArrowUp size={iconSize} />}
@@ -111,7 +110,11 @@ export function Header() {
label={msg`Refresh`}
onClick={async () => await dispatch(reloadEntries())}
/>
<MarkAllAsReadButton iconSize={iconSize} />
<ActionButton
icon={<TbChecks size={iconSize} />}
label={msg`Mark all as read`}
onClick={() => dispatch(markAllAsReadWithConfirmationIfRequired())}
/>
<HeaderDivider />

View File

@@ -1,98 +0,0 @@
import { msg } from "@lingui/core/macro"
import { Trans } from "@lingui/react/macro"
import { Button, Code, Group, Modal, Slider, Stack, Text } from "@mantine/core"
import { markAllEntries } from "app/entries/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { ActionButton } from "components/ActionButton"
import { useState } from "react"
import { TbChecks } from "react-icons/tb"
export function MarkAllAsReadButton(props: { iconSize: number }) {
const [opened, setOpened] = useState(false)
const [threshold, setThreshold] = useState(0)
const source = useAppSelector(state => state.entries.source)
const sourceLabel = useAppSelector(state => state.entries.sourceLabel)
const entriesTimestamp = useAppSelector(state => state.entries.timestamp) ?? Date.now()
const markAllAsReadConfirmation = useAppSelector(state => state.user.settings?.markAllAsReadConfirmation)
const dispatch = useAppDispatch()
const buttonClicked = () => {
if (markAllAsReadConfirmation) {
setThreshold(0)
setOpened(true)
} else {
dispatch(
markAllEntries({
sourceType: source.type,
req: {
id: source.id,
read: true,
olderThan: Date.now(),
insertedBefore: entriesTimestamp,
},
})
)
}
}
return (
<>
<Modal opened={opened} onClose={() => setOpened(false)} title={<Trans>Mark all entries as read</Trans>}>
<Stack>
<Text size="sm">
{threshold === 0 && (
<Trans>
Are you sure you want to mark all entries of <Code>{sourceLabel}</Code> as read?
</Trans>
)}
{threshold > 0 && (
<Trans>
Are you sure you want to mark entries older than {threshold} days of <Code>{sourceLabel}</Code> as read?
</Trans>
)}
</Text>
<Slider
py="xl"
min={0}
max={28}
marks={[
{ value: 0, label: "0" },
{ value: 7, label: "7" },
{ value: 14, label: "14" },
{ value: 21, label: "21" },
{ value: 28, label: "28" },
]}
value={threshold}
onChange={setThreshold}
/>
<Group justify="flex-end">
<Button variant="default" onClick={() => setOpened(false)}>
<Trans>Cancel</Trans>
</Button>
<Button
color="red"
onClick={() => {
setOpened(false)
dispatch(
markAllEntries({
sourceType: source.type,
req: {
id: source.id,
read: true,
olderThan: Date.now() - threshold * 24 * 60 * 60 * 1000,
insertedBefore: entriesTimestamp,
},
})
)
}}
>
<Trans>Confirm</Trans>
</Button>
</Group>
</Stack>
</Modal>
<ActionButton icon={<TbChecks size={props.iconSize} />} label={msg`Mark all as read`} onClick={buttonClicked} />
</>
)
}

View File

@@ -7,17 +7,11 @@ import {
Menu,
SegmentedControl,
type SegmentedControlItem,
Slider,
useMantineColorScheme,
} from "@mantine/core"
import { showNotification } from "@mantine/notifications"
import { client } from "app/client"
import { redirectToAbout, redirectToAdminUsers, redirectToDonate, redirectToMetrics, redirectToSettings } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import type { ViewMode } from "app/types"
import { setViewMode } from "app/user/slice"
import { reloadProfile } from "app/user/thunks"
import dayjs from "dayjs"
import { useNow } from "hooks/useNow"
import { type ReactNode, useState } from "react"
import {
TbChartLine,
@@ -35,6 +29,13 @@ import {
TbUsers,
TbWorldDownload,
} from "react-icons/tb"
import { client } from "@/app/client"
import { redirectToAbout, redirectToAdminUsers, redirectToDonate, redirectToMetrics, redirectToSettings } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { ViewMode } from "@/app/types"
import { setFontSizePercentage, setViewMode } from "@/app/user/slice"
import { reloadProfile } from "@/app/user/thunks"
import { useNow } from "@/hooks/useNow"
interface ProfileMenuProps {
control: React.ReactElement
@@ -93,13 +94,14 @@ const viewModeData: ViewModeControlItem[] = [
},
]
export function ProfileMenu(props: ProfileMenuProps) {
export function ProfileMenu(props: Readonly<ProfileMenuProps>) {
const [opened, setOpened] = useState(false)
const now = useNow()
const profile = useAppSelector(state => state.user.profile)
const admin = useAppSelector(state => state.user.profile?.admin)
const viewMode = useAppSelector(state => state.user.localSettings.viewMode)
const forceRefreshCooldownDuration = useAppSelector(state => state.server.serverInfos?.forceRefreshCooldownDuration)
const fontSizePercentage = useAppSelector(state => state.user.localSettings.fontSizePercentage)
const dispatch = useAppDispatch()
const { colorScheme, setColorScheme } = useMantineColorScheme()
@@ -143,7 +145,7 @@ export function ProfileMenu(props: ProfileMenuProps) {
color: "green",
autoClose: 1000,
})
} catch (error) {
} catch {
showNotification({
message: <Trans>Force fetching feeds is not yet available.</Trans>,
color: "red",
@@ -184,6 +186,22 @@ export function ProfileMenu(props: ProfileMenuProps) {
mb="xs"
/>
<Divider />
<Menu.Label>
<Trans>Font size</Trans>
</Menu.Label>
<Slider
min={50}
max={150}
step={5}
marks={[{ value: 100 }]}
label={v => `${v}%`}
mb="xs"
value={fontSizePercentage}
onChange={value => dispatch(setFontSizePercentage(value))}
/>
{admin && (
<>
<Divider />

View File

@@ -1,10 +1,10 @@
import { NumberFormatter } from "@mantine/core"
import type { MetricGauge } from "app/types"
import type { MetricGauge } from "@/app/types"
interface MeterProps {
interface GaugeProps {
gauge: MetricGauge
}
export function Gauge(props: MeterProps) {
export function Gauge(props: Readonly<GaugeProps>) {
return <NumberFormatter value={props.gauge.value} thousandSeparator />
}

View File

@@ -1,11 +1,11 @@
import { Box } from "@mantine/core"
import type { MetricMeter } from "app/types"
import type { MetricMeter } from "@/app/types"
interface MeterProps {
meter: MetricMeter
}
export function Meter(props: MeterProps) {
export function Meter(props: Readonly<MeterProps>) {
return (
<Box>
<Box>Mean: {props.meter.mean_rate.toFixed(2)}</Box>

View File

@@ -7,7 +7,7 @@ interface MetricAccordionItemProps {
children: React.ReactNode
}
export function MetricAccordionItem({ metricKey, name, headerValue, children }: MetricAccordionItemProps) {
export function MetricAccordionItem({ metricKey, name, headerValue, children }: Readonly<MetricAccordionItemProps>) {
return (
<Accordion.Item value={metricKey} key={metricKey}>
<Accordion.Control>

View File

@@ -1,11 +1,11 @@
import { Box } from "@mantine/core"
import type { MetricTimer } from "app/types"
import type { MetricTimer } from "@/app/types"
interface MetricTimerProps {
timer: MetricTimer
}
export function Timer(props: MetricTimerProps) {
export function Timer(props: Readonly<MetricTimerProps>) {
return (
<Box>
<Box>Mean: {props.timer.mean_rate.toFixed(2)}</Box>

View File

@@ -1,8 +1,12 @@
import { Box } from "@mantine/core"
import { useMobile } from "hooks/useMobile"
import type React from "react"
import { useMobile } from "@/hooks/useMobile"
export function OnDesktop(props: { children: React.ReactNode }) {
export function OnDesktop(
props: Readonly<{
children: React.ReactNode
}>
) {
const mobile = useMobile()
return <Box>{!mobile && props.children}</Box>
}

View File

@@ -1,8 +1,12 @@
import { Box } from "@mantine/core"
import { useMobile } from "hooks/useMobile"
import type React from "react"
import { useMobile } from "@/hooks/useMobile"
export function OnMobile(props: { children: React.ReactNode }) {
export function OnMobile(
props: Readonly<{
children: React.ReactNode
}>
) {
const mobile = useMobile()
return <Box>{mobile && props.children}</Box>
}

View File

@@ -1,14 +1,15 @@
import { Trans } from "@lingui/react/macro"
import { Box, Button, Group, Stack } from "@mantine/core"
import { Anchor, Box, Button, Group, Stack } from "@mantine/core"
import { useForm } from "@mantine/form"
import { client, errorToStrings } from "app/client"
import { redirectToSelectedSource } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { Alert } from "components/Alert"
import { CodeEditor } from "components/code/CodeEditor"
import { useEffect } from "react"
import { useAsyncCallback } from "react-async-hook"
import { TbDeviceFloppy } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { Constants } from "@/app/constants"
import { redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import { Alert } from "@/components/Alert"
import { CodeEditor } from "@/components/code/CodeEditor"
interface FormData {
customCss: string
@@ -57,13 +58,23 @@ export function CustomCodeSettings() {
<form onSubmit={form.onSubmit(saveCustomCode.execute)}>
<Stack>
<CodeEditor
description={<Trans>Custom CSS rules that will be applied</Trans>}
label={<Trans>Custom CSS rules that will be applied</Trans>}
description={
<Anchor
href={Constants.customCssDocumentationUrl}
target="_blank"
rel="noreferrer"
style={{ fontSize: "inherit" }}
>
<Trans>Link to the documentation</Trans>
</Anchor>
}
language="css"
{...form.getInputProps("customCss")}
/>
<CodeEditor
description={<Trans>Custom JS code that will be executed on page load</Trans>}
label={<Trans>Custom JS code that will be executed on page load</Trans>}
language="javascript"
{...form.getInputProps("customJs")}
/>

View File

@@ -1,18 +1,21 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { Divider, Group, NumberInput, Radio, Select, SimpleGrid, Stack, Switch } from "@mantine/core"
import { Box, Divider, Group, NumberInput, Radio, Select, type SelectProps, SimpleGrid, Stack, Switch } from "@mantine/core"
import type { ComboboxData } from "@mantine/core/lib/components/Combobox/Combobox.types"
import { Constants } from "app/constants"
import { useAppDispatch, useAppSelector } from "app/store"
import type { IconDisplayMode, ScrollMode, SharingSettings } from "app/types"
import type { ReactNode } from "react"
import { Constants } from "@/app/constants"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { IconDisplayMode, ScrollMode, SharingSettings } from "@/app/types"
import {
changeCustomContextMenu,
changeEntriesToKeepOnTopWhenScrolling,
changeExternalLinkIconDisplayMode,
changeLanguage,
changeMarkAllAsReadConfirmation,
changeMarkAllAsReadNavigateToUnread,
changeMobileFooter,
changePrimaryColor,
changeScrollMarks,
changeScrollMode,
changeScrollSpeed,
@@ -21,9 +24,8 @@ import {
changeStarIconDisplayMode,
changeUnreadCountFavicon,
changeUnreadCountTitle,
} from "app/user/thunks"
import { locales } from "i18n"
import type { ReactNode } from "react"
} from "@/app/user/thunks"
import { locales } from "@/i18n"
export function DisplaySettings() {
const language = useAppSelector(state => state.user.settings?.language)
@@ -35,13 +37,15 @@ export function DisplaySettings() {
const starIconDisplayMode = useAppSelector(state => state.user.settings?.starIconDisplayMode)
const externalLinkIconDisplayMode = useAppSelector(state => state.user.settings?.externalLinkIconDisplayMode)
const markAllAsReadConfirmation = useAppSelector(state => state.user.settings?.markAllAsReadConfirmation)
const markAllAsReadNavigateToNextUnread = useAppSelector(state => state.user.settings?.markAllAsReadNavigateToNextUnread)
const customContextMenu = useAppSelector(state => state.user.settings?.customContextMenu)
const mobileFooter = useAppSelector(state => state.user.settings?.mobileFooter)
const unreadCountTitle = useAppSelector(state => state.user.settings?.unreadCountTitle)
const unreadCountFavicon = useAppSelector(state => state.user.settings?.unreadCountFavicon)
const sharingSettings = useAppSelector(state => state.user.settings?.sharingSettings)
const dispatch = useAppDispatch()
const primaryColor = useAppSelector(state => state.user.settings?.primaryColor) || Constants.theme.defaultPrimaryColor
const { _ } = useLingui()
const dispatch = useAppDispatch()
const scrollModeOptions: Record<ScrollMode, ReactNode> = {
always: <Trans>Always</Trans>,
@@ -68,10 +72,35 @@ export function DisplaySettings() {
},
]
const colorData: ComboboxData = [
{ value: "dark", label: _(msg`Dark`) },
{ value: "gray", label: _(msg`Gray`) },
{ value: "red", label: _(msg`Red`) },
{ value: "pink", label: _(msg`Pink`) },
{ value: "grape", label: _(msg`Grape`) },
{ value: "violet", label: _(msg`Violet`) },
{ value: "indigo", label: _(msg`Indigo`) },
{ value: "blue", label: _(msg`Blue`) },
{ value: "cyan", label: _(msg`Cyan`) },
{ value: "green", label: _(msg`Green`) },
{ value: "lime", label: _(msg`Lime`) },
{ value: "yellow", label: _(msg`Yellow`) },
{ value: "orange", label: _(msg`Orange`) },
{ value: "teal", label: _(msg`Teal`) },
].sort((a, b) => a.label.localeCompare(b.label))
const colorRenderer: SelectProps["renderOption"] = ({ option }) => (
<Group>
<Box h={18} w={18} bg={option.value} />
<Box>{option.label}</Box>
</Group>
)
return (
<Stack>
<Divider label={<Trans>Display</Trans>} labelPosition="center" />
<Select
description={<Trans>Language</Trans>}
label={<Trans>Language</Trans>}
value={language}
data={locales.map(l => ({
value: l.key,
@@ -80,6 +109,14 @@ export function DisplaySettings() {
onChange={async s => await (s && dispatch(changeLanguage(s)))}
/>
<Select
label={<Trans>Primary color</Trans>}
data={colorData}
value={primaryColor}
onChange={async value => value && (await dispatch(changePrimaryColor(value)))}
renderOption={colorRenderer}
/>
<Switch
label={<Trans>Show feeds and categories with no unread entries</Trans>}
checked={showRead}
@@ -92,6 +129,12 @@ export function DisplaySettings() {
onChange={async e => await dispatch(changeMarkAllAsReadConfirmation(e.currentTarget.checked))}
/>
<Switch
label={<Trans>Navigate to the next category/feed with unread entries when marking all entries as read</Trans>}
checked={markAllAsReadNavigateToNextUnread}
onChange={async e => await dispatch(changeMarkAllAsReadNavigateToUnread(e.currentTarget.checked))}
/>
<Switch
label={<Trans>On mobile, show action buttons at the bottom of the screen</Trans>}
checked={mobileFooter}
@@ -115,14 +158,14 @@ export function DisplaySettings() {
<Divider label={<Trans>Entry headers</Trans>} labelPosition="center" />
<Select
description={<Trans>Show star icon</Trans>}
label={<Trans>Show star icon</Trans>}
value={starIconDisplayMode}
data={displayModeData}
onChange={async s => await dispatch(changeStarIconDisplayMode(s as IconDisplayMode))}
/>
<Select
description={<Trans>Show external link icon</Trans>}
label={<Trans>Show external link icon</Trans>}
value={externalLinkIconDisplayMode}
data={displayModeData}
onChange={async s => await dispatch(changeExternalLinkIconDisplayMode(s as IconDisplayMode))}

View File

@@ -4,15 +4,15 @@ import { Trans } from "@lingui/react/macro"
import { Anchor, Box, Button, Checkbox, Divider, Group, Input, PasswordInput, Stack, Text, TextInput } from "@mantine/core"
import { useForm } from "@mantine/form"
import { openConfirmModal } from "@mantine/modals"
import { client, errorToStrings } from "app/client"
import { redirectToLogin, redirectToSelectedSource } from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import type { ProfileModificationRequest } from "app/types"
import { reloadProfile } from "app/user/thunks"
import { Alert } from "components/Alert"
import { useEffect } from "react"
import { useAsyncCallback } from "react-async-hook"
import { TbDeviceFloppy, TbTrash } from "react-icons/tb"
import { client, errorToStrings } from "@/app/client"
import { redirectToLogin, redirectToSelectedSource } from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { ProfileModificationRequest } from "@/app/types"
import { reloadProfile } from "@/app/user/thunks"
import { Alert } from "@/components/Alert"
interface FormData extends ProfileModificationRequest {
newPasswordConfirmation?: string
@@ -52,7 +52,9 @@ export function ProfileSettings() {
),
labels: { confirm: <Trans>Confirm</Trans>, cancel: <Trans>Cancel</Trans> },
confirmProps: { color: "red" },
onConfirm: async () => await deleteProfile.execute(),
onConfirm: () => {
deleteProfile.execute()
},
})
useEffect(() => {

View File

@@ -1,6 +1,8 @@
import { Trans } from "@lingui/react/macro"
import { Box, Stack } from "@mantine/core"
import { Constants } from "app/constants"
import React from "react"
import { TbChevronDown, TbChevronRight, TbInbox, TbStar, TbTag } from "react-icons/tb"
import { Constants } from "@/app/constants"
import {
redirectToCategory,
redirectToCategoryDetails,
@@ -8,15 +10,14 @@ import {
redirectToFeedDetails,
redirectToTag,
redirectToTagDetails,
} from "app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "app/store"
import { collapseTreeCategory } from "app/tree/thunks"
import type { Category, Subscription } from "app/types"
import { categoryUnreadCount, flattenCategoryTree } from "app/utils"
import { Loader } from "components/Loader"
import { OnDesktop } from "components/responsive/OnDesktop"
import React from "react"
import { TbChevronDown, TbChevronRight, TbInbox, TbStar, TbTag } from "react-icons/tb"
} from "@/app/redirect/thunks"
import { useAppDispatch, useAppSelector } from "@/app/store"
import type { TreeSubscription } from "@/app/tree/slice"
import { collapseTreeCategory } from "@/app/tree/thunks"
import type { Category, Subscription } from "@/app/types"
import { categoryHasNewEntries, categoryUnreadCount, flattenCategoryTree } from "@/app/utils"
import { Loader } from "@/components/Loader"
import { OnDesktop } from "@/components/responsive/OnDesktop"
import { TreeNode } from "./TreeNode"
import { TreeSearch } from "./TreeSearch"
@@ -89,6 +90,7 @@ export function Tree() {
name={<Trans>All</Trans>}
icon={allIcon}
unread={categoryUnreadCount(root)}
hasNewEntries={categoryHasNewEntries(root)}
selected={source.type === "category" && source.id === Constants.categories.all.id}
expanded={false}
level={0}
@@ -103,6 +105,7 @@ export function Tree() {
name={<Trans>Starred</Trans>}
icon={starredIcon}
unread={0}
hasNewEntries={false}
selected={source.type === "category" && source.id === Constants.categories.starred.id}
expanded={false}
level={0}
@@ -122,6 +125,7 @@ export function Tree() {
name={category.name}
icon={category.expanded ? expandedIcon : collapsedIcon}
unread={categoryUnreadCount(category)}
hasNewEntries={categoryHasNewEntries(category)}
selected={source.type === "category" && source.id === category.id}
expanded={category.expanded}
level={level}
@@ -133,7 +137,7 @@ export function Tree() {
)
}
const feedNode = (feed: Subscription, level = 0) => {
const feedNode = (feed: TreeSubscription, level = 0) => {
if (!isFeedDisplayed(feed)) return null
return (
@@ -143,6 +147,7 @@ export function Tree() {
name={feed.name}
icon={feed.iconUrl}
unread={feed.unread}
hasNewEntries={!!feed.hasNewEntries}
selected={source.type === "feed" && source.id === String(feed.id)}
level={level}
hasError={feed.errorCount > errorThreshold}
@@ -159,6 +164,7 @@ export function Tree() {
name={tag}
icon={tagIcon}
unread={0}
hasNewEntries={false}
selected={source.type === "tag" && source.id === tag}
level={0}
hasError={false}
@@ -182,7 +188,7 @@ export function Tree() {
<OnDesktop>
<TreeSearch feeds={feeds} />
</OnDesktop>
<Box>
<Box className="cf-tree">
{allCategoryNode()}
{starredCategoryNode()}
{root.children.map(c => recursiveCategoryNode(c))}

View File

@@ -1,8 +1,8 @@
import { Box, Center } from "@mantine/core"
import type { EntrySourceType } from "app/entries/slice"
import { FeedFavicon } from "components/content/FeedFavicon"
import type React from "react"
import { tss } from "tss"
import type { EntrySourceType } from "@/app/entries/slice"
import { FeedFavicon } from "@/components/content/FeedFavicon"
import { tss } from "@/tss"
import { UnreadCount } from "./UnreadCount"
interface TreeNodeProps {
@@ -15,6 +15,7 @@ interface TreeNodeProps {
expanded?: boolean
level: number
hasError: boolean
hasNewEntries: boolean
onClick: (e: React.MouseEvent, id: string) => void
onIconClick?: (e: React.MouseEvent, id: string) => void
}
@@ -58,7 +59,7 @@ const useStyles = tss
}
})
export function TreeNode(props: TreeNodeProps) {
export function TreeNode(props: Readonly<TreeNodeProps>) {
const { classes } = useStyles({
selected: props.selected,
hasError: props.hasError,
@@ -68,19 +69,19 @@ export function TreeNode(props: TreeNodeProps) {
<Box
py={1}
pl={props.level * 20}
className={classes.node}
className={`${classes.node} cf-treenode cf-treenode-${props.type}`}
onClick={(e: React.MouseEvent) => props.onClick(e, props.id)}
data-id={props.id}
data-type={props.type}
data-unread-count={props.unread}
>
<Box mr={6} onClick={(e: React.MouseEvent) => props.onIconClick?.(e, props.id)}>
<Box mr={6} onClick={(e: React.MouseEvent) => props.onIconClick?.(e, props.id)} className="cf-treenode-icon">
<Center>{typeof props.icon === "string" ? <FeedFavicon url={props.icon} /> : props.icon}</Center>
</Box>
<Box className={classes.nodeText}>{props.name}</Box>
{!props.expanded && (
<Box>
<UnreadCount unreadCount={props.unread} />
<Box className="cf-treenode-unread-count">
<UnreadCount unreadCount={props.unread} showIndicator={props.hasNewEntries} />
</Box>
)}
</Box>

View File

@@ -1,20 +1,20 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { Trans } from "@lingui/react/macro"
import { TextInput } from "@mantine/core"
import { Box, TextInput } from "@mantine/core"
import { Spotlight, type SpotlightActionData, spotlight } from "@mantine/spotlight"
import { redirectToFeed } from "app/redirect/thunks"
import { useAppDispatch } from "app/store"
import type { Subscription } from "app/types"
import { FeedFavicon } from "components/content/FeedFavicon"
import { useMousetrap } from "hooks/useMousetrap"
import { TbSearch } from "react-icons/tb"
import { redirectToFeed } from "@/app/redirect/thunks"
import { useAppDispatch } from "@/app/store"
import type { Subscription } from "@/app/types"
import { FeedFavicon } from "@/components/content/FeedFavicon"
import { useMousetrap } from "@/hooks/useMousetrap"
export interface TreeSearchProps {
feeds: Subscription[]
}
export function TreeSearch(props: TreeSearchProps) {
export function TreeSearch(props: Readonly<TreeSearchProps>) {
const dispatch = useAppDispatch()
const { _ } = useLingui()
@@ -33,7 +33,7 @@ export function TreeSearch(props: TreeSearchProps) {
useMousetrap("g u", () => spotlight.open())
return (
<>
<Box className="cf-treesearch">
<TextInput
placeholder={_(msg`Search`)}
leftSection={searchIcon}
@@ -58,6 +58,6 @@ export function TreeSearch(props: TreeSearchProps) {
}}
nothingFound={<Trans>Nothing found</Trans>}
/>
</>
</Box>
)
}

View File

@@ -1,6 +1,6 @@
import { Badge, Tooltip } from "@mantine/core"
import { Constants } from "app/constants"
import { tss } from "tss"
import { Badge, Indicator, Tooltip } from "@mantine/core"
import { Constants } from "@/app/constants"
import { tss } from "@/tss"
const useStyles = tss.create(() => ({
badge: {
@@ -10,7 +10,12 @@ const useStyles = tss.create(() => ({
},
}))
export function UnreadCount(props: { unreadCount: number }) {
export function UnreadCount(
props: Readonly<{
unreadCount: number
showIndicator: boolean
}>
) {
const { classes } = useStyles()
if (props.unreadCount <= 0) return null
@@ -18,9 +23,11 @@ export function UnreadCount(props: { unreadCount: number }) {
const count = props.unreadCount >= 10000 ? "10k+" : props.unreadCount
return (
<Tooltip label={props.unreadCount} disabled={props.unreadCount === count} openDelay={Constants.tooltip.delay}>
<Badge className={classes.badge} variant="light" fullWidth>
{count}
</Badge>
<Indicator disabled={!props.showIndicator} size={4} offset={10} position="middle-start">
<Badge className={`${classes.badge} cf-badge`} variant="light" fullWidth>
{count}
</Badge>
</Indicator>
</Tooltip>
)
}

View File

@@ -1,5 +1,5 @@
import { useMantineTheme } from "@mantine/core"
import { useMobile } from "hooks/useMobile"
import { useMobile } from "@/hooks/useMobile"
export const useActionButton = () => {
const theme = useMantineTheme()

View File

@@ -1,6 +1,6 @@
import { msg } from "@lingui/core/macro"
import { useLingui } from "@lingui/react"
import { useAppSelector } from "app/store"
import { useAppSelector } from "@/app/store"
interface Step {
label: string
@@ -8,28 +8,28 @@ interface Step {
}
export const useAppLoading = () => {
const profile = useAppSelector(state => state.user.profile)
const settings = useAppSelector(state => state.user.settings)
const rootCategory = useAppSelector(state => state.tree.rootCategory)
const tags = useAppSelector(state => state.user.tags)
const profileLoaded = useAppSelector(state => !!state.user.profile)
const settingsLoaded = useAppSelector(state => !!state.user.settings)
const rootCategoryLoaded = useAppSelector(state => !!state.tree.rootCategory)
const tagsLoaded = useAppSelector(state => !!state.user.tags)
const { _ } = useLingui()
const steps: Step[] = [
{
label: _(msg`Loading settings...`),
done: !!settings,
done: settingsLoaded,
},
{
label: _(msg`Loading profile...`),
done: !!profile,
done: profileLoaded,
},
{
label: _(msg`Loading subscriptions...`),
done: !!rootCategory,
done: rootCategoryLoaded,
},
{
label: _(msg`Loading tags...`),
done: !!tags,
done: tagsLoaded,
},
]

View File

@@ -1,5 +1,5 @@
import { useMediaQuery } from "@mantine/hooks"
import { Constants } from "app/constants"
import { Constants } from "@/app/constants"
export const useMobile = (breakpoint: string | number = Constants.layout.mobileBreakpoint) => {
const bp = typeof breakpoint === "number" ? `${breakpoint}px` : breakpoint

View File

@@ -1,8 +1,8 @@
import { setWebSocketConnected } from "app/server/slice"
import { type AppDispatch, useAppDispatch, useAppSelector } from "app/store"
import { newFeedEntriesDiscovered } from "app/tree/thunks"
import { useEffect } from "react"
import WebsocketHeartbeatJs from "websocket-heartbeat-js"
import { setWebSocketConnected } from "@/app/server/slice"
import { type AppDispatch, useAppDispatch, useAppSelector } from "@/app/store"
import { newFeedEntriesDiscovered } from "@/app/tree/thunks"
const handleMessage = (dispatch: AppDispatch, message: string) => {
const parts = message.split(":")

View File

@@ -1,7 +1,7 @@
import { type Messages, i18n } from "@lingui/core"
import { useAppSelector } from "app/store"
import { i18n, type Messages } from "@lingui/core"
import dayjs from "dayjs"
import { useEffect } from "react"
import { useAppSelector } from "@/app/store"
interface Locale {
key: string
@@ -12,34 +12,146 @@ interface Locale {
// add an object to the array to add a new locale
// don't forget to also add it to the 'locales' array in lingui.config.ts
export const locales: Locale[] = [
{ key: "ar", label: "العربية", dayjsImportFn: async () => await import("dayjs/locale/ar") },
{ key: "ca", label: "Català", dayjsImportFn: async () => await import("dayjs/locale/ca") },
{ key: "cs", label: "Čeština", dayjsImportFn: async () => await import("dayjs/locale/cs") },
{ key: "cy", label: "Cymraeg", dayjsImportFn: async () => await import("dayjs/locale/cy") },
{ key: "da", label: "Danish", dayjsImportFn: async () => await import("dayjs/locale/da") },
{ key: "de", label: "Deutsch", dayjsImportFn: async () => await import("dayjs/locale/de") },
{ key: "en", label: "English", dayjsImportFn: async () => await import("dayjs/locale/en") },
{ key: "es", label: "Español", dayjsImportFn: async () => await import("dayjs/locale/es") },
{ key: "fa", label: "فارسی", dayjsImportFn: async () => await import("dayjs/locale/fa") },
{ key: "fi", label: "Suomi", dayjsImportFn: async () => await import("dayjs/locale/fi") },
{ key: "fr", label: "Français", dayjsImportFn: async () => await import("dayjs/locale/fr") },
{ key: "gl", label: "Galician", dayjsImportFn: async () => await import("dayjs/locale/gl") },
{ key: "hu", label: "Magyar", dayjsImportFn: async () => await import("dayjs/locale/hu") },
{ key: "id", label: "Indonesian", dayjsImportFn: async () => await import("dayjs/locale/id") },
{ key: "it", label: "Italiano", dayjsImportFn: async () => await import("dayjs/locale/it") },
{ key: "ja", label: "日本語", dayjsImportFn: async () => await import("dayjs/locale/ja") },
{ key: "ko", label: "한국어", dayjsImportFn: async () => await import("dayjs/locale/ko") },
{ key: "ms", label: "Bahasa Malaysian", dayjsImportFn: async () => await import("dayjs/locale/ms") },
{ key: "nb", label: "Norsk (bokmål)", dayjsImportFn: async () => await import("dayjs/locale/nb") },
{ key: "nl", label: "Nederlands", dayjsImportFn: async () => await import("dayjs/locale/nl") },
{ key: "nn", label: "Norsk (nynorsk)", dayjsImportFn: async () => await import("dayjs/locale/nn") },
{ key: "pl", label: "Polski", dayjsImportFn: async () => await import("dayjs/locale/pl") },
{ key: "pt", label: "Português", dayjsImportFn: async () => await import("dayjs/locale/pt") },
{ key: "ru", label: "Русский", dayjsImportFn: async () => await import("dayjs/locale/ru") },
{ key: "sk", label: "Slovenčina", dayjsImportFn: async () => await import("dayjs/locale/sk") },
{ key: "sv", label: "Svenska", dayjsImportFn: async () => await import("dayjs/locale/sv") },
{ key: "tr", label: "Türkçe", dayjsImportFn: async () => await import("dayjs/locale/tr") },
{ key: "zh", label: "简体中文", dayjsImportFn: async () => await import("dayjs/locale/zh") },
{
key: "ar",
label: "العربية",
dayjsImportFn: async () => await import("dayjs/locale/ar"),
},
{
key: "ca",
label: "Català",
dayjsImportFn: async () => await import("dayjs/locale/ca"),
},
{
key: "cs",
label: "Čeština",
dayjsImportFn: async () => await import("dayjs/locale/cs"),
},
{
key: "cy",
label: "Cymraeg",
dayjsImportFn: async () => await import("dayjs/locale/cy"),
},
{
key: "da",
label: "Danish",
dayjsImportFn: async () => await import("dayjs/locale/da"),
},
{
key: "de",
label: "Deutsch",
dayjsImportFn: async () => await import("dayjs/locale/de"),
},
{
key: "en",
label: "English",
dayjsImportFn: async () => await import("dayjs/locale/en"),
},
{
key: "es",
label: "Español",
dayjsImportFn: async () => await import("dayjs/locale/es"),
},
{
key: "fa",
label: "فارسی",
dayjsImportFn: async () => await import("dayjs/locale/fa"),
},
{
key: "fi",
label: "Suomi",
dayjsImportFn: async () => await import("dayjs/locale/fi"),
},
{
key: "fr",
label: "Français",
dayjsImportFn: async () => await import("dayjs/locale/fr"),
},
{
key: "gl",
label: "Galician",
dayjsImportFn: async () => await import("dayjs/locale/gl"),
},
{
key: "hu",
label: "Magyar",
dayjsImportFn: async () => await import("dayjs/locale/hu"),
},
{
key: "id",
label: "Indonesian",
dayjsImportFn: async () => await import("dayjs/locale/id"),
},
{
key: "it",
label: "Italiano",
dayjsImportFn: async () => await import("dayjs/locale/it"),
},
{
key: "ja",
label: "日本語",
dayjsImportFn: async () => await import("dayjs/locale/ja"),
},
{
key: "ko",
label: "한국어",
dayjsImportFn: async () => await import("dayjs/locale/ko"),
},
{
key: "ms",
label: "Bahasa Malaysian",
dayjsImportFn: async () => await import("dayjs/locale/ms"),
},
{
key: "nb",
label: "Norsk (bokmål)",
dayjsImportFn: async () => await import("dayjs/locale/nb"),
},
{
key: "nl",
label: "Nederlands",
dayjsImportFn: async () => await import("dayjs/locale/nl"),
},
{
key: "nn",
label: "Norsk (nynorsk)",
dayjsImportFn: async () => await import("dayjs/locale/nn"),
},
{
key: "pl",
label: "Polski",
dayjsImportFn: async () => await import("dayjs/locale/pl"),
},
{
key: "pt",
label: "Português",
dayjsImportFn: async () => await import("dayjs/locale/pt"),
},
{
key: "ru",
label: "Русский",
dayjsImportFn: async () => await import("dayjs/locale/ru"),
},
{
key: "sk",
label: "Slovenčina",
dayjsImportFn: async () => await import("dayjs/locale/sk"),
},
{
key: "sv",
label: "Svenska",
dayjsImportFn: async () => await import("dayjs/locale/sv"),
},
{
key: "tr",
label: "Türkçe",
dayjsImportFn: async () => await import("dayjs/locale/tr"),
},
{
key: "zh",
label: "简体中文",
dayjsImportFn: async () => await import("dayjs/locale/zh"),
},
]
function activateLocale(locale: string) {
@@ -57,8 +169,12 @@ function activateLocale(locale: string) {
}
export const useI18n = () => {
const locale = useAppSelector(state => state.user.settings?.language)
const locale =
useAppSelector(state => state.user.settings?.language) ??
navigator.languages.map(l => l.split("-")[0]).find(l => locales.some(locale => locale.key === l)) ??
"en"
useEffect(() => {
activateLocale(locale ?? "en")
activateLocale(locale)
}, [locale])
}

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0> هل تحتاج إلى حساب؟ </0> <1> اشترك! </ 1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "حول"
@@ -54,15 +54,17 @@ msgstr "إضافة فئة"
msgid "Add user"
msgstr "إضافة مستخدم"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "إداري"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "الكل"
@@ -103,11 +105,11 @@ msgstr "هل أنت متأكد أنك تريد حذف المستخدم <0> {user
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "هل أنت متأكد أنك تريد حذف حسابك؟ "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "هل أنت متأكد أنك تريد تعليم كافة إدخالات <0> {sourceLabel} </0> كمقروءة؟"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "هل أنت متأكد أنك تريد وضع علامة على الإدخالات الأقدم من {عتبة} يوم من <0> {sourceLabel} </0> كمقروءة؟"
@@ -131,6 +133,10 @@ msgstr "العودة"
msgid "Back to log in"
msgstr "العودة لتسجيل الدخول"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "إلغاء"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "الفئة"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "مضغوط"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "تأكيد"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr "تنازلي"
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "عرض"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "تنزيل"
msgid "Drag link to bookmark bar"
msgstr "اسحب الرابط إلى شريط الإشارات"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "البريد الإلكتروني"
@@ -307,8 +319,8 @@ msgstr "عنوان البريد الإلكتروني"
msgid "Edit user"
msgstr "تحرير المستخدم"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "ممكن"
@@ -344,8 +356,8 @@ msgstr "موسع"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "قم بتصدير اشتراكاتك وفئاتك كملف OPML يمكن استيراده في خدمات قراءة الأعلاف الأخرى"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "اسم الخلاصة"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "موجز URL"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "تصفية التعبير"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "هل نسيت كلمة المرور؟"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "قم بإنشاء مفتاح API في ملف التعريف الخاص بك أولاً."
@@ -393,9 +409,9 @@ msgstr "قم بإنشاء مفتاح API في ملف التعريف الخاص
msgid "Generate new API key"
msgstr "إنشاء مفتاح API جديد"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "رابط الخلاصة المولدة"
@@ -416,6 +432,18 @@ msgstr "انتقل إلى وثائق API."
msgid "Goodies"
msgstr "الأشياء الجيدة"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "المرجع نفسه"
@@ -440,13 +468,17 @@ msgstr "استيراد"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "في العرض الموسع ، التمرير عبر الإدخالات وضع علامة عليها كمقروءة"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "إبقاء غير مقروءة"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "اختصارات لوحة المفاتيح"
@@ -470,12 +502,20 @@ msgstr "آخر رسالة تحديث"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "رابط"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "تحميل ملف التعريف ..."
@@ -492,9 +532,9 @@ msgstr "تحميل الاشتراكات ..."
msgid "Loading tags..."
msgstr "تحميل العلامات ..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "تسجيل الدخول"
@@ -506,27 +546,27 @@ msgstr "تسجيل الخروج"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "إدارة المستخدمين"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "تعليم الكل كمقروء"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "تعليم كافة الإدخالات كمقروءة"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "وضع علامة كمقروء"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "وضع علامة كمقروءة حتى هنا"
@@ -546,15 +586,15 @@ msgstr "تحريك الصفحة لأسفل"
msgid "Move the page up"
msgstr "تحريك الصفحة لأعلى"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "لا"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "الاسم"
@@ -562,6 +602,10 @@ msgstr "الاسم"
msgid "Navigate to a subscription by entering its name"
msgstr "انتقل إلى اشتراك بإدخال اسمه"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "كلمة مرور جديدة"
msgid "Newest first"
msgstr "الأحدث أولاً"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "التالي"
@@ -682,6 +726,10 @@ msgstr "ملف OPML"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "طلب"
@@ -694,11 +742,11 @@ msgstr "والد"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "كلمة المرور"
@@ -710,8 +758,12 @@ msgstr "استعادة كلمة المرور"
msgid "Passwords do not match"
msgstr "كلمات المرور غير متطابقة"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "المنـصب"
@@ -719,6 +771,10 @@ msgstr "المنـصب"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "الملف الشخصي"
@@ -727,8 +783,12 @@ msgstr "الملف الشخصي"
msgid "Recover password"
msgstr "استعادة كلمة السر"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "تحديث"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "حفظ"
@@ -765,17 +825,13 @@ msgstr "قم بالتمرير بسلاسة عند التنقل بين الإدخ
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "بحث"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "يتطلب البحث 3 أحرف على الأقل"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "قم بالتسجيل"
@@ -873,20 +929,21 @@ msgstr "شيء سيء حدث للتو ..."
msgid "Space"
msgstr "فضاء"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "النجم"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "مميز بنجمة"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "اشتراك"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "الكلمات"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "عنوان URL للتغذية التي تريد الاشتراك فيها. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "غير مقروءة"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "إلغاء النجم"
@@ -979,6 +1040,10 @@ msgstr "اسم المستخدم"
msgid "User Name or E-mail"
msgstr "اسم المستخدم أو البريد الإلكتروني"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "تحذير"
@@ -987,6 +1052,10 @@ msgstr "تحذير"
msgid "Website"
msgstr "موقع الكتروني"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "ليس لديك أي اشتراكات حتى الآن. "

View File

@@ -18,8 +18,8 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr "<0>CommaFeed és un projecte de codi obert. El codi font està allotjat a </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgstr "<0>La sintaxi completa està disponible </0><1>aquí</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La sintaxi completa està disponible </0><1>aquí</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -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>"
msgstr "<0>Necessites un compte?</0><1>Registreu-vos!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Sobre"
@@ -54,15 +54,17 @@ msgstr "Afegeix categoria"
msgid "Add user"
msgstr "Afegeix usuari"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Administrador"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Tot"
@@ -103,11 +105,11 @@ msgstr "Esteu segur que voleu suprimir l'usuari <0>{userName}</0>?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Esteu segur que voleu suprimir el vostre compte? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Esteu segur que voleu marcar totes les entrades de <0>{sourceLabel}</0> com a llegides?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Esteu segur que voleu marcar les entrades més antigues de {threshold} dies de <0>{sourceLabel}</0> com a llegides?"
@@ -131,6 +133,10 @@ msgstr "Enrere"
msgid "Back to log in"
msgstr "Tornar a iniciar sessió"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr "Blau"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr "Extensió del navegador necessària per a Chrome"
@@ -141,29 +147,29 @@ msgstr "Extensió del navegador"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "Pestanya del navegador"
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Cancel·la"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Categoria"
@@ -181,7 +187,7 @@ msgstr "Tanca el menu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Cmd"
msgstr ""
msgstr "Cmd"
#: src/pages/app/AboutPage.tsx
msgid "CommaFeed browser extension version {browserExtensionVersion}."
@@ -203,11 +209,11 @@ msgstr "CommaFeed versió {version} ({version})."
msgid "Compact"
msgstr "Compacte"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Confirma"
@@ -239,7 +245,12 @@ msgstr "Regles CSS personalitzades que s'aplicaran"
msgid "Custom JS code that will be executed on page load"
msgstr "Codi JS personalitzat que s'executarà en carregar la pàgina"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr "Cian"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr "Fosc"
@@ -272,13 +283,14 @@ msgstr "Desc"
msgid "Detailed"
msgstr "Detallat"
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Mostra"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr "Donar"
@@ -290,11 +302,11 @@ msgstr "Descarrega"
msgid "Drag link to bookmark bar"
msgstr "Arrossegueu l'enllaç a la barra d'adreces d'interès"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "Correu electrònic"
@@ -307,8 +319,8 @@ msgstr "Adreça de correu electrònic"
msgid "Edit user"
msgstr "Edita l'usuari"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "activat"
@@ -322,11 +334,11 @@ msgstr "introduïu la vostra contrasenya actual per canviar la configuració del
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "Entrades que es mantindran a sobre de l'entrada seleccionada en desplaçar-se"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
msgstr ""
msgstr "Encapçalaments d'entrada"
#: src/components/Alert.tsx
msgid "Error"
@@ -344,8 +356,8 @@ msgstr "Ampliat"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr "Opcions de l'extensió"
@@ -353,9 +365,9 @@ msgstr "Opcions de l'extensió"
msgid "Feed name"
msgstr "Nom del canal"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL del canal"
@@ -365,27 +377,31 @@ msgstr "Carrega tots els meus feeds ara"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API"
msgstr ""
msgstr "Fever API"
#: src/components/settings/ProfileSettings.tsx
msgid "Fever API URL"
msgstr ""
msgstr "URL de Fever API"
#: src/pages/app/FeedDetailsPage.tsx
msgid "Filtering expression"
msgstr "Expressió de filtratge"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr "Mida de la lletra"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "La recuperació forçada de feeds encara no està disponible."
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
msgstr "Heu oblidat la contrasenya?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "primer genereu una clau API al vostre perfil."
@@ -393,9 +409,9 @@ msgstr "primer genereu una clau API al vostre perfil."
msgid "Generate new API key"
msgstr "Genera una nova clau d'API"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "URL del feed generat"
@@ -416,6 +432,18 @@ msgstr "Vés a la documentació de l'API."
msgid "Goodies"
msgstr "Bones"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr "Raïm"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr "Gris"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr "Verd"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Id"
@@ -438,15 +466,19 @@ msgstr "Importació"
#: src/components/settings/DisplaySettings.tsx
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 "En la vista ampliada, en desplaçar-se per les entrades, es marquen com a llegides"
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr "Indi"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Mantenir sense llegir"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Dreceres de teclat"
@@ -470,12 +502,20 @@ msgstr "últim missatge d'actualització"
msgid "Light"
msgstr "Clar"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr "Llima"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Enllaç"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr "Enllaç a la documentació"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Carregant el perfil..."
@@ -492,9 +532,9 @@ msgstr "S'estan carregant les subscripcions..."
msgid "Loading tags..."
msgstr "Carregant les etiquetes..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Inicia sessió"
@@ -504,29 +544,29 @@ msgstr "Tanca sessió"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Long press"
msgstr ""
msgstr "Prem llargament la tecla"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Gestionar usuaris"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Marca-ho tot com a llegit"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marqueu totes les entrades com a llegides"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Marca com a llegit"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Marca com a llegit fins aquí"
@@ -546,15 +586,15 @@ msgstr "Mou la pàgina cap avall"
msgid "Move the page up"
msgstr "Mou la pàgina cap amunt"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "N/A"
msgstr "No es coneix"
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Nom"
@@ -562,6 +602,10 @@ msgstr "Nom"
msgid "Navigate to a subscription by entering its name"
msgstr "Navegueu a una subscripció introduint-ne el nom"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr "Navega a la següent categoria/canal amb entrades no llegides quan es marquen totes les entrades com a llegides"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Contrasenya nova"
msgid "Newest first"
msgstr "El més nou primer"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Següent"
@@ -594,7 +638,7 @@ msgstr "No hi ha més entrades"
#: src/components/content/ShareButtons.tsx
msgid "No sharing options available."
msgstr ""
msgstr "No hi ha opcions de compartició disponibles."
#: src/components/sidebar/TreeSearch.tsx
msgid "Nothing found"
@@ -606,11 +650,11 @@ msgstr "el més vell primer"
#: src/components/settings/DisplaySettings.tsx
msgid "On desktop"
msgstr ""
msgstr "A l'scriptori"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile"
msgstr ""
msgstr "Al mòbil"
#: src/components/settings/DisplaySettings.tsx
msgid "On mobile, show action buttons at the bottom of the screen"
@@ -618,7 +662,7 @@ msgstr "Al mòbil, mostra els botons d'acció a la part inferior de la pantalla"
#: src/components/settings/DisplaySettings.tsx
msgid "Only applies to compact, cozy and detailed modes"
msgstr ""
msgstr "Només s'aplica als modes compacte, acollidor i detallat"
#: src/pages/ErrorPage.tsx
msgid "Oops!"
@@ -680,7 +724,11 @@ msgstr "Fitxer OPML"
#: src/components/content/add/ImportOpml.tsx
msgid "OPML file is required"
msgstr ""
msgstr "Cal un fitxer OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr "Taronja"
#: src/pages/app/AboutPage.tsx
msgid "Order"
@@ -694,11 +742,11 @@ msgstr "pares"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Contrasenya"
@@ -710,8 +758,12 @@ msgstr "Recuperació de contrasenya"
msgid "Passwords do not match"
msgstr "Les contrasenyes no coincideixen"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr "Rosa"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Posició"
@@ -719,6 +771,10 @@ msgstr "Posició"
msgid "Previous"
msgstr "Anterior"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr "Color primari"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Perfil"
@@ -727,8 +783,12 @@ msgstr "Perfil"
msgid "Recover password"
msgstr "Recuperar la contrasenya"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr "Vermell"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Actualitzar"
@@ -745,11 +805,11 @@ msgstr "API REST"
msgid "Right click"
msgstr "Clic dret"
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Desa"
@@ -765,28 +825,24 @@ msgstr "Desplaceu-vos suaument quan navegueu entre entrades"
msgid "Scrolling"
msgstr "Desplaçament"
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Cerca"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "la cerca requereix almenys 3 caràcters"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Selecciona el següent canal/categoria no llegit"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Selecciona el canal/categoria anterior sense llegir"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
msgstr "posa el focus a la següent entrada sense obrir-la"
msgstr "Posa el focus a la següent entrada sense obrir-la"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on previous entry without opening it"
@@ -806,7 +862,7 @@ msgstr "Comparteix"
#: src/components/settings/DisplaySettings.tsx
msgid "Sharing sites"
msgstr "Compartir llocs"
msgstr "Compartir a altres llocs web"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/KeyboardShortcutsHelp.tsx
@@ -832,7 +888,7 @@ msgstr "Mostra el menú d'entrada (mòbil)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show external link icon"
msgstr ""
msgstr "Mostra la icona d'enllaç extern"
#: src/components/settings/DisplaySettings.tsx
msgid "Show feeds and categories with no unread entries"
@@ -848,19 +904,19 @@ msgstr "Mostra el menú natiu (escriptori)"
#: src/components/settings/DisplaySettings.tsx
msgid "Show star icon"
msgstr ""
msgstr "Mostra la icona d'estrella"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "Mostra el recompte de no llegits a la icona de favorits de la pestanya"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "Mostra el recompte de no llegits al títol de la pestanya"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Registra't"
@@ -873,20 +929,21 @@ msgstr "Acaba de passar una cosa dolenta..."
msgid "Space"
msgstr "Espai"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Estrella"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Estrellat"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Subscriu-te"
@@ -923,6 +980,10 @@ msgstr "Sistema"
msgid "Tags"
msgstr "Etiquetes"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr "Blau verdós"
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "l'URL del canal al qual us voleu subscriure. "
@@ -959,8 +1020,8 @@ msgstr "Prova la demostració!"
msgid "Unread"
msgstr "Sense llegir"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Desestrellar"
@@ -979,6 +1040,10 @@ msgstr "Nom d'usuari"
msgid "User Name or E-mail"
msgstr "Nom d'usuari o correu electrònic"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr "Violeta"
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Avís"
@@ -987,6 +1052,10 @@ msgstr "Avís"
msgid "Website"
msgstr "Lloc web"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr "Groc"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Encara no teniu cap subscripció. "

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Potřebujete účet?</0><1>Zaregistrujte se!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Asi"
@@ -54,15 +54,17 @@ msgstr "Přidat kategorii"
msgid "Add user"
msgstr "Přidat uživatele"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Správce"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Všechny"
@@ -103,11 +105,11 @@ msgstr "Opravdu chcete smazat uživatele <0>{userName}</0>?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Opravdu chcete smazat svůj účet? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Opravdu chcete označit všechny položky <0>{sourceLabel}</0> jako přečtené?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Opravdu chcete označit záznamy starší než {threshold} dnů <0>{sourceLabel}</0> jako přečtené?"
@@ -131,6 +133,10 @@ msgstr "Zpět"
msgid "Back to log in"
msgstr "Zpět k přihlášení"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Zrušit"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Kategorie"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "Kompaktní"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Potvrdit"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr ""
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Displej"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "Stáhnout"
msgid "Drag link to bookmark bar"
msgstr "Přetáhněte odkaz na lištu záložek"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
@@ -307,8 +319,8 @@ msgstr "E-mailová adresa"
msgid "Edit user"
msgstr "Upravit uživatele"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Povoleno"
@@ -344,8 +356,8 @@ msgstr "Rozbaleno"
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ů"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Název zdroje"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL zdroje"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Filtrování výrazu"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Zapomněli jste heslo?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Nejprve ve svém profilu vygenerujte klíč API."
@@ -393,9 +409,9 @@ msgstr "Nejprve ve svém profilu vygenerujte klíč API."
msgid "Generate new API key"
msgstr "Vygenerujte nový klíč API"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Generovaná adresa URL zdroje"
@@ -416,6 +432,18 @@ msgstr "Přejděte na dokumentaci API."
msgid "Goodies"
msgstr "Dobroty"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr ""
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é"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Ponechat nepřečtené"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Klávesové zkratky"
@@ -470,12 +502,20 @@ msgstr "Poslední obnovovací zpráva"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Odkaz"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Načítání profilu..."
@@ -492,9 +532,9 @@ msgstr "Načítání odběrů..."
msgid "Loading tags..."
msgstr "Načítání značek..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Přihlaste se"
@@ -506,27 +546,27 @@ msgstr "Odhlášení"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Spravujte uživatele"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Označit vše jako přečtené"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Označte všechny položky jako přečtené"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Označit jako přečtené"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Označit jako přečtené až sem"
@@ -546,15 +586,15 @@ msgstr "Přesuňte stránku dolů"
msgid "Move the page up"
msgstr "Přesuňte stránku nahoru"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Jméno"
@@ -562,6 +602,10 @@ msgstr "Jméno"
msgid "Navigate to a subscription by entering its name"
msgstr "Přejděte na předplatné zadáním jeho názvu"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Nové heslo"
msgid "Newest first"
msgstr "Nejnovější jako první"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Další"
@@ -682,6 +726,10 @@ msgstr "soubor OPML"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Objednávka"
@@ -694,11 +742,11 @@ msgstr "Rodič"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Heslo"
@@ -710,8 +758,12 @@ msgstr "Obnovení hesla"
msgid "Passwords do not match"
msgstr "Hesla se neshodují"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Pozice"
@@ -719,6 +771,10 @@ msgstr "Pozice"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
@@ -727,8 +783,12 @@ msgstr "Profil"
msgid "Recover password"
msgstr "Obnovte heslo"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Obnovit"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Uložit"
@@ -765,17 +825,13 @@ msgstr "Posouvejte plynule při navigaci mezi položkami"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Hledej"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "Hledání vyžaduje alespoň 3 znaky"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Zaregistrujte se"
@@ -873,20 +929,21 @@ msgstr "Právě se stalo něco špatného..."
msgid "Space"
msgstr "Vesmír"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Hvězda"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "S hvězdičkou"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Přihlaste se"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "Značky"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "Adresa URL kanálu, k jehož odběru se chcete přihlásit. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Nepřečteno"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Odstranit hvězdu"
@@ -979,6 +1040,10 @@ msgstr "Uživatelské jméno"
msgid "User Name or E-mail"
msgstr "Uživatelské jméno nebo e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Varování"
@@ -987,6 +1052,10 @@ msgstr "Varování"
msgid "Website"
msgstr "Webové stránky"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Zatím nemáte žádné předplatné. "

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Angen cyfrif?</0><1>Ymunwch!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Ynghylch"
@@ -54,15 +54,17 @@ msgstr "Ychwanegu categori"
msgid "Add user"
msgstr "Ychwanegu defnyddiwr"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Gweinyddol"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Pawb"
@@ -103,11 +105,11 @@ msgstr "Ydych chi'n siŵr eich bod am ddileu defnyddiwr <0>{userName}</0> ?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Ydych chi'n siŵr eich bod am ddileu eich cyfrif? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Ydych chi'n siŵr eich bod am farcio bod pob cofnod o <0>{sourceLabel}</0> wedi'i ddarllen?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Ydych chi'n siŵr eich bod am farcio cofnodion sy'n hŷn na {trothwy} diwrnod o <0>{sourceLabel}</0> fel rhai sydd wedi'u darllen?"
@@ -131,6 +133,10 @@ msgstr "Yn ôl"
msgid "Back to log in"
msgstr "Yn ôl i fewngofnodi"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Diddymu"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "categori"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "cryno"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Cadarnhau"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr "Rhag"
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Arddangos"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "Lawrlwytho"
msgid "Drag link to bookmark bar"
msgstr "Llusgwch y ddolen i'r bar nod tudalen"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "E-bost"
@@ -307,8 +319,8 @@ msgstr "cyfeiriad e-bost"
msgid "Edit user"
msgstr "Golygu defnyddiwr"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Wedi'i alluogi"
@@ -344,8 +356,8 @@ msgstr "Ehangu"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Enw porthiant"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL porthiant"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Hidlo mynegiant"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Wedi anghofio cyfrinair?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Cynhyrchu allwedd API yn eich proffil yn gyntaf."
@@ -393,9 +409,9 @@ msgstr "Cynhyrchu allwedd API yn eich proffil yn gyntaf."
msgid "Generate new API key"
msgstr "Cynhyrchu allwedd API newydd"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "url porthiant a gynhyrchir"
@@ -416,6 +432,18 @@ msgstr "Ewch i'r ddogfennaeth API."
msgid "Goodies"
msgstr "nwyddau"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr "Mewnforio"
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"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Cadwch heb ei ddarllen"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "llwybrau byr bysellfwrdd"
@@ -470,12 +502,20 @@ msgstr "Neges adnewyddu ddiwethaf"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Cyswllt"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Wrthi'n llwytho proffil..."
@@ -492,9 +532,9 @@ msgstr "Yn llwytho tanysgrifiadau..."
msgid "Loading tags..."
msgstr "Wrthi'n llwytho tagiau..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Mewngofnodi"
@@ -506,27 +546,27 @@ msgstr "Allgofnodi"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Rheoli defnyddwyr"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Marciwch y cyfan wedi'i ddarllen"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marciwch bob cofnod wedi'i ddarllen"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Marciwch ei fod wedi'i ddarllen"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Marciwch fel y darllenwyd hyd yma"
@@ -546,15 +586,15 @@ msgstr "Symudwch y dudalen i lawr"
msgid "Move the page up"
msgstr "Symudwch y dudalen i fyny"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "Amh"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Enw"
@@ -562,6 +602,10 @@ msgstr "Enw"
msgid "Navigate to a subscription by entering its name"
msgstr "Llywiwch i danysgrifiad trwy nodi ei enw"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Cyfrinair newydd"
msgid "Newest first"
msgstr "Y diweddaraf yn gyntaf"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Nesaf"
@@ -682,6 +726,10 @@ msgstr "ffeil OPML"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "gorchymyn"
@@ -694,11 +742,11 @@ msgstr "rhiant"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "cyfrinair"
@@ -710,8 +758,12 @@ msgstr "Adfer Cyfrinair"
msgid "Passwords do not match"
msgstr "Nid yw cyfrineiriau yn cyfateb"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Swydd"
@@ -719,6 +771,10 @@ msgstr "Swydd"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Proffil"
@@ -727,8 +783,12 @@ msgstr "Proffil"
msgid "Recover password"
msgstr "Adfer cyfrinair"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Adnewyddu"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Arbed"
@@ -765,17 +825,13 @@ msgstr "Sgroliwch yn esmwyth wrth lywio rhwng cofnodion"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Chwilio"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "Mae angen o leiaf 3 nod ar gyfer chwilio"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Cofrestrwch"
@@ -873,20 +929,21 @@ msgstr "Mae rhywbeth drwg newydd ddigwydd ..."
msgid "Space"
msgstr "Gofod"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "seren"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "serennog"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Tanysgrifio"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "Tagiau"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "Y URL ar gyfer y porthwr rydych chi am danysgrifio iddo. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Heb ei ddarllen"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "dad-seren"
@@ -979,6 +1040,10 @@ msgstr "Enw defnyddiwr"
msgid "User Name or E-mail"
msgstr "Enw Defnyddiwr neu E-bost"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Rhybudd"
@@ -987,6 +1052,10 @@ msgstr "Rhybudd"
msgid "Website"
msgstr "Gwefan"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Nid oes gennych unrhyw danysgrifiadau eto. "

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Har du brug for en konto?</0><1>Tilmeld dig!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Omkring"
@@ -54,15 +54,17 @@ msgstr "Tilføj kategori"
msgid "Add user"
msgstr "Tilføj bruger"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Alle"
@@ -103,11 +105,11 @@ msgstr "Er du sikker på, at du vil slette bruger <0>{brugernavn}</0>?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Er du sikker på, at du vil slette din konto? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Er du sikker på, at du vil markere alle poster i <0>{sourceLabel}</0> som læst?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Er du sikker på, at du vil markere poster, der er ældre end {threshold} dage af <0>{sourceLabel}</0> som læst?"
@@ -131,6 +133,10 @@ msgstr "Tilbage"
msgid "Back to log in"
msgstr "Tilbage for at logge ind"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Annuller"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Kategori"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "Kompakt"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Bekræft"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr ""
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Skærm"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr ""
msgid "Drag link to bookmark bar"
msgstr "Træk linket til bogmærkelinjen"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
@@ -307,8 +319,8 @@ msgstr "E-mailadresse"
msgid "Edit user"
msgstr "Rediger bruger"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Aktiveret"
@@ -344,8 +356,8 @@ msgstr "Udvidet"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Feednavn"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr ""
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Filtrerende udtryk"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Glemt adgangskode?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Generer først en API-nøgle i din profil."
@@ -393,9 +409,9 @@ msgstr "Generer først en API-nøgle i din profil."
msgid "Generate new API key"
msgstr "Generer ny API-nøgle"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Genereret feed-url"
@@ -416,6 +432,18 @@ msgstr "Gå til API-dokumentationen."
msgid "Goodies"
msgstr "Godbidder"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr ""
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"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Forbehold ulæst"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Tastaturgenveje"
@@ -470,12 +502,20 @@ msgstr "Sidste opdateringsmeddelelse"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Indlæser profil..."
@@ -492,9 +532,9 @@ msgstr "Indlæser abonnementer..."
msgid "Loading tags..."
msgstr "Indlæser tags..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Log ind"
@@ -506,27 +546,27 @@ msgstr "Log ud"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Administrer brugere"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Marker alle som læst"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marker alle poster som læst"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Markér som læst"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Markér som læst indtil her"
@@ -546,15 +586,15 @@ msgstr "Flyt siden ned"
msgid "Move the page up"
msgstr "Flyt siden op"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Navn"
@@ -562,6 +602,10 @@ msgstr "Navn"
msgid "Navigate to a subscription by entering its name"
msgstr "Naviger til et abonnement ved at indtaste dets navn"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Ny adgangskode"
msgid "Newest first"
msgstr "Nyeste først"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Næste"
@@ -682,6 +726,10 @@ msgstr "OPML fil"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Bestilling"
@@ -694,11 +742,11 @@ msgstr "Forælder"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Adgangskode"
@@ -710,8 +758,12 @@ msgstr "Gendannelse af adgangskode"
msgid "Passwords do not match"
msgstr "Adgangskoder stemmer ikke overens"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr ""
@@ -719,6 +771,10 @@ msgstr ""
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
@@ -727,8 +783,12 @@ msgstr "Profil"
msgid "Recover password"
msgstr "Gendan adgangskode"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Opdater"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Gem"
@@ -765,17 +825,13 @@ msgstr "Rul jævnt, når du navigerer mellem poster"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Søg"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "Søgning kræver mindst 3 tegn"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Tilmeld dig"
@@ -873,20 +929,21 @@ msgstr "Der er lige sket noget slemt..."
msgid "Space"
msgstr "Rum"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Stjerne"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Medvirkende"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Tilmeld"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "URL'en til det feed, du vil abonnere på. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Ulæst"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
@@ -979,6 +1040,10 @@ msgstr "Brugernavn"
msgid "User Name or E-mail"
msgstr "Brugernavn eller e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Advarsel"
@@ -987,6 +1052,10 @@ msgstr "Advarsel"
msgid "Website"
msgstr "Hjemmeside"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Du har ingen abonnementer endnu. "

View File

@@ -18,8 +18,8 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr "<0>CommaFeed ist ein Open Source Projekt. Der Quellcode wird auf auf </0><1>GitHub</1> gehostet."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgstr "<0>Die vollständige Syntax ist </0><1>hier</1> verfügbar."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Die vollständige Syntax ist </0><1>hier</1> verfügbar<2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -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>"
msgstr "<0>Benötigen Sie ein Konto?</0><1>Hier geht's zur Registrierung!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Über"
@@ -54,15 +54,17 @@ msgstr "Kategorie hinzufügen"
msgid "Add user"
msgstr "Benutzer hinzufügen"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Verwaltung"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Alle"
@@ -103,11 +105,11 @@ msgstr "Sind Sie sicher, dass Sie Benutzer <0>{userName}</0> löschen möchten?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Sind Sie sicher, dass Sie Ihr Konto löschen möchten?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Sind Sie sicher, dass Sie alle Einträge von <0>{sourceLabel}</0> als gelesen markieren möchten?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Sind Sie sicher, dass Sie Einträge, die älter als {threshold} Tage von <0>{sourceLabel}</0> sind, als gelesen markieren möchten?"
@@ -131,6 +133,10 @@ msgstr "Zurück"
msgid "Back to log in"
msgstr "Zurück zum Login"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr "Browser-Erweiterung für Chrome benötigt"
@@ -143,27 +149,27 @@ msgstr "Browser-Erweiterung"
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Abbrechen"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Kategorie"
@@ -203,11 +209,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact"
msgstr "Kompakt"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Bestätigen"
@@ -239,7 +245,12 @@ msgstr "Eigene CSS Regeln die angewandt werden"
msgid "Custom JS code that will be executed on page load"
msgstr "Einer JS Code der beim Laden der Seite ausgeführt wird"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr "Dunkel"
@@ -272,13 +283,14 @@ msgstr "Beschr"
msgid "Detailed"
msgstr "Detailliert"
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Anzeige"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr "Spenden"
@@ -290,11 +302,11 @@ msgstr "Herunterladen"
msgid "Drag link to bookmark bar"
msgstr "Link in Lesezeichenleiste ziehen"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "E-Mail"
@@ -307,8 +319,8 @@ msgstr "E-Mail-Adresse"
msgid "Edit user"
msgstr "Benutzer bearbeiten"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Aktiviert"
@@ -344,8 +356,8 @@ msgstr "Erweitert"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr "Erweiterungsoptionen"
@@ -353,9 +365,9 @@ msgstr "Erweiterungsoptionen"
msgid "Feed name"
msgstr "Feedname"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "Feed-URL"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Filterausdruck"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Passwort vergessen?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Generieren Sie zuerst einen API-Schlüssel in Ihrem Profil."
@@ -393,9 +409,9 @@ msgstr "Generieren Sie zuerst einen API-Schlüssel in Ihrem Profil."
msgid "Generate new API key"
msgstr "Neuen API-Schlüssel generieren"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Generierte Feed-URL"
@@ -416,6 +432,18 @@ msgstr "Gehen Sie zur API-Dokumentation."
msgid "Goodies"
msgstr "Goodies"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr "Importieren"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "In der erweiterten Ansicht werden Einträge beim Scrollen als gelesen markiert"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Ungelesen lassen"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Tastaturkürzel"
@@ -470,12 +502,20 @@ msgstr "Letzte Aktualisierungsmeldung"
msgid "Light"
msgstr "Hell"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Verbindung"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Lade Profil..."
@@ -492,9 +532,9 @@ msgstr "Abonnements werden geladen..."
msgid "Loading tags..."
msgstr "Tags werden geladen..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Einloggen"
@@ -506,27 +546,27 @@ msgstr "Abmelden"
msgid "Long press"
msgstr "Langer Tastendruck"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Benutzer verwalten"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Alle als gelesen markieren"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Alle Einträge als gelesen markieren"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Als gelesen markieren"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Bis hierhin als gelesen markieren"
@@ -546,15 +586,15 @@ msgstr "Seite nach unten verschieben"
msgid "Move the page up"
msgstr "Bewege die Seite nach oben"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "n.v."
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr ""
@@ -562,6 +602,10 @@ msgstr ""
msgid "Navigate to a subscription by entering its name"
msgstr "Navigieren Sie zu einem Abonnement, indem Sie seinen Namen eingeben"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Neues Passwort"
msgid "Newest first"
msgstr "Neueste zuerst"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Weiter"
@@ -682,6 +726,10 @@ msgstr "OPML-Datei"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Bestellung"
@@ -694,11 +742,11 @@ msgstr "Übergeordnet"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Passwort"
@@ -710,8 +758,12 @@ msgstr "Passwortwiederherstellung"
msgid "Passwords do not match"
msgstr "Passwörter stimmen nicht überein"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Position"
@@ -719,6 +771,10 @@ msgstr "Position"
msgid "Previous"
msgstr "Vorheriges"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
@@ -727,8 +783,12 @@ msgstr "Profil"
msgid "Recover password"
msgstr "Kennwort wiederherstellen"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Aktualisieren"
@@ -745,11 +805,11 @@ msgstr "REST-API"
msgid "Right click"
msgstr "Rechtsklick"
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Speichern"
@@ -765,17 +825,13 @@ msgstr "Schnelles Scrollen beim Navigieren zwischen Einträgen"
msgid "Scrolling"
msgstr "Scrollen"
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Suche"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "Suche erfordert mindestens 3 Zeichen"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Melden Sie sich an"
@@ -873,20 +929,21 @@ msgstr "Etwas Schlimmes ist gerade passiert..."
msgid "Space"
msgstr "Raum"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Stern"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Markiert"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Abonnieren"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "Die URL für den Feed, den Sie abonnieren möchten. "
@@ -959,8 +1020,8 @@ msgstr "Testen Sie die Demo!"
msgid "Unread"
msgstr "Ungelesen"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Stern entfernen"
@@ -979,6 +1040,10 @@ msgstr "Benutzername"
msgid "User Name or E-mail"
msgstr "Benutzername oder E-Mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Warnung"
@@ -987,6 +1052,10 @@ msgstr "Warnung"
msgid "Website"
msgstr "Webseite"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Sie haben noch keine Abonnements."

View File

@@ -18,8 +18,8 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgstr "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>Complete syntax is available </0><1>here</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -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>"
msgstr "<0>Need an account?</0><1>Sign up!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "About"
@@ -54,15 +54,17 @@ msgstr "Add category"
msgid "Add user"
msgstr "Add user"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Admin"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "All"
@@ -103,11 +105,11 @@ msgstr "Are you sure you want to delete user <0>{userName}</0> ?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Are you sure you want to delete your account? There's no turning back!"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
@@ -131,6 +133,10 @@ msgstr "Back"
msgid "Back to log in"
msgstr "Back to log in"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr "Blue"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr "Browser extension required for Chrome"
@@ -143,27 +149,27 @@ msgstr "Browser extention"
msgid "Browser tab"
msgstr "Browser tab"
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Cancel"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Category"
@@ -203,11 +209,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact"
msgstr "Compact"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Confirm"
@@ -239,7 +245,12 @@ msgstr "Custom CSS rules that will be applied"
msgid "Custom JS code that will be executed on page load"
msgstr "Custom JS code that will be executed on page load"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr "Dark"
@@ -272,13 +283,14 @@ msgstr "Desc"
msgid "Detailed"
msgstr "Detailed"
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Display"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr "Donate"
@@ -290,11 +302,11 @@ msgstr "Download"
msgid "Drag link to bookmark bar"
msgstr "Drag link to bookmark bar"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "E-mail"
@@ -307,8 +319,8 @@ msgstr "E-mail address"
msgid "Edit user"
msgstr "Edit user"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Enabled"
@@ -344,8 +356,8 @@ msgstr "Expanded"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr "Extension options"
@@ -353,9 +365,9 @@ msgstr "Extension options"
msgid "Feed name"
msgstr "Feed name"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "Feed URL"
@@ -375,6 +387,10 @@ msgstr "Fever API URL"
msgid "Filtering expression"
msgstr "Filtering expression"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr "Font size"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr "Force fetching feeds is not yet available."
@@ -383,9 +399,9 @@ msgstr "Force fetching feeds is not yet available."
msgid "Forgot password?"
msgstr "Forgot password?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Generate an API key in your profile first."
@@ -393,9 +409,9 @@ msgstr "Generate an API key in your profile first."
msgid "Generate new API key"
msgstr "Generate new API key"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Generated feed url"
@@ -416,6 +432,18 @@ msgstr "Go to the API documentation."
msgid "Goodies"
msgstr "Goodies"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr "Grape"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr "Gray"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr "Green"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Id"
@@ -440,13 +468,17 @@ msgstr "Import"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "In expanded view, scrolling through entries mark them as read"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr "Indigo"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Keep unread"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Keyboard shortcuts"
@@ -470,12 +502,20 @@ msgstr "Last refresh message"
msgid "Light"
msgstr "Light"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr "Lime"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Link"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr "Link to the documentation"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Loading profile..."
@@ -492,9 +532,9 @@ msgstr "Loading subscriptions..."
msgid "Loading tags..."
msgstr "Loading tags..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Log in"
@@ -506,27 +546,27 @@ msgstr "Logout"
msgid "Long press"
msgstr "Long press"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Manage users"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Mark all as read"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Mark all entries as read"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Mark as read"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Mark as read up to here"
@@ -546,15 +586,15 @@ msgstr "Move the page down"
msgid "Move the page up"
msgstr "Move the page up"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "N/A"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Name"
@@ -562,6 +602,10 @@ msgstr "Name"
msgid "Navigate to a subscription by entering its name"
msgstr "Navigate to a subscription by entering its name"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr "Navigate to the next category/feed with unread entries when marking all entries as read"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "New password"
msgid "Newest first"
msgstr "Newest first"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Next"
@@ -682,6 +726,10 @@ msgstr "OPML file"
msgid "OPML file is required"
msgstr "OPML file is required"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr "Orange"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Order"
@@ -694,11 +742,11 @@ msgstr "Parent"
msgid "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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Password"
@@ -710,8 +758,12 @@ msgstr "Password Recovery"
msgid "Passwords do not match"
msgstr "Passwords do not match"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr "Pink"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Position"
@@ -719,6 +771,10 @@ msgstr "Position"
msgid "Previous"
msgstr "Previous"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr "Primary color"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profile"
@@ -727,8 +783,12 @@ msgstr "Profile"
msgid "Recover password"
msgstr "Recover password"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr "Red"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Refresh"
@@ -745,11 +805,11 @@ msgstr "REST API"
msgid "Right click"
msgstr "Right click"
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Save"
@@ -765,17 +825,13 @@ msgstr "Scroll smoothly when navigating between entries"
msgid "Scrolling"
msgstr "Scrolling"
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Search"
#: src/components/header/Header.tsx
msgid "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"
@@ -858,9 +914,9 @@ msgstr "Show unread count in tab favicon"
msgid "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/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Sign up"
@@ -873,20 +929,21 @@ msgstr "Something bad just happened..."
msgid "Space"
msgstr "Space"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Star"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Starred"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Subscribe"
@@ -923,6 +980,10 @@ msgstr "System"
msgid "Tags"
msgstr "Tags"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr "Teal"
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
@@ -959,8 +1020,8 @@ msgstr "Try the demo!"
msgid "Unread"
msgstr "Unread"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Unstar"
@@ -979,6 +1040,10 @@ msgstr "User name"
msgid "User Name or E-mail"
msgstr "User Name or E-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Warning"
@@ -987,6 +1052,10 @@ msgstr "Warning"
msgid "Website"
msgstr "Website"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr "Yellow"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"

View File

@@ -19,8 +19,8 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr "<0>CommaFeed es un proyecto de código abierto. El código fuente está hospedado en </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgstr "<0>La sintaxis completa está disponible </0><1>aquí</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La sintaxis completa está disponible </0><1>aquí</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -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>"
msgstr "<0>¿Necesitas una cuenta?</0><1>¡Regístrate!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Acerca de"
@@ -55,15 +55,17 @@ msgstr "Añadir categoría"
msgid "Add user"
msgstr "Añadir usuario"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Administrador"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Todo"
@@ -104,11 +106,11 @@ msgstr "¿Estás seguro de que deseas eliminar el usuario <0>{userName}</0> ?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "¿Estás seguro de que quieres eliminar tu cuenta? ¡No hay vuelta atrás!"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "¿Estás seguro de que deseas marcar todas las entradas de <0>{sourceLabel}</0> como leídas?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "¿Estás seguro de que deseas marcar las entradas anteriores a {threshold} días de <0>{sourceLabel}</0> como leídas?"
@@ -132,6 +134,10 @@ msgstr "Atrás"
msgid "Back to log in"
msgstr "Volver a iniciar sesión"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr "Se requiere extensión de navegador para Chrome"
@@ -144,27 +150,27 @@ msgstr "Extensión del navegador"
msgid "Browser tab"
msgstr "Pestaña del navegador"
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Cancelar"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Categoría"
@@ -204,11 +210,11 @@ msgstr "Versión de CommaFeed {version} ({revision})."
msgid "Compact"
msgstr "Compacto"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Confirmar"
@@ -240,7 +246,12 @@ msgstr "Reglas CSS personalizadas que se aplicarán"
msgid "Custom JS code that will be executed on page load"
msgstr "Código JS personalizado que se ejecutará al cargar la página"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr "Oscuro"
@@ -273,13 +284,14 @@ msgstr "Desc"
msgid "Detailed"
msgstr "Detallado"
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Mostrar"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr "Donar"
@@ -291,11 +303,11 @@ msgstr "Descargar"
msgid "Drag link to bookmark bar"
msgstr "Arrastra el enlace a la barra de marcadores"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "Correo electrónico"
@@ -308,8 +320,8 @@ msgstr "Dirección de correo electrónico"
msgid "Edit user"
msgstr "Editar usuario"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Habilitado"
@@ -345,8 +357,8 @@ msgstr "Expandido"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr "Opciones de la extensión"
@@ -354,9 +366,9 @@ msgstr "Opciones de la extensión"
msgid "Feed name"
msgstr "Nombre del feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL del feed"
@@ -376,6 +388,10 @@ msgstr "URL de la API de Fever"
msgid "Filtering expression"
msgstr "Expresión de filtrado"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -384,9 +400,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "¿Olvidaste la contraseña?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Primero genere una clave API en su perfil."
@@ -394,9 +410,9 @@ msgstr "Primero genere una clave API en su perfil."
msgid "Generate new API key"
msgstr "Generar nueva clave API"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "URL del feed generado"
@@ -417,6 +433,18 @@ msgstr "Ir a la documentación de la API."
msgid "Goodies"
msgstr "Golosinas"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Identificación"
@@ -441,13 +469,17 @@ msgstr "Importar"
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"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Mantener sin leer"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Atajos de teclado"
@@ -471,12 +503,20 @@ msgstr "Último mensaje de actualización"
msgid "Light"
msgstr "Claro"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Enlace"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Cargando perfil..."
@@ -493,9 +533,9 @@ msgstr "Cargando suscripciones..."
msgid "Loading tags..."
msgstr "Cargando etiquetas..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Iniciar sesión"
@@ -507,27 +547,27 @@ msgstr "Cerrar sesión"
msgid "Long press"
msgstr "Pulsación larga"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Administrar usuarios"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Marcar todo como leído"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marcar todas las entradas como leídas"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Marcar como leído"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Marcar como leído hasta aquí"
@@ -547,15 +587,15 @@ msgstr "Mover la página hacia abajo"
msgid "Move the page up"
msgstr "Mover la página hacia arriba"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "N/D"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Nombre"
@@ -563,6 +603,10 @@ msgstr "Nombre"
msgid "Navigate to a subscription by entering its name"
msgstr "Navegar a una suscripción introduciendo su nombre"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -576,8 +620,8 @@ msgstr "Nueva contraseña"
msgid "Newest first"
msgstr "Las más recientes primero"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Siguiente"
@@ -683,6 +727,10 @@ msgstr "Archivo OPML"
msgid "OPML file is required"
msgstr "Es necesario un archivo OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Orden"
@@ -695,11 +743,11 @@ msgstr "Padre"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Contraseña"
@@ -711,8 +759,12 @@ msgstr "Recuperación de contraseña"
msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Posición"
@@ -720,6 +772,10 @@ msgstr "Posición"
msgid "Previous"
msgstr "Previo"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Perfil"
@@ -728,8 +784,12 @@ msgstr "Perfil"
msgid "Recover password"
msgstr "Recuperar contraseña"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Actualizar"
@@ -746,11 +806,11 @@ msgstr "API REST"
msgid "Right click"
msgstr "Clic derecho"
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Guardar"
@@ -766,17 +826,13 @@ msgstr "Desplazarse suavemente al navegar entre entradas"
msgid "Scrolling"
msgstr "Desplazarse"
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Buscar"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "La búsqueda requiere al menos 3 caracteres"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -859,9 +915,9 @@ msgstr "Mostrar recuento de no leídos en la pestaña favicon"
msgid "Show unread count in tab title"
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/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Registrarse"
@@ -874,20 +930,21 @@ msgstr "Algo malo acaba de pasar..."
msgid "Space"
msgstr "Espacio"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Estrella"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Destacado"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Suscribirse"
@@ -924,6 +981,10 @@ msgstr "Sistema"
msgid "Tags"
msgstr "Etiquetas"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "La URL del feed al que desea suscribirse. También puede utilizar la URL del sitio web directamente y CommaFeed intentará encontrar el feed en la página."
@@ -960,8 +1021,8 @@ msgstr "¡Prueba la demostración!"
msgid "Unread"
msgstr "No leído"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Desmarcar"
@@ -980,6 +1041,10 @@ msgstr "Nombre de usuario"
msgid "User Name or E-mail"
msgstr "Nombre de usuario o correo electrónico"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Advertencia"
@@ -988,6 +1053,10 @@ msgstr "Advertencia"
msgid "Website"
msgstr "Sitio web"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Aún no tienes ninguna suscripción. ¿Por qué no intentas agregar una haciendo clic en el signo + en la parte superior de la página?"

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>به یک حساب نیاز دارید؟</0><1>ثبت نام کنید!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "در مورد"
@@ -54,15 +54,17 @@ msgstr "اضافه کردن دسته"
msgid "Add user"
msgstr "افزودن کاربر"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "مدیر"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "همه"
@@ -103,11 +105,11 @@ msgstr "آیا مطمئن هستید که می خواهید کاربر <0>{userN
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "آیا مطمئن هستید که می خواهید حساب خود را حذف کنید؟ "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "آیا مطمئن هستید که می خواهید همه ورودی های <0>{sourceLabel}</0> را به عنوان خوانده شده علامت گذاری کنید؟"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "آیا مطمئن هستید که می خواهید ورودی های قدیمی تر از {threshold} روز <0>{sourceLabel}</0> را به عنوان خوانده شده علامت گذاری کنید؟"
@@ -131,6 +133,10 @@ msgstr "برگشت"
msgid "Back to log in"
msgstr "بازگشت برای ورود به سیستم"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "لغو"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "مقوله"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "فشرده"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "تأیید کنید"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr "توصیف"
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "نمایش"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "دانلود"
msgid "Drag link to bookmark bar"
msgstr "پیوند را به نوار نشانک بکشید"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "ایمیل"
@@ -307,8 +319,8 @@ msgstr "آدرس ایمیل"
msgid "Edit user"
msgstr "ویرایش کاربر"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "فعال"
@@ -344,8 +356,8 @@ msgstr "گسترش یافت"
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
msgstr "اشتراک ها و دسته های خود را به عنوان یک فایل OPML صادر کنید که می تواند در سایر خدمات خواندن فید وارد شود"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "نام فید"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL فید"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "بیان فیلتر"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "رمز عبور را فراموش کرده اید؟"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "ابتدا یک کلید API در نمایه خود ایجاد کنید."
@@ -393,9 +409,9 @@ msgstr "ابتدا یک کلید API در نمایه خود ایجاد کنید.
msgid "Generate new API key"
msgstr "کلید API جدید ایجاد کنید"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "آدرس اینترنتی فید تولید شده"
@@ -416,6 +432,18 @@ msgstr "به مستندات API بروید."
msgid "Goodies"
msgstr "خوبی ها"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "شناسه"
@@ -440,13 +468,17 @@ msgstr "واردات"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "در نمای بازشده، پیمایش در ورودی‌ها، آنها را به عنوان خوانده شده علامت‌گذاری می‌کند"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "خوانده نشده نگه دارید"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "میانبرهای صفحه کلید"
@@ -470,12 +502,20 @@ msgstr "آخرین پیام تازه کردن"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "پیوند"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "بارگیری نمایه..."
@@ -492,9 +532,9 @@ msgstr "بارگیری اشتراک ها..."
msgid "Loading tags..."
msgstr "بارگیری برچسب ها..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "وارد شوید"
@@ -506,27 +546,27 @@ msgstr "خروج"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "کاربران را مدیریت کنید"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "همه را به عنوان خوانده شده علامت گذاری کنید"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "همه ورودی ها را به عنوان خوانده شده علامت گذاری کنید"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "علامت گذاری به عنوان خوانده شده"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "تا اینجا به عنوان خوانده شده علامت بزنید"
@@ -546,15 +586,15 @@ msgstr "صفحه را به پایین ببرید"
msgid "Move the page up"
msgstr "صفحه را به بالا ببرید"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "نام"
@@ -562,6 +602,10 @@ msgstr "نام"
msgid "Navigate to a subscription by entering its name"
msgstr "با وارد کردن نام اشتراک، به آن بروید"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "رمز عبور جدید"
msgid "Newest first"
msgstr "ابتدا جدیدترین"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "بعد"
@@ -682,6 +726,10 @@ msgstr "فایل OPML"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "سفارش"
@@ -694,11 +742,11 @@ msgstr "پدر و مادر"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "رمز عبور"
@@ -710,8 +758,12 @@ msgstr "بازیابی رمز عبور"
msgid "Passwords do not match"
msgstr "گذرواژه ها مطابقت ندارند"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "موقعیت"
@@ -719,6 +771,10 @@ msgstr "موقعیت"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "نمایه"
@@ -727,8 +783,12 @@ msgstr "نمایه"
msgid "Recover password"
msgstr "بازیابی رمز عبور"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "تازه کردن"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "ذخیره کنید"
@@ -765,17 +825,13 @@ msgstr "هنگام پیمایش بین ورودی‌ها به آرامی حرک
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "جستجو"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "جستجو به حداقل 3 کاراکتر نیاز دارد"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "ثبت نام کنید"
@@ -873,20 +929,21 @@ msgstr "اتفاق بدی افتاد..."
msgid "Space"
msgstr "فضا"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "ستاره"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "ستاره دار"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "مشترک شوید"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "برچسب ها"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "URL فیدی که می خواهید در آن مشترک شوید. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "خوانده نشده"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
@@ -979,6 +1040,10 @@ msgstr "نام کاربری"
msgid "User Name or E-mail"
msgstr "نام کاربری یا ایمیل"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "هشدار"
@@ -987,6 +1052,10 @@ msgstr "هشدار"
msgid "Website"
msgstr "وب سایت"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "شما هنوز هیچ اشتراکی ندارید. "

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Tarvitsetko tilin?</0><1>Rekisteröidy!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Noin"
@@ -54,15 +54,17 @@ msgstr "Lisää luokka"
msgid "Add user"
msgstr "Lisää käyttäjä"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Järjestelmänvalvoja"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Kaikki"
@@ -103,11 +105,11 @@ msgstr "Haluatko varmasti poistaa käyttäjän <0>{userName}</0>?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Haluatko varmasti poistaa tilisi? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Haluatko varmasti merkitä kaikki kohteen <0>{sourceLabel}</0> merkinnät luetuiksi?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Haluatko varmasti merkitä <0>{sourceLabel}</0>:n {threshold} päivää vanhemmat merkinnät luetuiksi?"
@@ -131,6 +133,10 @@ msgstr "Takaisin"
msgid "Back to log in"
msgstr "Takaisin sisäänkirjautumiseen"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Peruuta"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Luokka"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "Kompakti"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Vahvista"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr ""
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Näyttö"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "Lataa"
msgid "Drag link to bookmark bar"
msgstr "Vedä linkki kirjanmerkkipalkkiin"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "Sähköposti"
@@ -307,8 +319,8 @@ msgstr "Sähköpostiosoite"
msgid "Edit user"
msgstr "Muokkaa käyttäjää"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Käytössä"
@@ -344,8 +356,8 @@ msgstr "Laajennettu"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Syötteen nimi"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "Syötteen URL-osoite"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Suodattava lauseke"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Unohditko salasanan?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Luo ensin API-avain profiiliisi."
@@ -393,9 +409,9 @@ msgstr "Luo ensin API-avain profiiliisi."
msgid "Generate new API key"
msgstr "Luo uusi API-avain"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Luotu syötteen URL-osoite"
@@ -416,6 +432,18 @@ msgstr "Siirry API-dokumentaatioon."
msgid "Goodies"
msgstr "Hyvää"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr "Tuo"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Merkitse ne luetuiksi laajennetussa näkymässä vierittämällä merkintöjä"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Pidä lukematta"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Pikanäppäimet"
@@ -470,12 +502,20 @@ msgstr "Viimeinen päivitysviesti"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Linkki"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Ladataan profiilia..."
@@ -492,9 +532,9 @@ msgstr "Ladataan tilauksia..."
msgid "Loading tags..."
msgstr "Ladataan tunnisteita..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Kirjaudu sisään"
@@ -506,27 +546,27 @@ msgstr "Uloskirjautuminen"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Hallitse käyttäjiä"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Merkitse kaikki luetuiksi"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Merkitse kaikki merkinnät luetuiksi"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Merkitse luetuksi"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Merkitse luetuksi tähän asti"
@@ -546,15 +586,15 @@ msgstr "Siirrä sivua alaspäin"
msgid "Move the page up"
msgstr "Siirrä sivua ylöspäin"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Nimi"
@@ -562,6 +602,10 @@ msgstr "Nimi"
msgid "Navigate to a subscription by entering its name"
msgstr "Siirry tilaukseen kirjoittamalla sen nimi"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Uusi salasana"
msgid "Newest first"
msgstr "Uusin ensin"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Seuraava"
@@ -682,6 +726,10 @@ msgstr "OPML-tiedosto"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Tilaus"
@@ -694,11 +742,11 @@ msgstr "Vanhempi"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Salasana"
@@ -710,8 +758,12 @@ msgstr "Salasanan palautus"
msgid "Passwords do not match"
msgstr "Salasanat eivät täsmää"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Sijainti"
@@ -719,6 +771,10 @@ msgstr "Sijainti"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profiili"
@@ -727,8 +783,12 @@ msgstr "Profiili"
msgid "Recover password"
msgstr "Palauta salasana"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Päivitä"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Tallenna"
@@ -765,17 +825,13 @@ msgstr "Selaa sujuvasti navigoidessasi merkintöjen välillä"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Etsi"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "Haku vaatii vähintään 3 merkkiä"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Rekisteröidy"
@@ -873,20 +929,21 @@ msgstr "Jotain pahaa tapahtui juuri..."
msgid "Space"
msgstr "Avaruus"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Tähti"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Tähdellä merkitty"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Tilaa"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "Sen syötteen URL-osoite, jonka haluat tilata. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Lukematon"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Poista tähti"
@@ -979,6 +1040,10 @@ msgstr "Käyttäjänimi"
msgid "User Name or E-mail"
msgstr "Käyttäjänimi tai sähköpostiosoite"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Varoitus"
@@ -987,6 +1052,10 @@ msgstr "Varoitus"
msgid "Website"
msgstr "Verkkosivusto"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Sinulla ei ole vielä tilauksia. "

View File

@@ -18,8 +18,8 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr "<0>CommaFeed est un projet open-source. Les sources sont hébergées sur </0><1>GitHub</1>."
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgstr "<0>La syntaxe complète est disponible </0><1>ici</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr "<0>La syntaxe complète est disponible </0><1>ici</1><2>.</2>"
#: src/pages/auth/RegistrationPage.tsx
msgid "<0>Have an account?</0><1>Log in!</1>"
@@ -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>"
msgstr "<0>Besoin d'un compte ?</0><1>Enregistrez-vous !</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "À propos"
@@ -54,15 +54,17 @@ msgstr "Ajouter une catégorie"
msgid "Add user"
msgstr "Ajouter un utilisateur"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Administrateur"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Tout"
@@ -103,11 +105,11 @@ msgstr "Êtes-vous sûr de vouloir supprimer l'utilisateur <0>{userName}</0> ?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Êtes-vous sûr de vouloir supprimer définitivement votre compte ?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Êtes-vous sûr de vouloir marquer toutes les entrées de <0>{sourceLabel}</0> comme lues ?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Êtes-vous sûr de vouloir marquer les entrées de <0>{sourceLabel}</0> plus anciennes que {threshold} jours comme lues ?"
@@ -131,6 +133,10 @@ msgstr "Retour"
msgid "Back to log in"
msgstr "Retour à la connexion"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr "Bleu"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr "L'extension navigateur est nécessaire sur Chrome"
@@ -143,27 +149,27 @@ msgstr "Extension navigateur"
msgid "Browser tab"
msgstr "Onglet navigateur"
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Annuler"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Catégorie"
@@ -203,11 +209,11 @@ msgstr "CommaFeed version {version} ({revision})."
msgid "Compact"
msgstr "Compact"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Confirmer"
@@ -239,7 +245,12 @@ msgstr "Code CSS personnalisé qui sera appliqué"
msgid "Custom JS code that will be executed on page load"
msgstr "Code JS personnalisé qui sera appliqué au chargement des pages"
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr "Cyan"
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr "Foncé"
@@ -272,13 +283,14 @@ msgstr "Descendant"
msgid "Detailed"
msgstr "Vue détaillée"
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Affichage"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr "Faire un don"
@@ -290,11 +302,11 @@ msgstr "Télécharger"
msgid "Drag link to bookmark bar"
msgstr "Déplacez le lien vers la barre de favoris"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "E-mail"
@@ -307,8 +319,8 @@ msgstr "Adresse e-mail"
msgid "Edit user"
msgstr "Modifier un utilisateur"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Actif"
@@ -344,8 +356,8 @@ msgstr "Vue étendue"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr "Options de l'extension"
@@ -353,9 +365,9 @@ msgstr "Options de l'extension"
msgid "Feed name"
msgstr "Nom du flux"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL du flux"
@@ -375,6 +387,10 @@ msgstr "URL API Fever"
msgid "Filtering expression"
msgstr "Expression de filtrage"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr "Taille de police"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr "La récupération forcée des flux n'est pas encore disponible."
@@ -383,9 +399,9 @@ msgstr "La récupération forcée des flux n'est pas encore disponible."
msgid "Forgot password?"
msgstr "Mot de passe oublié ?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Générez d'abord une clé API dans votre profil."
@@ -393,9 +409,9 @@ msgstr "Générez d'abord une clé API dans votre profil."
msgid "Generate new API key"
msgstr "Générer une nouvelle clé API"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "URL du flux généré"
@@ -416,6 +432,18 @@ msgstr "Aller à la documentation de l'API."
msgid "Goodies"
msgstr "Extensions"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr "Bordeaux"
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr "Gris"
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr "Vert"
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr "Identifiant"
@@ -440,13 +468,17 @@ msgstr "Importer"
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."
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr "Indigo"
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Garder non lu"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Raccourcis clavier"
@@ -470,12 +502,20 @@ msgstr "Dernier message de mise à jour"
msgid "Light"
msgstr "Clair"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr "Jaune-vert"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Lien"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr "Lien vers la documentation"
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Chargement du profil..."
@@ -492,9 +532,9 @@ msgstr "Chargement des abonnements..."
msgid "Loading tags..."
msgstr "Chargement des marqueurs..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Connexion"
@@ -506,27 +546,27 @@ msgstr "Déconnexion"
msgid "Long press"
msgstr "Appui long"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Gestion des utilisateurs"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Tout marquer comme lu"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marquer toutes les entrées comme lues"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Marquer comme lu"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Marquer comme lu jusqu'ici"
@@ -546,15 +586,15 @@ msgstr "Faites défiler la page vers le bas"
msgid "Move the page up"
msgstr "Faites défiler la page vers le haut"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr "N/A"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Nom"
@@ -562,6 +602,10 @@ msgstr "Nom"
msgid "Navigate to a subscription by entering its name"
msgstr "Naviguer vers un abonnement en entrant son nom"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr "Aller vers la catégorie/le flux comportant des entrées non lues suivant après avoir marqué toutes les entrées lues"
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Nouveau mot de passe"
msgid "Newest first"
msgstr "Plus récent en premier"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Suivant"
@@ -682,6 +726,10 @@ msgstr "Fichier OPML"
msgid "OPML file is required"
msgstr "Vous devez fournir un fichier OPML"
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr "Orange"
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Ordre"
@@ -694,11 +742,11 @@ msgstr "Parent"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Mot de passe"
@@ -710,8 +758,12 @@ msgstr "Récupération de mot de passe"
msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr "Rose"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Position"
@@ -719,6 +771,10 @@ msgstr "Position"
msgid "Previous"
msgstr "Précédent"
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr "Couleur d'ambiance"
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
@@ -727,8 +783,12 @@ msgstr "Profil"
msgid "Recover password"
msgstr "Récupérer le mot de passe"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr "Rouge"
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Rafraîchir"
@@ -745,11 +805,11 @@ msgstr "API REST"
msgid "Right click"
msgstr "Clic droit"
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Enregistrer"
@@ -765,24 +825,20 @@ msgstr "Défilement animé lors de la navigation entre les entrées"
msgid "Scrolling"
msgstr "Défilement"
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Rechercher"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "La recherche requiert au moins 3 caractères"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
msgstr "Sélectionner l'article non lu suivant/la catégorie non lue suivante"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select previous unread feed/category"
msgstr ""
msgstr "Sélectionner l'article non lu précédent/la catégorie non lue précédente"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Set focus on next entry without opening it"
@@ -858,9 +914,9 @@ msgstr "Afficher le nombre d'entrées non lues dans la favicône de l'onglet"
msgid "Show unread count in tab title"
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/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Créer un compte"
@@ -873,20 +929,21 @@ msgstr "Quelque chose s'est mal passé..."
msgid "Space"
msgstr "Espace"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Ajouter aux favoris"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Favoris"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "S'abonner"
@@ -923,6 +980,10 @@ msgstr "Système"
msgid "Tags"
msgstr "Marqueurs"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr "Bleu-vert"
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "L'URL du flux auquel vous souhaitez vous abonner. Vous pouvez aussi utiliser l'URL du site directement et CommaFeed va essayer de trouver le flux dans la page."
@@ -959,8 +1020,8 @@ msgstr "Essayez la version de démonstration !"
msgid "Unread"
msgstr "Non lu"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Retirer des favoris"
@@ -979,6 +1040,10 @@ msgstr "Nom"
msgid "User Name or E-mail"
msgstr "Nom d'utilisateur ou e-mail"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr "Violet"
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Attention"
@@ -987,6 +1052,10 @@ msgstr "Attention"
msgid "Website"
msgstr "Site web"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr "Jaune"
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Vous n'avez pas encore d'abonnements. Pourquoi ne pas essayer d'en ajouter un en cliquant sur le signe + en haut de la page ?"

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Necesitas unha conta?</0><1>Rexístrate!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Sobre"
@@ -54,15 +54,17 @@ msgstr "Engadir categoría"
msgid "Add user"
msgstr "Engadir usuario"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr "Administración"
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Todos"
@@ -103,11 +105,11 @@ msgstr "Estás seguro de que queres eliminar o usuario <0>{userName}</0>?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Estás seguro de que queres eliminar a túa conta? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Estás seguro de que queres marcar todas as entradas de <0>{sourceLabel}</0> como lidas?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Estás seguro de que queres marcar as entradas anteriores a {threshold} días de <0>{sourceLabel}</0> como lidas?"
@@ -131,6 +133,10 @@ msgstr "Atrás"
msgid "Back to log in"
msgstr "Volver para iniciar sesión"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Cancelar"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Categoría"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "Compacto"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Confirmar"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr ""
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Exhibición"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "Descargar"
msgid "Drag link to bookmark bar"
msgstr "Arrastra a ligazón á barra de marcadores"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr "Correo electrónico"
@@ -307,8 +319,8 @@ msgstr "Enderezo de correo electrónico"
msgid "Edit user"
msgstr "Editar usuario"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Activado"
@@ -344,8 +356,8 @@ msgstr "Ampliado"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Nome do feed"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr "URL da fonte"
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Expresión de filtrado"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Esqueceches o contrasinal?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Xera primeiro unha clave API no teu perfil."
@@ -393,9 +409,9 @@ msgstr "Xera primeiro unha clave API no teu perfil."
msgid "Generate new API key"
msgstr "Xerar nova clave de API"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "URL da fonte xerada"
@@ -416,6 +432,18 @@ msgstr "Ir á documentación da API."
msgid "Goodies"
msgstr "agasallos"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr "Importación"
msgid "In expanded view, scrolling through entries mark them as read"
msgstr "Na vista ampliada, ao desprazarse polas entradas márcaas como lidas"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Manter sen ler"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "atallos de teclado"
@@ -470,12 +502,20 @@ msgstr "Última mensaxe de actualización"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr "Ligazón"
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Cargando perfil..."
@@ -492,9 +532,9 @@ msgstr "Cargando subscricións..."
msgid "Loading tags..."
msgstr "Cargando etiquetas..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Iniciar sesión"
@@ -506,27 +546,27 @@ msgstr "Pechar sesión"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Xestionar usuarios"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Marcar todo como lido"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Marcar todas as entradas como lidas"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Marcar como lido"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Marcar como lido ata aquí"
@@ -546,15 +586,15 @@ msgstr "Move a páxina cara abaixo"
msgid "Move the page up"
msgstr "Move a páxina cara arriba"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Nome"
@@ -562,6 +602,10 @@ msgstr "Nome"
msgid "Navigate to a subscription by entering its name"
msgstr "Navega a unha subscrición introducindo o seu nome"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "novo contrasinal"
msgid "Newest first"
msgstr "o máis novo primeiro"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Seguinte"
@@ -682,6 +726,10 @@ msgstr "ficheiro OPML"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Orde"
@@ -694,11 +742,11 @@ msgstr "Pai"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Contrasinal"
@@ -710,8 +758,12 @@ msgstr "Recuperación de contrasinal"
msgid "Passwords do not match"
msgstr "Os contrasinais non coinciden"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Posición"
@@ -719,6 +771,10 @@ msgstr "Posición"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Perfil"
@@ -727,8 +783,12 @@ msgstr "Perfil"
msgid "Recover password"
msgstr "Recuperar o contrasinal"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Actualizar"
@@ -745,11 +805,11 @@ msgstr "API REST"
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Gardar"
@@ -765,17 +825,13 @@ msgstr "Desprácese suavemente ao navegar entre as entradas"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Busca"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "A busca require polo menos 3 caracteres"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Rexístrese"
@@ -873,20 +929,21 @@ msgstr "Algo malo pasou..."
msgid "Space"
msgstr "Espazo"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "estrela"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "estrela"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Subscríbete"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "Etiquetas"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "O URL do feed ao que quere subscribirse. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Sen ler"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr "Desestrela"
@@ -979,6 +1040,10 @@ msgstr "Nome de usuario"
msgid "User Name or E-mail"
msgstr "Nome de usuario ou correo electrónico"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Aviso"
@@ -987,6 +1052,10 @@ msgstr "Aviso"
msgid "Website"
msgstr "Páxina web"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Aínda non tes ningunha subscrición. "

View File

@@ -18,7 +18,7 @@ msgid "<0>CommaFeed is an open-source project. Sources are hosted on </0><1>GitH
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
msgid "<0>Complete syntax is available </0><1>here</1>."
msgid "<0>Complete syntax is available </0><1>here</1><2>.</2>"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
@@ -33,8 +33,8 @@ msgstr ""
msgid "<0>Need an account?</0><1>Sign up!</1>"
msgstr "<0>Fiókra van szüksége?</0><1>Regisztráljon!</1>"
#: src/pages/app/AboutPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/AboutPage.tsx
msgid "About"
msgstr "Kb"
@@ -54,15 +54,17 @@ msgstr "Kategória hozzáadása"
msgid "Add user"
msgstr "Felhasználó hozzáadása"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Admin"
msgstr ""
#: src/components/sidebar/Tree.tsx
#: src/components/header/Header.tsx
#: src/components/content/add/CategorySelect.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "All"
msgstr "Mind"
@@ -103,11 +105,11 @@ msgstr "Biztosan törölni szeretné a(z) <0>{userName}</0> felhasználót?"
msgid "Are you sure you want to delete your account? There's no turning back!"
msgstr "Biztosan törli a fiókját? "
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark all entries of <0>{sourceLabel}</0> as read?"
msgstr "Biztosan olvasottként szeretné megjelölni a(z) <0>{sourceLabel}</0> összes bejegyzését?"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Are you sure you want to mark entries older than {threshold} days of <0>{sourceLabel}</0> as read?"
msgstr "Biztosan olvasottként szeretné megjelölni a(z) <0>{sourceLabel}</0> {threshold} napjánál régebbi bejegyzéseket?"
@@ -131,6 +133,10 @@ msgstr "Vissza"
msgid "Back to log in"
msgstr "Vissza a bejelentkezéshez"
#: src/components/settings/DisplaySettings.tsx
msgid "Blue"
msgstr ""
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Browser extension required for Chrome"
msgstr ""
@@ -143,27 +149,27 @@ msgstr ""
msgid "Browser tab"
msgstr ""
#: 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
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/ImportOpml.tsx
#: src/components/MarkAllAsReadConfirmationDialog.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
msgid "Cancel"
msgstr "Mégse"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/AboutPage.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/AddCategory.tsx
#: src/components/content/add/AddCategory.tsx
#: src/pages/app/AboutPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Category"
msgstr "Kategória"
@@ -203,11 +209,11 @@ msgstr ""
msgid "Compact"
msgstr "Kompakt"
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Confirm"
msgstr "Erősítse meg"
@@ -239,7 +245,12 @@ msgstr ""
msgid "Custom JS code that will be executed on page load"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Cyan"
msgstr ""
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Dark"
msgstr ""
@@ -272,13 +283,14 @@ msgstr ""
msgid "Detailed"
msgstr ""
#: src/pages/app/SettingsPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/components/settings/DisplaySettings.tsx
#: src/pages/app/SettingsPage.tsx
msgid "Display"
msgstr "Kijelző"
#: src/pages/app/DonatePage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/app/DonatePage.tsx
msgid "Donate"
msgstr ""
@@ -290,11 +302,11 @@ msgstr "Letöltés"
msgid "Drag link to bookmark bar"
msgstr "Húzza a hivatkozást a könyvjelzősávra"
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/components/admin/UserEdit.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
#: src/pages/auth/PasswordRecoveryPage.tsx
msgid "E-mail"
msgstr ""
@@ -307,8 +319,8 @@ msgstr "E-mail cím"
msgid "Edit user"
msgstr "Felhasználó szerkesztése"
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Enabled"
msgstr "Engedélyezve"
@@ -344,8 +356,8 @@ msgstr "Kiterjesztve"
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"
#: src/pages/WelcomePage.tsx
#: src/components/header/Header.tsx
#: src/pages/WelcomePage.tsx
msgid "Extension options"
msgstr ""
@@ -353,9 +365,9 @@ msgstr ""
msgid "Feed name"
msgstr "Hírcsatorna neve"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Feed URL"
msgstr ""
@@ -375,6 +387,10 @@ msgstr ""
msgid "Filtering expression"
msgstr "Szűrő kifejezés"
#: src/components/header/ProfileMenu.tsx
msgid "Font size"
msgstr ""
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
@@ -383,9 +399,9 @@ msgstr ""
msgid "Forgot password?"
msgstr "Elfelejtette a jelszavát?"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generate an API key in your profile first."
msgstr "Először generáljon API-kulcsot a profiljában."
@@ -393,9 +409,9 @@ msgstr "Először generáljon API-kulcsot a profiljában."
msgid "Generate new API key"
msgstr "Új API-kulcs létrehozása"
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Generated feed url"
msgstr "Hírcsatorna generált URL-je"
@@ -416,6 +432,18 @@ msgstr "Nyissa meg az API dokumentációját."
msgid "Goodies"
msgstr "Jók"
#: src/components/settings/DisplaySettings.tsx
msgid "Grape"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Gray"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Green"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
msgid "Id"
msgstr ""
@@ -440,13 +468,17 @@ msgstr "Importálás"
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"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Indigo"
msgstr ""
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Keep unread"
msgstr "Olvasatlan marad"
#: src/pages/app/AboutPage.tsx
#: src/components/content/FeedEntries.tsx
#: src/pages/app/AboutPage.tsx
msgid "Keyboard shortcuts"
msgstr "Billentyűparancsok"
@@ -470,12 +502,20 @@ msgstr "Utolsó frissítési üzenet"
msgid "Light"
msgstr ""
#: src/pages/app/TagDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Lime"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/TagDetailsPage.tsx
msgid "Link"
msgstr ""
#: src/components/settings/CustomCodeSettings.tsx
msgid "Link to the documentation"
msgstr ""
#: src/hooks/useAppLoading.ts
msgid "Loading profile..."
msgstr "Profil betöltése..."
@@ -492,9 +532,9 @@ msgstr "Előfizetések betöltése..."
msgid "Loading tags..."
msgstr "Címkék betöltése..."
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
msgid "Log in"
msgstr "Jelentkezzen be"
@@ -506,27 +546,27 @@ msgstr "Kijelentkezés"
msgid "Long press"
msgstr ""
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/header/ProfileMenu.tsx
#: src/pages/admin/AdminUsersPage.tsx
msgid "Manage users"
msgstr "Felhasználók kezelése"
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/header/Header.tsx
msgid "Mark all as read"
msgstr "Minden megjelölése olvasottként"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/header/MarkAllAsReadButton.tsx
#: src/components/MarkAllAsReadConfirmationDialog.tsx
msgid "Mark all entries as read"
msgstr "Minden bejegyzés megjelölése olvasottként"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read"
msgstr "Megjelölés olvasottként"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
msgid "Mark as read up to here"
msgstr "Megjelölés idáig olvasottként"
@@ -546,15 +586,15 @@ msgstr "Mozgassa le az oldalt"
msgid "Move the page up"
msgstr "Mozgassa felfelé az oldalt"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/RelativeDate.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "N/A"
msgstr ""
#: src/pages/app/FeedDetailsPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/components/admin/UserEdit.tsx
#: src/pages/admin/AdminUsersPage.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Name"
msgstr "Név"
@@ -562,6 +602,10 @@ msgstr "Név"
msgid "Navigate to a subscription by entering its name"
msgstr "Navigáljon egy előfizetéshez a nevének megadásával"
#: src/components/settings/DisplaySettings.tsx
msgid "Navigate to the next category/feed with unread entries when marking all entries as read"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Never"
@@ -575,8 +619,8 @@ msgstr "Új jelszó"
msgid "Newest first"
msgstr "A legújabbak először"
#: src/components/header/Header.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/header/Header.tsx
msgid "Next"
msgstr "Következő"
@@ -682,6 +726,10 @@ msgstr "OPML fájl"
msgid "OPML file is required"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Orange"
msgstr ""
#: src/pages/app/AboutPage.tsx
msgid "Order"
msgstr "Rendelés"
@@ -694,11 +742,11 @@ msgstr "Szülő"
msgid "Parent Category"
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/pages/auth/LoginPage.tsx
#: src/pages/auth/LoginPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Password"
msgstr "Jelszó"
@@ -710,8 +758,12 @@ msgstr "Jelszó helyreállítás"
msgid "Passwords do not match"
msgstr "A jelszavak nem egyeznek"
#: src/pages/app/FeedDetailsPage.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Pink"
msgstr ""
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Position"
msgstr "Pozíció"
@@ -719,6 +771,10 @@ msgstr "Pozíció"
msgid "Previous"
msgstr ""
#: src/components/settings/DisplaySettings.tsx
msgid "Primary color"
msgstr ""
#: src/pages/app/SettingsPage.tsx
msgid "Profile"
msgstr "Profil"
@@ -727,8 +783,12 @@ msgstr "Profil"
msgid "Recover password"
msgstr "Jelszó helyreállítása"
#: src/components/KeyboardShortcutsHelp.tsx
#: src/components/settings/DisplaySettings.tsx
msgid "Red"
msgstr ""
#: src/components/header/Header.tsx
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Refresh"
msgstr "Frissítés"
@@ -745,11 +805,11 @@ msgstr ""
msgid "Right click"
msgstr ""
#: 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
#: src/components/settings/CustomCodeSettings.tsx
#: src/components/settings/ProfileSettings.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedDetailsPage.tsx
msgid "Save"
msgstr "Mentés"
@@ -765,17 +825,13 @@ msgstr "Sima görgetés, amikor a bejegyzések között navigál"
msgid "Scrolling"
msgstr ""
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/header/Header.tsx
#: src/components/header/Header.tsx
#: src/components/sidebar/TreeSearch.tsx
#: src/components/sidebar/TreeSearch.tsx
msgid "Search"
msgstr "Keresés"
#: src/components/header/Header.tsx
msgid "Search requires at least 3 characters"
msgstr "A kereséshez legalább 3 karakter szükséges"
#: src/components/KeyboardShortcutsHelp.tsx
msgid "Select next unread feed/category"
msgstr ""
@@ -858,9 +914,9 @@ msgstr ""
msgid "Show unread count in tab title"
msgstr ""
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/WelcomePage.tsx
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx
msgid "Sign up"
msgstr "Regisztráljon"
@@ -873,20 +929,21 @@ msgstr "Valami rossz történt..."
msgid "Space"
msgstr ""
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Star"
msgstr "Csillag"
#: src/pages/app/CategoryDetailsPage.tsx
#: src/components/sidebar/Tree.tsx
#: src/pages/app/CategoryDetailsPage.tsx
#: src/pages/app/FeedEntriesPage.tsx
msgid "Starred"
msgstr "Csillaggal megjelölve"
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
#: src/pages/app/AddPage.tsx
#: src/components/content/add/Subscribe.tsx
#: src/components/content/add/Subscribe.tsx
msgid "Subscribe"
msgstr "Feliratkozás"
@@ -923,6 +980,10 @@ msgstr ""
msgid "Tags"
msgstr "Címkék"
#: src/components/settings/DisplaySettings.tsx
msgid "Teal"
msgstr ""
#: src/components/content/add/Subscribe.tsx
msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
msgstr "Az előfizetni kívánt hírcsatorna URL-je. "
@@ -959,8 +1020,8 @@ msgstr ""
msgid "Unread"
msgstr "Olvasatlan"
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/FeedEntryContextMenu.tsx
#: src/components/content/FeedEntryFooter.tsx
#: src/components/content/header/Star.tsx
msgid "Unstar"
msgstr ""
@@ -979,6 +1040,10 @@ msgstr "Felhasználónév"
msgid "User Name or E-mail"
msgstr "Felhasználói név vagy e-mail cím"
#: src/components/settings/DisplaySettings.tsx
msgid "Violet"
msgstr ""
#: src/components/Alert.tsx
msgid "Warning"
msgstr "Figyelem"
@@ -987,6 +1052,10 @@ msgstr "Figyelem"
msgid "Website"
msgstr "Webhely"
#: src/components/settings/DisplaySettings.tsx
msgid "Yellow"
msgstr ""
#: src/pages/app/FeedEntriesPage.tsx
msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
msgstr "Még nincs előfizetése. "

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